Gerenciamento Avançado de Arquivos com Ansible
Nesta etapa final, exploraremos algumas técnicas avançadas de gerenciamento de arquivos com Ansible, incluindo permissões de arquivo, criação condicional de arquivos e o uso de múltiplos módulos relacionados a arquivos.
Definindo Permissões e Propriedade de Arquivos
Ao criar arquivos, você frequentemente precisa definir permissões e propriedade específicas. Vamos criar um playbook que demonstra isso:
- Crie um novo arquivo na WebIDE:
- Navegue até o diretório
~/project/ansible-files
- Clique com o botão direito e selecione "New File" (Novo Arquivo)
- Nomeie o arquivo como
file_permissions.yml
- Adicione o seguinte conteúdo:
---
- name: Manage file permissions and ownership
hosts: local
tasks:
- name: Create a script file with execute permissions
copy:
dest: ~/project/script.sh
content: |
#!/bin/bash
echo "This script was created by Ansible"
echo "Current user: $(whoami)"
echo "Current directory: $(pwd)"
mode: "0755"
- name: Create a read-only configuration file
copy:
dest: ~/project/readonly.conf
content: |
## This is a read-only configuration file
setting1 = value1
setting2 = value2
mode: "0444"
Neste playbook:
- O parâmetro
mode
é usado para definir as permissões do arquivo.
0755
significa leitura, escrita e execução para o proprietário, e leitura e execução para o grupo e outros.
0444
significa somente leitura para todos.
- Execute o playbook:
cd ~/project/ansible-files
ansible-playbook file_permissions.yml
Você deverá ver uma saída semelhante a:
PLAY [Manage file permissions and ownership] **********************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Create a script file with execute permissions] **************************
changed: [localhost]
TASK [Create a read-only configuration file] **********************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- Vamos verificar as permissões dos arquivos criados:
ls -l ~/project/script.sh ~/project/readonly.conf
Você deverá ver uma saída semelhante a:
-rwxr-xr-x 1 labex labex 118 Aug 15 12:34 /home/labex/project/script.sh
-r--r--r-- 1 labex labex 73 Aug 15 12:34 /home/labex/project/readonly.conf
- Vamos verificar se o script pode ser executado:
~/project/script.sh
Você deverá ver uma saída semelhante a:
This script was created by Ansible
Current user: labex
Current directory: /home/labex/project/ansible-files
Criação Condicional de Arquivos
Às vezes, você precisa criar arquivos somente quando certas condições são atendidas. Vamos criar um playbook que demonstra a criação condicional de arquivos:
- Crie um novo arquivo na WebIDE:
- Navegue até o diretório
~/project/ansible-files
- Clique com o botão direito e selecione "New File" (Novo Arquivo)
- Nomeie o arquivo como
conditional_file.yml
- Adicione o seguinte conteúdo:
---
- name: Conditional file creation
hosts: local
vars:
environment: "development"
create_debug_file: true
create_backup: false
tasks:
- name: Create environment-specific configuration
copy:
dest: "~/project/{{ environment }}_config.yml"
content: |
## Configuration for {{ environment }} environment
debug: {{ 'enabled' if environment == 'development' else 'disabled' }}
log_level: {{ 'DEBUG' if environment == 'development' else 'INFO' }}
- name: Create debug log file
copy:
dest: ~/project/debug.log
content: |
## Debug log file
## Created: {{ ansible_date_time.iso8601 }}
mode: "0644"
when: create_debug_file
- name: Create backup directory
file:
path: ~/project/backup
state: directory
mode: "0755"
when: create_backup
Neste playbook:
- A diretiva
when
é usada para execução condicional de tarefas.
- Condicionais Jinja2 são usados no conteúdo do arquivo para alterar valores com base em variáveis.
- O módulo
file
é usado para criar um diretório.
- Execute o playbook:
cd ~/project/ansible-files
ansible-playbook conditional_file.yml
Você deverá ver uma saída semelhante a:
PLAY [Conditional file creation] **********************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Create environment-specific configuration] ******************************
changed: [localhost]
TASK [Create debug log file] **************************************************
changed: [localhost]
TASK [Create backup directory] ************************************************
skipped: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=3 changed=2 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
Observe que a tarefa "Create backup directory" (Criar diretório de backup) foi ignorada porque create_backup
foi definido como false
.
- Vamos examinar os arquivos criados:
cat ~/project/development_config.yml
cat ~/project/debug.log
ls -la ~/project/ | grep backup
Você deverá ver o conteúdo dos dois arquivos que foram criados e confirmar que nenhum diretório de backup foi criado.
Usando Múltiplos Módulos Relacionados a Arquivos
O Ansible fornece vários módulos para gerenciamento de arquivos. Vamos criar um playbook que demonstra o uso de múltiplos módulos relacionados a arquivos:
- Crie um novo arquivo na WebIDE:
- Navegue até o diretório
~/project/ansible-files
- Clique com o botão direito e selecione "New File" (Novo Arquivo)
- Nomeie o arquivo como
file_modules.yml
- Adicione o seguinte conteúdo:
---
- name: Demonstrate file-related modules
hosts: local
tasks:
- name: Create a directory
file:
path: ~/project/ansible_demo
state: directory
mode: "0755"
- name: Create a file using the copy module
copy:
dest: ~/project/ansible_demo/copied.txt
content: "This file was created using the copy module.\n"
- name: Create a symbolic link
file:
src: ~/project/ansible_demo/copied.txt
dest: ~/project/ansible_demo/link_to_copied.txt
state: link
- name: Create a file with blockinfile module
blockinfile:
path: ~/project/ansible_demo/block.txt
create: true
block: |
This is a block of text
that will be inserted
as a single unit.
marker: "## {mark} ANSIBLE MANAGED BLOCK"
Neste playbook:
- O módulo
file
é usado com state: directory
para criar um diretório.
- O módulo
file
é usado com state: link
para criar um link simbólico.
- O módulo
blockinfile
é usado para criar um arquivo com um bloco de texto cercado por comentários de marcador.
- Execute o playbook:
cd ~/project/ansible-files
ansible-playbook file_modules.yml
Você deverá ver uma saída semelhante a:
PLAY [Demonstrate file-related modules] ***************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Create a directory] *****************************************************
changed: [localhost]
TASK [Create a file using the copy module] ************************************
changed: [localhost]
TASK [Create a symbolic link] *************************************************
changed: [localhost]
TASK [Create a file with blockinfile module] **********************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=5 changed=4 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- Vamos verificar os resultados:
ls -la ~/project/ansible_demo/
cat ~/project/ansible_demo/copied.txt
cat ~/project/ansible_demo/link_to_copied.txt
cat ~/project/ansible_demo/block.txt
Você deverá ver:
- Um diretório chamado
ansible_demo
- Um arquivo chamado
copied.txt
com o conteúdo especificado
- Um link simbólico chamado
link_to_copied.txt
apontando para copied.txt
- Um arquivo chamado
block.txt
com um bloco de texto cercado por comentários de marcador
A saída do último comando deve ser semelhante a:
## BEGIN ANSIBLE MANAGED BLOCK
This is a block of text
that will be inserted
as a single unit.
## END ANSIBLE MANAGED BLOCK
Isso demonstra a versatilidade dos recursos de gerenciamento de arquivos do Ansible.