Руководство по переносу Ansible-core 2.15
В этом разделе рассматриваются изменения в поведении между ansible-core 2.14 и ansible-core 2.15.
Он предназначен для помощи в обновлении ваших playbooks, плагинов и других частей вашей инфраструктуры Ansible, чтобы они работали с этой версией Ansible.
Мы рекомендуем прочитать эту страницу вместе с Журналом изменений Ansible-core 2.15, чтобы понять, какие обновления вам могут потребоваться.
Этот документ является частью коллекции по переносу. Полный список руководств по переносу можно найти по адресу руководствам по переносу.
Playbook
-
Условные операторы — из-за устранения проблемы безопасности CVE-2023-5764 в ansible-core 2.15.7, условные выражения с встроенными блоками шаблонов могут завершиться с сообщением «
Conditional is marked as unsafe, and cannot be evaluated.», когда встроенный шаблон обращается к данным из недоверенных источников, таких как результаты модулей или переменные, помеченные!unsafe. Условные операторы с встроенными шаблонами могут быть источником вредоносной подстановки шаблонов при ссылке на недоверенные данные, и их почти всегда можно переписать без встроенных шаблонов. Условные операторы задач Playbook, такие какwhenиuntil, давно отображают предупреждения, отговаривающие от использования встроенных шаблонов в условных операторах; это предупреждение также распространено на условные операторы, не являющиеся задачами, такие как действиеassert.- name: task with a module result (always untrusted by Ansible) shell: echo "hi mom" register: untrusted_result # don't do it this way... # - name: insecure conditional with embedded template consulting untrusted data # assert: # that: '"hi mom" is in {{ untrusted_result.stdout }}' - name: securely access untrusted values directly as Jinja variables instead assert: that: '"hi mom" is in untrusted_result.stdout'
Обработчики
Как документировано, если определено несколько обработчиков с одинаковым именем, последний добавленный в игру — тот, который выполняется при уведомлении. До ansible-core 2.15 это не так для обработчиков, динамически включённых в игру задачей include_role . Эта проблема решена в ansible-core 2.15, и пользователям, полагающимся на поведение ansible-core 2.14 и более ранних версий, может потребоваться соответствующим образом скорректировать свои playbooks.
В качестве примера изменения поведения рассмотрим следующее:
- include_role:
name: foo
vars:
invocation: 1
- block:
- include_role:
name: foo
vars:
invocation: 2
when: inventory_hostname == "bar"
- meta: flush_handlers
Примечание
Пример предполагает, что в роли foo есть задача, уведомляющая обработчик с именем foo_handler в роли foo.
Примечание
Тот факт, что разные переменные и/или их значения прикреплены к задачам include_role , включая одну и ту же роль, делает их различными ролями.
Примечание
Второе выполнение задачи include_role приводит к включению задач и обработчиков из роли независимо от результата условного оператора when. Условный оператор when прикреплён к block , охватывающему задачу include_role , и поэтому условный оператор when применяется ко всем задачам и обработчикам из роли после их включения в игру.
К моменту выполнения задачи flush_handlers все хосты уведомлены foo_handler при первом выполнении include_role. Кроме того, хост bar (из-за when , ограничивающего все остальные хосты) уведомил foo_handler снова во время второго выполнения include_role.
В ansible-core 2.15 последний обработчик с именем foo_handler , добавленный в игру, происходит со второго выполнения include_role , и поэтому к нему прикреплён when: inventory_hostname == "bar" , в результате чего обработчик фактически выполняется только на хосте bar и пропускается на всех остальных хостах. Следовательно, уведомления с хоста bar были дедублированы.
В ansible-core 2.14 и более ранних версиях foo_handler с первого выполнения запускается на всех хостах. Кроме того, foo_handler со второго выполнения запускается на хосте bar снова.
Командная строка
- Код возврата
ansible-galaxy searchтеперь равен 0 вместо 1, а вывод stdout пустой, когда результаты пусты, для соответствия другим командамansible-galaxy.
Устаревшие
-
Предоставление списка словарей для
vars:устарело в пользу предоставления словаря.Вместо:
vars: - var1: foo - var2: bar
Используйте:
vars: var1: foo var2: bar
Модули
Отсутствуют заметные изменения
Удаленные модули
Следующие модули больше не существуют:
- Отсутствуют заметные изменения
Замечания об устаревании
Отсутствуют заметные изменения
Заметные изменения модулей
Отсутствуют заметные изменения
Плагины
Отсутствуют заметные изменения
Перенос пользовательских скриптов
Отсутствуют заметные изменения
Сети
Отсутствуют заметные изменения
© 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_core_2.15.html