summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStafford Brunk <wingrunr21@gmail.com>2014-08-27 13:40:25 -0600
committerBryan McLellan <btm@opscode.com>2015-02-17 11:51:02 -0500
commitc8ad42453f6b90df8f6f0f2bb7044c8385e46164 (patch)
tree27ed645d3a293fd18294fb90f7b72d631017207b
parent874104aa3449ad844ce4e28d3c60228ea6bde208 (diff)
downloadohai-c8ad42453f6b90df8f6f0f2bb7044c8385e46164.tar.gz
Add digital_ocean support to the cloud plugin
-rw-r--r--lib/ohai/plugins/cloud.rb36
-rw-r--r--spec/unit/plugins/cloud_spec.rb54
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