Como criar um diretório usando o Ansible


Respostas:


637

Você quer o módulo de arquivo. Para criar um diretório, você precisa especificar a opção state=directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory

Você pode ver outras opções em http://docs.ansible.com/file_module.html


36
Se state=directorytodos os subdiretórios imediatos serão criados se eles não existirem, desde 1.7 eles serão criados com as permissões fornecidas.
Alex #

11
@ Alex all immediate subdirectoriesé confuso, você poderia definir isso e dar um exemplo?
Jamie Jackson

8
@ JamieJackson Há um erro, deve haver "todos os subdiretórios intermediários".
Alex

203

Você pode até estender o módulo de arquivo e até definir o proprietário, grupo e permissão por meio dele. (Ref: documentação do arquivo Ansible )

- name: Creates directory
  file:
    path: /src/www
    state: directory
    owner: www-data
    group: www-data
    mode: 0775

Mesmo, você pode criar os diretórios recursivamente:

- name: Creates directory
  file:
    path: /src/www
    state: directory
    owner: www-data
    group: www-data
    mode: 0775
    recurse: yes

Dessa forma, ele criará os dois diretórios, se eles não existirem.


38
O recursiveargumento é parecido com o uso mkdir -p(para aqueles que estão pesquisando o ansible mkdir -p ).
Micah Elliott

2
Descobri que ele muda permissões de arquivos criança também ... quase como mkdir -p / foo / bar && chmod -R 0775 / foo / bar .. ninguém tem observado isso com Ansible 2.0.0.2
ThePracticalOne

5
O recurseparâmetro não gosta mkdir -p. Ele define recursivamente os atributos de arquivo especificados (aplica-se apenas ao estado = diretório). Se state=directorytodos os subdiretórios imediatos serão criados, se não existirem, pois 1.7 serão criados com as permissões fornecidas.
6806 Alex

11
este usa a sintaxe antiga com =caracteres, seria ótimo para atualizá-lo com a :sintaxe com cada atribute em uma nova linha
ympostor

@ThePracticalOne - Sim ... o uso de "recurse" se comporta exatamente da mesma maneira chmod -R. Ou seja, se pathjá existe como um dir e há arquivos dentro dele, a recurseopção (às vezes infelizmente) também aplica essas mesmas permissões aos arquivos. Isso ocorre por design , para melhor ou para pior.
Dale Anderson


14

O diretório pode ser criado usando apenas o módulo de arquivo, pois o diretório nada mais é do que um arquivo.

# create a directory if it doesn't exist
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: foo
    group: foo

8
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: someone
    group: somegroup

É assim que você também pode definir as permissões, o proprietário e o grupo. Os três últimos parâmetros não são obrigatórios.



7

Além de todas as respostas aqui, existem muitas situações em que você precisa criar mais de um diretório, portanto, é uma boa ideia usar loops em vez de criar tarefas separadas para cada diretório.

- name: Creates directory
  file:
    path: "{{ item }}"
    state: directory
  with_items:
  - /srv/www
  - /dir/foo
  - /dir/bar

3

Só precisa colocar condição para executar tarefas para distribuição específica

- name: Creates directory
  file: path=/src/www state=directory
  when: ansible_distribution == 'Debian'

3

Você pode usar a declaração

- name: webfolder - Creates web folder
  file: path=/srv/www state=directory owner=www-data group=www-data mode=0775`

3

Se você deseja criar um diretório no Windows:

  • nome: Crie a estrutura de diretórios
    win_file:
    caminho: C: \ Temp \ folder \ subfolder>
    estado: diretório


2

Temos módulos disponíveis para criar diretório, arquivo em ansible

Exemplo

- name: Creates directory
  file:
    path: /src/www
    state: directory

1

Você pode executar diretamente o comando e criar diretamente usando ansible

ansible -v targethostname -m shell -a "mkdir /srv/www" -u targetuser

OU

ansible -v targethostname -m file -a "path=/srv/www state=directory" -u targetuser

1
---
- hosts: all
  connection: local
  tasks:
    - name: Creates directory
      file: path=/src/www state=directory

O manual acima criará o diretório www no caminho / src.

Antes de executar o manual acima. Verifique se a conexão do host ansible deve estar configurada,

"localhost ansible_connection = local"

deve estar presente em / etc / ansible / hosts

para mais informações, por favor me avise.


file: caminho = / src / www state = diretório
Saurabh 14/11

1

criar diretório

ansible host_name -m file -a "dest=/home/ansible/vndir state=directory"

1

Use o módulo de arquivo para criar um diretório e obter os detalhes sobre o módulo de arquivo usando o comando "arquivo ansible-doc"

Aqui está uma opção "estado" que explica:

Se directorytodos os subdiretórios imediatos serão criados, se não existirem, pois 1.7 serão criados com as permissões fornecidas.
Se file, o arquivo NÃO será criado se ele não existir, consulte o módulo [copy] ou [template] se você deseja esse comportamento.
Se link, o link simbólico será criado ou alterado. Use hardpara hardlinks.
Se absent, os diretórios serão excluídos recursivamente e os arquivos ou links simbólicos serão desvinculados.

Observe que filenão falhará se o caminho não existir, pois o estado não foi alterado.

Se touch(novo na versão 1.4), um arquivo vazio será criado se o caminho não existir, enquanto um arquivo ou diretório existente receberá tempos atualizados de acesso e modificação de arquivos (semelhante à maneira como touchfunciona na linha de comando).



1

A maneira mais fácil de criar um diretório no Ansible.

  • nome: Crie seu diretório se ele não existir. arquivo: caminho: / etc / your_directory

OU

Você deseja conceder privilégios de sudo a esse diretório.

  • nome: Crie seu diretório se ele não existir. arquivo: caminho: / etc / your_directory mode: '777'

0

Eu vejo muitos exemplos de Playbooks e gostaria de mencionar o exemplo de comandos Adhoc.

$ ansible -i inventário -m arquivo -a "caminho = / tmp / direcory state = diretório (em vez do diretório, podemos mencionar o toque para criar arquivos)


0

Você precisa usar o módulo de arquivo para este caso. Abaixo do manual, você pode usar para sua referência.

    ---
     - hosts: <Your target host group>
       name: play1
       tasks: 
        - name: Create Directory
          files:
           path=/srv/www/
           owner=<Intended User>
           mode=<Intended permission, e.g.: 0750>
           state=directory 

0

Para verificar se o diretório existe e depois executar alguma tarefa (por exemplo, criar diretório), use o seguinte

- name: Check if output directory exists
    stat:
    path: /path/to/output
    register: output_folder

- name: Create output directory if not exists
    file:
    path: /path/to/output
    state: directory
    owner: user
    group: user
    mode: 0775
    when: output_folder.stat.exists == false

0

Você quer o filemódulo. Para criar um diretório, você precisa especificar a opção state: directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory

-5

aqui é o caminho mais fácil.

- name: create dir command: mkdir -p dir dir/a dir/b


2
isso não é idempotente.
qubsup
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.