Introdução
Neste laboratório, você explorará o módulo Ansible Copy, que permite copiar arquivos e diretórios para hosts remotos. O módulo Copy oferece uma maneira flexível e eficiente de transferir arquivos como parte de suas tarefas de automação Ansible.
Copiar um Arquivo para o Host Remoto
Nesta etapa, você copiará um arquivo da máquina de controle para um host remoto usando o módulo Ansible Copy.
Primeiro, crie um novo arquivo de playbook Ansible chamado /home/labex/project/copy-module-playbook.yaml e abra-o em um editor de texto.
Adicione o seguinte conteúdo ao arquivo do playbook:
- hosts: localhost
tasks:
- name: Copy a file to remote host
copy:
src: /home/labex/file.txt
dest: /home/labex/project/file.txt
copy: Utiliza o módulo Ansiblecopy, que é usado para copiar arquivos do nó de controle (host local) para um host remoto.src: Especifica o caminho do arquivo de origem, indicando o caminho do arquivo a ser copiado no host local.dest: Especifica o caminho do arquivo de destino, indicando para onde o arquivo deve ser copiado no host remoto.
Através desta tarefa do playbook, o arquivo /home/labex/file.txt será copiado para o caminho /home/labex/project/file.txt no host remoto. O módulo Ansible copy facilita o processo de cópia de arquivos de forma eficiente.
Em seguida, crie um arquivo chamado file.txt no diretório /home/labex.
echo "This is the content of the file." > /home/labex/file.txt
Então, execute o playbook usando o seguinte comando:
ansible-playbook copy-module-playbook.yaml
Exemplo de saída:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Copy a file to remote host] **********************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Finalmente, verifique se o arquivo file.txt existe no caminho de destino especificado no host remoto.
cat /home/labex/project/file.txt
Exemplo de saída:
This is the content of the file.
Aqui "This is the content of the file." é o mesmo que o conteúdo do arquivo /home/labex/file.txt, o que significa que o arquivo /home/labex/file.txt foi copiado com sucesso para /home/labex/project/file.txt.
Copiar um Diretório para o Host Remoto
Nesta etapa, você copiará um diretório da máquina de controle para um host remoto usando o módulo Ansible Copy.
Primeiro, modifique o arquivo de playbook existente removendo todo o conteúdo e adicionando o seguinte conteúdo ao arquivo do playbook:
- hosts: localhost
tasks:
- name: Copy a directory to remote host
copy:
src: /home/labex/directory
dest: /home/labex/project/
Com o tipo step1, se src for definido como diretório, esta tarefa do Playbook copia o diretório /home/labex/directory para o caminho /home/labex/project/ no host remoto.
Em seguida, crie um diretório chamado directory no diretório /home/labex e crie um arquivo chamado file2.txt no diretório directory.
mkdir /home/labex/directory
touch /home/labex/directory/file2.txt
Então, execute o playbook usando o seguinte comando:
ansible-playbook copy-module-playbook.yaml
Exemplo de saída:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Copy a directory to remote host] *****************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Finalmente, verifique se o diretório directory e seu conteúdo existem no caminho de destino especificado no host remoto.
tree /home/labex/project
Saída esperada:
/home/labex/project
├── copy-module-playbook.yaml
├── directory
│ └── file2.txt
└── file.txt
1 directory, 3 files
Você pode ver que o directory e o arquivo file2.txt foram copiados com sucesso para o diretório /home/labex/project no host de destino.
Preservar Atributos de Arquivos
Nesta etapa, você aprenderá como preservar atributos de arquivo, como permissões e timestamps, ao usar o módulo Ansible Copy.
Primeiro, modifique o arquivo de playbook existente removendo todo o conteúdo e adicionando o seguinte conteúdo ao arquivo do playbook:
- hosts: localhost
tasks:
- name: Preserve file attributes
copy:
src: /home/labex/file.txt
dest: /tmp/file.txt
mode: preserve
mode: preserve: Este parâmetro preserva o modo (permissões) do arquivo de origem durante o processo de cópia, garantindo que o arquivo de destino mantenha as mesmas permissões que o arquivo de origem.
Através desta tarefa do playbook, o arquivo /home/labex/file.txt será copiado para /tmp/file.txt no host remoto, preservando os atributos do arquivo, como permissões.
Então, execute o playbook usando o seguinte comando:
ansible-playbook copy-module-playbook.yaml
Exemplo de saída:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Preserve file 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 file.txt é copiado para o caminho de destino especificado no host remoto, preservando seus atributos.
Use ll para visualizar os detalhes de /home/labex/file.txt:
ll /home/labex/file.txt
Exemplo de saída:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /home/labex/file.txt
Use ll para visualizar os detalhes de /tmp/file.txt:
ll /tmp/file.txt
Exemplo de saída:
-rw-rw-r-- 1 labex labex 33 Mar 9 09:00 /tmp/file.txt
Este playbook Ansible pode ser usado para preservar padrões de permissão (bits de permissão) e informações do proprietário durante o processo de replicação.
Gerenciar Permissões
Nesta etapa, você explorará como gerenciar permissões de arquivo ao usar o módulo Ansible Copy. Você aprenderá como definir permissões específicas para o arquivo copiado no host remoto.
Primeiro, modifique o arquivo de playbook existente removendo todo o conteúdo e adicionando o seguinte conteúdo ao arquivo do playbook:
- hosts: localhost
tasks:
- name: Handle permissions
copy:
src: /home/labex/file.txt
dest: /tmp/file1.txt
mode: "0644"
mode: Substitua"0644"pelo modo de permissão desejado para o arquivo. Consulte a documentação chmod para obter mais informações sobre modos de permissão.
Através desta tarefa do playbook, o arquivo /home/labex/file.txt será copiado para /tmp/file1.txt no host remoto, com as permissões especificadas de 0644.
Então, execute o playbook usando o seguinte comando:
ansible-playbook copy-module-playbook.yaml
Exemplo de saída:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Handle permissions] ******************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Finalmente, verifique se o arquivo file1.txt é copiado para o caminho de destino especificado no host remoto com as permissões definidas.
Use ll para visualizar os detalhes de /home/labex/file.txt:
ll /home/labex/file.txt
Exemplo de saída:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /home/labex/file.txt
Use ll para visualizar os detalhes de /tmp/file1.txt:
ll /tmp/file1.txt
Exemplo de saída:
-rw-r--r-- 1 labex labex 33 Mar 9 09:11 /tmp/file1.txt
Este playbook Ansible pode ser usado para definir permissões específicas, como leitura, escrita e execução, para o arquivo no host remoto.
Cópia Idempotente
Nesta etapa, você tornará a operação de cópia idempotente usando o módulo Ansible Copy. Você garantirá que o arquivo seja copiado somente se ele não existir no host remoto ou se o arquivo de origem tiver sido alterado.
Primeiro, modifique o arquivo de playbook existente removendo todo o conteúdo e adicionando o seguinte conteúdo ao arquivo do playbook:
- hosts: localhost
tasks:
- name: Idempotent copy
copy:
src: /home/labex/file.txt
dest: /tmp/file2.txt
remote_src: yes
remote_src: yes: Este parâmetro especifica que o caminhosrcestá no host remoto, permitindo que o Ansible transfira arquivos do host remoto para outro local.
Através desta tarefa do playbook, o arquivo /home/labex/file.txt localizado no host remoto será copiado para /tmp/file2.txt no host remoto somente se ele não existir ou se o arquivo de origem tiver sido alterado.
Em seguida, verifique se o arquivo /tmp/file2.txt existe.
ll /tmp/file2.txt
Exemplo de saída:
ls: cannot access '/tmp/file2.txt': No such file or directory
Então, execute o playbook usando o seguinte comando:
ansible-playbook copy-module-playbook.yaml
Exemplo de saída:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Idempotent copy] *********************************************************
changed: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Finalmente, verifique se o arquivo file2.txt é copiado para o caminho de destino especificado no host remoto somente se ele não existir ou se o arquivo de origem tiver sido alterado.
ll /tmp/file2.txt
Exemplo de saída:
-rw-rw-r-- 1 labex labex 33 Mar 9 08:34 /tmp/file2.txt
Neste ponto, execute o playbook novamente.
ansible-playbook copy-module-playbook.yaml
Exemplo de saída:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Idempotent copy] *********************************************************
ok: [localhost]
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Observe que changed=1 se torna changed=0, provando que este playbook Ansible pode perceber que o arquivo só será copiado se ele não existir no host remoto ou se o arquivo de origem tiver sido alterado.
Resumo
Parabéns! Você concluiu com sucesso o laboratório do Módulo Ansible Copy. Você aprendeu como usar o módulo Copy para copiar arquivos e diretórios para hosts remotos, preservar atributos de arquivo, gerenciar permissões e garantir a idempotência.
O módulo Copy é uma ferramenta poderosa para transferir arquivos em suas tarefas de automação Ansible. Ele fornece vários parâmetros para personalizar a operação de cópia com base em seus requisitos.
Agora que você tem um bom entendimento do módulo Copy, pode aproveitar seus recursos em seus playbooks Ansible para gerenciar com eficiência transferências e sincronização de arquivos em toda a sua infraestrutura. Feliz cópia com Ansible!


