Spec-Zone.ru › Ansible 2.4

Версии Python и Шаблоны

Шаблоны Jinja2 используют типы данных Python и стандартные функции. Это обеспечивает богатый набор операций, которые могут быть выполнены над данными. Однако это также означает, что некоторые особенности базового Python становятся видимыми для авторов шаблонов. Поскольку Ansible playbooks используют Jinja2 для шаблонов и переменных, это означает, что авторы playbook должны быть осведомлены об этих особенностях также.

Если не указано иное, эти различия представляют интерес только при выполнении Ansible в Python2 по сравнению с Python3. Изменения внутри Python2 и Python3, как правило, достаточно незначительны, чтобы они не были видны на уровне Jinja2.

Представления словарей

В Python2 методы dict.keys(), dict.values() и dict.items() возвращают список. Jinja2 возвращает его Ansible в виде строкового представления, которое Ansible может преобразовать обратно в список. В Python3 эти методы возвращают объект представления словаря. Строковое представление, которое возвращает 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
    #with_items: "{{ hosts.keys() }}"
    # Works with both Python 2 and Python 3
    with_items: "{{ hosts.keys() | list }}"

dict.iteritems()

В Python2 словари имеют методы iterkeys(), itervalues() и iteritems(). Эти методы были удалены в Python3. Playbooks и шаблоны Jinja2 должны использовать dict.keys(), dict.values() и dict.items() для совместимости с Python2 и Python3:

vars:
  hosts:
    testhost1: 127.0.0.2
    testhost2: 127.0.0.3
tasks:
  - debug:
      msg: '{{ item }}'
    # Only works with Python 2
    #with_items: "{{ hosts.iteritems() }}"
    # Works with both Python 2 and Python 3
    with_items: "{{ hosts.items() | list }}"

См. также

  • Раздел Представления словарей для информации о том, почему здесь необходим фильтр list filter.

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.4/playbooks_python_version.html

Spec-Zone.ru

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