Module: Ohai::Mixin::SoftlayerMetadata

Defined in:
lib/ohai/mixin/softlayer_metadata.rb

Overview

Instance Method Summary collapse

Instance Method Details

#ca_file_locationString

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.

Returns:



47
48
49
# File 'lib/ohai/mixin/softlayer_metadata.rb', line 47

def ca_file_location
  ::Ohai::Config[:ca_file]
end

#fetch_metadataHash

fetch metadata items and build out hash of data

Returns:

  • (Hash)


30
31
32
33
34
35
36
37
38
# File 'lib/ohai/mixin/softlayer_metadata.rb', line 30

def 
  {
    "public_fqdn" => ("getFullyQualifiedDomainName.txt"),
    "local_ipv4" => ("getPrimaryBackendIpAddress.txt"),
    "public_ipv4" => ("getPrimaryIpAddress.txt"),
    "region" => ("getDatacenter.txt"),
    "instance_id" => ("getId.txt"),
  }
end

#fetch_metadata_item(item) ⇒ String

fetch a specified item from the Softlayer metadata API

Parameters:

  • item (String)

    the metadata item to fetch

Returns:

  • (String)

    the response body



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/ohai/mixin/softlayer_metadata.rb', line 55

def (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