Python 3 в шаблонах
Ansible использует Jinja2 для использования типов данных Python и стандартных функций в шаблонах и переменных. Вы можете использовать эти типы данных и стандартные функции для выполнения широкого набора операций с вашими данными. Однако, если вы используете шаблоны, вы должны учитывать различия между версиями Python.
Эти темы помогут вам создавать шаблоны, которые работают как в Python 2, так и в Python 3. Они также могут быть полезны, если вы переходите с Python 2 на Python 3. Переход внутри Python 2 или Python 3 обычно не вносит изменений, которые влияют на шаблоны Jinja2.
Представления словарей
В Python 2 методы dict.keys(), dict.values() и dict.items() возвращают список. Jinja2 возвращает его Ansible в виде строкового представления, которое Ansible может преобразовать обратно в список.
В Python 3 эти методы возвращают объект представления словаря. Строковое представление, которое Jinja2 возвращает для представлений словаря, не может быть обработано Ansible обратно в список. Однако легко сделать это переносимым, используя фильтр list всякий раз, когда используется dict.keys(), dict.values() или dict.items():
vars:
hosts:
testhost1: 127.0.0.2
testhost2: 127.0.0.3
tasks:
- debug:
msg: '{{ item }}'
# Only works with Python 2
#loop: "{{ hosts.keys() }}"
# Works with both Python 2 and Python 3
loop: "{{ hosts.keys() | list }}"
dict.iteritems()
Словари Python 2 имеют методы iterkeys(), itervalues() и iteritems().
Словари Python 3 не имеют этих методов. Используйте dict.keys(), dict.values() и dict.items(), чтобы сделать ваши playbook и шаблоны совместимыми с Python 2 и Python 3:
vars:
hosts:
testhost1: 127.0.0.2
testhost2: 127.0.0.3
tasks:
- debug:
msg: '{{ item }}'
# Only works with Python 2
#loop: "{{ hosts.iteritems() }}"
# Works with both Python 2 and Python 3
loop: "{{ hosts.items() | list }}"
См. также
- Раздел Представления словарей для получения информации о том, почему здесь необходим
list filter.
© 2012–2018 Michael DeHaan
© 2018–2021 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.11/user_guide/playbooks_python_version.html