lib/ohai/plugins/ec2.rb in ohai-0.5.8 vs lib/ohai/plugins/ec2.rb in ohai-0.6.0.beta.0
- old
+ new
@@ -17,89 +17,40 @@
# See the License for the specific language governing permissions and
# limitations under the License.
provides "ec2"
-require 'open-uri'
-require 'socket'
+require 'ohai/mixin/ec2_metadata'
require_plugin "hostname"
require_plugin "kernel"
require_plugin "network"
-EC2_METADATA_ADDR = "169.254.169.254" unless defined?(EC2_METADATA_ADDR)
-EC2_METADATA_URL = "http://#{EC2_METADATA_ADDR}/2008-02-01/meta-data" unless defined?(EC2_METADATA_URL)
-EC2_USERDATA_URL = "http://#{EC2_METADATA_ADDR}/2008-02-01/user-data" unless defined?(EC2_USERDATA_URL)
-EC2_ARRAY_VALUES = %w(security-groups)
+extend Ohai::Mixin::Ec2Metadata
-def can_metadata_connect?(addr, port, timeout=2)
- t = Socket.new(Socket::Constants::AF_INET, Socket::Constants::SOCK_STREAM, 0)
- saddr = Socket.pack_sockaddr_in(port, addr)
- connected = false
-
- begin
- t.connect_nonblock(saddr)
- rescue Errno::EINPROGRESS
- r,w,e = IO::select(nil,[t],nil,timeout)
- if !w.nil?
- connected = true
- else
- begin
- t.connect_nonblock(saddr)
- rescue Errno::EISCONN
- t.close
- connected = true
- rescue SystemCallError
- end
- end
- rescue SystemCallError
- end
-
- connected
-end
-
def has_ec2_mac?
network[:interfaces].values.each do |iface|
unless iface[:arp].nil?
- return true if iface[:arp].value?("fe:ff:ff:ff:ff:ff")
+ has_mac = iface[:arp].value?("fe:ff:ff:ff:ff:ff")
+ Ohai::Log.debug("has_ec2_mac? == true")
+ return true if has_mac
end
end
+ Ohai::Log.debug("has_ec2_mac? == false")
false
end
-def metadata(id='')
- OpenURI.open_uri("#{EC2_METADATA_URL}/#{id}").read.split("\n").each do |o|
- key = "#{id}#{o.gsub(/\=.*$/, '/')}"
- if key[-1..-1] != '/'
- ec2[key.gsub(/\-|\//, '_').to_sym] =
- if EC2_ARRAY_VALUES.include? key
- OpenURI.open_uri("#{EC2_METADATA_URL}/#{key}").read.split("\n")
- else
- OpenURI.open_uri("#{EC2_METADATA_URL}/#{key}").read
- end
- else
- metadata(key)
- end
- end
-end
-
-def userdata()
- ec2[:userdata] = nil
- # assumes the only expected error is the 404 if there's no user-data
- begin
- ec2[:userdata] = OpenURI.open_uri("#{EC2_USERDATA_URL}/").read
- rescue OpenURI::HTTPError
- end
-end
-
def looks_like_ec2?
# Try non-blocking connect so we don't "block" if
# the Xen environment is *not* EC2
has_ec2_mac? && can_metadata_connect?(EC2_METADATA_ADDR,80)
end
if looks_like_ec2?
+ Ohai::Log.debug("looks_like_ec2? == true")
ec2 Mash.new
- self.metadata
- self.userdata
+ self.fetch_metadata.each {|k, v| ec2[k] = v }
+ ec2[:userdata] = self.fetch_userdata
+else
+ Ohai::Log.debug("looks_like_ec2? == false")
+ false
end
-