Руководство по переносу Ansible 2.8
В этом разделе обсуждаются изменения в поведении между Ansible 2.7 и Ansible 2.8.
Он предназначен для помощи в обновлении ваших playbooks, плагинов и других частей вашей инфраструктуры Ansible, чтобы они работали с этой версией Ansible.
Мы рекомендуем вам прочитать эту страницу вместе с Журналом изменений Ansible для 2.8, чтобы понять, какие обновления вам могут потребоваться.
Этот документ является частью коллекции по переносу. Полный список руководств по переносу можно найти по адресу руководства по переносу.
- Playbook
- Обнаружение интерпретатора Python
- Командная строка
- Устаревшее
- Модули
- Плагины
- Перенос пользовательских скриптов
- Сети
Playbook
Факты о дистрибутивах
Информация, возвращаемая для группы фактов ansible_distribution_*, может немного измениться. Ansible 2.8 использует новую библиотеку back-end для получения информации о дистрибутивах: nir0s/distro. Эта библиотека работает на Python-3.8 и исправляет много ошибок, включая исправление имен релизов и версий.
Две чаще всего используемые в playbooks факта, 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') }}
or
{{ 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' само по себе выглядит как булево. Для пользователей с playbooks, зависящих от старого поведения, мы добавили настройку конфигурации, которая сохраняет её. Вы можете использовать переменную среды ANSIBLE_CONDITIONAL_BARE_VARS или conditional_bare_variables в разделе defaults раздела ansible.cfg, чтобы выбрать желаемое поведение на контрольном узле. Значение по умолчанию — true, что сохраняет старое поведение. Установите значение конфигурации или переменной среды на false, чтобы начать использовать новый параметр.
Примечание
В 2.10 значение по умолчанию для conditional_bare_variables изменится на false. В 2.12 старое поведение будет устаревшим.
Обновление ваших playbooks
Чтобы подготовить ваши playbooks к новому поведению, необходимо обновить ваши условные операторы, чтобы они принимали только булевы значения. Для переменных вы можете использовать фильтр 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 неявная задача «Сбор фактов» в play была изменена на соблюдение тегов play. До версии 2.8 задача «Сбор фактов» игнорировала теги play и теги, переданные через командную строку, и всегда выполнялась в задаче.
Изменение поведения влияет на следующий пример play.
- name: Configure Webservers
hosts: webserver
tags:
- webserver
tasks:
- name: Install nginx
package:
name: nginx
tags:
- nginx
В Ansible 2.8, если вы передадите --tags nginx, неявная задача «Сбор фактов» будет пропущена, так как задача теперь наследует тег webserver вместо always.
Если теги уровня play не заданы, задаче «Сбор фактов» будет присвоен тег 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 был установлен с другим именем или другим путем, ваши playbook'ы завершались ошибкой /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, в playbook'ах и т. д.). Если вы предпочитаете использовать поведение обнаружения интерпретатора Python, используйте одно из четырёх новых значений для ansible_python_interpreter, введённых в Ansible 2.8:
| Новое значение | Поведение |
|---|---|
Начиная с Ansible 2.12, Ansible будет по умолчанию использовать обнаруженный интерпретатор Python, независимо от того, присутствует ли также /usr/bin/python. До этого, значение по умолчанию auto_legacy обеспечивало совместимость с предыдущими версиями Ansible, которые всегда по умолчанию использовали /usr/bin/python.
Если вы установили Python и зависимости (boto и т. д.) в /usr/bin/python как обходной путь на дистрибутивах с другим интерпретатором Python по умолчанию (например, Ubuntu 16.04+, RHEL8, Fedora 23+), у вас есть два варианта:
- Переместите существующие зависимости в интерпретатор Python по умолчанию для каждой платформы/дистрибутива/версии.
- Используйте
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:
Устаревшее
- Опция модуля
paramsвldap_attrиldap_entryустарела с коротким циклом (будет удалена в Ansible-2.10) из-за обхода обычной обработки опций Ansible. В частности, если опцияbind_pwустановлена с помощьюparams, значение опции может быть помещено в файл журнала или отображено в stdout. -
Установка каталога async с помощью
ANSIBLE_ASYNC_DIRв качестве ключа среды задачи/playbook устарела и будет удалена в Ansible 2.12. Вы можете добиться того же результата, установивansible_async_dirв качестве переменной, как:- name: run task with custom async directory command: sleep 5 async: 10 vars: ansible_aync_dir: /tmp/.ansible_async -
Авторы плагинов, которым нужен объект
FactCache, должны знать о двух устаревших опциях:- Класс
FactCacheпереместился изansible.plugins.cache.FactCacheвansible.vars.fact_cache.FactCache. Это связано с тем, чтоFactCacheне является частью API плагина кэширования, и авторы плагинов кэширования не должны наследовать его.FactCacheпо-прежнему доступен из своего старого расположения, но при использовании оттуда будет выдано предупреждение об устаревании. Старое расположение будет удалено в Ansible 2.12. - Метод
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во всех задачах на основе файлов, которые его принимают.
Удаленные модули
Следующие модули больше не существуют:
- ec2_remote_facts
- azure
- cs_nic
- netscaler
- win_msi
Предупреждения об устаревании
Следующие модули будут удалены в Ansible 2.12. Пожалуйста, обновите ваши playbook'ы соответственно.
-
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 вместо.
Важные изменения модулей
-
Проблема безопасности Установка
bind_pwс опциейparamsдля модулейldap_entryиldap_attrзапрещена. Еслиbind_pwбыло установлено сparams, значение могло попасть в лог-файл или выведено на стандартный вывод. Установитеbind_pwнапрямую, используя опции модулей. - Модули
foremanиkatelloустарели и заменены на набор модулей, разбитых по сущностям с учётом идемпотентности. - Замена модулей
foremanиkatelloофициально входит в состав и поддерживается сообществом Foreman. - Модуль
tower_credentialизначально требовал, чтобыssh_key_dataбыл путём к файлу ssh_key_file. Для работы подобно Tower/AWX,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. Для корректного вывода различий это было изменено на тип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. Любые плейбуки, использующиеchanged_when: noдля маскировки этого поведения, могут безопасно удалить это обходное решение. Чтобы получить предыдущее поведение при примененииstate: absentк встроенному модулю ядра, используйтеfailed_when: falseилиignore_errors: trueв вашем плейбуке. - Модуль
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 role. Вклад в роль можно внести здесь. - Модуль
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*user, используйтеusernameмодуля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поддерживает сохранение подключения между задачами и выполнением плейбуков, он работает лучше, чем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'], работают как ожидается, но вы не сможете изменить аргументы командной строки. - В отчёте о выполнении плейбука теперь учитываются задачи
ignoredиrescued, а такжеok,changed,unreachable,failedиskipped, благодаря двум дополнительным счётчикам состояния в плагине обратной связиdefault. Задачи, которые завершились неудачно и имеютignore_errors: yes, перечислены какignored. Задачи, которые завершились неудачно, а затем выполнили раздел аварийного восстановления, перечислены какrescued. Обратите внимание, что задачиrescuedбольше не учитываются какfailed, как в Ansible 2.7 (и ранее). - Плагин обратной связи
osx_sayбыл переименован в say. - Плагины инвентаризации теперь поддерживают кеширование через плагины кеширования. Чтобы начать использовать плагин кеширования с вашей инвентаризацией, см. раздел о кешировании в руководстве по инвентаризации. Чтобы перенести пользовательский плагин кеширования для совместимости с инвентаризацией, см. руководство разработчика по плагинам кеширования.
Перенос пользовательских скриптов
Класс отображения
Начиная с 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–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.8/porting_guides/porting_guide_2.8.html