Spec-Zone.ru › Ansible 2.8

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

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

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

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

Ansible предоставляет внутренний тип данных для объявления значений переменных как «небезопасных». Это означает, что данные, содержащиеся в значении переменных, должны обрабатываться как небезопасные, предотвращая подстановку небезопасных символов и раскрытие информации.

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

Используя теги YAML, вы также можете пометить значение как «небезопасное», используя тег !unsafe такие как:

---
my_unsafe_variable: !unsafe 'this variable has {{ characters that should not be treated as a jinja2 template'

В книге задач это может выглядеть так:

---
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
    debug:
        msg: My app is called "{{ webapp.custom_name | join('-') }}".

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

См. также

Использование переменных
Все о переменных
Пользовательская рассылка
У вас есть вопрос? Загляните на страницу Google группы!
irc.freenode.net
#ansible IRC-чат канал

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

Spec-Zone.ru

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