Primeiro, vamos configurar nosso ambiente de projeto. Todo o nosso trabalho será feito dentro do diretório ~/project.
-
Navegue até o diretório do projeto e crie um subdiretório para nossos arquivos de origem. Esta é uma prática comum para manter seu projeto organizado.
Instale o pacote ansible-core.
sudo dnf install -y ansible-core
Em seguida, navegue até o diretório do projeto e crie um subdiretório para nossos arquivos de origem.
cd ~/project
mkdir files
-
Em seguida, crie um arquivo de texto simples que copiaremos. Usaremos um comando cat com um "here document" para criar o arquivo info.txt dentro do diretório files.
cat << EOF > ~/project/files/info.txt
This file was deployed by Ansible.
It contains important system information.
EOF
-
Agora, crie um arquivo de inventário Ansible. O inventário informa ao Ansible quais hosts gerenciar. Para este laboratório, gerenciaremos a máquina local. Crie um arquivo chamado inventory.ini.
cat << EOF > ~/project/inventory.ini
localhost ansible_connection=local
EOF
Neste inventário, localhost é o host que estamos visando. A variável ansible_connection=local instrui o Ansible a executar as tarefas diretamente no nó de controle, sem usar SSH.
-
Crie seu primeiro playbook Ansible. Este playbook conterá as instruções para copiar o arquivo. Use nano ou cat para criar um arquivo chamado copy_file.yml.
nano ~/project/copy_file.yml
Adicione o seguinte conteúdo ao arquivo. Este playbook define uma tarefa: copiar info.txt para o diretório /tmp/ e definir seus atributos.
---
- name: Deploy a static file to localhost
hosts: localhost
tasks:
- name: Copy info.txt and set attributes
ansible.builtin.copy:
src: files/info.txt
dest: /tmp/info.txt
owner: labex
group: labex
mode: "0640"
Vamos detalhar os parâmetros na tarefa copy:
src: files/info.txt: O caminho para o arquivo de origem no nó de controle, relativo à localização do playbook.
dest: /tmp/info.txt: O caminho absoluto onde o arquivo será colocado no host gerenciado.
owner: labex: Define o proprietário do arquivo como o usuário labex.
group: labex: Define o grupo do arquivo como o grupo labex.
mode: '0640': Define as permissões do arquivo. 0640 significa que o proprietário pode ler/escrever, o grupo pode ler e os outros não têm permissões.
-
Execute o playbook usando o comando ansible-playbook. O sinalizador -i especifica nosso arquivo de inventário.
ansible-playbook -i inventory.ini copy_file.yml
Você deverá ver uma saída indicando a execução bem-sucedida do playbook, semelhante a esta:
PLAY [Deploy a static file to localhost] ***************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Copy info.txt and set attributes] ****************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
-
Finalmente, verifique se o arquivo foi copiado corretamente e possui os atributos corretos. Use o comando ls -l para verificar as permissões, proprietário e grupo.
ls -l /tmp/info.txt
A saída deve mostrar que labex é o proprietário e grupo, e as permissões são -rw-r-----.
-rw-r----- 1 labex labex 72 Jul 10 14:30 /tmp/info.txt
Você também pode visualizar o conteúdo do arquivo para garantir que ele foi copiado completamente.
cat /tmp/info.txt
This file was deployed by Ansible.
It contains important system information.