Puppet の Exec タイプで非常に奇妙な動作が発生しています。
Exec[]
以下に示すように、クラスには 2 つの類似したパラメーターがあり、どちらもonlyif
パラメーターを使用しています。問題はExec['apt-update']
常に実行されます (つまり、Puppet のエージェントがそのマニフェストを適用するたびに)、onlyif
条件が falseの場合でも、Exec['install-newrelic-apt-key']
正常に動作するのとは異なります。
注: myExec[]
のパス ($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"],
}
}
※上記コードはパブリックドメインですので、ご自由にお使いください。