Переменные в playbooks очень похожи на использование переменных в любом языке программирования. Это поможет вам использовать и назначить значение переменной и использовать ее в любом месте книги. Можно поставить условия вокруг значения переменных и соответственно использовать их в сборнике игр.
пример
- hosts : <your hosts> vars: tomcat_port : 8080
В вышеприведенном примере мы определили имя переменной tomcat_port и присвоили значение 8080 этой переменной и можем использовать ее в вашей книге воспроизведения, где это необходимо.
Теперь, взяв ссылку из примера, поделился. Следующий код принадлежит одной из ролей (install-tomcat) —
block: - name: Install Tomcat artifacts action: > yum name = "demo-tomcat-1" state = present register: Output always: - debug: msg: - "Install Tomcat artifacts task ended with message: {{Output}}" - "Installed Tomcat artifacts - {{Output.changed}}"
Здесь выводом является используемая переменная.
Давайте пройдемся по всем ключевым словам, использованным в приведенном выше коде —
-
block — Доступный синтаксис для выполнения данного блока.
-
name — Соответствующее имя блока — это используется при ведении журнала и помогает в отладке того, все блоки которого были успешно выполнены.
-
action — код рядом с тегом action — это задача, которая должна быть выполнена. Действие снова является ключевым словом Ansible, используемым в yaml.
-
register — Выходные данные действия регистрируются с использованием ключевого слова register, а Output — это имя переменной, которая содержит выходные данные действия.
-
always — снова ключевое слово Ansible, оно указывает, что ниже всегда будет выполняться
-
msg — отображает сообщение
block — Доступный синтаксис для выполнения данного блока.
name — Соответствующее имя блока — это используется при ведении журнала и помогает в отладке того, все блоки которого были успешно выполнены.
action — код рядом с тегом action — это задача, которая должна быть выполнена. Действие снова является ключевым словом Ansible, используемым в yaml.
register — Выходные данные действия регистрируются с использованием ключевого слова register, а Output — это имя переменной, которая содержит выходные данные действия.
always — снова ключевое слово Ansible, оно указывает, что ниже всегда будет выполняться
msg — отображает сообщение
Использование переменной — {{Output}} ->
Это будет читать значение переменной Output. Кроме того, поскольку он используется на вкладке msg, он напечатает значение выходной переменной.
Кроме того, вы также можете использовать вложенные свойства переменной. Как в случае с проверкой {{Output.changed}}, изменился ли вывод, и, соответственно, использовать его.
Обработка исключений в Playbooks
Обработка исключений в Ansible похожа на обработку исключений в любом языке программирования. Пример обработки исключений в playbook показан ниже.
tasks: - name: Name of the task to be executed block: - debug: msg = 'Just a debug message , relevant for logging' - command: <the command to execute> rescue: - debug: msg = 'There was an exception.. ' - command: <Rescue mechanism for the above exception occurred) always: - debug: msg = "this will execute in all scenarios. Always will get logged"
Ниже приводится синтаксис для обработки исключений.
-
спасение и всегда являются ключевыми словами, специфичными для обработки исключений.
-
Блок — это место, где написан код (все, что должно быть выполнено на Unix-машине).
-
Если команда, записанная внутри функции блока, не выполняется, то выполнение достигает блока спасения, и оно выполняется. В случае отсутствия ошибки в команде в функции блокировки, восстановление не будет выполнено.
-
Всегда исполняется во всех случаях.
-
Так что если мы сравниваем то же самое с Java, то это похоже на попытку, поймать и, наконец, блокировать.
-
Здесь Block аналогичен блоку try, в котором вы пишете код для выполнения, а функция спасения аналогична блоку catch и всегда похожа на finally .
спасение и всегда являются ключевыми словами, специфичными для обработки исключений.
Блок — это место, где написан код (все, что должно быть выполнено на Unix-машине).
Если команда, записанная внутри функции блока, не выполняется, то выполнение достигает блока спасения, и оно выполняется. В случае отсутствия ошибки в команде в функции блокировки, восстановление не будет выполнено.
Всегда исполняется во всех случаях.
Так что если мы сравниваем то же самое с Java, то это похоже на попытку, поймать и, наконец, блокировать.
Здесь Block аналогичен блоку try, в котором вы пишете код для выполнения, а функция спасения аналогична блоку catch и всегда похожа на finally .
Loops
Ниже приведен пример, демонстрирующий использование Loops в Ansible.
Задача состоит в том, чтобы скопировать набор всех файлов war из одного каталога в папку tomcat webapps.
Большинство команд, использованных в приведенном ниже примере, уже рассматривались ранее. Здесь мы сосредоточимся на использовании циклов.
Изначально в команде ‘shell’ мы сделали ls * .war. Итак, он перечислит все военные файлы в каталоге.
Вывод этой команды берется в переменную с именем output.
Для цикла используется синтаксис with_items.
with_items: «{{output.stdout_lines}}» -> output.stdout_lines дает нам построчный вывод, а затем мы зацикливаемся на выходе с помощью команды with_items из Ansible.
Прикрепление выходных данных примера, чтобы понять, как мы использовали stdout_lines в команде with_items.
--- #Tsting - hosts: tomcat-node tasks: - name: Install Apache shell: "ls *.war" register: output args: chdir: /opt/ansible/tomcat/demo/webapps - file: src: '/opt/ansible/tomcat/demo/webapps/{{ item }}' dest: '/users/demo/vivek/{{ item }}' state: link with_items: "{{output.stdout_lines}}"
Блоки
Сборник пьес в целом разбит на блоки. Наименьшая часть шагов для выполнения записана в блоке. Написание конкретной инструкции в блоках помогает разделить функциональность и обрабатывать ее с обработкой исключений, если это необходимо.
Пример блоков описан выше в использовании переменных, обработке исключений и циклах.
Conditionals
Условные выражения используются там, где необходимо выполнить определенный шаг на основе условия.
--- #Tsting - hosts: all vars: test1: "Hello Vivek" tasks: - name: Testing Ansible variable debug: msg: "Equals" when: test1 == "Hello Vivek"
В этом случае Equals будет напечатан, поскольку переменная test1 равна, как указано в условии when. когда можно использовать с логическим ИЛИ и логическим условием И, как во всех языках программирования.
Просто измените значение переменной test1 с Hello Vivek на Hello World и посмотрите результат.