Spec-Zone.ru › Ansible

Расширенный синтаксис playbooks

Примеры расширенного синтаксиса YAML на этой странице предоставляют больший контроль над данными в файлах YAML, используемых Ansible. Дополнительную информацию о Python-специфичном YAML вы можете найти в официальной документации PyYAML.

Небезопасные или сырые строки

При обработке значений, возвращаемых плагинами lookup, Ansible использует тип данных unsafe, чтобы заблокировать шаблонизацию. Отметка данных как небезопасных предотвращает злоумышленникам использование шаблонов Jinja2 для выполнения произвольного кода на целевых машинах. Реализация Ansible гарантирует, что небезопасные значения никогда не будут шаблонизированы. Она более полная, чем экранирование Jinja2 с помощью {% raw %} ... {% endraw %} тегов.

Вы можете использовать тот же тип данных unsafe в переменных, которые вы определяете, чтобы предотвратить ошибки шаблонизации и раскрытие информации. Вы можете помечать значения, предоставляемые vars_prompts, как небезопасные. Также вы можете использовать unsafe в playbooks. Наиболее распространённые случаи использования включают пароли, допускающие специальные символы, такие как { или %, и JSON-аргументы, которые выглядят как шаблоны, но не должны шаблонизироваться. Например:

---
mypassword: !unsafe 234%234{435lkj{{lkjsdf

В playbook:

---
hosts: all
vars:
  my_unsafe_variable: !unsafe 'unsafe % value'
tasks:
    ...

Для сложных переменных, таких как хэши или массивы, используйте !unsafe для отдельных элементов:

---
my_unsafe_array:
  - !unsafe 'unsafe element'
  - 'safe element'

my_unsafe_hash:
  unsafe_key: !unsafe 'unsafe value'

Якорные и псевдонимы YAML: совместное использование значений переменных

Якорные и псевдонимы YAML помогают определить, поддерживать и гибко использовать общие значения переменных. Вы определяете якорную точку с помощью &, а затем ссылаетесь на неё с помощью псевдонима, обозначенного как *. Вот пример, который устанавливает три значения с якорной точкой, использует два из этих значений с псевдонимом и переопределяет третье значение:

---
...
vars:
  app1:
    jvm: &jvm_opts
      opts: '-Xms1G -Xmx2G'
      port: 1000
      path: /usr/lib/app1
  app2:
    jvm:
      <<: *jvm_opts
      path: /usr/lib/app2
...

Здесь, app1 и app2 совместно используют значения для opts и port с помощью якорной точки &jvm_opts и псевдонима *jvm_opts. Значение для path объединяется с помощью << или оператора объединения.

Якорные точки и псевдонимы также позволяют совместно использовать сложные наборы значений переменных, включая вложенные переменные. Если у вас есть одно значение переменной, которое включает в себя другое значение переменной, вы можете определить их отдельно:

vars:
  webapp_version: 1.0
  webapp_custom_name: ToDo_App-1.0

Это неэффективно и в масштабе требует большего обслуживания. Чтобы включить значение версии в имя, вы можете использовать якорную точку в app_version и псевдоним в custom_name.

vars:
  webapp:
      version: &my_version 1.0
      custom_name:
          - "ToDo_App"
          - *my_version

Теперь вы можете повторно использовать значение app_version внутри значения custom_name и использовать вывод в шаблоне:

---
- name: Using values nested inside dictionary
  hosts: localhost
  vars:
    webapp:
      version: &my_version 1.0
      custom_name:
        - "ToDo_App"
        - *my_version
  tasks:
  - name: Using Anchor value
    ansible.builtin.debug:
      msg: My app is called "{{ webapp.custom_name | join('-') }}".

Вы привязали значение version к якорной точке &my_version и повторно использовали его с псевдонимом *my_version. Якорные точки и псевдонимы позволяют получить доступ к вложенным значениям внутри словарей.

См. также

Использование переменных

Все о переменных

Обработка данных

Выполнение сложной обработки данных в Ansible

Общение

Есть вопросы? Нужна помощь? Хотите поделиться своими идеями? Посетите руководство по общению Ansible

© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/user_guide/playbooks_advanced_syntax.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API