Puppet sobrescreve o diretório symlinked

1

Estou usando o Puppet para gerenciar as configurações de alguns servidores. Uma das tarefas é criar uma estrutura de pastas específica em /www para hospedar nossos aplicativos.

Mas ultimamente, nós tivemos esse servidor, onde /www é apenas um link simbólico para outro diretório (teve que fazer isso por falta de armazenamento)

$ ls -l /www
lrwxrwxrwx 1 root root 13 Oct 25 15:33 /www -> /storage/www/

E estamos usando isso até agora para gerenciar diretórios:

file { $path:
ensure => directory,
owner  => user,
group  => group,
mode   => 'a=rx,u+w'
}

O problema com esse servidor específico é que, ao executar o Puppet, o link simbólico /www é excluído e o Puppet cria um novo diretório regular em /www . E isso quebra os aplicativos para nós, a menos que intervenhamos manualmente para criar o link simbólico novamente.

Minha pergunta: Alguém sabe de uma maneira que faz Puppet não excluir o link simbólico e apenas tratá-lo como um diretório: Se não existir nenhum diretório /www ou nenhum símbolo /www , crie o diretório /www , senão não faça nada?

    
por Mehdi Yedes 26.10.2016 / 15:41

1 resposta

2

A resposta curta é mudar

file { $path:
    ensure => directory,
    owner  => user,
    group  => group,
    mode   => 'a=rx,u+w'
}

em

file { $path:
    ensure => link,
    target => /path/to/original/directory
    owner  => user,
    group  => group,
    mode   => 'a=rx,u+w'
}

Ao usar ensure => directory , você está dizendo ao boneco que você quer um diretório e que qualquer outra coisa que ele encontrar (como um arquivo ou link simbólico) deve ser clobber e substituir pelo diretório. Ao usar ensure => link , você dirá ao fantoche que deseja um link simbólico que aponte para o valor de target , que, por sua vez, pode ser um diretório, um arquivo ou um dispositivo. Dependendo do que você está fazendo, você pode precisar criar um tipo de arquivo (usando ensure => directory ) no seu alvo, se você precisar de um fantoche para gerenciá-lo.

Recomendamos que você leia a documentação do tipo de arquivo para entender melhor como usá-lo.

Editar:

Para distinguir entre servidores diferentes, você vai querer usar definições individuais de node para seus servidores diferentes. Você pode essencialmente fazer o seguinte para conseguir o que deseja:

node 'server1.mydomain.com' {
    file { $path:
        ensure => directory,
        owner  => user,
        group  => group,
        mode   => 'a=rx,u+w'
    }
}

node 'server2.mydomain.com' {
    file { $path:
        ensure => link,
        target => /path/to/original/directory
        owner  => user,
        group  => group,
        mode   => 'a=rx,u+w'
    }
}
    
por 26.10.2016 / 16:15