操り人形で管理されている2つのリソースが互いに依存し(一方は他の1つの親)、両方がありますabsent
。以下のテストケース。ディレクトリはまだ存在しませんが、puppetはそこにファイルを作成することについて文句を言います。このリストを変更するには?
$ find . -type f
./modules/test/manifests/init.pp
./modules/test/files/b/x
./modules/test/files/b/z
./modules/test/files/b/y
./manifests/site.pp
./test.pp
$ cat manifests/site.pp
## site.pp
node default {
include test
}
$ cat modules/test/manifests/init.pp
## init.pp
class test {
file { 'dir1':
ensure => absent,
path => '/tmp/a',
before => File['dir2'],
}
file { 'dir2':
ensure => absent,
path => '/tmp/a/b',
source => 'puppet:///modules/test/b',
force => true,
purge => true,
recurse => true,
}
}
$ puppet apply --modulepath ./modules manifests/site.pp
Notice: Compiled catalog for localhost in environment production in 0.11 seconds
Error: Could not set 'file' on ensure: cannot generate tempfile `/tmp/a/b/z20140523-14751-1qpqnds-9'
Error: Could not set 'file' on ensure: cannot generate tempfile `/tmp/a/b/z20140523-14751-1qpqnds-9'
Wrapped exception:
cannot generate tempfile `/tmp/a/b/z20140523-14751-1qpqnds-9'
Error: /Stage[main]/Test/File[/tmp/a/b/z]/ensure: change from absent to file failed: Could not set 'file' on ensure: cannot generate tempfile `/tmp/a/b/z20140523-14751-1qpqnds-9'
Error: Could not set 'file' on ensure: cannot generate tempfile `/tmp/a/b/y20140523-14751-1bxpkko-9'
Error: Could not set 'file' on ensure: cannot generate tempfile `/tmp/a/b/y20140523-14751-1bxpkko-9'
Wrapped exception:
cannot generate tempfile `/tmp/a/b/y20140523-14751-1bxpkko-9'
Error: /Stage[main]/Test/File[/tmp/a/b/y]/ensure: change from absent to file failed: Could not set 'file' on ensure: cannot generate tempfile `/tmp/a/b/y20140523-14751-1bxpkko-9'
Error: Could not set 'file' on ensure: cannot generate tempfile `/tmp/a/b/x20140523-14751-1u3y3dl-9'
Error: Could not set 'file' on ensure: cannot generate tempfile `/tmp/a/b/x20140523-14751-1u3y3dl-9'
Wrapped exception:
cannot generate tempfile `/tmp/a/b/x20140523-14751-1u3y3dl-9'
Error: /Stage[main]/Test/File[/tmp/a/b/x]/ensure: change from absent to file failed: Could not set 'file' on ensure: cannot generate tempfile `/tmp/a/b/x20140523-14751-1u3y3dl-9'
Notice: Finished catalog run in 0.14 seconds
編集する:
全内容:
## init.pp
class test {
$is_master = false
if $is_master {
$file_ensure = present
$directory_ensure = directory
} else {
$file_ensure = absent
$directory_ensure = absent
}
file { 'dir1':
ensure => $directory_ensure,
path => '/tmp/a',
before => File['dir2'],
}
file { 'dir2':
ensure => $directory_ensure,
path => '/tmp/a/b',
source => 'puppet:///modules/test/b',
force => true,
purge => true,
recurse => true,
}
}
dir1はマスターで失敗するため削除できず、マスターとスレーブの両方で動作する必要があります。
答え1
File['dir2']
リソースを完全に削除し、次File['dir1']
のように変更します。
file { 'dir1':
ensure => absent,
path => '/tmp/a',
recurse => true,
force => true,
}
/tmp/a
コードを使用して削除する前に削除しようとしています/tmp/a/b
。/tmp/a
まず削除すると/tmp/a/b
全く存在しません。あなたは逆順が欲しい。
しかし、これは必要ではありません。削除する場合は、/tmp/a
リソース定義を作成してその中にある内容を削除する理由はありません。