Spec-Zone.ru › Ansible

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(), чтобы ваши плейбуки и шаблоны были совместимы как с 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–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/user_guide/playbooks_python_version.html

Spec-Zone.ru

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