summaryrefslogtreecommitdiff
path: root/lib/ohai/plugins/digital_ocean.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/ohai/plugins/digital_ocean.rb')
-rw-r--r--lib/ohai/plugins/digital_ocean.rb63
1 files changed, 22 insertions, 41 deletions
diff --git a/lib/ohai/plugins/digital_ocean.rb b/lib/ohai/plugins/digital_ocean.rb
index a06c3c67..19cb087b 100644
--- a/lib/ohai/plugins/digital_ocean.rb
+++ b/lib/ohai/plugins/digital_ocean.rb
@@ -1,4 +1,5 @@
#
+# Author:: Dylan Page (<dpage@digitalocean.com>)
# Author:: Stafford Brunk (<stafford.brunk@gmail.com>)
# License:: Apache License, Version 2.0
#
@@ -14,65 +15,45 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-require "ohai/util/ip_helper"
+require 'ohai/mixin/do_metadata'
+require 'yaml'
Ohai.plugin(:DigitalOcean) do
- include Ohai::Util::IpHelper
+ include Ohai::Mixin::DOMetadata
- DIGITALOCEAN_FILE = "/etc/digitalocean" unless defined?(DIGITALOCEAN_FILE)
+ DO_CLOUD_INIT_FILE = "/etc/cloud/cloud.cfg" unless defined?(DO_CLOUD_INIT_FILE)
provides "digital_ocean"
- depends "network/interfaces"
- def extract_droplet_ip_addresses
- addresses = Mash.new({ "v4" => [], "v6" => [] })
- network[:interfaces].each_value do |iface|
- iface[:addresses].each do |address, details|
- next if details[:family] == "lladdr" || loopback?(address)
+ depends "network/interfaces"
- ip = IPAddress(address)
- type = digital_ocean_address_type(ip)
- address_hash = build_address_hash(ip, details)
- addresses[type] << address_hash
- end
+ def has_do_init?
+ if File.exist?(DO_CLOUD_INIT_FILE)
+ datasource = YAML.load_file(DO_CLOUD_INIT_FILE)
+ puts datasource.inspect
+ Ohai::Log.debug("digital_ocean plugin: has_do_init? == true")
+ true
+ else
+ Ohai::Log.debug("digital_ocean plugin: has_do_init? == false")
+ false
end
- addresses
end
- def build_address_hash(ip, details)
- address_hash = Mash.new({
- "ip_address" => ip.address,
- "type" => private_address?(ip.address) ? "private" : "public",
- })
+ def looks_like_digital_ocean?
+ return true if hint?("digital_ocean")
- if ip.ipv4?
- address_hash["netmask"] = details[:netmask]
- elsif ip.ipv6?
- address_hash["cidr"] = ip.prefix
+ if has_do_init?
+ return true if can_metadata_connect?(Ohai::Mixin::DOMetadata::DO_METADATA_ADDR,80)
end
- address_hash
- end
-
- def digital_ocean_address_type(ip)
- ip.ipv4? ? "v4" : "v6"
- end
-
- def looks_like_digital_ocean?
- hint?("digital_ocean") || File.exist?(DIGITALOCEAN_FILE)
end
collect_data do
if looks_like_digital_ocean?
Ohai::Log.debug("Plugin Digitalocean: looks_like_digital_ocean? == true")
digital_ocean Mash.new
- hint = hint?("digital_ocean") || {}
- hint.each { |k, v| digital_ocean[k] = v unless k == "ip_addresses" }
-
- # Extract actual ip addresses
- # The networks sub-hash is structured similarly to how
- # Digital Ocean's v2 API structures things:
- # https://developers.digitalocean.com/#droplets
- digital_ocean[:networks] = extract_droplet_ip_addresses
+ fetch_metadata.each do |k, v|
+ digital_ocean[k] = v
+ end
else
Ohai::Log.debug("Plugin Digitalocean: No hints present for and doesn't look like digitalocean")
false