2016-02-24 3 views
0

Мне нужно извлечь значение тега из AWS EC2 с помощью AWS ruby-sdk v2, чтобы получить информацию о экземплярах. Теги устанавливаются вручную по большей части.ruby ​​array of structs

Когда я получаю теги обратно из следующего кода:

ec2 = Aws::EC2::Resource.new(:region => us-east-1) 
ec2.instances.limit(10).each do |instance| 
    instance.tags.each do |tag|  
    puts tag 
    end 
end 

Я вижу:

#<struct Aws::EC2::Types::Tag key="Owner", value="the_owner"> 
#<struct Aws::EC2::Types::Tag key="PurchaseOrder", value="90210"> 
#<struct Aws::EC2::Types::Tag key="Name", value="my_rocking_instance"> 
#<struct Aws::EC2::Types::Tag key="environment", value="staging"> 

#<struct Aws::EC2::Types::Tag key="Name", value="another_instance"> 
#<struct Aws::EC2::Types::Tag key="environment", value="prod"> 
#<struct Aws::EC2::Types::Tag key="PurchaseOrder", value="90210"> 
#<struct Aws::EC2::Types::Tag key="Owner", value="the_owner"> 

и так далее. Для ясности я помещаю пространство между двумя экземплярами. Я пробовал несколько трюков с массивами, хэшами и т. Д., Но это, кажется, массив структур, с которыми я еще не работал.

Как извлечь только значение тега Name?

ответ

4

Подобно

ec2.instances.limit(10).each do |instance| 
    instance.tags.each do |tag|  
    puts tag.value if tag.key == 'Name' 
    end 
end 

Или вы могли бы использовать что-то вроде этого, чтобы вернуть массив значений тегов экземпляра (которые имеют ключевое Имя).

ec2.instances.limit(10).flat_map(&:tags).map{|x| x.value if x.key == 'Name'}.compact 
+0

Отлично. Спасибо @ nabeel-amjad! +1 и бонусные баллы для массива значений тега экземпляра. – thingyhacker

+0

Спасибо, что отработал мой случай –