Skip to content
This repository has been archived by the owner on Jul 11, 2020. It is now read-only.

Commit

Permalink
VPC ohai plugin to get public ipv4 address information
Browse files Browse the repository at this point in the history
Sam Kottler committed Jul 3, 2014

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature. The key has expired.
1 parent 6f052d0 commit 6c9377c
Showing 5 changed files with 83 additions and 2 deletions.
3 changes: 2 additions & 1 deletion Berksfile.lock
Original file line number Diff line number Diff line change
@@ -178,7 +178,8 @@ GRAPH
redisio (1.7.1)
ulimit (>= 0.1.2)
rsyslog (1.12.2)
rubygems (0.0.17)
rubygems (0.0.22)
ohai (>= 0.0.0)
rubygems-apt (>= 0.0.0)
rubygems-chef (>= 0.0.0)
rubygems-cloud-init (>= 0.0.0)
4 changes: 3 additions & 1 deletion cookbooks/rubygems/metadata.rb
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@
maintainer 'RubyGems.org Ops Team'
license 'MIT'
description 'RubyGems base recipes'
version '0.0.17'
version '0.0.22'

depends 'rubygems-apt'
depends 'rubygems-chef'
@@ -19,4 +19,6 @@
depends 'rubygems-ssh'
depends 'rubygems-utility'

depends 'ohai'

supports 'ubuntu'
4 changes: 4 additions & 0 deletions cookbooks/rubygems/recipes/default.rb
Original file line number Diff line number Diff line change
@@ -3,6 +3,9 @@
# Recipe:: default
#

# General ohai plugins required for every node should live in this recipe.
include_recipe 'rubygems::ohai'

include_recipe 'rubygems-apt'
include_recipe 'rubygems-chef'
include_recipe 'rubygems-cloud-init'
@@ -17,3 +20,4 @@
include_recipe 'rubygems-sensu'
include_recipe 'rubygems-ssh'
include_recipe 'rubygems-utility'

8 changes: 8 additions & 0 deletions cookbooks/rubygems/recipes/ohai.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
include_recipe 'ohai'

template "#{node['ohai']['plugin_path']}/vpc.rb" do
source 'plugins/vpc.rb.erb'
owner 'root'
group node['root_group']
mode '0755'
end
66 changes: 66 additions & 0 deletions cookbooks/rubygems/templates/default/plugins/vpc.rb.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
provides "vpc_data"

require 'ohai/mixin/ec2_metadata'

require_plugin "hostname"
require_plugin "kernel"
require_plugin "network"

vpc_data Mash.new


def make_api_request(url)
res = Net::HTTP.get_response('169.254.169.254', "/latest/meta-data#{url}")

Ohai::Log.debug("#{url.split("/")[-1]}[#{res.code}] == #{res.body}")
unless res.code.eql?("200")
Ohai::Log.warn("#{url.split("/")[-1]} == #{res.code}")
return nil
else
res.body
end
end

def get_mac_address
return make_api_request("/network/interfaces/macs/")
end

def get_public_ipv4
return make_api_request("/network/interfaces/macs/#{vpc_data[:mac_address]}/public-ipv4s/")
end

def get_local_ipv4
return make_api_request("/network/interfaces/macs/#{vpc_data[:mac_address]}/local-ipv4s/")
end

def get_local_ipv4_cidr
return make_api_request("/network/interfaces/macs/#{vpc_data[:mac_address]}/subnet-ipv4-cidr-block/")
end

def get_subnet_id
return make_api_request("/network/interfaces/macs/#{vpc_data[:mac_address]}/subnet-id/")
end

def get_instance_id
return make_api_request("/instance-id/")
end

def get_vpc_id
return make_api_request("/network/interfaces/macs/#{vpc_data[:mac_address]}/vpc-id/")
end

def get_netmask
return IPAddr.new('255.255.255.255').mask(get_cidr.split("/")[1]).to_s
end

if can_metadata_connect?(EC2_METADATA_ADDR,80)

vpc_data[:mac_address] = get_mac_address.delete("/")
vpc_data[:vpc_id] = get_vpc_id.delete("/")

if vpc_data[:mac_address] && vpc_data[:vpc_id]
vpc_data[:local_ipv4_cidr] = get_local_ipv4_cidr
svpc_data[:public_ipv4] = get_public_ipv4
vpc_data[:instance_id] = get_instance_id.delete("/")
end
end

0 comments on commit 6c9377c

Please sign in to comment.