O recurso “file” do Puppet esvaziou um diretório

2

Estou na posição um pouco embaraçosa de ter excluído inadvertidamente vários dados importantes da TB via Puppet, e estou apenas tentando entender por que isso pode ter acontecido.

Primeiramente, tenho certeza de que a razão pela qual desapareceu (como no irrecuperável, exceto por meio de backups) é:

File { backup => false }

no meu site.pp. Os nós foram configurados para montar algo através do NFS, então um ponto de montagem / montagem e uma linha no fstab assim:

nfsserver:/mount   /mount  nfs   <options> 0 0

Eu queria me livrar da montaria e substituí-la por um link simbólico para a mesma localização eventual (apesar de um caminho diferente).

Meu manifesto de fantoches ficou assim:

class symlinks::linkdirtest ( ) { 
        file { '/mount':
            ensure => "link",
            target => "/anotherdir/mount",
        }
        mount { "/mount":
            ensure => "absent",
        }
}

Isso gerou o seguinte ao executar uma marionete:

notice: /Stage[main]/Symlinks::Linkdirtest/File[/mount]: Not removing directory; use 'force' to override

Então, eu devidamente (ou estupidamente) adicionei:

class symlinks::linkdirtest ( ) { 
        file { '/mount':
            ensure => "link",
            target => "/anotherdir/mount",
                    force => "true",
        }
....

E eis que, o fantoche procedeu para consignar o conteúdo do monte todo importante para o esquecimento, enquanto o próprio ponto de montagem permaneceu.

Alguma idéia de por que isso aconteceu?

Obrigado

    
por ticktockhouse 04.04.2013 / 17:04

2 respostas

3

Substituiu esse diretório por um link:

link

Em "força":

"Replace directories with files or links"

Para referência futura, você pode tentar executar no modo noop para ver quais alterações serão feitas:

puppet agent --test --debug --noop --show-diff
    
por 04.04.2013 / 21:40
2

Depois de testar as marionetes antes de aplicá-las, lembre-se também de que a ordem em que você escreve seu código de marionete nem sempre é a ordem na qual o fantoche é executado. Neste caso, você deve ter definido o pedido. Você tem que desmontar primeiro antes que o symlinking aconteça. Você poderia ter feito isso da seguinte maneira:

class symlinks::linkdirtest ( ) { 
    file { '/mount':
        ensure => "link",
        target => "/anotherdir/mount",
    }
    mount { "/mount":
        ensure => "absent",
        before => File['/mount'],
    }
}
    
por 07.04.2013 / 11:58