人形、2つの依存ファイルリソースを管理しますか?

人形、2つの依存ファイルリソースを管理しますか?

操り人形で管理されている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リソース定義を作成してその中にある内容を削除する理由はありません。

関連情報