diff options
author | Stafford Brunk <wingrunr21@gmail.com> | 2014-08-27 14:07:03 -0600 |
---|---|---|
committer | Bryan McLellan <btm@opscode.com> | 2015-02-17 11:51:02 -0500 |
commit | 8407fecd7dbad9a0c2034e8b488198e76341ebd0 (patch) | |
tree | 0a3a457809472f050b3eee04037d253328cfe982 | |
parent | c8ad42453f6b90df8f6f0f2bb7044c8385e46164 (diff) | |
download | ohai-8407fecd7dbad9a0c2034e8b488198e76341ebd0.tar.gz |
Add digital_ocean support to the cloud_v2 plugin
-rw-r--r-- | lib/ohai/plugins/cloud_v2.rb | 28 | ||||
-rw-r--r-- | spec/unit/plugins/cloud_v2_spec.rb | 67 |
2 files changed, 95 insertions, 0 deletions
diff --git a/lib/ohai/plugins/cloud_v2.rb b/lib/ohai/plugins/cloud_v2.rb index 0e79caf1..944112fa 100644 --- a/lib/ohai/plugins/cloud_v2.rb +++ b/lib/ohai/plugins/cloud_v2.rb @@ -24,6 +24,7 @@ Ohai.plugin(:CloudV2) do depends "linode" depends "openstack" depends "azure" + depends "digital_ocean" # Class to help enforce the interface exposed to node[:cloud] (OHAI-542) # @@ -270,6 +271,32 @@ Ohai.plugin(:CloudV2) do @cloud_attr_obj.provider = "azure" end + + # ---------------------------------------- + # digital_ocean + # ---------------------------------------- + + # Is current cloud digital_ocean? + # + # === Return + # true:: If digital_ocean Mash is defined + # false:: Otherwise + def on_digital_ocean? + digital_ocean != nil + end + + # 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.provider = "digital_ocean" + end + collect_data do require "ipaddr" @@ -282,6 +309,7 @@ Ohai.plugin(:CloudV2) do get_eucalyptus_values if on_eucalyptus? get_openstack_values if on_openstack? get_azure_values if on_azure? + get_digital_ocean_values if on_digital_ocean? # set node[:cloud] hash here cloud_v2 @cloud_attr_obj.cloud_mash diff --git a/spec/unit/plugins/cloud_v2_spec.rb b/spec/unit/plugins/cloud_v2_spec.rb index 8c32cf0a..753dec3b 100644 --- a/spec/unit/plugins/cloud_v2_spec.rb +++ b/spec/unit/plugins/cloud_v2_spec.rb @@ -86,6 +86,7 @@ describe Ohai::System, "plugin cloud" do @plugin[:linode] = nil @plugin[:azure] = nil @plugin[:gce] = nil + @plugin[:digital_ocean] = nil @plugin.run expect(@plugin[:cloud_v2]).to be_nil end @@ -289,4 +290,70 @@ describe Ohai::System, "plugin cloud" do end end + 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"}] + end + + before(:each) do + @plugin.run + end + + it "populates cloud public hostname" do + @plugin[:cloud_v2][:public_hostname].should == "public.example.com" + end + + it "populates cloud local hostname" do + @plugin[:cloud_v2][:local_hostname].should be_nil + end + + it "populates cloud public_ipv4_addrs" do + @plugin[:cloud_v2][:public_ipv4_addrs].should == @plugin[:digital_ocean][:networks][:v4].select{|ip| ip['type'] == 'public'} + .map{|ip| ip['ip_address']} + + end + + it "populates cloud local_ipv4_addrs" do + @plugin[:cloud_v2][:local_ipv4_addrs].should == @plugin[:digital_ocean][:networks][:v4].select{|ip| ip['type'] == 'private'} + .map{|ip| ip['ip_address']} + + end + + it "populates cloud public_ipv4" do + @plugin[:cloud_v2][:public_ipv4].should == @plugin[:digital_ocean][:networks][:v4].find{|ip| ip['type'] == 'public'}['ip_address'] + end + + it "populates cloud local_ipv4" do + @plugin[:cloud_v2][:local_ipv4].should == @plugin[:digital_ocean][:networks][:v4].find{|ip| ip['type'] == 'private'}['ip_address'] + end + + it "populates cloud public_ipv6_addrs" do + @plugin[:cloud_v2][:public_ipv6_addrs].should == @plugin[:digital_ocean][:networks][:v6].select{|ip| ip['type'] == 'public'} + .map{|ip| ip['ip_address']} + end + + it "populates cloud local_ipv6_addrs" do + @plugin[:cloud_v2][:local_ipv6_addrs].should == @plugin[:digital_ocean][:networks][:v6].select{|ip| ip['type'] == 'private'} + .map{|ip| ip['ip_address']} + end + + it "populates cloud public_ipv6" do + @plugin[:cloud_v2][:public_ipv6].should == @plugin[:digital_ocean][:networks][:v6].find{|ip| ip['type'] == 'public'}['ip_address'] + end + + it "populates cloud local_ipv6" do + @plugin[:cloud_v2][:local_ipv6].should == @plugin[:digital_ocean][:networks][:v6].find{|ip| ip['type'] == 'private'}['ip_address'] + end + + it "populates cloud provider" do + @plugin[:cloud_v2][:provider].should == "digital_ocean" + end + end + end |