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 comotrue, 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 deexample_2.txteexample_3.txtdo 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 comotrue, 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ávelfile_pathpara 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áveldest_pathpara fornecer dinamicamente o caminho do arquivo de destino.flat: Este parâmetro controla o comportamento do caminho de destino. Quando definido comotrue, 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!


