Spec-Zone.ru › Ansible

Руководство по переносу Ansible 2.8

В этом разделе обсуждаются изменения в поведении между Ansible 2.7 и Ansible 2.8.

Данное руководство предназначено для помощи в обновлении ваших playbooks, плагинов и других компонентов вашей инфраструктуры Ansible, чтобы они работали с этой версией.

Мы рекомендуем прочитать эту страницу вместе с Журналом изменений Ansible 2.8, чтобы понять, какие обновления вам могут потребоваться.

Этот документ является частью коллекции руководств по переносу. Полный список руководств по переносу можно найти по адресу руководствам по переносу.

  • Playbook

    • Факты дистрибутива
    • Импорты как обработчики
    • Неопределенные значения Jinja
    • Преобразование параметров модуля в строку
    • Факты командной строки
    • Простые переменные в условных операторах

      • Обновление ваших playbooks
      • Двойная интерполяция
      • Вложенные переменные
    • Сбор фактов
  • Обнаружение интерпретатора Python

    • По умолчанию повторная попытка создания файла
  • Командная строка

    • Подсказка become
  • Устаревшие
  • Модули

    • Удаленные модули
    • Уведомления об устаревании
    • Заметные изменения в модулях
  • Плагины
  • Перенос пользовательских скриптов

    • Класс отображения
  • Сеть

Руководство по переносу Ansible 2.8

Сведения о дистрибутиве

Информация, возвращаемая для группы фактов ansible_distribution_*, может незначительно измениться. Ansible 2.8 использует новую библиотеку бэкенда для получения сведений о дистрибутивах: nir0s/distro. Эта библиотека работает на Python-3.8 и исправляет множество багов, включая исправление названий релизов и версий.

Два наиболее часто используемых факта в плейбуках, ansible_distribution и ansible_distribution_major_version, не должны изменяться. Если вы обнаружите изменения в этих фактах, пожалуйста, отправьте отчет об ошибке, чтобы мы могли разобраться с различием. Однако другие факты, такие как ansible_distribution_release и ansible_distribution_version, могут измениться по мере исправления неверной информации.

Импорты как обработчики

Начиная с версии 2.8, задача не может оповещать import_tasks или статический include, указанный в handlers.

Цель статического импорта — действовать как предобработчик, где импорт заменяется задачами, определёнными в импортируемом файле. При использовании импорта задача может оповещать любые из названных задач внутри импортированного файла, но не имя самого импорта.

Для достижения результата оповещения одного имени, но выполнения нескольких обработчиков, используйте include_tasks, или listen Обработчики: выполнение операций при изменении.

Неопределённые значения Jinja

Начиная с версии 2.8, попытка доступа к атрибуту неопределённого значения в Jinja вернёт другое неопределённое значение, а не сразу сгенерирует ошибку. Это означает, что теперь вы можете просто использовать значение по умолчанию вложенной структуры данных, когда не знаете, определены ли промежуточные значения.

В Ansible 2.8:

{{ foo.bar.baz | default('DEFAULT') }}

В Ansible 2.7 и более ранних версиях:

{{ ((foo | default({})).bar | default({})).baz | default('DEFAULT') }}

или:

{{ foo.bar.baz if (foo is defined and foo.bar is defined and foo.bar.baz is defined) else 'DEFAULT' }}

Преобразование параметра модуля в строку

Начиная с версии 2.8, Ansible будет предупреждать, если модуль ожидает строку, но передаётся значение, не являющееся строкой, и автоматически преобразуется в строку. Это выявляет потенциальные проблемы, где, например, yes или true (разбираемые как истинное булево значение) будут преобразованы в строку 'True', или где номер версии 1.10 (разбираемый как число с плавающей точкой) будет преобразован в '1.1'. Такие преобразования могут привести к неожиданному поведению в зависимости от контекста.

Это поведение можно изменить, чтобы это было ошибкой или игнорировалось, установив переменную среды ANSIBLE_STRING_CONVERSION_ACTION, или параметр конфигурации string_conversion_action в разделе defaults ansible.cfg.

ФАКТЫ командной строки

cmdline факты, возвращаемые в системе, будут устаревшими в пользу proc_cmdline. Это изменение обрабатывает особый случай, когда параметр командной строки ядра содержит несколько значений с одинаковым ключом.

Одиночные переменные в условных операторах

В Ansible 2.7 и ранее переменные верхнего уровня иногда обрабатывали строковые значения булевых переменных как булевы значения. Это приводило к несогласованному поведению в условных тестах, построенных на переменных верхнего уровня, определённых как строки. Ansible 2.8 начал изменять это поведение. Например, если вы установите два условия, как это:

tasks:
  - include_tasks: teardown.yml
    when: teardown

  - include_tasks: provision.yml
    when: not teardown

на основе переменной, которую вы определяете как строку (с кавычками вокруг неё):

  • В Ansible 2.7 и ранее вышеуказанные два условия оценивались как True и False соответственно, если teardown: 'true'.
  • В Ansible 2.7 и ранее оба условия оценивались как False если teardown: 'false'.
  • В Ansible 2.8 и более поздних версиях у вас есть возможность отключить одиночные переменные в условных операторах, таким образом when: teardown всегда оценивается как True и when: not teardown всегда оценивается как False когда teardown является непустой строкой (включая 'true' или 'false')

В конечном итоге when: 'string' всегда будет оцениваться как True и when: not 'string' всегда будет оцениваться как False, пока 'string' не пуста, даже если значение 'string' само по себе похоже на булевое. Для пользователей с плейбуками, которые зависят от старого поведения, мы добавили настройку конфигурации, которая сохраняет его. Вы можете использовать переменную среды ANSIBLE_CONDITIONAL_BARE_VARS или conditional_bare_variables в разделе defaults ansible.cfg для выбора нужного поведения на узле управления. По умолчанию установлено значение true, которое сохраняет старое поведение. Установите значение конфигурации или переменной среды на false для использования нового варианта.

Примечание

В версии 2.10 значение по умолчанию для conditional_bare_variables будет изменено на false. В версии 2.12 старое поведение будет устаревшим.

Обновление ваших плейбуков

Для подготовки ваших плейбуков к новому поведению необходимо обновить ваши условные операторы, чтобы они принимали только булевы значения. Для переменных вы можете использовать фильтр bool для оценки строки 'false' как False.

vars:
  teardown: 'false'

tasks:
  - include_tasks: teardown.yml
    when: teardown | bool

  - include_tasks: provision.yml
    when: not teardown | bool

В качестве альтернативы, вы можете повторно определить свои переменные как булевы значения (без кавычек) вместо строк:

vars:
  teardown: false

tasks:
  - include_tasks: teardown.yml
    when: teardown

  - include_tasks: provision.yml
    when: not teardown

Для словарей и списков используйте фильтр length для оценки наличия словаря или списка как True:

- debug:
  when: my_list | length > 0

- debug:
  when: my_dictionary | length > 0

Не используйте фильтр bool со списками или словарями. Если вы используете bool со списком или словарем, Ansible всегда будет оценивать его как False.

Двойная интерполяция

Настройка conditional_bare_variables также влияет на переменные, установленные на основе других переменных. Старое поведение неожиданно дважды интерполировало эти переменные. Например:

vars:
  double_interpolated: 'bare_variable'
  bare_variable: false

tasks:
  - debug:
    when: double_interpolated
  • В Ansible 2.7 и ранее when: double_interpolated оценивалось как значение bare_variable, в данном случае False. Если переменная bare_variable не определена, условное выражение не выполняется.
  • В Ansible 2.8 и более поздних версиях при отключённых одиночных переменных Ansible оценивает double_interpolated как строку 'bare_variable', которая является True.

Для двойной интерполяции значений переменных используйте фигурные скобки:

vars:
  double_interpolated: "{{ other_variable }}"
  other_variable: false

Вложенные переменные

Настройка conditional_bare_variables не влияет на вложенные переменные. Любое строковое значение, назначенное подключа, уже соблюдается и не обрабатывается как булево. Если complex_variable['subkey'] является непустой строкой, то when: complex_variable['subkey'] всегда является True и when: not complex_variable['subkey'] всегда является False. Если вы хотите, чтобы подключа со строкой, например, complex_variable['subkey'] оценивалось как булевое, вы должны использовать фильтр bool.

Сбор фактов

В Ansible 2.8 неявная задача «Сбор фактов» в плейбуке была изменена, чтобы подчиняться меткам плейбука. До версии 2.8 задача «Сбор фактов» игнорировала метки плейбука и метки, предоставленные через командную строку, и всегда выполнялась в задаче.

Изменение поведения затрагивает следующий пример плейбука.

- name: Configure Webservers
  hosts: webserver
  tags:
    - webserver
  tasks:
    - name: Install nginx
      package:
        name: nginx
      tags:
        - nginx

В Ansible 2.8, если вы передадите --tags nginx, неявная задача «Сбор фактов» будет пропущена, поскольку задача теперь наследует метку webserver вместо always.

Если метки уровня плейбука не заданы, задаче «Сбор фактов» будет присвоена метка always и она будет соответствовать предыдущему поведению.

Вы можете добиться сходного результата со поведением до версии 2.8, используя явную задачу gather_facts в вашем списке tasks.

- name: Configure Webservers
  hosts: webserver
  gather_facts: false
  tags:
    - webserver
  tasks:
    - name: Gathering Facts
      gather_facts:
      tags:
        - always

    - name: Install nginx
      package:
        name: nginx
      tags:
        - nginx

Обнаружение интерпретатора Python

В Ansible 2.7 и более ранних версиях Ansible по умолчанию использовал /usr/bin/python в качестве параметра ansible_python_interpreter. Если вы запускали Ansible на системе, где Python был установлен с другим именем или по другому пути, ваши плейбуки завершались ошибкой /usr/bin/python: bad interpreter: No such file or directory, если вы не задавали ansible_python_interpreter для корректного значения на данной системе или не добавляли интерпретатор Python и необходимые зависимости в usr/bin/python.

Начиная с Ansible 2.8, Ansible ищет правильный путь и имя исполняемого файла для Python на каждой целевой системе, сначала в таблице поиска по умолчанию для интерпретаторов Python для распространённых дистрибутивов, а затем в упорядоченном списке возможных имен/путей интерпретатора Python.

Использование интерпретатора Python из списка по умолчанию рискованно, потому что интерпретатор может измениться при последующих запусках. Если интерпретатор из верхних позиций списка по умолчанию будет установлен (например, как побочный эффект установки других пакетов), ваш исходный интерпретатор и его зависимости больше не будут использоваться. По этой причине Ansible предупреждает вас, когда он использует интерпретатор Python, обнаруженный из списка по умолчанию. Если вы видите это предупреждение, лучшим решением является явное задание ansible_python_interpreter к пути корректного интерпретатора для этих целевых систем.

Вы по-прежнему можете задать ansible_python_interpreter к конкретному пути на любом уровне переменных (как переменную хоста, в файлах vars, в плейбуках и так далее). Если вы предпочитаете использовать поведение обнаружения интерпретатора Python, используйте одно из четырёх новых значений для ansible_python_interpreter , представленных в Ansible 2.8:

Новое значение

Поведение

auto
(будущий по умолчанию)

Если интерпретатор Python обнаружен, Ansible использует обнаруженный Python, даже если /usr/bin/python также присутствует. Выводит предупреждение при использовании списка по умолчанию.

auto_legacy
(по умолчанию Ansible 2.8)

Если интерпретатор Python обнаружен, и /usr/bin/python отсутствует, Ansible использует обнаруженный Python. Выводит предупреждение при использовании списка по умолчанию.

Если интерпретатор Python обнаружен, и /usr/bin/python присутствует, Ansible использует /usr/bin/python и выводит предупреждение о устаревании по поводу будущего поведения по умолчанию. Выводит предупреждение при использовании списка по умолчанию.

auto_legacy_silent

Ведёт себя как auto_legacy , но подавляет предупреждения об устаревании и о списке по умолчанию.

auto_silent

Ведёт себя как auto , но подавляет предупреждение о списке по умолчанию.

В Ansible 2.12 Ansible переключится с по умолчанию с auto_legacy на auto. Разница в поведении в том, что auto_legacy использует /usr/bin/python, если оно присутствует, и возвращается к обнаруженному Python, если оно отсутствует. auto всегда будет использовать обнаруженный Python, независимо от того, существует ли /usr/bin/python. Настройка auto_legacy обеспечивает совместимость с предыдущими версиями Ansible, которые всегда по умолчанию использовали /usr/bin/python.

Если вы установили Python и зависимости (boto, и так далее) в /usr/bin/python в качестве обходного решения на дистрибутивах с другим интерпретатором Python по умолчанию (например, Ubuntu 16.04+, RHEL8, Fedora 23+), у вас есть два варианта:

  1. Переместите существующие зависимости в интерпретатор Python по умолчанию для каждой платформы/дистрибутива/версии.
  2. Используйте auto_legacy. Эта настройка позволяет Ansible находить и использовать обходной Python на хостах, которые его имеют, а также находить корректный интерпретатор Python по умолчанию на новых хостах. Но помните, что значение по умолчанию изменится через 4 выпуска.

Значение по умолчанию для повторной попытки создания файла

В Ansible 2.8, retry_files_enabled теперь по умолчанию False вместо True. Поведение может быть изменено на поведение предыдущей версии, отредактировав файл ansible.cfg по умолчанию и установив значение на True.

Командная строка

Запрос пароля для повышения привилегий

Начиная с версии 2.8, Ansible по умолчанию будет использовать слово BECOME для запроса пароля для повышения привилегий (sudo привилегии на системах Unix или enable режим на сетевых устройствах):

По умолчанию в Ansible 2.8:

ansible-playbook --become --ask-become-pass site.yml
BECOME password:

Если вы хотите, чтобы запрос отображал конкретный become_method , который вы используете, вместо общего значения BECOME, установите AGNOSTIC_BECOME_PROMPT в значение False в вашей конфигурации Ansible.

По умолчанию в Ansible 2.7, или с AGNOSTIC_BECOME_PROMPT=False в Ansible 2.8:

ansible-playbook --become --ask-become-pass site.yml
SUDO password:

Устаревшее

  • Указание каталога async с использованием ANSIBLE_ASYNC_DIR в качестве ключа среды задания/плейбука устарело и будет удалено в Ansible 2.12. Вы можете добиться такого же результата, установив ansible_async_dir в качестве переменной, как:

    - name: run task with custom async directory
      command: sleep 5
      async: 10
      vars:
        ansible_async_dir: /tmp/.ansible_async
    
  • Авторы плагинов, которым нужен объект FactCache, должны быть осведомлены о двух устаревших элементах:

    1. Класс FactCache перемещен из ansible.plugins.cache.FactCache в ansible.vars.fact_cache.FactCache. Это потому, что FactCache не является частью API плагинов кэширования, и авторы плагинов кэширования не должны наследоваться от него. FactCache по-прежнему доступен из своего старого местоположения, но при использовании оттуда будет выведено предупреждение об устаревании. Старое местоположение будет удалено в Ansible 2.12.
    2. Метод FactCache.update() был преобразован в соответствии с API словарей. Теперь он принимает словарь в качестве единственного аргумента и обновляет себя элементами словаря. Предыдущий API, где update() принимал ключ и значение, теперь будет выводить предупреждение об устаревании и будет удален в версии 2.12. Если вам нужно старое поведение, используйте FactCache.first_order_merge() вместо этого.
  • Поддержка кеширования на основе файлов через self.cache устарела и будет удалена в Ansible 2.12. Если вы поддерживаете плагин инвентаризации, обновите его, чтобы использовать self._cache в качестве словаря. Подробности реализации см. в руководстве разработчика по плагинам инвентаризации.
  • Прямой импорт плагинов кэширования устарел и будет удален в Ansible 2.12. Используйте plugin_loader, чтобы прямые опции, переменные среды и другие средства конфигурации могли быть согласованы с помощью системы конфигурации, а не констант.

    from ansible.plugins.loader import cache_loader
    cache = cache_loader.get('redis', **kwargs)
    

Модули

Основные изменения в популярных модулях подробно описаны здесь

Обёртка exec, которая запускает модули PowerShell, была изменена, чтобы установить $ErrorActionPreference = "Stop" глобально. Это может означать, что пользовательские модули могут завершаться ошибкой, если они неявно полагались на это поведение. Чтобы вернуть старое поведение, добавьте $ErrorActionPreference = "Continue" в начало модуля. Это изменение было сделано для восстановления старого поведения EAP, которое было случайно удалено в предыдущей версии, и для обеспечения большей устойчивости модулей к ошибкам, которые могут произойти во время выполнения.

  • Версия 2.8.14 Ansible изменила режим по умолчанию для задач, основанных на файлах, на 0o600 & ~umask, когда пользователь не указал параметр mode в задачах, основанных на файлах. Это было сделано в ответ на сообщение CVE, которое мы переосмыслили. В результате изменение mode было отменено в версии 2.8.15, и mode теперь по умолчанию будет 0o666 & ~umask, как и в предыдущих версиях Ansible.
  • Если вы изменили какие-либо задачи, чтобы указать менее строгие разрешения при использовании версии 2.8.14, эти изменения не понадобятся (но не навредят) в версии 2.8.15.
  • Чтобы избежать проблемы, поднятой в CVE-2020-1736, укажите параметр mode во всех задачах, основанных на файлах, которые его принимают.
  • dnf и yum - начиная с версии 2.8.15, модуль dnf (и действие yum, когда оно использует dnf) теперь правильно проверяет подписи GPG пакетов (CVE-2020-14365). Если вы видите ошибку, такую как Failed to validate GPG signature for [package name], убедитесь, что вы импортировали правильный ключ GPG для репозитория DNF и/или пакета, который вы используете. Один из способов сделать это — с помощью модуля rpm_key. Хотя мы не рекомендуем это, в некоторых случаях может потребоваться отключить проверку GPG. Это можно сделать, явно добавив disable_gpg_check: yes в вашей задаче dnf или yum.

Удаленные модули

Следующие модули больше не существуют:

  • ec2_remote_facts
  • azure
  • cs_nic
  • netscaler
  • win_msi

Уведомления о устаревании

Следующие модули будут удалены в Ansible 2.12. Пожалуйста, обновите свои плейбуки соответственно.

  • foreman используйте foreman-ansible-modules вместо этого.
  • katello используйте foreman-ansible-modules вместо этого.
  • github_hooks используйте github_webhook и github_webhook_facts вместо этого.
  • digital_ocean используйте digital_ocean_droplet вместо этого.
  • gce используйте gcp_compute_instance вместо этого.
  • gcspanner используйте gcp_spanner_instance и gcp_spanner_database вместо этого.
  • gcdns_record используйте gcp_dns_resource_record_set вместо этого.
  • gcdns_zone используйте gcp_dns_managed_zone вместо этого.
  • gcp_forwarding_rule используйте gcp_compute_global_forwarding_rule или gcp_compute_forwarding_rule вместо этого.
  • gcp_healthcheck используйте gcp_compute_health_check, gcp_compute_http_health_check или gcp_compute_https_health_check вместо этого.
  • gcp_backend_service используйте gcp_compute_backend_service вместо этого.
  • gcp_target_proxy используйте gcp_compute_target_http_proxy вместо этого.
  • gcp_url_map используйте gcp_compute_url_map вместо этого.
  • panos используйте роль Palo Alto Networks Ansible Galaxy вместо этого.

Важные изменения модулей

  • Модули foreman и katello устарели и заменены на набор модулей, разбитых по сущностям для лучшей идемпотентности.
  • Замена модулей foreman и katello официально входит в состав Foreman Community и поддерживается там.
  • Модуль tower_credential первоначально требовал, чтобы ssh_key_data был путем к файлу ssh_key_file. Для работы аналогично AWX/Tower/RHAAP, ssh_key_data теперь содержит содержимое файла. Предыдущее поведение можно получить с помощью lookup('file', '/path/to/file').
  • Модуль win_scheduled_task отказался от поддержки указания повторения триггера как списка и этот формат будет удален в Ansible 2.12. Вместо этого укажите повторение как значение словаря.
  • Модуль win_feature удалил устаревший результат restart_needed. Используйте вместо него стандартное значение reboot_required.
  • Модуль win_package удалил устаревшие значения возврата restart_required и exit_code. Используйте вместо них стандартные значения reboot_required и rc.
  • Модуль win_get_url удалил устаревший словарь возврата win_get_url, значения возвращаются напрямую.
  • Модуль win_get_url удалил устаревший параметр skip_certificate_validation. Используйте вместо него стандартный параметр validate_certs.
  • Модуль vmware_local_role_facts теперь возвращает список словарей вместо словаря словарей для информации о роли.
  • Если docker_network или docker_volume вызывались с diff: yes, check_mode: yes или debug: yes, возвращалось значение diff типа list. Для обеспечения правильного вывода diff это было изменено на тип dict; исходное значение list возвращается как diff.differences.
  • Модуль na_ontap_cluster_peer заменил строковые параметры source_intercluster_lif и dest_intercluster_lif на списковые параметры source_intercluster_lifs и dest_intercluster_lifs
  • Модуль modprobe теперь обнаруживает встроенные ядра. Ранее попытка удалить (с помощью state: absent) встроенный модуль ядра заканчивалась без сообщения об ошибке, потому что modprobe не распознавал модуль как present. Теперь modprobe завершится неудачно, если модуль ядра встроен и state: absent (с сообщением об ошибке из модуля modprobe, например, modprobe: ERROR: Module nfs is builtin.). В противном случае он завершится без сообщения о изменениях, если state: present. Любые playbook, которые используют changed_when: no для маскировки этого поведения, могут безопасно удалить обходной путь. Чтобы получить предыдущее поведение при применении state: absent к встроенному модулю ядра, используйте failed_when: false или ignore_errors: true в вашем playbook.
  • Модуль digital_ocean устарел в пользу модулей, не требующих внешних зависимостей. Это позволяет повысить гибкость и улучшить поддержку модулей.
  • Модуль docker_container устарел для возвращаемого факта docker_container. Это же значение доступно в виде переменной container. Возвращаемый факт будет удален в Ansible 2.12.
  • Модуль docker_network устарел для возвращаемого факта docker_container. Это же значение доступно в виде переменной network. Возвращаемый факт будет удален в Ansible 2.12.
  • Модуль docker_volume устарел для возвращаемого факта docker_container. Это же значение доступно в виде переменной volume. Возвращаемый факт будет удален в Ansible 2.12.
  • Модуль docker_service был переименован в docker_compose.
  • Переименованный модуль docker_compose возвращал один факт на службу, имя которой совпадало с именем службы. Словарь этих фактов возвращается в качестве обычного значения возврата services. Возвращаемые факты будут удалены в Ansible 2.12.
  • The docker_swarm_service module no longer sets a defaults for the following options:
    • user. Раньше значением по умолчанию было root.
    • update_delay. Раньше значением по умолчанию было 10.
    • update_parallelism. Раньше значением по умолчанию было 1.
  • vmware_vm_facts ранее возвращал словарь словарей с фактами виртуальной машины. Ansible 2.8 и выше будут возвращать список словарей с фактами виртуальной машины. Пожалуйста, обратитесь к документации модуля vmware_vm_facts для примера.
  • vmware_guest_snapshot модуль ранее возвращал results. Начиная с Ansible 2.8 и выше, results — зарезервированное ключевое слово, поэтому он заменён на snapshot_results. Обратитесь к документации модуля vmware_guest_snapshots для примера.
  • Модули panos устарели в пользу использования ролей Palo Alto Networks из Ansible Galaxy. Взносы в роль можно вносить здесь.
  • Модуль ipa_user изначально всегда отправлял password в FreeIPA независимо от того, изменился ли пароль. Теперь модуль отправляет password только если update_password установлено в always, что является значением по умолчанию.
  • В модуле win_psexec устарел не документированный параметр extra_opts модуля. Он будет удален в Ansible 2.10.
  • Модуль win_nssm устарел для следующих параметров в пользу использования модуля win_service для настройки службы после её установки с помощью win_nssm: * dependencies, используйте dependencies из win_service * start_mode, используйте start_mode из win_service * user, используйте username из win_service * password, используйте password из win_service Эти параметры будут удалены в Ansible 2.12.
  • Модуль win_nssm также устарел для значений start, stop, и restart параметра status. Используйте модуль win_service для управления состоянием службы. Этот параметр будет удален в Ansible 2.12.
  • Параметр модуля status для win_nssm изменил значение по умолчанию на present. Ранее значение по умолчанию было start. Вследствие этого, служба больше не запускается по умолчанию после создания с помощью win_nssm, и вы должны использовать модуль win_service для запуска, если это необходимо.
  • Параметр модуля app_parameters для win_nssm устарел; используйте argument вместо него. Он будет удален в Ansible 2.12.
  • Параметр модуля app_parameters_free_form для win_nssm стал псевдонимом нового параметра arguments.
  • Модуль win_dsc теперь проверяет входные параметры для ресурса DSC. В предыдущих версиях недопустимые параметры игнорировались, но теперь нет.
  • Модуль openssl_pkcs12 теперь перегенерирует файл pkcs12, если есть различия между файлом на диске и параметрами, переданными модулю.

Плагины

  • Ansible больше не использует по умолчанию плагин подключения paramiko при использовании macOS в качестве контрольного узла. Ansible теперь по умолчанию будет использовать плагин подключения ssh на контрольном узле macOS. Поскольку ssh поддерживает сохранение подключения между задачами и выполнением playbook, он работает лучше, чем paramiko. Если вы используете аутентификацию по паролю, вам нужно установить sshpass при использовании плагина подключения ssh. Или вы можете явно установить тип подключения на paramiko, чтобы сохранить поведение до версии 2.8 на macOS.
  • Плагины подключения были стандартизированы, чтобы разрешить использование переменных ansible_<conn-type>_user и ansible_<conn-type>_password. Переменные, такие как ansible_<conn-type>_pass и ansible_<conn-type>_username, обрабатываются с более низким приоритетом, чем стандартизованные имена, и могут быть устаревшими в будущем. В общем случае переменные ansible_user и ansible_password должны использоваться, если нет причины использовать переменные, специфичные для подключения.
  • Плагин оболочки powershell теперь использует async_dir для определения асинхронного пути файла результатов, и значение по умолчанию изменилось на %USERPROFILE%\.ansible_async. Чтобы контролировать этот путь, теперь необходимо установить переменную ansible_async_dir или значение async_dir в разделе powershell конфигурационного файла ini.
  • Порядок включенных плагинов инвентаризации (INVENTORY_ENABLED) был обновлён. auto теперь находится перед yaml и ini.
  • Приватный атрибут _options был удалён из класса CallbackBase плагинов обратной связи. Если плагин обратной связи стороннего разработчика нуждается в доступе к аргументам командной строки, используйте код, подобный следующему, вместо попыток использовать self._options.

    from ansible import context
    [...]
    tags = context.CLIARGS['tags']
    

    context.CLIARGS — это словарь только для чтения, поэтому обычные методы извлечения данных из словаря, такие как CLIARGS.get('tags') и CLIARGS['tags'], работают как ожидается, но вы не сможете изменить аргументы командной строки вообще.

  • Резюме выполнения playbook теперь учитывает задачи ignored и rescued, а также ok, changed, unreachable, failed и skipped задачи благодаря двум дополнительным счётчикам статистики в плагине обратной связи default. Задачи, которые завершились неудачно и имеют ignore_errors: yes установленным, перечислены как ignored. Задачи, которые завершились неудачно, а затем выполнили раздел восстановления, перечислены как rescued. Обратите внимание, что задачи rescued больше не учитываются как failed в Ansible 2.7 (и ранее).
  • Плагин обратной связи osx_say был переименован в say.
  • Плагины инвентаризации теперь поддерживают кэширование через плагины кэша. Чтобы начать использовать плагин кэша со своей инвентаризацией, см. раздел о кэшировании в руководстве по инвентаризации руководстве по инвентаризации. Чтобы перенести пользовательский плагин кэша в совместимый с инвентаризацией, см. руководстве разработчика по плагинам кэша.

Перенос пользовательских скриптов

Класс Display

Начиная с Ansible 2.8, класс Display теперь является «синглтоном». Вместо использования __main__.display каждый файл должен импортировать и инициализировать ansible.utils.display.Display самостоятельно.

СТАРЫЙ В Ansible 2.7 (и ранее) для доступа к объекту display использовалось следующее:

try:
    from __main__ import display
except ImportError:
    from ansible.utils.display import Display
    display = Display()

НОВЫЙ В Ansible 2.8 следует использовать следующее:

from ansible.utils.display import Display
display = Display()

Сети

  • Модули eos_config, ios_config, и nxos_config удалили устаревшие параметры save и force, используйте параметр save_when для воспроизведения их функциональности.
  • Модуль nxos_vrf_af удалил параметр safi. Этот параметр был устаревшим в Ansible 2.4 и с тех пор не влиял на модуль.

© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/porting_guides/porting_guide_2.8.html

Spec-Zone.ru

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