diff options
author | Andreas Gerauer <helle@fraggaz.de> | 2012-10-18 11:04:25 +0200 |
---|---|---|
committer | Bryan McLellan <btm@opscode.com> | 2012-12-06 13:21:34 -0800 |
commit | af5126cf9447eb636cbfe8c70da5cef66f01c897 (patch) | |
tree | 1fbb9800fd936825a68c1099ae5293808ed179fb | |
parent | 4251a0c5ba0ab2dd1bdc830da09f9f0ed5599cae (diff) | |
download | ohai-af5126cf9447eb636cbfe8c70da5cef66f01c897.tar.gz |
make rackspace ipv6 address accessible in rackspace and cloud plugins if available
-rw-r--r-- | lib/ohai/plugins/cloud.rb | 10 | ||||
-rw-r--r-- | lib/ohai/plugins/rackspace.rb | 24 | ||||
-rw-r--r-- | spec/ohai/plugins/cloud_spec.rb | 40 | ||||
-rw-r--r-- | spec/ohai/plugins/rackspace_spec.rb | 12 |
4 files changed, 70 insertions, 16 deletions
diff --git a/lib/ohai/plugins/cloud.rb b/lib/ohai/plugins/cloud.rb index a189541b..3d0c61c8 100644 --- a/lib/ohai/plugins/cloud.rb +++ b/lib/ohai/plugins/cloud.rb @@ -74,12 +74,16 @@ def on_rackspace? end # Fill cloud hash with rackspace values -def get_rackspace_values - cloud[:public_ips] << rackspace['public_ip'] - cloud[:private_ips] << rackspace['private_ip'] +def get_rackspace_values + cloud[:public_ips] << rackspace['public_ipv4'] if rackspace['public_ipv4'] + cloud[:public_ips] << rackspace['public_ipv6'] if rackspace['public_ipv6'] + cloud[:private_ips] << rackspace['local_ipv4'] if rackspace['local_ipv4'] + cloud[:private_ips] << rackspace['local_ipv6'] if rackspace['local_ipv6'] cloud[:public_ipv4] = rackspace['public_ipv4'] + cloud[:public_ipv6] = rackspace['public_ipv6'] cloud[:public_hostname] = rackspace['public_hostname'] cloud[:local_ipv4] = rackspace['local_ipv4'] + cloud[:local_ipv6] = rackspace['local_ipv6'] cloud[:local_hostname] = rackspace['local_hostname'] cloud[:provider] = "rackspace" end diff --git a/lib/ohai/plugins/rackspace.rb b/lib/ohai/plugins/rackspace.rb index 45dbc447..37f95c75 100644 --- a/lib/ohai/plugins/rackspace.rb +++ b/lib/ohai/plugins/rackspace.rb @@ -56,9 +56,27 @@ end # === Parameters # name<Symbol>:: Use :public_ip or :private_ip # eth<Symbol>:: Interface name of public or private ip -def get_ip_address(name, eth) +def get_ip_address(name, eth, family = 'inet') network[:interfaces][eth][:addresses].each do |key, info| - rackspace[name] = key if info['family'] == 'inet' + if info['family'] == 'inet' + rackspace[name] = key + break # break when we found an address + end + end +end + +# Names rackspace ipv6 address for interface +# +# === Parameters +# name<Symbol>:: Use :public_ip or :private_ip +# eth<Symbol>:: Interface name of public or private ip +def get_global_ipv6_address(name, eth, family = 'inet') + network[:interfaces][eth][:addresses].each do |key, info| + # check if we got an ipv6 address and if its in global scope + if info['family'] == 'inet6' && info['scope'] == 'Global' + rackspace[name] = key + break # break when we found an address + end end end @@ -69,7 +87,9 @@ if looks_like_rackspace? get_ip_address(:private_ip, :eth1) # public_ip + private_ip are deprecated in favor of public_ipv4 and local_ipv4 to standardize. rackspace[:public_ipv4] = rackspace[:public_ip] + get_global_ipv6_address(:public_ipv6, :eth0) rackspace[:public_hostname] = "#{rackspace[:public_ip].gsub('.','-')}.static.cloud-ips.com" rackspace[:local_ipv4] = rackspace[:private_ip] + get_global_ipv6_address(:local_ipv6, :eth1) rackspace[:local_hostname] = hostname end diff --git a/spec/ohai/plugins/cloud_spec.rb b/spec/ohai/plugins/cloud_spec.rb index 72cc61f9..599935bb 100644 --- a/spec/ohai/plugins/cloud_spec.rb +++ b/spec/ohai/plugins/cloud_spec.rb @@ -60,24 +60,42 @@ describe Ohai::System, "plugin cloud" do describe "with rackspace" do before do @ohai[:rackspace] = Mash.new() - end - + end + it "populates cloud public ip" do - @ohai[:rackspace]['public_ip'] = "174.129.150.8" + @ohai[:rackspace][:public_ipv4] = "174.129.150.8" @ohai._require_plugin("cloud") - @ohai[:cloud][:public_ips][0].should == @ohai[:rackspace][:public_ip] + @ohai[:cloud][:public_ipv4].should == @ohai[:rackspace][:public_ipv4] end - + + it "populates cloud public ipv6" do + @ohai[:rackspace][:public_ipv6] = "2a00:1a48:7805:111:e875:efaf:ff08:75" + @ohai._require_plugin("cloud") + @ohai[:cloud][:public_ipv6].should == @ohai[:rackspace][:public_ipv6] + end + it "populates cloud private ip" do - @ohai[:rackspace]['private_ip'] = "10.252.42.149" + @ohai[:rackspace][:local_ipv4] = "10.252.42.149" @ohai._require_plugin("cloud") - @ohai[:cloud][:private_ips][0].should == @ohai[:rackspace][:private_ip] + @ohai[:cloud][:local_ipv4].should == @ohai[:rackspace][:local_ipv4] end - - it "populates first cloud public ip" do - @ohai[:rackspace]['public_ip'] = "174.129.150.8" + + it "populates cloud private ipv6" do + @ohai[:rackspace][:local_ipv6] = "2a00:1a48:7805:111:e875:efaf:ff08:75" + @ohai._require_plugin("cloud") + @ohai[:cloud][:local_ipv6].should == @ohai[:rackspace][:local_ipv6] + end + + it "populates first cloud public ip" do + @ohai[:rackspace][:public_ipv4] = "174.129.150.8" + @ohai._require_plugin("cloud") + @ohai[:cloud][:public_ips].first.should == @ohai[:rackspace][:public_ipv4] + end + + it "populates first cloud public ip" do + @ohai[:rackspace][:local_ipv4] = "174.129.150.8" @ohai._require_plugin("cloud") - @ohai[:cloud][:public_ips].first.should == @ohai[:rackspace][:public_ip] + @ohai[:cloud][:private_ips].first.should == @ohai[:rackspace][:local_ipv4] end it "populates cloud provider" do diff --git a/spec/ohai/plugins/rackspace_spec.rb b/spec/ohai/plugins/rackspace_spec.rb index 949752ba..4031803e 100644 --- a/spec/ohai/plugins/rackspace_spec.rb +++ b/spec/ohai/plugins/rackspace_spec.rb @@ -27,6 +27,11 @@ describe Ohai::System, "plugin rackspace" do "netmask"=> "255.255.255.0", "family"=> "inet" }, + "2a00:1a48:7805:111:e875:efaf:ff08:75"=> { + "family"=> "inet6", + "prefixlen"=> "64", + "scope"=> "Global" + }, "fe80::4240:95ff:fe47:6eed"=> { "scope"=> "Link", "prefixlen"=> "64", @@ -74,12 +79,19 @@ describe Ohai::System, "plugin rackspace" do @ohai._require_plugin("rackspace") @ohai[:rackspace][:public_ip].should_not be_nil @ohai[:rackspace][:private_ip].should_not be_nil + @ohai[:rackspace][:public_ipv4].should_not be_nil + @ohai[:rackspace][:local_ipv4].should_not be_nil + @ohai[:rackspace][:public_ipv6].should_not be_nil + @ohai[:rackspace][:local_ipv6].should be_nil end it "should have correct values for all attributes" do @ohai._require_plugin("rackspace") @ohai[:rackspace][:public_ip].should == "1.2.3.4" @ohai[:rackspace][:private_ip].should == "5.6.7.8" + @ohai[:rackspace][:public_ipv4].should == "1.2.3.4" + @ohai[:rackspace][:local_ipv4].should == "5.6.7.8" + @ohai[:rackspace][:public_ipv6].should == "2a00:1a48:7805:111:e875:efaf:ff08:75" end end |