Módulo Fetch do Ansible

AnsibleBeginner
Pratique Agora

Introdução

Bem-vindo ao Laboratório do Módulo Fetch do Ansible! Neste laboratório, você mergulhará no uso do módulo Fetch do Ansible. O módulo Fetch permite que você recupere arquivos de máquinas remotas e os copie para a máquina de controle onde o Ansible está sendo executado. Isso é útil quando você precisa coletar arquivos ou artefatos específicos de seus hosts gerenciados.

Vamos começar!

Obtendo um Único Arquivo

Nesta etapa, você aprenderá como usar o módulo Fetch do Ansible para recuperar um único arquivo de uma máquina remota. Isso o ajudará a entender o uso básico e a sintaxe do módulo.

Primeiro, complete o arquivo /home/labex/project/fetching_a_single_file.yml. Abra-o em um editor de texto e adicione o seguinte conteúdo ao arquivo playbook:

- name: Fetch Module Lab
  hosts: localhost
  gather_facts: false

  tasks:
    - name: Fetch a single file
      fetch:
        src: /home/labex/example/example_1.txt
        dest: /home/labex/project/example_1.txt
        flat: true
  • fetch: Este é o módulo Ansible usado para obter arquivos de hosts remotos.
  • src: Isso especifica o caminho do arquivo no host remoto que precisa ser obtido. Neste exemplo, é /home/labex/example/example_1.txt.
  • dest: Isso especifica o caminho de destino onde o arquivo obtido deve ser armazenado no host local. Neste exemplo, é /home/labex/project/example_1.txt.
  • flat: Este parâmetro controla o comportamento do caminho de destino. Quando definido como true, ele garante que o arquivo obtido seja colocado no diretório de destino sem criar nenhum subdiretório. Isso é útil ao obter um único arquivo e querer manter a estrutura do diretório simples.

O módulo fetch no Ansible é usado para obter arquivos de hosts remotos para o host local. Nesta configuração, ele é usado para obter um arquivo chamado "example_1.txt" do diretório /home/labex/example/ do host remoto e armazená-lo como "example_1.txt" no diretório /home/labex/project/ do host local. O parâmetro flat: true garante que o arquivo obtido seja colocado diretamente no diretório de destino sem nenhum subdiretório.

Em seguida, execute o playbook com o seguinte comando:

ansible-playbook fetching_a_single_file.yml

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 [Fetch Module Lab] **************************************************

TASK [Fetch a single file] *****************************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

Finalmente, verifique se o arquivo example_1.txt foi obtido localmente do host remoto.

ll /home/labex/project/example_1.txt

Exemplo de saída:

-rw-rw-r-- 1 labex labex 23 Mar 14 10:45 /home/labex/project/example_1.txt

Obtendo Múltiplos Arquivos

Nesta etapa, você aprimorará sua compreensão do módulo Fetch obtendo vários arquivos de uma máquina remota. Isso permitirá que você colete vários arquivos em uma única tarefa.

Primeiro, complete o arquivo /home/labex/project/fetching_multiple_files.yml. Abra-o em um editor de texto e adicione o seguinte conteúdo ao arquivo playbook:

- name: Fetch Module Lab
  hosts: localhost
  gather_facts: false

  tasks:
    - name: Fetch multiple files
      loop:
        - example_2.txt
        - example_3.txt
      fetch:
        src: "/home/labex/example/{{ item }}"
        dest: "/home/labex/project/{{ item }}"
        flat: true
  • loop: Esta palavra-chave é usada para iterar sobre uma lista de itens.
  • fetch: Este é o módulo Ansible usado para obter arquivos de hosts remotos.
  • src: Isso especifica o caminho de origem do arquivo a ser obtido. O espaço reservado {{ item }} é substituído por cada item do loop, resultando na obtenção de example_2.txt e example_3.txt do diretório /home/labex/example/.
  • dest: Isso especifica o caminho de destino onde os arquivos obtidos devem ser armazenados. Novamente, o espaço reservado {{ item }} é usado para garantir que cada arquivo seja colocado no diretório correspondente dentro de /home/labex/project/.
  • flat: Este parâmetro controla o comportamento do caminho de destino. Quando definido como true, ele garante que o arquivo obtido seja colocado no diretório de destino sem criar nenhum subdiretório. Isso é útil ao obter um único arquivo e querer manter a estrutura do diretório simples.

Nesta configuração, ele é usado para obter vários arquivos (example_2.txt e example_3.txt) do diretório /home/labex/example/ no host local e armazená-los nos diretórios correspondentes dentro de /home/labex/project/. A construção loop permite iterar sobre uma lista de itens e executar a operação fetch para cada item na lista.

Em seguida, execute o playbook com o seguinte comando:

ansible-playbook fetching_multiple_files.yml

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 [Fetch Module Lab] **************************************************

TASK [Fetch multiple files] ****************************************************
changed: [localhost] => (item=example_2.txt)
changed: [localhost] => (item=example_3.txt)

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Finalmente, verifique se example_2.txt e example_3.txt foram obtidos localmente do host remoto.

ll /home/labex/project/ | grep example

Exemplo de saída:

-rw-rw-r-- 1 labex labex 23 Mar 14 10:45 example_1.txt
-rw-rw-r-- 1 labex labex 23 Mar 14 11:00 example_2.txt
-rw-rw-r-- 1 labex labex 23 Mar 14 11:00 example_3.txt

Usando Variáveis no Módulo Fetch

Nesta etapa, você explorará um uso mais avançado do módulo Fetch do Ansible, incorporando variáveis. Você obterá arquivos com base em valores dinâmicos definidos em seu playbook.

Primeiro, complete o arquivo /home/labex/project/using_variablesin_fetch_modules.yml. Abra-o em um editor de texto e adicione o seguinte conteúdo ao arquivo playbook:

- name: Fetch Module Lab
  hosts: localhost
  gather_facts: false
  vars:
    file_path: "/home/labex/example/example_4.txt"
    dest_path: "/home/labex/project/example_4.txt"

  tasks:
    - name: Fetch files using variables
      fetch:
        src: "{{ file_path }}"
        dest: "{{ dest_path }}"
        flat: true
  • vars: Esta seção permite definir variáveis a serem usadas dentro do playbook.
  • fetch: Este é o módulo Ansible usado para obter arquivos de hosts remotos.
  • src: Isso especifica o caminho de origem do arquivo a ser obtido. Ele usa a variável file_path para fornecer dinamicamente o caminho do arquivo de origem.
  • dest: Isso especifica o caminho de destino onde o arquivo obtido deve ser armazenado. Ele usa a variável dest_path para fornecer dinamicamente o caminho do arquivo de destino.
  • flat: Este parâmetro controla o comportamento do caminho de destino. Quando definido como true, ele garante que o arquivo obtido seja colocado no diretório de destino sem criar nenhum subdiretório. Isso é útil ao obter um único arquivo e querer manter a estrutura do diretório simples.

Nesta configuração, ele é usado para obter um arquivo do caminho do arquivo de origem (variável file_path) no host remoto e armazená-lo no caminho do arquivo de destino (variável dest_path) no nó de controle Ansible local. O uso de variáveis permite a especificação dinâmica de caminhos de arquivo, fornecendo flexibilidade e reutilização no playbook.

Em seguida, execute o playbook com o seguinte comando:

ansible-playbook using_variablesin_fetch_modules.yml

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 [Fetch Module Lab] **************************************************

TASK [Fetch files using variables] *********************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

Em seguida, verifique se o arquivo example_4.txt foi obtido localmente do host remoto.

ll /home/labex/project/example_4.txt

Exemplo de saída:

-rw-rw-r-- 1 labex labex 23 Mar 14 11:16 /home/labex/project/example_4.txt

Finalmente, tente especificar file_path e dest_path com a opção -e:

ansible-playbook using_variablesin_fetch_modules.yml -e file_path="/tmp/example_5.txt" -e dest_path="/tmp/target/example_5.txt"

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 [Fetch Module Lab] **************************************************

TASK [Fetch files using variables] *********************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

Verifique se o arquivo example_5.txt foi obtido localmente do host remoto.

ll /tmp/target/example_5.txt

Exemplo de saída:

-rw-rw-r-- 1 labex labex 23 Mar 14 11:24 /tmp/target/example_5.txt

Resumo

Parabéns por concluir o Lab do Módulo Fetch do Ansible! Neste laboratório, você aprendeu como usar o módulo Fetch do Ansible para recuperar arquivos de máquinas remotas e copiá-los para a máquina de controle. Começando com a obtenção de um único arquivo, você progrediu para obter vários arquivos e incorporar variáveis para a recuperação dinâmica de arquivos.

Ao concluir este laboratório, você adquiriu experiência valiosa no uso do módulo Fetch para coletar arquivos ou artefatos específicos de seus hosts gerenciados. Continue explorando o Ansible e seus módulos para aprimorar ainda mais suas capacidades de automação.

Feliz automação!