Como você cria um diretório www
no /srv
em um sistema baseado em Debian usando uma cartilha Ansible?
Como você cria um diretório www
no /srv
em um sistema baseado em Debian usando uma cartilha Ansible?
Respostas:
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
all immediate subdirectories
é confuso, você poderia definir isso e dar um exemplo?
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.
recursive
argumento é parecido com o uso mkdir -p
(para aqueles que estão pesquisando o ansible mkdir -p ).
recurse
parâmetro não gosta mkdir -p
. Ele define recursivamente os atributos de arquivo especificados (aplica-se apenas ao estado = diretório). Se state=directory
todos os subdiretórios imediatos serão criados, se não existirem, pois 1.7 serão criados com as permissões fornecidas.
=
caracteres, seria ótimo para atualizá-lo com a :
sintaxe com cada atribute em uma nova linha
chmod -R
. Ou seja, se path
já existe como um dir e há arquivos dentro dele, a recurse
opção (às vezes infelizmente) também aplica essas mesmas permissões aos arquivos. Isso ocorre por design , para melhor ou para pior.
você pode criar usando:
- name: Create Folder
file:
path: /srv/www/
owner: user
group: user
mode: 0755
state: directory
- name: Create Folder
file:
path=/srv/www/
owner=user
group=user
mode=0755
state=directory
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
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.
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
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'
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
Temos módulos disponíveis para criar diretório, arquivo em ansible
Exemplo
- name: Creates directory
file:
path: /src/www
state: directory
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
---
- 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.
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
directory
todos os subdiretórios imediatos serão criados, se não existirem, pois 1.7 serão criados com as permissões fornecidas.
Sefile
, o arquivo NÃO será criado se ele não existir, consulte o módulo [copy] ou [template] se você deseja esse comportamento.
Selink
, o link simbólico será criado ou alterado. Usehard
para hardlinks.
Seabsent
, os diretórios serão excluídos recursivamente e os arquivos ou links simbólicos serão desvinculados.Observe que
file
nã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 comotouch
funciona na linha de comando).
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 !!!
A maneira mais fácil de criar um diretório no Ansible.
OU
Você deseja conceder privilégios de sudo a esse diretório.
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)
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
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
Você quer o file
módulo. Para criar um diretório, você precisa especificar a opção state: directory
:
- name: Creates directory
file:
path: /src/www
state: directory
state=directory
todos os subdiretórios imediatos serão criados se eles não existirem, desde 1.7 eles serão criados com as permissões fornecidas.