Введение
Добро пожаловать в лабораторную работу по модулю Ansible Fetch! В этой лабораторной работе вы познакомитесь с использованием модуля Ansible Fetch. Модуль Fetch позволяет получать файлы с удаленных машин и копировать их на управляющую машину, где выполняется Ansible. Это полезно, когда вам нужно собрать определенные файлы или артефакты с управляемых хостов.
Давайте начнем!
Получение одного файла
На этом шаге вы узнаете, как использовать модуль 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 и его модули, чтобы дополнительно повысить свои навыки автоматизации.
Удачной автоматизации!


