Spec-Zone.ru › Ansible 2.9

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

Примеры расширенного синтаксиса YAML на этой странице предоставляют вам больший контроль над данными, размещаемыми в файлах YAML, используемых Ansible. Дополнительную информацию о Python-специфическом YAML можно найти в официальной документации 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.9/user_guide/playbooks_advanced_syntax.html

Spec-Zone.ru

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