傀儡的执行[]只忽略?

  • 本文关键字:执行 傀儡 puppet
  • 更新时间 :
  • 英文 :


我遇到了一个非常奇怪的行为与Puppet的Exec类型。

我在一个类中有两个类似的Exec[],都带有onlyif参数,如下所示。问题是Exec['apt-update']总是被执行(即每次Puppet的代理应用它的清单),即使onlyif条件是假的,不像Exec['install-newrelic-apt-key']工作良好。

注意:我的Exec[]的路径($ path)是在这个类之外配置的,所有命令在命令行

中按预期工作
class newrelic::server($license_key) {
  file { "/etc/apt/sources.list.d/newrelic.list":
    ensure  => present,
    content => "deb http://apt.newrelic.com/debian/ newrelic non-free",
  }
  exec { "apt-update":
    command => "aptitude update",
    onlyif  => "test 0 -eq $(dpkg -l | grep -c newrelic-sysmond)",
    require => File['/etc/apt/sources.list.d/newrelic.list'],
  }
  exec { "install-newrelic-apt-key":
    command => "apt-key adv --keyserver hkp://subkeys.pgp.net --recv-keys 548C16BF",
    onlyif  => "test 0 -eq $(apt-key list | grep -c 548C16BF)",
  }
  package { "newrelic-sysmond": 
    ensure  => latest,
    require => [
        Exec["install-newrelic-apt-key"],
        Exec["apt-update"],
    ],
  }
  file { "/etc/newrelic/nrsysmond.cfg":
    ensure  => present,
    content  => template("newrelic/nrsysmond.erb"),
    owner   => "root",
    group   => "newrelic",
    mode    => "0640",
    notify  => Service["newrelic-sysmond"],
  }
  service { "newrelic-sysmond":
    ensure    => running,
    enable    => true,
    hasstatus => true,
    require   => Package["newrelic-sysmond"],
  }
}

*以上代码属于公有领域,请随意使用

我不相信你的onlyif命令会经历你所期望的shell插值。我会尝试切换到unless语句如下:

class newrelic::server($license_key) {
  file { "/etc/apt/sources.list.d/newrelic.list":
    ensure  => present,
    content => "deb http://apt.newrelic.com/debian/ newrelic non-free",
  }
  exec { "apt-update":
    command => "aptitude update",
    unless  => "dpkg -l | grep -c newrelic-sysmond",
    require => File['/etc/apt/sources.list.d/newrelic.list'],
  }
  exec { "install-newrelic-apt-key":
    command => "apt-key adv --keyserver hkp://subkeys.pgp.net --recv-keys 548C16BF",
    unless => "apt-key list | grep -c 548C16BF",
  }
  package { "newrelic-sysmond": 
    ensure  => latest,
    require => [
        Exec["install-newrelic-apt-key"],
        Exec["apt-update"],
    ],
  }
  file { "/etc/newrelic/nrsysmond.cfg":
    ensure  => present,
    content  => template("newrelic/nrsysmond.erb"),
    owner   => "root",
    group   => "newrelic",
    mode    => "0640",
    notify  => Service["newrelic-sysmond"],
  }

实际上清单的一切都是正确的,但是在我重新启动puppet代理进程之后,它只是按预期开始工作。

听起来像是Puppet的bug

最新更新