module Ohai::Mixin::SoftlayerMetadata

sldn.softlayer.com/reference/services/SoftLayer_Resource_Metadata

Constants

SOFTLAYER_API_QUERY_URL

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.

# File lib/ohai/mixin/softlayer_metadata.rb, line 42
def ca_file_location
  ::Ohai::Config[:ca_file]
end
fetch_metadata() click to toggle source
# File lib/ohai/mixin/softlayer_metadata.rb, line 27
def fetch_metadata
  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
# File lib/ohai/mixin/softlayer_metadata.rb, line 46
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
    ::Ohai::Log.error("Mixin Softlayer: Unable to fetch item #{full_url}: status (#{res.code}) body (#{res.body})")
    nil
  end
rescue => e
  ::Ohai::Log.error("Mixin Softlayer: Unable to fetch softlayer metadata from #{u}: #{e.class}: #{e.message}")
  raise e
end