Модуль Ansible Fetch

AnsibleAnsibleBeginner

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

Добро пожаловать в лабораторную работу по модулю Ansible Fetch! В этой лабораторной работе вы познакомитесь с использованием модуля Ansible Fetch. Модуль Fetch позволяет получать файлы с удаленных машин и копировать их на управляющую машину, где выполняется Ansible. Это полезно, когда вам нужно собрать определенные файлы или артефакты с управляемых хостов.

Давайте начнем!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/PlaybookEssentialsGroup(["Playbook Essentials"]) ansible(("Ansible")) -.-> ansible/ModuleOperationsGroup(["Module Operations"]) ansible/ModuleOperationsGroup -.-> ansible/fetch("Retrieve Files") ansible/ModuleOperationsGroup -.-> ansible/file("Manage Files/Directories") ansible/ModuleOperationsGroup -.-> ansible/template("Generate Files from Templates") ansible/PlaybookEssentialsGroup -.-> ansible/loop("Iteration") ansible/PlaybookEssentialsGroup -.-> ansible/playbook("Execute Playbook") subgraph Lab Skills ansible/fetch -.-> lab-290159{{"Модуль Ansible Fetch"}} ansible/file -.-> lab-290159{{"Модуль Ansible Fetch"}} ansible/template -.-> lab-290159{{"Модуль Ansible Fetch"}} ansible/loop -.-> lab-290159{{"Модуль Ansible Fetch"}} ansible/playbook -.-> lab-290159{{"Модуль Ansible Fetch"}} end

Получение одного файла

На этом шаге вы узнаете, как использовать модуль Ansible Fetch для получения одного файла с удаленной машины. Это поможет вам понять базовое использование и синтаксис модуля.

Сначала заполните файл /home/labex/project/fetching_a_single_file.yml.
Откройте его в текстовом редакторе и добавьте следующее содержимое в файл плейбука:

- 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: Это модуль Ansible, используемый для получения файлов с удаленных хостов.
  • src: Это указывает путь к файлу на удаленном хосте, который нужно получить. В этом примере это /home/labex/example/example_1.txt.
  • dest: Это указывает путь назначения, где полученный файл должен быть сохранен на локальном хосте. В этом примере это /home/labex/project/example_1.txt.
  • flat: Этот параметр контролирует поведение пути назначения. Когда он установлен в true, он гарантирует, что полученный файл будет помещен в целевую директорию без создания поддиректорий. Это полезно при получении одного файла и желании сохранить простую структуру директорий.

Модуль fetch в Ansible используется для получения файлов с удаленных хостов на локальный хост. В этой конфигурации он используется для получения файла с именем "example_1.txt" из директории /home/labex/example/ удаленного хоста и сохранения его как "example_1.txt" в директории /home/labex/project/ локального хоста. Параметр flat: true гарантирует, что полученный файл будет помещен непосредственно в целевую директорию без поддиректорий.

Затем запустите плейбук с помощью следующей команды:

ansible-playbook fetching_a_single_file.yml

Пример вывода:

[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

Наконец, убедитесь, что файл example_1.txt был получен локально с удаленного хоста.

ll /home/labex/project/example_1.txt

Пример вывода:

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

Получение нескольких файлов

На этом шаге вы углубите свое понимание модуля Fetch, получая несколько файлов с удаленной машины. Это позволит вам собрать несколько файлов в одной задаче.

Сначала заполните файл /home/labex/project/fetching_multiple_files.yml.
Откройте его в текстовом редакторе и добавьте следующее содержимое в файл плейбука:

- 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: Это ключевое слово используется для итерации по списку элементов.
  • fetch: Это модуль Ansible, используемый для получения файлов с удаленных хостов.
  • src: Это указывает исходный путь файла, который нужно получить. Заполнитель {{ item }} заменяется каждым элементом из цикла, в результате чего получаются файлы example_2.txt и example_3.txt из директории /home/labex/example/.
  • dest: Это указывает путь назначения, где должны быть сохранены полученные файлы. Опять же, используется заполнитель {{ item }}, чтобы каждый файл был помещен в соответствующую директорию в /home/labex/project/.
  • flat: Этот параметр контролирует поведение пути назначения. Когда он установлен в true, он гарантирует, что полученный файл будет помещен в целевую директорию без создания поддиректорий. Это полезно при получении одного файла и желании сохранить простую структуру директорий.

В этой конфигурации модуль используется для получения нескольких файлов (example_2.txt и example_3.txt) из директории /home/labex/example/ на локальном хосте и сохранения их в соответствующих директориях в /home/labex/project/. Конструкция loop позволяет итерироваться по списку элементов и выполнять операцию получения для каждого элемента в списке.

Затем запустите плейбук с помощью следующей команды:

ansible-playbook fetching_multiple_files.yml

Пример вывода:

[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

Наконец, убедитесь, что файлы example_2.txt и example_3.txt были получены локально с удаленного хоста.

ll /home/labex/project/ | grep example

Пример вывода:

-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

Использование переменных в модуле Fetch

На этом шаге вы познакомитесь с более продвинутым использованием модуля Ansible Fetch, включив переменные. Вы будете получать файлы на основе динамических значений, определенных в вашем плейбуке.

Сначала заполните файл /home/labex/project/using_variablesin_fetch_modules.yml.
Откройте его в текстовом редакторе и добавьте следующее содержимое в файл плейбука:

- 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: В этом разделе можно определить переменные, которые будут использоваться в рамках плейбука.
  • fetch: Это модуль Ansible, используемый для получения файлов с удаленных хостов.
  • src: Это указывает исходный путь файла, который нужно получить. Он использует переменную file_path для динамического предоставления пути к исходному файлу.
  • dest: Это указывает путь назначения, где должен быть сохранен полученный файл. Он использует переменную dest_path для динамического предоставления пути к целевому файлу.
  • flat: Этот параметр контролирует поведение пути назначения. Когда он установлен в true, он гарантирует, что полученный файл будет помещен в целевую директорию без создания поддиректорий. Это полезно при получении одного файла и желании сохранить простую структуру директорий.

В этой конфигурации модуль используется для получения файла из исходного пути (переменная file_path) на удаленном хосте и сохранения его в целевом пути (переменная dest_path) на локальном узле управления Ansible. Использование переменных позволяет динамически задавать пути к файлам, обеспечивая гибкость и повторное использование в плейбуке.

Затем запустите плейбук с помощью следующей команды:

ansible-playbook using_variablesin_fetch_modules.yml

Пример вывода:

[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

Далее, убедитесь, что файл example_4.txt был получен локально с удаленного хоста.

ll /home/labex/project/example_4.txt

Пример вывода:

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

Наконец, попробуйте указать file_path и dest_path с помощью опции -e:

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

Пример вывода:

[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

Убедитесь, что файл example_5.txt был получен локально с удаленного хоста.

ll /tmp/target/example_5.txt

Пример вывода:

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

Итог

Поздравляем вас с успешным завершением лабораторной работы по модулю Ansible Fetch! В этой лабораторной работе вы научились использовать модуль Ansible Fetch для получения файлов с удаленных машин и копирования их на управляющую машину. Начиная с получения одного файла, вы перешли к получению нескольких файлов и использованию переменных для динамического получения файлов.

Завершив эту лабораторную работу, вы приобрели ценный опыт в использовании модуля Fetch для сбора определенных файлов или артефактов с управляемых хостов. Продолжайте изучать Ansible и его модули, чтобы дополнительно повысить свои навыки автоматизации.

Удачной автоматизации!