/usr/lib/ruby/vendor_ruby/ohai/plugins/digital_ocean.rb is in ohai 8.4.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #
# Author:: Stafford Brunk (<stafford.brunk@gmail.com>)
# License:: Apache License, Version 2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'ohai/util/ip_helper'
Ohai.plugin(:DigitalOcean) do
include Ohai::Util::IpHelper
DIGITALOCEAN_FILE = '/etc/digitalocean' unless defined?(DIGITALOCEAN_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 loopback?(address) || details[:family] == 'lladdr'
ip = IPAddress(address)
type = digital_ocean_address_type(ip)
address_hash = build_address_hash(ip, details)
addresses[type] << address_hash
end
end
addresses
end
def build_address_hash(ip, details)
address_hash = Mash.new({
'ip_address' => ip.address,
'type' => private_address?(ip.address) ? 'private' : 'public'
})
if ip.ipv4?
address_hash['netmask'] = details[:netmask]
elsif ip.ipv6?
address_hash['cidr'] = ip.prefix
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?
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
else
Ohai::Log.debug("No hints present for digital_ocean.")
false
end
end
end
|