Issue #20865 has been updated by Christian Flamm.
Christian Flamm wrote:
> The problem here previously described as "random behavior" ("sometimes"
> unnecessary execution of onlyif-checks ) is at v3.3.0 taking place **every**
> catalog run. While I appreciate the consistency, this is now consistently bad
> and adds unnecessary 15-20 sec (+ almost 100%) to every catalog run
> (referring to our biggest catalog).
... and I'd like to ping for an update.
----------------------------------------
Bug #20865: (Now) consistent unexpected behavior when notifying exec ressources
having "onlyif" parameter set
https://projects.puppetlabs.com/issues/20865#change-97528
* Author: Christian Flamm
* Status: Accepted
* Priority: High
* Assignee:
* Category: transactions
* Target version: 3.x
* Affected Puppet version: 3.3.0
* Keywords: exec onlyif notify
* Branch:
----------------------------------------
Please have a look at this simplified example.
class runtimevariation {
# dummy file ressources that should represent
# some real software deployment
file { '/tmp/software-v1': ensure => present, }
file { '/tmp/software-v2': ensure => present, }
file { '/tmp/software-v3': ensure => present, }
# indicating current version in use
file { '/tmp/current':
ensure => link,
target => '/tmp/software-v2',
require => File['/tmp/software-v2'],
notify => Exec['software.restart'],
}
# whenever link target changes I want to run this - but
# only if the file exists and is executable
exec { 'software.restart':
refreshonly => true,
command => '/tmp/restart/software',
onlyif => '/usr/bin/[ -x /tmp/restart/software ]'
}
}
On the configured machine:
# ll /tmp/
total 0
lrwxrwxrwx 1 root root 16 May 23 08:41 current -> /tmp/software-v2
-rw-r--r-- 1 root root 0 May 23 08:40 software-v1
-rw-r--r-- 1 root root 0 May 23 08:41 software-v2
-rw-r--r-- 1 root root 0 May 23 08:41 software-v3
There are a couple of different '/tmp/software-v*' file resources. There's a
'/tmp/current' link pointing to either one of them. Whenever something about
the link file resource (e.g. target) changes I want to notify the
'software.restart' exec resource to run a command but only if a matching
executable exists.
**My assumption was**: if nothing about the whole catalog/class changes
(particularly the '/tmp/current' link) then the exec resource would never get
notified and so neither the onlyif check nor the command would be run.
**But: the onlyif check does sometimes get run**. I just don't understand when
and why. During the following puppet agent runs nothing about the node's
catalog (only containing class runtimevariation) changes.
# puppet agent --no-daemonize --debug --onetime | grep "/usr/bin/\[ -x "
Debug: Exec[software.restart](provider=posix): Executing check '/usr/bin/[
-x /tmp/restart/software ]'
Debug: Executing '/usr/bin/[ -x /tmp/restart/software ]'
# puppet agent --no-daemonize --debug --onetime | grep "/usr/bin/\[ -x "
nothing!
# puppet agent --no-daemonize --debug --onetime | grep "/usr/bin/\[ -x "
Debug: Exec[software.restart](provider=posix): Executing check '/usr/bin/[
-x /tmp/restart/software ]'
Debug: Executing '/usr/bin/[ -x /tmp/restart/software ]'
# puppet agent --no-daemonize --debug --onetime | grep "/usr/bin/\[ -x "
nothing!
# puppet agent --no-daemonize --debug --onetime | grep "/usr/bin/\[ -x "
nothing!
# puppet agent --no-daemonize --debug --onetime | grep "/usr/bin/\[ -x "
Debug: Exec[software.restart](provider=posix): Executing check '/usr/bin/[
-x /tmp/restart/software ]'
Debug: Executing '/usr/bin/[ -x /tmp/restart/software ]'
# puppet agent --no-daemonize --debug --onetime | grep "/usr/bin/\[ -x "
nothing!
Sometimes the onlyif check does get executed... sometimes not.
This becomes more interessting if you have a bunch of such exec ressources with
(more) expensive onlyif checks. In our setup this makes a difference of 15-20s
vs. 30-35s per catalog run.
--
You have received this notification because you have either subscribed to it,
or are involved in it.
To change your notification preferences, please click here:
http://projects.puppetlabs.com/my/account
--
You received this message because you are subscribed to the Google Groups
"Puppet Bugs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/puppet-bugs.
For more options, visit https://groups.google.com/groups/opt_out.