Ansible é uma das melhores ferramentas de automação disponíveis, oferecendo ferramentas simples, intuitivas e poderosas para realizar tarefas de automação no mundo moderno.
Para a maioria das tarefas de automação, você precisará criar diretórios, especialmente ao instalar várias ferramentas e aplicativos, backups e restaurações. Embora você possa executar essas tarefas usando um script automatizado, o Ansible oferece uma funcionalidade melhor, permitindo que você crie diretórios em hosts específicos.
Este tutorial mostra como usar o módulo de arquivo Ansible para criar, remover e modificar permissões de diretório para hosts especificados.
Como criar um diretório no Ansible
Qualquer um dos métodos a seguir pode ser usado para criar um diretório no Ansible:
- Um comando Ansible bruto com o módulo de comando
- Um módulo de arquivo em um manual do Ansible
Para criar um diretório no Ansible usando o módulo de comando, digite o comando mostrado abaixo:
$ ansible all -m command -a "mkdir ~ / backups"Depois de inserir o comando acima, você deve obter a saída mostrada abaixo:
Digite a senha para a chave '/ home / user /.ssh / id_rsa ':[AVISO]: Considere usar o módulo de arquivo com state = directory em vez de executar 'mkdir'. Se você precisa usar o comando porque o arquivo é insuficiente, você pode adicionar 'warn: false' a esta tarefa de comando ou definir 'command_warnings = False' no ansible.cfg para se livrar desta mensagem.
35.222.210.12 ALTERADO | rc = 0 >>
Verifique se o seu inventário de hosts Ansible em / etc / ansible / hosts contém as informações corretas sobre seus hosts remotos.
Embora o módulo de comando seja simples de usar em um único host Ansible, ele se torna muito ineficiente ao lidar com vários hosts com diferentes diretórios e tarefas.
Para evitar esta desvantagem, usaremos o módulo de arquivo Ansible e construiremos um manual contendo os hosts que desejamos usar e os diretórios que desejamos criar.
NOTA: O módulo de arquivo também pode ser usado como um único comando no Ansible, mas funciona de forma muito semelhante ao módulo de comando.
Para usar um manual do Ansible, crie um arquivo YAML e insira as seguintes entradas para criar um diretório:
- hosts: todas as tarefas:- nome: diretório de criação de módulo de arquivo compatível
Arquivo:
caminho: ~ / backups
estado: diretório
Salve o arquivo e use o ansible-playbook para criar os diretórios:
ansible-playbook mkdir.ymlIsso deve produzir uma saída como a abaixo, indicando que as ações foram realizadas com sucesso usando o arquivo de manual especificado.
PLAY [all] ********************************************** *************************************************** *************TAREFA [Coleta de fatos] ********************************************** *************************************************** **
Digite a senha para a chave '/ home / user /.ssh / id_rsa ':
ok: [35.222.210.12]
TAREFA [diretório de criação de módulo de arquivo Ansible] ****************************************** **********************************
ok: [35.222.210.12]
PLAY RECAP ************************************************ *************************************************** ***********
35.222.210.12: ok = 2 alterado = 0 inacessível = 0 falhou = 0 ignorado = 0 resgatado = 0 ignorado = 0
Como criar vários diretórios com itens
Os manuais do Ansible também permitem que você crie vários diretórios usando a instrução with_items no arquivo YAML.
Por exemplo, para criar backups para os três serviços, MySQL, repositório e configuração, você pode construir a tarefa mostrada no arquivo YAML abaixo:
- hosts: todas as tarefas:- nome: Ansible criar vários diretórios with_items
Arquivo:
caminho: ~ / backups / item
estado: diretório
with_items:
- 'mysql'
- 'repositório'
- 'config'
Salve o arquivo acima e execute-o com ansible-playbook.
$ ansible-playbook mkdir_multi.yml PLAY [all] ********************************************* *************************************************** ************************************************** *************************************************** ***TAREFA [Coleta de fatos] ********************************************** *************************************************** ************************************************** *******************************************
Digite a senha para a chave '/ home / user /.ssh / id_rsa ':
ok: [35.222.210.12]
TAREFA [Ansible criar vários diretórios with_items] ****************************************** *************************************************** *************************************************** *************
mudou: [35.222.210.12] => (item = mysql)
mudou: [35.222.210.12] => (item = repositório)
mudou: [35.222.210.12] => (item = config)
REPRODUZIR ************************************************ *************************************************** *************************************************** ***************************************************
35.222.210.12: ok = 2 alterado = 1 inacessível = 0 falhou = 0 ignorado = 0 resgatado = 0 ignorado = 0
O manual acima deve criar vários diretórios, como ~ / backups / mysql, ~ / backups / repository e ~ / backups / config.
$ ls -laA saída da lista de diretórios é mostrada abaixo:
total 0drwxrwxr-x. 5 debian debian 51 6 de março, 17:26 .
drwx------. 6 debian debian 117 6 de março 17: 26 ..
drwxrwxr-x. 2 debian debian 6 mar 6 17:26 config
drwxrwxr-x. 2 debian debian 6 mar 6 17:26 mysql
drwxrwxr-x. 2 debian debian 6 mar 6 17:26 repositório
Como definir permissões para um diretório
Ansible permite que você especifique permissões para um diretório usando a diretiva de modo. Considere o seguinte manual, que cria um diretório e define permissões:
- hosts: todostarefas:
- nome: Ansible criar diretório e definir permissões
Arquivo:
caminho: / backups
estado: diretório
modo: "u = rw, g = wx, o = rwx"
tornar-se: sim
Na entrada acima, criamos um diretório em /. Também precisávamos nos tornar root, daí a entrada tornar-se: sim.
permissão $ ansible-playbook.yml PLAY [all] ********************************************* ************************************************** ************************************************** ************************************************** ***TAREFA [Coleta de fatos] ********************************************** *************************************************** ************************************************** *******************************************
Digite a senha para a chave '/ home / user /.ssh / id_rsa ':
ok: [35.222.210.12]
TAREFA [Ansible criar diretório e definir permissões] ****************************************** *************************************************** *************************************************** ****************
mudou: [35.222.210.12]
PLAY RECAP ************************************************ ************************************************** *************************************************** ***************************************************
35.222.210.12: ok = 2 alterado = 1 inacessível = 0 falhou = 0 ignorado = 0 resgatado = 0 ignorado = 0
Se você visualizar as permissões do diretório que criamos, verá o seguinte:
$ ls -lrt / | grep backupsO resultado é mostrado abaixo:
drw - wxrwx. 2 root root 6 de março 17:36 backupsComo alterar permissões recursivamente em um diretório
Para alterar as permissões de um diretório e seus arquivos recursivamente, basta especificar a entrada recursiva, conforme mostrado abaixo:
- hosts: todostarefas:
- nome: Ansible criar diretório e definir permissões
Arquivo:
caminho: / backups
estado: diretório
modo: "u = rw, g = wx, o = rwx"
recursivo: sim
tornar-se: sim
Como definir permissões em vários diretórios
Configurar permissões para vários diretórios no Ansible também é tão simples quanto algumas linhas de entradas. Considere o seguinte manual.
- hosts: todostarefas:
- nome: Ansible criar um diretório múltiplo com permissões
Arquivo:
caminho: "item.caminho "
modo: "item.modo"
estado: diretório
with_items:
- caminho: '~ / backups / mysql', modo: '0777'
- caminho: '~ / backups / repositório', modo: '0755'
- caminho: '~ / backups / config', modo: '0707'
Como excluir um diretório no Ansible
Para remover um diretório e todo o seu conteúdo usando um manual do Ansible, especifique o estado como ausente, conforme mostrado abaixo:
- hosts: todostarefas:
- nome: Ansible delete diretório
Arquivo:
caminho: / backups
estado: ausente
tornar-se: sim
Este comando irá remover o diretório e todos os arquivos filhos e diretórios.
NOTA: Certifique-se de ter permissões para o diretório em que está trabalhando.
Como criar um diretório com carimbo de data / hora
Em alguns casos, pode ser necessário criar um diretório com um carimbo de data / hora anexado, o que pode ser muito útil, especialmente ao criar backups. Para criar um diretório com carimbo de data / hora, podemos usar a variável ansible_date_time.
Considere o seguinte manual:
- hosts: todostarefas:
- nome: Ansible adicionar carimbo de data / hora ao diretório
Arquivo:
caminho: "/ backups / mysql ansible_date_time.data"
estado: diretório
modo: "0777"
tornar-se: sim
Depois de executar o manual, você terá um diretório com o carimbo de data / hora.
$ ls -lA listagem do diretório deve ser conforme mostrado abaixo:
total 0 drwxrwxrwx. 2 root 6 de março 18:03 mysql2021-03-06NOTA: Para evitar erros, sempre verifique a sintaxe do arquivo YAML que você pretende usar no Ansible.
Conclusão
Este tutorial mostrou que trabalhar com módulos Ansible é muito fácil e intuitivo, tornando a automatização de tarefas complexas mais simples. Usando o módulo de arquivo Ansible, você pode criar um ou mais diretórios e adicionar permissões para cada um. Você também pode usar o mesmo módulo para remover um diretório. Para obter mais informações sobre como usar o módulo de arquivo Ansible, verifique a documentação oficial na página de recursos.