Muitas vezes, no meu manual do Ansible, preciso criar um arquivo
- name: Copy file
template:
src: code.conf.j2
dest: "{{project_root}}/conf/code.conf"
agora, muitas vezes, conf
dir não está lá. Então eu tenho que criar mais tarefas para criar esse diretório primeiro.
Existe alguma maneira fácil de criar diretório automaticamente se não existir com alguma opção
Respostas:
No momento, esta é a única maneira
fonte
recurse=yes
o comportamento de tipofile
à chamada para obtermkdir -p
dirname
do ansible para obter o diretório que contém o arquivo.Para garantir o sucesso com um caminho completo, use recurse = yes
fonte
recurse=yes
só aplicam as permissões recursivamente. No entanto, a documentação afirma que isso acontece automaticamente desde a v1.7, portanto,recurse
pode estar obsoleto.Se você estiver executando Ansible> = 2.0, há também o filtro dirname que pode ser usado para extrair a parte do diretório de um caminho. Dessa forma, você pode usar apenas uma variável para conter todo o caminho e garantir que as duas tarefas nunca saiam de sincronia.
Então, por exemplo, se você tiver o manual
dest_path
definido em uma variável como esta, você pode reutilizar a mesma variável:fonte
AFAIK, a única maneira que isso poderia ser feito é usando a
state=directory
opção. Embora otemplate
módulo suporte a maioria dascopy
opções, que por sua vez oferece suporte à maioria dasfile
opções, você não pode usar algo semelhantestate=directory
com ele. Além disso, seria bastante confuso (significaria que{{project_root}}/conf/code.conf
é um diretório? Ou significaria que{{project_root}}/conf/
deveria ser criado primeiro.Portanto, não acho que isso seja possível agora sem adicionar uma
file
tarefa anterior .fonte
De acordo com o documento mais recente, quando o estado é definido como diretório, você não precisa usar o parâmetro recurse para criar diretórios pais, o módulo de arquivo cuidará disso.
isso é fácil o suficiente para criar os dados do diretório pai e testar com foo
consulte a descrição do parâmetro - " estado " http://docs.ansible.com/ansible/latest/modules/file_module.html
fonte
você pode criar a pasta usando o seguinte, dependendo da sua versão do ansible.
Última versão 2 <
Versão anterior:
Consulte - http://docs.ansible.com/ansible/latest/file_module.html
fonte
o módulo de cópia cria o diretório se não estiver lá. Neste caso, ele criou o diretório resolvido.conf.d
fonte