Parsing List results

Hi Folks,

I need to parse a result that comes in this format :

=========================
ec2.describe_instances #=>
[{:aws_image_id => “ami-e444444d”,
:aws_reason => “”,
:aws_state_code => “16”,
:aws_owner => “000000000888”,
:aws_instance_id => “i-123f1234”,
:aws_reservation_id => “r-aabbccdd”,
:aws_state => “running”,
:dns_name =>
domU-12-34-67-89-01-C9.usma2.compute.amazonaws.com”,
:ssh_key_name => “staging”,
:aws_groups => [“default”],
:private_dns_name =>
domU-12-34-67-89-01-C9.usma2.compute.amazonaws.com”,
:aws_instance_type => “m1.small”,
:aws_launch_time => “2008-1-1T00:00:00.000Z”},
:aws_availability_zone => “us-east-1b”,
:aws_kernel_id => “aki-ba3adfd3”,
:aws_ramdisk_id => “ari-badbad00”,
…, {…}]

When I invoke the method,

puts @ec2.describe_instances

the results comes like this :

aws_image_idami-e444444daws_reasonaws_state_codeaws_owner000000000888aws_instance_id
i-123f1234aws_reservation_idr-aabbccddaws_staterunningdns_name
domU-12-34-67-89-01-C9.usma2.compute.amazonaws.comssh_key_namestagingaws_groups

Question :

Is there a way of accessing a specific key, for example : aws_status ?
If so, how do I do that ?

Thank you so much.

Regards.

On Jan 19, 2009, at 12:00 PM, Fernando Ramos wrote:

:aws_instance_id    => "i-123f1234",
:aws_availability_zone => "us-east-1b",

=========================
If so, how do I do that ?

Thank you so much.

Regards.

You can:
require ‘pp’
pp @ec2.describe_instances

or just use #inspect: (which is what irb does with the last expression
anyway)
p @ec2.describe_instances
puts @ec2.describe_instances.inspect

As for getting the specific key (did you mean ‘aws_state’?), perhaps
something like:
@ec2.describe_instances.each do |instance_hash|
puts “%20s:
%s”%instance_hash.values_at(:aws_instance_id, :aws_state)
end

       i-123f1234: running

You can look at: String#%, Kernel.sprintf, Hash#values_at, and Hash#[]
(oh yeah, and Enumerable#each) for the details.

-Rob

Rob B. http://agileconsultingllc.com
[email protected]

Rob B. wrote:

On Jan 19, 2009, at 12:00 PM, Fernando Ramos wrote:

:aws_instance_id    => "i-123f1234",
:aws_availability_zone => "us-east-1b",

=========================
If so, how do I do that ?

Thank you so much.

Regards.

You can:
require ‘pp’
pp @ec2.describe_instances

or just use #inspect: (which is what irb does with the last expression
anyway)
p @ec2.describe_instances
puts @ec2.describe_instances.inspect

As for getting the specific key (did you mean ‘aws_state’?), perhaps
something like:
@ec2.describe_instances.each do |instance_hash|
puts “%20s:
%s”%instance_hash.values_at(:aws_instance_id, :aws_state)
end

       i-123f1234: running

You can look at: String#%, Kernel.sprintf, Hash#values_at, and Hash#[]
(oh yeah, and Enumerable#each) for the details.

-Rob

Rob B. http://agileconsultingllc.com
[email protected]

Hi Rob,

You’ve got it !!! Thank you so much. It is working the way I want now !
Appreciate it !

Regards,

Fernando.

Fernando Ramos wrote:

puts @ec2.describe_instances

the results comes like this :

aws_image_idami-e444444daws_reasonaws_state_codeaws_owner000000000888aws_instance_id
i-123f1234aws_reservation_idr-aabbccddaws_staterunningdns_name
domU-12-34-67-89-01-C9.usma2.compute.amazonaws.comssh_key_namestagingaws_groups

puts outputs strings, so it calls .to_s on its argument.

.to_s on a hash calls .to_s on all its keys and values, and mashes them
together.

Use p @ec2.describe_instances, or require ‘pp’ and use pp.

Is there a way of accessing a specific key, for example : aws_status ?
If so, how do I do that ?

p @ec2.describe_instances[2][:aws_status]

Now play around with (and read the docs on) Array and Hash!

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs