Введение
Добро пожаловать в лабораторию по Ansible Local Action Module! В этой лаборатории вы познакомитесь с использованием модуля Ansible Local Action. Модуль Local Action позволяет выполнять задачи на управляющем компьютере, где запущен Ansible. Это полезно, когда необходимо выполнить операции локально, например, выполнить команды в оболочке или запустить сценарии.
Давайте начнем!
Локальное выполнение простой команды
В этом шаге вы узнаете, как использовать модуль Ansible Local Action для выполнения простой команды на управляющем компьютере. Это поможет вам понять базовое использование и синтаксис модуля.
Во - первых, заполните файл /home/labex/project/execute_local_command.yml.
Добавьте следующее содержимое в файл playbook:
- name: Выполнение простой команды локально
gather_facts: false
hosts: localhost
tasks:
- name: Вывести сообщение локально
local_action:
module: command
cmd: echo "Hello, World!"
register: result
- name: Отладить вывод
debug:
var: result.stdout
gather_facts: Это указывает, должен ли Ansible собирать факты о целевых узлах. В этом случае он установлен вfalse, что означает, что факты не будут собираться.hosts: Это указывает целевой хост, на котором будет выполняться playbook. В этом случае playbook будет выполняться на локальном хосте, потому что целевой хост —localhost.tasks: Это список задач, которые будут выполняться.local_action: Это указывает, что действие должно быть выполнено локально на управляющем компьютере, где запущен Ansible.module: Это указывает на модуль Ansible, который будет использоваться для действия. В этом случае это модульcommand.cmd: Это сама команда, которая будет выполнена. В этом случае это команда в оболочкеecho "Hello, World!", которая выведет сообщение "Hello, World!" в консоль.register: Это регистрирует вывод команды в переменнуюresultдля последующего использования в playbook.debug: Это модуль Ansible, используемый для вывода отладочной информации.var: Это параметр для модуляdebug, который указывает на переменную, которую нужно отладить. В этом случае этоresult.stdout, которая содержит стандартный вывод команды, выполненной в предыдущей задаче.
Кратко говоря, этот playbook выполняет простую команду echo "Hello, World!" локально на управляющем компьютере, регистрирует вывод и затем выводит вывод с использованием модуля debug.
Затем выведите вывод команды в Ansible playbook.
ansible-playbook /home/labex/project/execute_local_command.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 [Local Action Module Challenge] *******************************************
TASK [Print a message locally] *************************************************
changed: [localhost]
TASK [Debug the output] ********************************************************
ok: [localhost] => {
"result.stdout": "Hello, World!"
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Здесь "result.stdout": "Hello, World!" — это вывод команды echo "Hello, World!".
Выполнение команды с подстановкой переменных
В этом шаге вы углубите свое понимание модуля Local Action, включив подстановку переменных. Это позволит вам динамически изменять выполняемую команду на основе переменных, определенных в вашем playbook.
Во - первых, заполните файл /home/labex/project/execute_command_with_variable_substitution.yml.
Добавьте следующее содержимое в файл playbook:
- name: Выполнение команды с подстановкой переменных
gather_facts: false
hosts: localhost
vars:
message: "Hello, Ansible!"
tasks:
- name: Вывести сообщение с подстановкой переменных
local_action:
module: command
cmd: echo "{{ message }}"
register: result
- name: Отладить вывод
debug:
var: result.stdout
vars: Эта секция используется для определения переменных. В этом playbook определяется переменная с именемmessageсо значением"Hello, Ansible!".local_action: Это указывает, что действие должно быть выполнено локально на управляющем компьютере, где запущен Ansible.module: Это указывает на модуль Ansible, который будет использоваться для действия. В этом случае это модульcommand.cmd: Это сама команда, которая будет выполнена. В этом случае это команда в оболочкеecho "{{ message }}", где{{ message }}заменяется на значение переменнойmessage, определенной ранее.register: Это регистрирует вывод команды в переменнуюresultдля последующего использования в playbook.debug: Это модуль Ansible, используемый для вывода отладочной информации.var: Это параметр для модуляdebug, который указывает на переменную, которую нужно отладить. В этом случае этоresult.stdout, которая содержит стандартный вывод команды, выполненной в предыдущей задаче.
Кратко говоря, этот playbook выполняет команду echo "{{ message }}" локально на управляющем компьютере, где {{ message }} заменяется на значение переменной message, определенной в секции vars. Он регистрирует вывод команды и затем выводит вывод с использованием модуля debug.
Затем выведите вывод команды в Ansible playbook.
ansible-playbook /home/labex/project/execute_command_with_variable_substitution.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 [Local Action Module Challenge] *******************************************
TASK [Print a message with variable substitution] ******************************
changed: [localhost]
TASK [Debug the output] ********************************************************
ok: [localhost] => {
"result.stdout": "Hello, Ansible!"
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Здесь "result.stdout": "Hello, Ansible!" — это вывод команды echo "{{ message }}".
Выполнение сложной локальной операции
В этом шаге вы изучите более сложное использование модуля Ansible Local Action. Вы будете выполнять сценарий в оболочке локально и передавать аргументы сценарию.
Во - первых, заполните файл /home/labex/project/execute_complex_local_action.yml.
Добавьте следующее содержимое в файл playbook:
- name: Выполнение сложной локальной операции
gather_facts: false
hosts: localhost
tasks:
- name: Выполнить сценарий в оболочке с аргументами
local_action:
module: shell
cmd:./script.sh 5 7
register: result
- name: Отладить вывод
debug:
var: result.stdout
local_action: Это указывает, что действие должно быть выполнено локально на управляющем компьютере, где запущен Ansible.module: Это указывает на модуль Ansible, который будет использоваться для действия. В этом случае это модульshell.cmd: Это сама команда в оболочке, которая будет выполнена. В этом случае это./script.sh 5 7, которая выполняет сценарий в оболочке с именемscript.shс аргументами5и7.register: Это регистрирует вывод команды в переменнуюresultдля последующего использования в playbook.debug: Это модуль Ansible, используемый для вывода отладочной информации.var: Это параметр для модуляdebug, который указывает на переменную, которую нужно отладить. В этом случае этоresult.stdout, которая содержит стандартный вывод команды, выполненной в предыдущей задаче.
Кратко говоря, этот playbook выполняет сценарий в оболочке script.sh с аргументами 5 и 7 локально на управляющем компьютере. Он регистрирует вывод сценария и затем выводит вывод с использованием модуля debug.
Советы: Мы подготовили для вас этот сценарий в оболочке, он находится в директории
/home/labex/project/и называетсяscript.sh. Функция этого сценария — вычислить сумму двух параметров.
Затем выведите вывод команды в Ansible playbook.
ansible-playbook /home/labex/project/execute_complex_local_action.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 [Local Action Module Challenge] *******************************************
TASK [Execute a shell script with arguments] ***********************************
changed: [localhost]
TASK [Debug the output] ********************************************************
ok: [localhost] => {
"result.stdout": "The sum of 5 and 7 is 12."
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Здесь "result.stdout": "The sum of 5 and 7 is 12." — это вывод сценария ./script.sh 5 7.
Резюме
Поздравляем с прохождением лаборатории по Ansible Local Action Module! В этой лаборатории вы узнали, как использовать модуль Ansible Local Action для выполнения команд и сценариев локально. Начиная с простого выполнения команд, вы перешли к использованию подстановки переменных и выполнению сложных сценариев в оболочке с аргументами.
Завершив эту лабораторию, вы приобрели ценный опыт в использовании модуля Local Action для задач, которые необходимо выполнять на управляющем компьютере. Продолжайте изучать Ansible и его модули, чтобы дальнейшим образом повысить свои навыки автоматизации.
Удачи в автоматизации!


