diff options
author | Stafford Brunk <wingrunr21@gmail.com> | 2014-08-27 13:40:25 -0600 |
---|---|---|
committer | Bryan McLellan <btm@opscode.com> | 2015-02-17 11:51:02 -0500 |
commit | c8ad42453f6b90df8f6f0f2bb7044c8385e46164 (patch) | |
tree | 27ed645d3a293fd18294fb90f7b72d631017207b | |
parent | 874104aa3449ad844ce4e28d3c60228ea6bde208 (diff) | |
download | ohai-c8ad42453f6b90df8f6f0f2bb7044c8385e46164.tar.gz |
Add digital_ocean support to the cloud plugin
-rw-r--r-- | lib/ohai/plugins/cloud.rb | 36 | ||||
-rw-r--r-- | spec/unit/plugins/cloud_spec.rb | 54 |
2 files changed, 90 insertions, 0 deletions
diff --git a/lib/ohai/plugins/cloud.rb b/lib/ohai/plugins/cloud.rb index ef81d641..c7cdfbf3 100644 --- a/lib/ohai/plugins/cloud.rb +++ b/lib/ohai/plugins/cloud.rb @@ -25,6 +25,7 @@ Ohai.plugin(:Cloud) do depends "openstack" depends "azure" depends "cloudstack" + depends "digital_ocean" # Make top-level cloud hashes # @@ -241,6 +242,35 @@ Ohai.plugin(:Cloud) do cloud[:provider] = "cloudstack" 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 linode values + def get_digital_ocean_values + public_ipv4 = digital_ocean['networks']['v4'].select {|address| address['type'] == 'public'} + private_ipv4 = digital_ocean['networks']['v4'].select {|address| address['type'] == 'private'} + public_ipv6 = digital_ocean['networks']['v6'].select {|address| address['type'] == 'public'} + private_ipv6 = digital_ocean['networks']['v6'].select {|address| address['type'] == 'private'} + 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 + cloud[:public_hostname] = digital_ocean['name'] + cloud[:provider] = "digital_ocean" + end + collect_data do # setup gce cloud if on_gce? @@ -288,5 +318,11 @@ Ohai.plugin(:Cloud) do create_objects get_cloudstack_values end + + # setup digital_ocean cloud data + if on_digital_ocean? + create_objects + get_digital_ocean_values + end end end diff --git a/spec/unit/plugins/cloud_spec.rb b/spec/unit/plugins/cloud_spec.rb index 7e6a4f92..3ed2c89a 100644 --- a/spec/unit/plugins/cloud_spec.rb +++ b/spec/unit/plugins/cloud_spec.rb @@ -30,6 +30,7 @@ describe Ohai::System, "plugin cloud" do @plugin[:linode] = nil @plugin[:azure] = nil @plugin[:cloudstack] = nil + @plugin[:digital_ocean] = nil @plugin.run expect(@plugin[:cloud]).to be_nil end @@ -235,5 +236,58 @@ 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][:public_hostname].should == "public.example.com" + end + + it "populates cloud local hostname" do + @plugin[:cloud][:local_hostname].should be_nil + end + + it "populates cloud public ips" do + @plugin[:cloud][:public_ips].should == @plugin[:digital_ocean][:networks][:v4].select{|ip| ip['type'] == 'public'} + + @plugin[:digital_ocean][:networks][:v6].select{|ip| ip['type'] == 'public'} + end + + it "populates cloud private ips" do + @plugin[:cloud][:private_ips].should == @plugin[:digital_ocean][:networks][:v4].select{|ip| ip['type'] == 'private'} + + @plugin[:digital_ocean][:networks][:v6].select{|ip| ip['type'] == 'private'} + end + + it "populates cloud public_ipv4" do + @plugin[:cloud][:public_ipv4].should == @plugin[:digital_ocean][:networks][:v4].find{|ip| ip['type'] == 'public'} + end + + it "populates cloud local_ipv4" do + @plugin[:cloud][:local_ipv4].should == @plugin[:digital_ocean][:networks][:v4].find{|ip| ip['type'] == 'private'} + end + + it "populates cloud public_ipv6" do + @plugin[:cloud][:public_ipv6].should == @plugin[:digital_ocean][:networks][:v6].find{|ip| ip['type'] == 'public'} + end + + it "populates cloud local_ipv6" do + @plugin[:cloud][:local_ipv6].should == @plugin[:digital_ocean][:networks][:v6].find{|ip| ip['type'] == 'private'} + end + + it "populates cloud provider" do + @plugin[:cloud][:provider].should == "digital_ocean" + end + end end |