Модуль отладки Ansible
В этом руководстве мы обсудим что такое модуль отладки Ansible, какие параметры поддерживаются в модуле отладки и, наконец, как использовать модуль отладки с каждым параметром в сборниках сценариев Ansible с примеры в Linux.
Если вы еще не настроили Ansible, обратитесь к следующим руководствам.
- Установка и настройка Ansible в Linux
- Автоматическая установка Ansible Lab с Vagrant и Virtualbox в Linux
Что такое модуль отладки Ansible?
Модуль отладки Ansible используется для печати выражений и переменных при запуске книги воспроизведения. По умолчанию, когда вы запускаете книгу воспроизведения, вы не получаете выходные значения, вместо этого вы получаете статус (например, изменено, проигнорировано и т. д.). Используя модуль отладки, вы можете распечатать любые переменные или выражения. Думайте об этом как о операторе печати на любом языке программирования.
Модуль отладки поддерживает три параметра, перечисленных ниже:
- сообщение
- вар
- Многословие
1. Модуль отладки с параметром Msg
Ниже приведен скелет пьесы, который будет использоваться в этом руководстве. Замените хосты в соответствии с вашей средой.
- name: Working With debug module
hosts: m2
gather_facts: false
Я создал две задачи. В обоих случаях модуль отладки задач принимает аргументы через параметр msg. Единственная разница между обеими задачами заключается в том, что в первой задаче параметр msg присутствует в одной строке с именем модуля debug. Во втором имя модуля задачи и параметр msg выделены в отдельную строку и предназначены.
tasks:
# Module and argument in the same line
- name: First debug
debug: msg="Hello OSTechnix Users"
# Module and argument in separate line
- name: Second debug
debug:
msg: "You are looking at debug module guide"
Вы можете запустить проверку синтаксиса или запустить книгу воспроизведения, используя следующие команды.
ansible-playbook --syntax-check .yml
ansible-playbook .yml
Обе задачи выводят сообщение на консоль во время запуска книги воспроизведения, что можно проверить по следующим выводам задач.
TASK [First debug] ***********************************************************************************************************************************
ok: [rocky.anslab.com] => {
"msg": "Hello OSTechnix Users"
}
TASK [Second debug] **********************************************************************************************************************************
ok: [rocky.anslab.com] => {
"msg": "You are looking at debug module guide"
}
Вы также можете использовать значения списка и словаря для печати в виде сообщения. Синтаксис списка значений и сопоставления словаря будет следующим.
List Line debug messages
- name: List debug messages
debug:
msg:
- India
- Australia
- Japan
# Dictionary debug messages
- name: Dict debug messages
debug:
msg:
Country: India
State: TN
Посмотрите на результат ниже. Вы можете видеть, что выходные данные печатаются с синтаксическим представлением списка и словаря Python.
TASK [List debug messages] ***************************************************************************************************************************
ok: [rocky.anslab.com] => {
"msg": [
"India",
"Australia",
"Japan"
]
}
TASK [Dict debug messages] ***************************************************************************************************************************
ok: [rocky.anslab.com] => {
"msg": {
"Country": "India",
"State": "TN"
}
}
Вы также можете распечатать значения переменных, используя параметр msg. Если вы посмотрите на задачу ниже, я создал две переменные с именами UBUNTU_VERSION и RELEASE. Я печатаю оба значения переменных, используя параметр msg.
- name: Printing variable
vars:
UBUNTU_VERSION: 22.04
RELEASE: APRIL 2022
debug:
# msg: {{ UBUNTU_VERSION }} Latest version of Ubuntu is {{ UBUNTU_VERSION }} and it is releasing on {{ RELEASE }}
msg: "{{ UBUNTU_VERSION }}"
Выход:
TASK [Printing variable] *****************************************************************************************************************************
ok: [rocky.anslab.com] => {
"msg": "Latest version of Ubuntu is 22.04 and it is releasing on APRIL 2022"
}
Важный момент, на который следует обратить внимание: если имя переменной стоит в качестве первого слова, вам следует заключить всю строку в двойные кавычки. Всегда рекомендуется использовать двойные кавычки при работе с параметром msg.
msg: {{ UBUNTU_VERSION }} is releasing on {{ RELEASE }} # WILL FAIL
msg: "{{ UBUNTU_VERSION }} is releasing on {{ RELEASE }}" # ENCLOSED IN QUOTES
2. Модуль отладки с параметром Var
Если вы хотите напечатать только переменную без каких-либо строк, как мы это делали в последнем разделе, вы можете использовать параметр var и передать имя переменной в качестве аргумента.
При использовании модуля msg
вам следует использовать двойные фигурные скобки для печати значения переменной. Но с помощью параметра var вы можете просто передать имя переменной без каких-либо фигурных скобок и кавычек.
- name: Printing variable
vars:
UBUNTU_VERSION: 22.04
debug:
var: UBUNTU_VERSION
Выход:
TASK [Using Var] *************************************************************************************************************************************
ok: [rocky.anslab.com] => {
"UBUNTU_VERSION": 22.04
}
3. Модуль отладки с параметром детализации
Ansible поддерживает четыре уровня детализации. По умолчанию уровень детализации установлен на ноль. Чтобы распечатать сообщения, вам необходимо увеличить детализацию, используя флаг -v
.
ansible all -m shell -a "uptime" -v # LEVEL 1
ansible all -m shell -a "uptime" -vv # LEVEL 2
ansible all -m shell -a "uptime" -vvv # LEVEL 3
ansible all -m shell -a "uptime" -vvvv # LEVEL 4
При запуске плейбука вы можете установить уровень детализации задачи с помощью модуля отладки. В этом случае вы не увидите вывод отладочного сообщения в терминале, если не используете флаг -v
при запуске плейбука.
- name: Printing variable
vars:
UBUNTU_VERSION: 22.04
RELEASE: APRIL 2022
debug:
var: UBUNTU_VERSION
verbosity: 2
В приведенной выше задаче я установил уровень детализации на два. Взгляните на выходные данные ниже: вы можете видеть, что выходные данные печатаются как «пропускающие» для этой задачи.
ansible-playbook <playbook.yml>
TASK [Printing variable] *****************************************************************************************************************************
skipping: [rocky.anslab.com]
Вы можете передать флаг -v
в свою книгу воспроизведения. Он укажет причину пропуска.
ansible-playbook <playbook.yml> -v
TASK [Printing variable] *****************************************************************************************************************************
skipping: [rocky.anslab.com] => {"skipped_reason": "Verbosity threshold not met."}
Поскольку я установил уровень детализации равным двум, мне нужно использовать флаг -vv
для печати сообщений. Аналогично, в зависимости от уровня детализации, который вы установили в задаче, вы должны использовать соответствующий уровень флага -v
при запуске книги воспроизведения.
ansible-playbook <playbook.yml> -vv
TASK [Printing variable] *****************************************************************************************************************************
task path: /home/vagrant/ansible_lab/vagrant_lab_sync/playbooks/2_debug_module/debug_with_verbosity.yml:8
ok: [rocky.anslab.com] => {
"msg": "Latest version of Ubuntu is 22.04 and it is releasing on APRIL 2022"
}
META: ran handlers
META: ran handlers
Заключение
В этом руководстве мы рассмотрели, что такое Модуль отладки Ansible, как он работает и как использовать модуль отладки в Ansible, с соответствующими примерами.