Thomas Bellman wrote:
> Allan Marcus wrote:
> 
>> This has probably been discussed, but I would like an exec to only be  
>> executed if a facter variable is true. Seems there are two ways of  
>> doing this, but I can only get the "if" way to work.
>>
>> # $lanl_sav_defdate is a custom fact
>> # make sure the live update file is correct, then force a liveupdate
>> class forceLiveupdate {
>>          if $lanl_sav_defdate == 'February13,2008'{
>>                  # execute the live update command
>>                  exec {"liveupdate-now":
>>                          command => "[long command omited]",
>>                  }
>>          }
>> }
> 
> That is the easiest way.
> 
>> Is this the "right" way of using a conditional, or should I use an  
>> onlyif? Something like this, which doesn't seem to work for me:
>>
>> class forceLiveupdate {
>>        # execute the live update command
>>        exec {"liveupdate-now":
>>              command => "[long command omited]",
>>              onlyif => "match $lanl_sav_defdate == 'February13,2008'",
>>          }
>> }
> 
> The 'onlyif' and 'unless' parameters are shell commands, whose exit status
> determines if the shell command in the 'command' parameter will be run.
> Neither my CentOS, Fedora, Gentoo nor Solaris machines have a command named
> 'match', so that would return non-zero, and your command will not be run.
> 
> A working version would rather use
> 
>       onlyif => "[ '$lanl_sav_defdate' = 'February13,2008' ]"
> 
> However, there are several problems with this.  First of all, you will have
> worse performance, since it will involve a fork() and exec(), which aren't
> the cheapest things one can do.  Second, you have quoting problems; if your
> lanl_sav_defdate happens to contain a single quote, you will have problems.
> (In the upcoming 0.25 there is a function 'shellquote()' which can help you
> with that.)
> 
> On the other hand, if you have requires or subscribes elsewhere that points
> to Exec[liveupdate-now], then those won't work if you wrap the exec in an
> if statement.

There is an easy workaround for the last problem: define an exec with 
/bin/true in the else-branch:

| exec { "liveupdate-now":
|       command => "/bin/true # fake",
| }

This allows one to ignore wether or not the exec is "active".


Regards, DavidS


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/puppet-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to