Расширенный синтаксис
Примеры расширенного синтаксиса 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