summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStafford Brunk <wingrunr21@gmail.com>2014-08-27 14:07:03 -0600
committerBryan McLellan <btm@opscode.com>2015-02-17 11:51:02 -0500
commit8407fecd7dbad9a0c2034e8b488198e76341ebd0 (patch)
tree0a3a457809472f050b3eee04037d253328cfe982
parentc8ad42453f6b90df8f6f0f2bb7044c8385e46164 (diff)
downloadohai-8407fecd7dbad9a0c2034e8b488198e76341ebd0.tar.gz
Add digital_ocean support to the cloud_v2 plugin
-rw-r--r--lib/ohai/plugins/cloud_v2.rb28
-rw-r--r--spec/unit/plugins/cloud_v2_spec.rb67
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