From 582b86312ba31a91dfec5e1e16556f60f4beab6b Mon Sep 17 00:00:00 2001 From: Tim Smith Date: Tue, 21 Mar 2017 22:04:03 -0700 Subject: Fix the cloud plugins to properly report values on DO Signed-off-by: Tim Smith --- lib/ohai/plugins/cloud.rb | 24 +++++----- lib/ohai/plugins/cloud_v2.rb | 11 ++--- spec/unit/plugins/cloud_spec.rb | 10 ++--- spec/unit/plugins/cloud_v2_spec.rb | 89 +++++++++++++++++++++++++------------- 4 files changed, 80 insertions(+), 54 deletions(-) diff --git a/lib/ohai/plugins/cloud.rb b/lib/ohai/plugins/cloud.rb index 551016d5..e24c6965 100644 --- a/lib/ohai/plugins/cloud.rb +++ b/lib/ohai/plugins/cloud.rb @@ -231,18 +231,20 @@ Ohai.plugin(:Cloud) do digital_ocean != nil end - # Fill cloud hash with linode values + # Fill cloud hash with digital ocean values def get_digital_ocean_values - public_ipv4 = digital_ocean["interfaces"]["public"].map { |iface| iface["ipv4"]["ip_address"] } - private_ipv4 = digital_ocean["interfaces"]["private"] ? digital_ocean["interfaces"]["private"].map { |iface| iface["ipv4"]["ip_address"] } : [] - public_ipv6 = digital_ocean["interfaces"]["public"].map { |iface| iface["ipv6"]["ip_address"] } - private_ipv6 = digital_ocean["interfaces"]["private"] ? digital_ocean["interfaces"]["private"].map { |iface| iface["ipv6"]["ip_address"] } : [] - cloud[:public_ips].concat public_ipv4 + public_ipv6 - cloud[:private_ips].concat private_ipv4 + private_ipv6 - cloud[:public_ipv4] = public_ipv4.first - cloud[:public_ipv6] = public_ipv6.first - cloud[:local_ipv4] = private_ipv4.first - cloud[:local_ipv6] = private_ipv6.first + public_ipv4 = digital_ocean["interfaces"]["public"][0]["ipv4"]["ip_address"] rescue nil + private_ipv4 = digital_ocean["interfaces"]["private"][0]["ipv4"]["ip_address"] rescue nil + public_ipv6 = digital_ocean["interfaces"]["public"][0]["ipv6"]["ip_address"] rescue nil + private_ipv6 = digital_ocean["interfaces"]["private"][0]["ipv6"]["ip_address"] rescue nil + cloud[:public_ips] << public_ipv4 unless public_ipv4.nil? + cloud[:public_ips] << public_ipv6 unless public_ipv6.nil? + cloud[:private_ips] << private_ipv4 unless private_ipv4.nil? + cloud[:private_ips] << private_ipv6 unless private_ipv6.nil? + cloud[:public_ipv4] = public_ipv4 + cloud[:public_ipv6] = public_ipv6 + cloud[:local_ipv4] = private_ipv4 + cloud[:local_ipv6] = private_ipv6 cloud[:public_hostname] = digital_ocean["hostname"] cloud[:provider] = "digital_ocean" end diff --git a/lib/ohai/plugins/cloud_v2.rb b/lib/ohai/plugins/cloud_v2.rb index fceb4d3f..733108d8 100644 --- a/lib/ohai/plugins/cloud_v2.rb +++ b/lib/ohai/plugins/cloud_v2.rb @@ -285,13 +285,10 @@ Ohai.plugin(:CloudV2) do # Fill cloud hash with digital_ocean values def get_digital_ocean_values - digital_ocean["networks"].each do |network, addresses| - type = network == "v4" ? "ipv4" : "ipv6" - addresses.each do |address| - @cloud_attr_obj.send("add_#{type}_addr", address["ip_address"], address["type"].to_sym) - end - end - @cloud_attr_obj.public_hostname = digital_ocean["name"] + @cloud_attr_obj.send("add_ipv4_addr", digital_ocean["interfaces"]["public"][0]["ipv4"]["ip_address"], :public) rescue NoMethodError + @cloud_attr_obj.send("add_ipv4_addr", digital_ocean["interfaces"]["private"][0]["ipv4"]["ip_address"], :private) rescue NoMethodError + @cloud_attr_obj.send("add_ipv6_addr", digital_ocean["interfaces"]["public"][0]["ipv6"]["ip_address"], :public) rescue NoMethodError + @cloud_attr_obj.send("add_ipv6_addr", digital_ocean["interfaces"]["private"][0]["ipv6"]["ip_address"], :private) rescue NoMethodError @cloud_attr_obj.provider = "digital_ocean" end diff --git a/spec/unit/plugins/cloud_spec.rb b/spec/unit/plugins/cloud_spec.rb index 83a59469..78865ba2 100644 --- a/spec/unit/plugins/cloud_spec.rb +++ b/spec/unit/plugins/cloud_spec.rb @@ -37,7 +37,7 @@ describe Ohai::System, "plugin cloud" do describe "with EC2 mash" do before do - @plugin[:ec2] = Mash.new() + @plugin[:ec2] = Mash.new end it "populates cloud public ip" do @@ -60,7 +60,7 @@ describe Ohai::System, "plugin cloud" do describe "with rackspace" do before do - @plugin[:rackspace] = Mash.new() + @plugin[:rackspace] = Mash.new end it "populates cloud public ip" do @@ -107,7 +107,7 @@ describe Ohai::System, "plugin cloud" do describe "with linode mash" do before do - @plugin[:linode] = Mash.new() + @plugin[:linode] = Mash.new end it "populates cloud public ip" do @@ -136,7 +136,7 @@ describe Ohai::System, "plugin cloud" do describe "with eucalyptus mash" do before do - @plugin[:eucalyptus] = Mash.new() + @plugin[:eucalyptus] = Mash.new end it "populates cloud public ip" do @@ -159,7 +159,7 @@ describe Ohai::System, "plugin cloud" do describe "with Azure mash" do before do - @plugin[:azure] = Mash.new() + @plugin[:azure] = Mash.new end it "populates cloud private ip" do diff --git a/spec/unit/plugins/cloud_v2_spec.rb b/spec/unit/plugins/cloud_v2_spec.rb index fc736f95..d7f8654c 100644 --- a/spec/unit/plugins/cloud_v2_spec.rb +++ b/spec/unit/plugins/cloud_v2_spec.rb @@ -93,7 +93,7 @@ describe Ohai::System, "plugin cloud" do describe "with EC2 mash" do before do - @plugin[:ec2] = Mash.new() + @plugin[:ec2] = Mash.new end it "populates cloud public ip" do @@ -117,8 +117,8 @@ describe Ohai::System, "plugin cloud" do describe "with GCE mash" do describe "with a public IP" do before do - @plugin[:gce] = Mash.new() - @plugin[:gce]["instance"] = Mash.new() + @plugin[:gce] = Mash.new + @plugin[:gce]["instance"] = Mash.new @plugin[:gce]["instance"]["networkInterfaces"] = [ { "accessConfigs" => [ { "externalIp" => "8.35.198.173", "type" => "ONE_TO_ONE_NAT" } ], @@ -146,8 +146,8 @@ describe Ohai::System, "plugin cloud" do describe "with no public IP" do before do - @plugin[:gce] = Mash.new() - @plugin[:gce]["instance"] = Mash.new() + @plugin[:gce] = Mash.new + @plugin[:gce]["instance"] = Mash.new @plugin[:gce]["instance"]["networkInterfaces"] = [ { "accessConfigs" => [ { "externalIp" => "", "type" => "ONE_TO_ONE_NAT" } ], @@ -176,7 +176,7 @@ describe Ohai::System, "plugin cloud" do describe "with rackspace" do before do - @plugin[:rackspace] = Mash.new() + @plugin[:rackspace] = Mash.new end it "populates cloud public ip" do @@ -223,7 +223,7 @@ describe Ohai::System, "plugin cloud" do describe "with linode mash" do before do - @plugin[:linode] = Mash.new() + @plugin[:linode] = Mash.new end it "populates cloud public ip" do @@ -252,7 +252,7 @@ describe Ohai::System, "plugin cloud" do describe "with eucalyptus mash" do before do - @plugin[:eucalyptus] = Mash.new() + @plugin[:eucalyptus] = Mash.new end it "populates cloud public ip" do @@ -275,7 +275,7 @@ describe Ohai::System, "plugin cloud" do describe "with Azure mash" do before do - @plugin[:azure] = Mash.new() + @plugin[:azure] = Mash.new end it "populates cloud public ip" do @@ -323,62 +323,89 @@ describe Ohai::System, "plugin cloud" do describe "with digital_ocean mash" do before do @plugin[:digital_ocean] = Mash.new - @plugin[:digital_ocean][:name] = "public.example.com" - @plugin[:digital_ocean][:networks] = Mash.new - @plugin[:digital_ocean][:networks][:v4] = [{ "ip_address" => "1.2.3.4", "type" => "public" }, - { "ip_address" => "5.6.7.8", "type" => "private" }] - @plugin[:digital_ocean][:networks][:v6] = [{ "ip_address" => "fe80::4240:95ff:fe47:6eee", "type" => "public" }, - { "ip_address" => "fdf8:f53b:82e4::53", "type" => "private" }] + @plugin[:digital_ocean][:interfaces] = Mash.new + @plugin[:digital_ocean][:interfaces] = { + "private" => + [ + { + "ipv4" => + { + "ip_address" => "10.135.32.4", + "netmask" => "255.255.0.0", + "gateway" => "10.135.0.1", + }, + "mac" => "36:9e:23:65:c1:fe", + "type" => "private", + }, + ], + "public" => + [ + { + "ipv4" => + { + "ip_address" => "207.154.221.42", + "netmask" => "255.255.240.0", + "gateway" => "207.154.208.1", + }, + "ipv6" => + { + "ip_address" => "2A03:B0C0:0003:00D0:0000:0000:3B15:B001", + "cidr" => 64, + "gateway" => "2A03:B0C0:0003:00D0:0000:0000:0000:0001", + }, + "anchor_ipv4" => + { + "ip_address" => "10.19.0.5", + "netmask" => "255.255.0.0", + "gateway" => "10.19.0.1", + }, + "mac" => "9a:80:15:02:7a:c1", + "type" => "public", + }, + ], + } end before(:each) do @plugin.run end - it "populates cloud public hostname" do - expect(@plugin[:cloud_v2][:public_hostname]).to eq("public.example.com") - end - it "populates cloud local hostname" do expect(@plugin[:cloud_v2][:local_hostname]).to be_nil end it "populates cloud public_ipv4_addrs" do - expect(@plugin[:cloud_v2][:public_ipv4_addrs]).to eq(@plugin[:digital_ocean][:networks][:v4].select { |ip| ip["type"] == "public" } - .map { |ip| ip["ip_address"] }) + expect(@plugin[:cloud_v2][:public_ipv4_addrs]).to eq(["207.154.221.42"]) end it "populates cloud local_ipv4_addrs" do - expect(@plugin[:cloud_v2][:local_ipv4_addrs]).to eq(@plugin[:digital_ocean][:networks][:v4].select { |ip| ip["type"] == "private" } - .map { |ip| ip["ip_address"] }) + expect(@plugin[:cloud_v2][:local_ipv4_addrs]).to eq(["10.135.32.4"]) end it "populates cloud public_ipv4" do - expect(@plugin[:cloud_v2][:public_ipv4]).to eq(@plugin[:digital_ocean][:networks][:v4].find { |ip| ip["type"] == "public" }["ip_address"]) + expect(@plugin[:cloud_v2][:public_ipv4]).to eq("207.154.221.42") end it "populates cloud local_ipv4" do - expect(@plugin[:cloud_v2][:local_ipv4]).to eq(@plugin[:digital_ocean][:networks][:v4].find { |ip| ip["type"] == "private" }["ip_address"]) + expect(@plugin[:cloud_v2][:local_ipv4]).to eq("10.135.32.4") end it "populates cloud public_ipv6_addrs" do - expect(@plugin[:cloud_v2][:public_ipv6_addrs]).to eq(@plugin[:digital_ocean][:networks][:v6].select { |ip| ip["type"] == "public" } - .map { |ip| ip["ip_address"] }) + expect(@plugin[:cloud_v2][:public_ipv6_addrs]).to eq(["2a03:b0c0:3:d0::3b15:b001"]) end it "populates cloud local_ipv6_addrs" do - expect(@plugin[:cloud_v2][:local_ipv6_addrs]).to eq(@plugin[:digital_ocean][:networks][:v6].select { |ip| ip["type"] == "private" } - .map { |ip| ip["ip_address"] }) + expect(@plugin[:cloud_v2][:local_ipv6_addrs]).to be_nil end it "populates cloud public_ipv6" do - expect(@plugin[:cloud_v2][:public_ipv6]).to eq(@plugin[:digital_ocean][:networks][:v6].find { |ip| ip["type"] == "public" }["ip_address"]) + expect(@plugin[:cloud_v2][:public_ipv6]).to eq("2a03:b0c0:3:d0::3b15:b001") end it "populates cloud local_ipv6" do - expect(@plugin[:cloud_v2][:local_ipv6]).to eq(@plugin[:digital_ocean][:networks][:v6].find { |ip| ip["type"] == "private" }["ip_address"]) + expect(@plugin[:cloud_v2][:local_ipv6]).to be_nil end it "populates cloud provider" do -- cgit v1.2.1