Puppetの実行中にのみ存在するはずのpuppetを含むファイルを追加したいと思います。
Puppetの実行中にaptがサービスを開始する(失敗する)のを防ぐために、ファイルがそこにある必要があります。
これは、同じファイルの宣言が重複しているために機能しない、これまでのクラスです。
# Opensips package install
class opensips::package {
case $::osfamily {
'Debian' : {
file { 'opensips-enable-apt-policy':
ensure => 'present',
path => '/usr/sbin/policy-rc.d',
mode => '0755',
content => "#!/bin/sh
echo \"All runlevel operations denied by puppet module ${module_name}\" >&2
exit 101
",
} ->
package { $opensips::opensips_debs: ensure => $opensips::package_ensure, } ->
file { 'opensips-disable-apt-policy':
ensure => 'absent',
path => '/usr/sbin/policy-rc.d',
}
}
default : {
fail("Unsupported OS: ${::osfamily}")
}
}
}
これにより、目的の最終状態がわかりますが、要約すると次のようになります。
/usr/sbin/policy-rc.d
上記の内容でこれを最善/最も簡単な方法で行うにはどうすればよいですか?
エージェントはDebianJessieで、puppetバージョン3.8.1を実行します
ファイル宣言の成功にalias
メタパラメータを設定しようとしました。
残念ながら、これはPuppetが機能するように設計されている方法ではありません。Puppetは、インタラクティブに実行されるスクリプトではなく、既知のシステム状態を強制します。
必要なことを行う1つの方法は、exec
リソースを使用してファイルを追加/削除し、ローカルにデプロイされた「ソース」を使用することです。
例(完全ではない、機能しない可能性があります):
class opensips::package {
file { '/path/to/tmp/file.ext':
ensure => 'present',
mode => '0755',
source => 'puppet:///modules/opensips/myfile',
}
exec { 'deploy_opensips-enable-apt-policy':
command => '/bin/cp /path/to/tmp/file.ext /path/to/real/file.ext',
creates => '/path/to/real/file.ext',
before => Package[$opensips::opensips_debs],
require => File['opensips-enable-apt-policy'],
}
package { $opensips::opensips_debs:
ensure => $opensips::package_ensure,
notify => Exec['remove_opensips-enable-apt-policy'],
}
exec { 'remove_opensips-enable-apt-policy':
command => '/bin/rm /path/to/real/file.ext',
refreshonly => true,
}
}