꼭두각시로 관리되는 두 개의 리소스가 서로 의존하고(하나는 다른 하나의 부모) 둘 다 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
리소스 정의를 생성하여 그 안에 있는 내용을 삭제할 이유가 없습니다.