module Chef::DataCollector::Messages::Helpers

Public Instance Methods

chef_server_fqdn() click to toggle source

Fully-qualified domain name of the Chef Server configured in Chef::Config If the chef_server_url cannot be parsed as a URI, the node attribute will be returned, or “localhost” if the run_status is unavailable to us.

@return [String] FQDN of the configured Chef Server, or node/localhost if not found.

# File lib/chef/data_collector/messages/helpers.rb, line 32
def chef_server_fqdn
  if !Chef::Config[:chef_server_url].nil?
    URI(Chef::Config[:chef_server_url]).host
  elsif !Chef::Config[:node_name].nil?
    Chef::Config[:node_name]
  else
    "localhost"
  end
end
chef_server_organization() click to toggle source

Return the organization assumed by the configured chef_server_url.

We must parse this from the Chef::Config because a node has no knowledge of an organization or to which organization is belongs.

If we cannot determine the organization, we return “unknown_organization”

@return [String] shortname of the Chef Server organization

# File lib/chef/data_collector/messages/helpers.rb, line 74
def chef_server_organization
  return "unknown_organization" unless Chef::Config[:chef_server_url]

  Chef::Config[:chef_server_url].match(%r{/+organizations/+([a-z0-9][a-z0-9_-]{0,254})}).nil? ? "unknown_organization" : $1
end
collector_source() click to toggle source

The source of the data collecting during this run, used by the DataCollector endpoint to determine if Chef was in Solo mode or not.

@return [String] “chef_solo” if in Solo mode, “chef_client” if in Client mode

# File lib/chef/data_collector/messages/helpers.rb, line 86
def collector_source
  solo_run? ? "chef_solo" : "chef_client"
end
data_collector_organization() click to toggle source

Returns the user-configured organization, or “chef_solo” if none is configured.

This is only used when Chef is run in Solo mode.

@return [String] Data-collector-specific organization used when running in Chef Solo

# File lib/chef/data_collector/messages/helpers.rb, line 60
def data_collector_organization
  Chef::Config[:data_collector][:organization] || "chef_solo"
end
generate_node_uuid() click to toggle source

Generates a UUID for the node via SecureRandom.uuid and writes out metadata file so the UUID persists between runs.

@return [String] UUID for the node

# File lib/chef/data_collector/messages/helpers.rb, line 118
def generate_node_uuid
  uuid = SecureRandom.uuid
  update_metadata("node_uuid", uuid)

  uuid
end
metadata() click to toggle source

Returns the DataCollector metadata for this node

If the metadata file does not exist in the file cache path, an empty hash will be returned.

@return [Hash] DataCollector metadata for this node

# File lib/chef/data_collector/messages/helpers.rb, line 142
def metadata
  Chef::JSONCompat.parse(Chef::FileCache.load(metadata_filename))
rescue Chef::Exceptions::FileNotFound
  {}
end
metadata_filename() click to toggle source
# File lib/chef/data_collector/messages/helpers.rb, line 153
def metadata_filename
  "data_collector_metadata.json"
end
node_uuid() click to toggle source

Returns a UUID that uniquely identifies this node for reporting reasons.

The node is read in from disk if it exists, or it's generated if it does does not exist.

@return [String] UUID for the node

# File lib/chef/data_collector/messages/helpers.rb, line 108
def node_uuid
  Chef::Config[:chef_guid] || read_node_uuid || generate_node_uuid
end
organization() click to toggle source

The organization name the node is associated with. For Chef Solo runs, a user-configured organization string is returned, or the string “chef_solo” if such a string is not configured.

@return [String] Organization to which the node is associated

# File lib/chef/data_collector/messages/helpers.rb, line 49
def organization
  solo_run? ? data_collector_organization : chef_server_organization
end
read_node_uuid() click to toggle source

Reads in the node UUID from the node metadata file

@return [String] UUID for the node

# File lib/chef/data_collector/messages/helpers.rb, line 130
def read_node_uuid
  metadata["node_uuid"]
end
solo_run?() click to toggle source

If we're running in Solo (legacy) mode, or in Solo (formerly “Chef Client Local Mode”), we're considered to be in a “solo run”.

@return [Boolean] Whether we're in a solo run or not

# File lib/chef/data_collector/messages/helpers.rb, line 96
def solo_run?
  Chef::Config[:solo] || Chef::Config[:local_mode]
end
update_metadata(key, value) click to toggle source
# File lib/chef/data_collector/messages/helpers.rb, line 148
def update_metadata(key, value)
  updated_metadata = metadata.tap { |x| x[key] = value }
  Chef::FileCache.store(metadata_filename, Chef::JSONCompat.to_json(updated_metadata), 0644)
end