Skip to content

Bosh::Director::Config missing instance-level metrics_dir method (introduced in #2654) #2678

@Alphasite

Description

@Alphasite

Summary

PR #2654 ("Add scheduled metrics cleanup job") introduced a call to config.metrics_dir in bin/bosh-director, but metrics_dir is only defined as a class method (inside class << self). When called on a Config instance, the director crashes on startup:

bin/bosh-director:32:in `block in <top (required)>': undefined method `metrics_dir' for an instance of Bosh::Director::Config (NoMethodError)

    Prometheus::Client.config.data_store = Prometheus::Client::DataStores::DirectFileStore.new(dir: config.metrics_dir)
                                                                                                          ^^^^^^^^^^^^

Details

In src/bosh-director/lib/bosh/director/config.rb, metrics_dir is defined inside class << self (class method):

class << self
  # ...
  def metrics_dir
    File.join(@base_dir, 'metrics')
  end
end

But in src/bosh-director/bin/bosh-director, it is called on an instance returned by Config.load_file:

config = Bosh::Director::Config.load_file(config_file)
# ...
if config.metrics_server_enabled
  Prometheus::Client.config.data_store = Prometheus::Client::DataStores::DirectFileStore.new(dir: config.metrics_dir)
end

The sibling methods metrics_server_enabled and metrics_server_port are correctly defined as instance methods, but metrics_dir was only added at the class level.

Introduced by

Expected fix

Add an instance-level metrics_dir method alongside the other instance-level metrics methods:

def metrics_dir
  File.join(hash['dir'], 'metrics')
end

Impact

The director fails to start when metrics_server.enabled is true in the director config. This blocks all BOSH operations.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions