Руководство по переносу Ansible 2.8
В этом разделе обсуждаются изменения в поведении между Ansible 2.7 и Ansible 2.8.
Данное руководство предназначено для помощи в обновлении ваших playbooks, плагинов и других компонентов вашей инфраструктуры Ansible, чтобы они работали с этой версией.
Мы рекомендуем прочитать эту страницу вместе с Журналом изменений Ansible 2.8, чтобы понять, какие обновления вам могут потребоваться.
Этот документ является частью коллекции руководств по переносу. Полный список руководств по переносу можно найти по адресу руководствам по переносу.
Руководство по переносу 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 |
Если интерпретатор Python обнаружен, и /usr/bin/python отсутствует, Ansible использует обнаруженный Python. Выводит предупреждение при использовании списка по умолчанию. Если интерпретатор Python обнаружен, и /usr/bin/python присутствует, Ansible использует /usr/bin/python и выводит предупреждение о устаревании по поводу будущего поведения по умолчанию. Выводит предупреждение при использовании списка по умолчанию. |
auto_legacy_silent | Ведёт себя как |
auto_silent | Ведёт себя как |
В 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+), у вас есть два варианта:
- Переместите существующие зависимости в интерпретатор 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:
Устаревшее
-
Указание каталога 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, должны быть осведомлены о двух устаревших элементах:- Класс
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во всех задачах, основанных на файлах, которые его принимают. -
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