Mcollective puppet-agent doesn't execute commands from custom facts

90 views
Skip to first unread message

Maxim Nikolaev

unread,
Aug 2, 2014, 2:57:07 PM8/2/14
to puppet...@googlegroups.com
Hello

I met following issue with mcollective puppet agent.

I have custom fact that read tags from AWS cli and transform them to facts.

Facter.add("role") do
  setcode do
  iregion = Facter.value("ec2_region")
  Facter::Util::Resolution.exec("ec2-describe-tags --region #{iregion} -O KEY -W SEC_KEY --filter \"resource-id=$(ec2-metadata -i | cut -d \" \" -f2)\" --filter \"key=Role\" | cut -f5 -")
  end
end


When I run facter from instance aor puppet agent from instance itself - everything working fine.

When I run pupper runnonce from mcollective server - it doesn't read this fact and apply only common manifest.

I checked several times and found, that if I set static file with role and use external fact like:

#!/bin/bash
role=`grep Role /etc/server_facts | awk '{print $NF}'`
echo "role=$role"

Mcollective works fine. If Itry to use AWS cli command in script - again fact doesn't wrk.

Have someone met such problem with mcollective? Can someone advise?

Puppet 3.6.2
Mcollective 2.5.3

José Luis Ledesma

unread,
Aug 2, 2014, 3:48:52 PM8/2/14
to puppet...@googlegroups.com

Hi

Probably mco is not loading you environment variables ( like PATH) and this produces this behavior.

If the ec2-describe-tags commands is not in the usual path, try exec it with the full path in the fact.

Also you can check if the ec2_region fact  is get correctly from mco.

Hth

--
You received this message because you are subscribed to the Google Groups "Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to puppet-users...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/puppet-users/85a8940b-0a4f-4de4-a568-050af439cb00%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Maxim Nikolaev

unread,
Aug 2, 2014, 4:01:58 PM8/2/14
to puppet...@googlegroups.com
Tried also full path with ec2-region hardcoded

/opt/aws/bin/ec2-describe-tags --region us-east-1 -O KEY -W SEC_KEY --filter \"resource-id=$(ec2-metadata -i | cut -d \" \" -f2)\" --filter \"key=Role\" | cut -f5 -")

Created also sh script in /etc/facter/facts.d with same string: when run locally - it's works, when run with mcollective - it's failed.

I also checked with mcollective-facter-facts plugin - it can see these facts.

José Luis Ledesma

unread,
Aug 2, 2014, 4:11:39 PM8/2/14
to puppet...@googlegroups.com

And setting full path for ec2-metadata too?

Maxim Nikolaev

unread,
Aug 2, 2014, 6:03:37 PM8/2/14
to puppet...@googlegroups.com
I've did more checks. I've updated aws api. Now command looks like:
aws ec2 describe-tags --filters "Name=resource-id,Values=<instance_id>" | grep Role | /bin/cut -f5

Custom and external facts with this string still not works. Facter see it's ok, but mcollective - doesn't.

I've created cronjob that run this command and send value to file. Created external fact that cat file and echo "role=$role". Mcollective worked fine.

Maxim Nikolaev

unread,
Aug 2, 2014, 6:06:48 PM8/2/14
to puppet...@googlegroups.com
Example of external fact that not worked:

#!/bin/bash
role=`/usr/bin/aws ec2 describe-tags --filters "Name=resource-id,Values=<instance_id" | grep Role | /bin/cut -f5`
echo "role=$role"

Fact see this, but mcollective doesn't get.


On Saturday, August 2, 2014 9:57:07 PM UTC+3, Maxim Nikolaev wrote:
Reply all
Reply to author
Forward
0 new messages