- From:
- To:
- Subject: [chef] Re: Re: knife search help when an attr is not defined
- Date: Thu, 28 Feb 2013 07:47:20 +0000
awesome, thanks. these examples'll help me grok how to craft more searches.
On Wed, 27 Feb 2013, Jesse Nelson wrote:
>
and I suppose if you're trying to get the nodes that have no ec2 data to
>
also print you can search for those specifically or put the ec2 conditional
>
in puts:
>
>
knife exec -E 'search( :node, "*:*" ).each { |n| puts " #{n.name}:
>
#{n.ec2.ami_id if n.has_key? "ec2" } " } '
>
>
tho that looks pretty ugly :)
>
>
-
>
Jesse Nelson
>
>
>
On Wed, Feb 27, 2013 at 11:30 PM, Jesse Nelson
>
<
>
>
wrote:
>
>
> your search is completing but your code is trying to access a key that
>
> doesn't exist while it runs over the results. node.transform is meant to
>
> iterate over a set of nodes and change some attributes. I don't think
>
> thats
>
> what you want to be doing here.
>
>
>
> you can get the list of nodes with ami_id's from knife search:
>
>
>
> knife search node "ec2:ami_id" -a ec2.ami_id
>
>
>
> if you want ones that dont have this attrib you can try doing
>
>
>
> knife search node "*:*" -a ec2.ami_id
>
>
>
> You can see that im using knife search's -a (attribute) to scope the
>
> results and the default output formatter will display the fqdn.
>
>
>
>
>
> If you must use knife exec for this you can do it without using transform.
>
>
>
> knife exec -E 'search( :node, "*:*" ).each { |n| puts "#{n.name}:
>
> #{n.ec2.ami_id}" if n.has_key? "ec2" }'
>
>
>
> -
>
> Jesse Nelson
>
>
>
>
>
>
>
> On Wed, Feb 27, 2013 at 11:04 PM,
>
> <
>
>
> wrote:
>
>
>
>>
>
>> hi. i was trying to list out my nodes and their AMI IDs, but i have a few
>
>> nodes that have no ec2 attribute. they're probably nodes that failed
>
>> their
>
>> first chef run and need to be cleaned out anyway. when the search runs
>
>> into
>
>> a node that has no ec2 attr, the search bails out before it completes
>
>> listing
>
>> everything:
>
>>
>
>> $ knife exec -E 'nodes.transform("*:*") {|n| puts "#{n.name}:
>
>> #{n.ec2.ami_id}" }'
>
>> web1.dev.dsnine.com: ami-xxxxxxxx
>
>> admin2.stg.dsnine.com: ami-xxxxxxxx
>
>> db2.stg.dsnine.com: ami-xxxxxxxx
>
>> web4.dev.dsnine.com: ami-xxxxxxxx
>
>> app1.stg.dsnine.com: ami-xxxxxxxx
>
>> ERROR: ArgumentError: Attribute ec2 is not defined!
>
>>
>
>>
>
>> is there a way to craft the search so the search completes? i tried
>
>> checking
>
>> if n.ec2.nil?, but that didn't help:
>
>>
>
>> $ knife exec -E 'nodes.transform("*:*") {|n| puts "#{n.name}:
>
>> #{n.ec2.ami_id}" if not n.ec2.nil? }'
>
>> web1.dev.dsnine.com: ami-xxxxxxxx
>
>> admin2.stg.dsnine.com: ami-xxxxxxxx
>
>> db2.stg.dsnine.com: ami-xxxxxxxx
>
>> web4.dev.dsnine.com: ami-xxxxxxxx
>
>> app1.stg.dsnine.com: ami-xxxxxxxx
>
>> ERROR: ArgumentError: Attribute ec2 is not defined!
>
>>
>
>> $ knife exec -E 'nodes.transform("*:*") {|n| puts "#{n.name}" if
>
>> n.ec2.nil? }'
>
>> ERROR: ArgumentError: Attribute ec2 is not defined!
>
>>
>
>> thanks,
>
>> kallen
>
>>
>
>>
>
>
Archive powered by MHonArc 2.6.16.