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

leucos
fonte
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.

Arbab Nazar
fonte
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

você pode criar usando:

Versão mais recente 2 <

- name: Create Folder
  file: 
    path: /srv/www/
    owner: user 
    group: user 
    mode: 0755 
    state: directory

Versão mais antiga

- name: Create Folder
  file: 
   path=/srv/www/
   owner=user 
   group=user 
   mode=0755 
   state=directory

Consulte - http://docs.ansible.com/ansible/file_module.html

Chathuranga Abeyrathna
fonte
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
user3004224
fonte
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.

qubsup
fonte
7

Você pode criar um diretório. usando

# create a directory if it doesn't exist
- file: path=/src/www state=directory mode=0755

Você também pode consultar http://docs.ansible.com/ansible/file_module.html para obter mais detalhes sobre o diretório e sistema de arquivos.

Ali Warrich
fonte
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
Andrey Bistrinin
fonte
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'
Bhavesh Vasoya
fonte
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`
Mazi
fonte
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

Alexandru Muica
fonte
2

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

Exemplo

- name: Creates directory
  file:
    path: /src/www
    state: directory
Mohd Umar Mubeen
fonte
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
RegexCracker
fonte
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.

Saurabh
fonte
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"
sachin_ur
fonte
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).

Priyanka Bhardwaj
fonte
1

você pode usar o módulo "arquivo" nesse caso, há tantos argumentos que você pode passar para um diretório recém-criado, como proprietário, grupo, local, modo e assim por diante .....

consulte este documento para obter explicações detalhadas sobre o módulo de arquivo ...

https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module

lembre-se de que este módulo não serve apenas para criar o diretório !!!

user11345576
fonte
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'
Muhammad Ahmad
fonte
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)

Kandasamy Murugan
fonte
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 
S.MANDAL
fonte
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
Levon
fonte
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
Devang Radadiya
fonte
-5

aqui é o caminho mais fácil.

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

Ender Wan
fonte
2
isso não é idempotente.
qubsup