This section discusses the behavioral changes between Ansible 2.6 and Ansible 2.7.
It is intended to assist in updating your playbooks, plugins and other parts of your Ansible infrastructure so they will work with this version of Ansible.
We suggest you read this page along with Ansible Changelog for 2.7 to understand what updates you may need to make.
This document is part of a collection on porting. The complete list of porting guides can be found at porting guides.
Topics
Ansible 2.7 makes a small change to variable precedence when loading roles, resolving a bug, ensuring that role loading matches variable precedence expectations.
Before Ansible 2.7, when loading a role, the variables defined in the role's vars/main.yml
and defaults/main.yml
were not available when parsing the role's tasks/main.yml
file. This prevented the role from utilizing these variables when being parsed. The problem manifested when import_tasks
or import_role
was used with a variable defined in the role's vars or defaults.
In Ansible 2.7, role vars
and defaults
are now parsed before tasks/main.yml
. This can cause a change in behavior if the same variable is defined at the play level and the role level with different values, and leveraged in import_tasks
or import_role
to define the role or file to import.
The use of squash_actions
to invoke a package module, such as "yum", to only invoke the module once is deprecated, and will be removed in Ansible 2.11.
Instead of relying on implicit squashing, tasks should instead supply the list directly to the name
, pkg
or package
parameter of the module. This functionality has been supported in most modules since Ansible 2.3.
OLD In Ansible 2.6 (and earlier) the following task would invoke the "yum" module only 1 time to install multiple packages
- name: Install packages
yum:
name: "{{ item }}"
state: present
with_items: "{{ packages }}"
NEW In Ansible 2.7 it should be changed to look like this:
- name: Install packages
yum:
name: "{{ packages }}"
state: present
Major changes in popular modules are detailed here
/var/log/messages
, even if you set DEFAULT_SYSLOG_FACILITY.
Ansible 2.7 fixes this bug, routing all Ansible log messages according to the value set for
DEFAULT_SYSLOG_FACILITY. If you have DEFAULT_SYSLOG_FACILITY configured, the
location of remote logs on systems which use journald may change.lineinfile
module was changed to show a warning when using an empty string as a regexp.
Since an empty regexp matches every line in a file, it will replace the last line in a file rather
than inserting. If this is the desired behavior, use '^'
which will match every line and
will not trigger the warning.The following modules no longer exist:
The following modules will be removed in Ansible 2.10. Please update your playbooks accordingly.
No notable changes.
No notable changes.
No notable changes.