diff --git a/lib/fog/aws/ec2.rb b/lib/fog/aws/ec2.rb index 9726452d8..b8bed1a5a 100644 --- a/lib/fog/aws/ec2.rb +++ b/lib/fog/aws/ec2.rb @@ -23,6 +23,7 @@ require "#{parsers_directory}/describe_regions" require "#{parsers_directory}/describe_security_groups" require "#{parsers_directory}/describe_snapshots" require "#{parsers_directory}/describe_volumes" +require "#{parsers_directory}/get_console_output" require "#{parsers_directory}/run_instances" require "#{parsers_directory}/terminate_instances" @@ -58,7 +59,7 @@ require "#{requests_directory}/describe_snapshots" require "#{requests_directory}/describe_volumes" # TODO: require "#{requests_directory}/detach_volume" require "#{requests_directory}/disassociate_address" -# TODO: require "#{requests_directory}/get_console_output" +require "#{requests_directory}/get_console_output" # TODO: require "#{requests_directory}/modify_image_attribute" # TODO: require "#{requests_directory}/monitor_instances" # TODO: require "#{requests_directory}/purchase_reserver_instances_offering" diff --git a/lib/fog/aws/parsers/ec2/get_console_output.rb b/lib/fog/aws/parsers/ec2/get_console_output.rb new file mode 100644 index 000000000..f6deed8bd --- /dev/null +++ b/lib/fog/aws/parsers/ec2/get_console_output.rb @@ -0,0 +1,30 @@ +module Fog + module Parsers + module AWS + module EC2 + + class GetConsoleOutput < Fog::Parsers::Base + + def reset + @response = {} + end + + def end_element(name) + case name + when 'instanceId' + @response[:instance_id] = @value + when 'output' + @response[:output] = Base64.decode64(@value) + when 'requestId' + @response[:request_id] = @value + when 'timestamp' + @response[:timestamp] = Time.parse(@value) + end + end + + end + + end + end + end +end \ No newline at end of file diff --git a/lib/fog/aws/requests/ec2/get_console_output.rb b/lib/fog/aws/requests/ec2/get_console_output.rb new file mode 100644 index 000000000..676857ddc --- /dev/null +++ b/lib/fog/aws/requests/ec2/get_console_output.rb @@ -0,0 +1,26 @@ +module Fog + module AWS + class EC2 + + # Retrieve console output for specified instance + # + # ==== Parameters + # * instance_id<~String> - Id of instance to get console output from + # + # ==== Returns + # # * response<~Fog::AWS::Response>: + # * body<~Hash>: + # * :instance_id<~String> - Id of instance + # * :output<~String> - Console output + # * :request_id<~String> - Id of request + # * :timestamp<~Time> - Timestamp of last update to output + def get_console_output(instance_id) + request({ + 'Action' => 'GetConsoleOutput', + 'InstanceId' => instance_id + }, Fog::Parsers::AWS::EC2::GetConsoleOutput.new) + end + + end + end +end diff --git a/lib/fog/parser.rb b/lib/fog/parser.rb index dffdb8ad0..d06c7af4e 100644 --- a/lib/fog/parser.rb +++ b/lib/fog/parser.rb @@ -1,4 +1,5 @@ require 'rubygems' +require 'base64' require 'nokogiri' require 'time' diff --git a/spec/aws/ec2/get_console_output_spec.rb b/spec/aws/ec2/get_console_output_spec.rb new file mode 100644 index 000000000..0ff338cfc --- /dev/null +++ b/spec/aws/ec2/get_console_output_spec.rb @@ -0,0 +1,22 @@ +require File.dirname(__FILE__) + '/../../spec_helper' + +describe 'EC2.get_console_output' do + + before(:all) do + @instance_id = ec2.run_instances('ami-5ee70037', 1, 1).body[:instances_set].first[:instance_id] + end + + after(:all) do + ec2.terminate_instances([@instance_id]) + end + + it "should return proper attributes" do + actual = ec2.get_console_output(@instance_id) + p actual + # actual.body[:instance_id].should be_a(String) + # actual.body[:output].should be_a(String) + # actual.body[:request_id].should be_a(String) + # actual.body[:timestamp].should be_a(Time) + end + +end