Puppet, gerenciando dois recursos de arquivos dependentes?

1

Eu não consigo descobrir como lidar com o caso quando eu tenho 2 recursos gerenciados pelo fantoche, dependendo um do outro (um é pai de outro), e ambos são definidos como absent . Caso de teste abaixo. Os diretórios já não existem, mas os fantoches reclamam de criar arquivos lá. Como consertar este manifesto?

$ 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

EDITAR:

Contexto completo:

## 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,
    }
}

Você não pode remover o dir1, porque ele irá falhar no master, eu preciso fazê-lo funcionar no master e no slave.

    
por fazie 23.05.2014 / 14:32

1 resposta

1

Remova o recurso File['dir2'] completamente e altere File['dir1'] para:

file { 'dir1':
    ensure  => absent,
    path    => '/tmp/a',
    recurse => true,
    force   => true,
}

Com seu código, você está tentando remover /tmp/a antes de remover /tmp/a/b . Se você remover /tmp/a primeiro, então /tmp/a/b não poderá existir. Você quer a ordem inversa.

No entanto, isso nem é necessário. Se você estiver removendo /tmp/a , não há motivos para criar uma definição de recurso para remover qualquer coisa dentro dela.

    
por 23.05.2014 / 15:07

Tags