module Ohai::Mixin::SoftlayerMetadata

softlayer.github.io/reference/services/SoftLayer_Resource_Metadata/

Public Instance Methods

ca_file_location() click to toggle source

Softlayer's metadata api is only available over HTTPS. Ruby by default does not link to the system's CA bundle however Chef-omnibus should set SSL_CERT_FILE to point to a valid file. Manually supply and specify a suitable CA bundle here or set the SSL_CERT_FILE file environment variable to a valid value otherwise.

@return [String]

# File lib/ohai/mixin/softlayer_metadata.rb, line 48
def ca_file_location
  ::Ohai::Config[:ca_file]
end
fetch_metadata() click to toggle source

fetch metadata items and build out hash of data

@return [Hash]

# File lib/ohai/mixin/softlayer_metadata.rb, line 31
def fetch_metadata
  {
    "public_fqdn" => fetch_metadata_item("getFullyQualifiedDomainName.txt"),
    "local_ipv4" => fetch_metadata_item("getPrimaryBackendIpAddress.txt"),
    "public_ipv4" => fetch_metadata_item("getPrimaryIpAddress.txt"),
    "region" => fetch_metadata_item("getDatacenter.txt"),
    "instance_id" => fetch_metadata_item("getId.txt"),
  }
end
fetch_metadata_item(item) click to toggle source

fetch a specified item from the Softlayer metadata API @param item [String] the metadata item to fetch

@return [String] the response body

# File lib/ohai/mixin/softlayer_metadata.rb, line 56
def fetch_metadata_item(item)
  full_url = "#{SOFTLAYER_API_QUERY_URL}/#{item}"
  u = URI(full_url)
  net = ::Net::HTTP.new(u.hostname, u.port)
  net.ssl_version = :TLSv1_2
  net.use_ssl = true
  net.ca_file = ca_file_location
  res = net.get(u.request_uri)
  if res.code.to_i.between?(200, 299)
    res.body
  else
    logger.error("Mixin Softlayer: Unable to fetch item #{full_url}: status (#{res.code}) body (#{res.body})")
    nil
  end
rescue => e
  logger.error("Mixin Softlayer: Unable to fetch softlayer metadata from #{u}: #{e.class}: #{e.message}")
  raise e
end