Модуль Ansible Local Action

AnsibleAnsibleBeginner
Практиковаться сейчас

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

Введение

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

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/ModuleOperationsGroup(["Module Operations"]) ansible(("Ansible")) -.-> ansible/AnsibleSetupandConfigurationGroup(["Ansible Setup and Configuration"]) ansible/AnsibleSetupandConfigurationGroup -.-> ansible/local_action("Delegate Action Locally") ansible/ModuleOperationsGroup -.-> ansible/command("Execute Commands") ansible/ModuleOperationsGroup -.-> ansible/debug("Test Output") ansible/ModuleOperationsGroup -.-> ansible/shell("Execute Shell Commands") subgraph Lab Skills ansible/local_action -.-> lab-290189{{"Модуль Ansible Local Action"}} ansible/command -.-> lab-290189{{"Модуль Ansible Local Action"}} ansible/debug -.-> lab-290189{{"Модуль Ansible Local Action"}} ansible/shell -.-> lab-290189{{"Модуль Ansible Local Action"}} end

Выполнение простой команды локально

В этом шаге вы узнаете, как использовать модуль 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 и его модули, чтобы дальнейшим образом повысить свои навыки автоматизации.

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