Учебники

Ansible — переменные

Переменные в 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 и посмотрите результат.