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–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/playbook_guide/playbooks_python_version.html

Spec-Zone.ru

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