Módulo Ansible Copy

AnsibleBeginner
Pratique Agora

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.

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível iniciante com uma taxa de conclusão de 99%. Recebeu uma taxa de avaliações positivas de 96% dos estudantes.

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 Ansible copy, 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 caminho src está 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!