Ansible 12 Porting Guide
Ansible 12 is based on Ansible-core 2.19.
We suggest you read this page along with the Ansible 12 Changelog to understand what updates you may need to make.
Introduction
This release includes an overhaul of the templating system and a new feature dubbed Data Tagging. These changes enable reporting of numerous problematic behaviors that went undetected in previous releases, with wide-ranging positive effects on security, performance, and user experience.
Backward compatibility has been preserved where practical, but some breaking changes were necessary. This guide describes some common problem scenarios with example content, error messsages, and suggested solutions.
We recommend you test your playbooks and roles in a staging environment with this release to determine where you may need to make changes.
Playbook
Broken Conditionals
Broken conditionals occur when the input expression or template is not a string, or the result is not a boolean.
Python and Jinja provide implicit “truthy” evaluation of most non-empty non-boolean values in conditional expressions.
While sometimes desirable for brevity, truthy conditional evaluation often masks serious logic errors in playbooks that
could not be reliably detected by previous versions of ansible-core.
Changes to templating in this release detects non-boolean conditionals during expression evaluation and reports an error
by default. The error can be temporarily reduced to a warning with the ALLOW_BROKEN_CONDITIONALS config setting.
The following examples are derived from broken conditionals that masked logic errors in actual playbooks.
Example - implicit boolean conversion
This expression relies on an implicit truthy evaluation of inventory_hostname.
An explicit predicate with a boolean result, such as | length > 0 or is truthy, should be used instead.
- assert:
that: inventory_hostname
The error reported is:
Conditional result was 'localhost' of type 'str', which evaluates to True. Conditionals must have a boolean result.
This can be resolved by using an explicit boolean conversion:
- assert:
that: inventory_hostname | length > 0
Example - unintentional truthy conditional
The second part of this conditional is erroneously quoted.
The quoted part becomes the expression result (evaluated as truthy), so the expression can never be False.
- assert:
that: inventory_hostname is defined and 'inventory_hostname | length > 0'
The error reported is:
Conditional result was 'inventory_hostname | length > 0' of type 'str', which evaluates to True. Conditionals must have a boolean result.
This can be resolved by removing the erroneous quotes:
- assert:
that: inventory_hostname is defined and inventory_hostname | length > 0
Example - expression syntax error
Previous Ansible releases could mask some expression syntax errors as a truthy result.
- assert:
that: 1 == 2,
# ^ invalid comma
The error reported is:
Syntax error in expression: chunk after expression
This can be resolved by removing the invalid comma after the expression.
Example - Jinja order of operations
This expression uses the ~ concatenation operator, which is evaluated after the contains test.
The result is always a non-empty string, which is truthy.
- assert:
that: inventory_hostname is contains "local" ~ "host"
The error reported is:
Conditional result was 'Truehost' of type 'str', which evaluates to True. Conditionals must have a boolean result.
This can be resolved by inserting parentheses to resolve the concatenation operation before the contains test:
- assert:
that: inventory_hostname is contains("local" ~ "host")
Example - dictionary as conditional
This conditional should have been quoted. In a YAML list element, an unquoted string with a space after a colon is interpreted by the YAML parser as a mapping. Non-empty mappings are always truthy.
- assert:
that:
- result.msg == "some_key: some_value"
# ^^ colon+space == problem
The error reported is:
Conditional expressions must be strings.
This can be resolved by quoting the entire assertion expression:
- assert:
that:
- 'result.msg == "some_key: some_value"'
Multi-pass templating
Embedding templates within other templates or expressions could previously result in untrusted templates being executed. The overhauled templating engine in this release no longer supports this insecure behavior.
Example - unnecessary template in expression
This conditional references a variable using a template instead of using the variable directly in the expression.
- assert:
that: 1 + {{ value }} == 2
vars:
value: 1
The error reported is:
Syntax error in expression. Template delimiters are not supported in expressions: expected token ':', got '}'
This can be resolved by referencing the variable without a template:
- assert:
that: 1 + value == 2
vars:
value: 1
Example - dynamic expression construction
This conditional is dynamically created using a template, which is expected to be evaluated as an expression.
Previously, the template was rendered by task argument templating, resulting in a plain string,
which was later evaluated by the assert action.
- assert:
that: inventory_hostname {{ comparison }} 'localhost'
vars:
comparison: ==
The error reported is:
Syntax error in expression. Template delimiters are not supported in expressions: chunk after expression
Dynamic expression construction from playbooks is insecure and unsupported.
Troubleshooting untrusted templates
By default, untrusted templates are silently ignored.
Troubleshooting trust issues with templates can be aided by enabling warnings or errors for untrusted templates.
The environment variable _ANSIBLE_TEMPLAR_UNTRUSTED_TEMPLATE_BEHAVIOR can be used to control this behavior.
Valid options are:
warning- A warning will be issued when an untrusted template is encountered.fail- An error will be raised when an untrusted template is encountered.ignore- Untrusted templates are silently ignored and used as-is. This is the default behavior.
Note
This optional warning and failure behavior is experimental and subject to change in future versions.
Loops no longer leak omit placeholders
Omit placeholders no longer leak between loop item templating and task templating.
Previously, omit placeholders could remain embedded in loop items after templating and be used as an omit for task templating.
Now, values resolving to omit are dropped immediately when loop items are templated.
To turn missing values into an omit for task templating, use | default(omit).
This solution is backward compatible with previous versions of ansible-core.
Example - missing default(omit)
The following task tries to pass omit from a loop to the task, but the value is undefined since it was omitted:
- debug:
msg: "{{ item.msg }}" # 'msg' is undefined
loop:
- msg: "{{ omit }}" # 'msg' will be omitted from the loop item
This updated task uses default(omit) on the missing value to ensure it is omitted for the task:
- debug:
msg: "{{ item.msg | default(omit) }}" # 'msg' is undefined, use 'default(omit)' to turn it into an omit
loop:
- msg: "{{ omit }}" # passed through in earlier versions, this value is now omitted from the loop item
Privilege escalation timeouts
Timeout waiting on privilege escalation (become) is now an unreachable error instead of a task error.
Existing playbooks should be changed to replace ignore_errors with ignore_unreachable on tasks where
timeout on become should be ignored.
Engine
Templating
Template trust model inversion
Previously, ansible-core implicitly trusted all string values to be rendered as Jinja templates,
but applied an “unsafe” wrapper object around strings obtained from untrusted sources (for example, module results).
Unsafe-wrapped strings were silently ignored by the template engine,
as many templating operations can execute arbitrary code on the control host as the user running ansible-core.
This required any code that operated on strings to correctly propagate the wrapper object,
which resulted in numerous CVE-worthy RCE (remote code execution) vulnerabilities.
This release inverts the previous trust model. Only strings marked as loaded from a trusted source are eligible to be rendered as templates. Untrusted values can (as before) be referenced by templates, but the template expression itself must always be trusted. While this change still requires consideration for propagation of trust markers when manipulating strings, failure to do so now results in a loss of templating ability instead of a potentially high-severity security issue.
Attempts to render a template appearing in an untrusted string will (as before) return the original string unmodified. By default, attempting to render an untrusted template fails silently, though such failures can be elevated to a warning or error via configuration.
Newly-created string results from template operations will never have trust automatically applied, though templates that return existing trusted string values unmodified will not strip their trust. It is also possible for plugins to explicitly apply trust.
Backward-compatible template trust behavior is applied automatically in most cases; for example, templates appearing in playbooks, roles, variable files, and most built-in inventory plugins will yield trusted template strings. Custom plugins that source template strings will be required to use new public APIs to apply trust where appropriate.
See Plugin API and Troubleshooting untrusted templates for additional information.
Native Jinja mode required
Previous versions supported templating in two different modes:
Jinja’s original string templating mode converted the result of each templating operation to a string.
Jinja’s native mode usually preserved variable types in template results.
In both modes, ansible-core evaluated the final template string results as Python literals, falling back to the
original string if the evaluation resulted in an error.
Selection of the templating mode was controlled by configuration, defaulting to Jinja’s original string templating.
Jinja’s native templating mode is now used exclusively. The configuration option for setting the templating mode is deprecated and no longer has any effect.
Preservation of native types in templating has been improved to correct gaps in the previous implementation, entirely eliminating the final literal evaluation pass (a frequent source of confusion, errors, and performance issues). In rare cases where playbooks relied on implicit object conversion from strings, an explicit conversion will be required.
Some existing templates may unintentionally convert non-strings to strings. In previous versions this conversion could be masked by the evaluation of strings as Python literals.
Example - unintentional string conversion
This expression erroneously passes a list to the replace filter, which operates only on strings.
The filter silently converts the list input to a string.
Due to some string results previously parsing as lists, this mistake often went undetected in earlier versions.
- debug:
msg: "{{ ['test1', 'test2'] | replace('test', 'prod') }}"
The result of this template becomes a string:
ok: [localhost] => {
"msg": "['prod1', 'prod2']"
}
This can be resolved by using the map filter to apply the replace filter to each list element:
- debug:
msg: "{{ ['test1', 'test2'] | map('replace', 'test', 'prod') }}"
The result of the corrected template remains a list:
ok: [localhost] => {
"msg": [
"prod1",
"prod2"
]
}
Example - unintentional None result
If a template evaluated to None, it was implicitly converted to an empty string in previous versions of ansible-core.
This can now result in the template evaluating to the value None.
The following example shows a case where this happens:
- set_fact:
# If 'foo' is not defined, the else branch basically evaluates to None.
# So value_none will not be an empty string, but None:
value_none: |-
{% if foo is defined %}foo is defined{% endif %}
This example can be fixed as follows:
- set_fact:
# Explicitly return an empty string in the 'else' branch.
# The value is always a string: either "foo is defined" or "".
value_none: |-
{% if foo is defined %}foo is defined{% else %}{{ "" }}{% endif %}
This adjustment is backward-compatible with older ansible-core versions.
Note
Since ansible-core 2.19.1, module options of type string accept None and convert it
to an empty string. Before ansible-core 2.18, passing None to such options resulted
in an error. This means that in most cases, expressions in roles and playbooks do not need
to be adjusted because of unintentional None results.
Lazy templating
Ansible’s interface with the Jinja templating engine has been heavily refined, yielding significant performance improvements for many complex templating operations. Previously, deeply-nested, recursive, or self-referential templating operations were always resolved to their full depth and breadth on every access, including repeated access to the same data within a single templating operation. This resulted in expensive and repetitive evaluation of the same templates within a single logical template operation, even for templates deep inside nested data structures that were never directly accessed. The new template engine lazily defers nearly all recursion and templating until values are accessed, or known to be exiting the template engine, and intermediate nested or indirected templated results are cached for the duration of the template operation, reducing repetitive templating. These changes have shown exponential performance improvements for many real-world complex templating scenarios.
Consistent handling of range
The result of using the Jinja global function range() was heavily dependent on the context in which it was used and
whether Jinja’s native mode was enabled.
To preserve the ability to use very large ranges in filter chains the result is now always a range object, which means
it cannot be returned from a template unless you convert it to a returnable type.
Example - intentional list conversion
- debug:
loop: "{{ range(0, 2) }}"
Ranges not embedded in containers would usually be converted to lists during template finalization. They will now result in this error:
Error rendering template: Type 'range' is unsupported for variable storage.
This can be resolved by making the conversion explicit:
- debug:
loop: "{{ range(0, 2) | list }}"
Example - unintentional string conversion
- debug:
msg: "{{ [range(0,2), range(7,10)] }}"
Ranges embedded in containers would usually be converted to string representations of the range object.
ok: [localhost] => {
"msg": "[range(0, 2), range(7, 10)]"
}
Attempting to do this will now result in an error; you can mimic the old behaviour by explicitly converting the container to a string, or convert the ranges to lists if you actually want to do something useful with them.
- debug:
msg: "{{ [range(0,2), range(7,10)] | string }}"
- debug:
msg: "{{ [range(0,2), range(7,10)] | map('list') }}"
Error handling
Contextual warnings and errors
Changes to internal error handling in ansible-core will be visible in many situations that result in a warning or error.
In most cases, the operational context (what was happening when the error or warning was generated)
and data element(s) involved are captured and included in user-facing messages.
Errors and warnings that occur during task execution are more consistently included in the task result, with the full
details accessible to callbacks and (in the case of errors), a minimal error message in the msg field of the result.
Due to the standardized nature of this error handling, seemingly redundant elements may appear in some error messages.
These will improve over time as other error handling improvements are made but are currently necessary to ensure proper
context is available in all error situations.
Error message contents are not considered stable, so automation that relies on them should be avoided when possible.
Variable provenance tracking
The new Data Tagging feature expands provenance tracking on variables to nearly every source. This allows for much more descriptive error messaging, as the entire chain of execution can be consulted to include contextual information about what was happening when an error occurred. In most cases, this includes file path, source lines, and column markers. Non-file variable sources such as CLI arguments, inventory plugins and environment are also supported.
Deprecation warnings on value access
New features allow most ansible-core variables and values to be tagged as deprecated.
Plugins and modules can apply these tags to augment deprecated elements of their return values with a description and
help text to suggest alternatives, which will be displayed in a runtime warning when the tagged value is accessed by,
for example, a playbook or template.
This allows for easier evolution and removal of module and fact results, and obsolete core behaviors.
For example, accessing the deprecated play_hosts magic variable will trigger a deprecation warning that suggests
the use of the ansible_play_batch variable instead.
Improved Ansible module error handling
Ansible modules implemented in Python now have exception handling provided by the AnsiballZ wrapper.
In previous versions of ansible-core, unhandled exceptions in an Ansible module simply printed a traceback and exited
without providing a standard module response, which caused the task result to contain a generic MODULE FAILURE
message and any raw output text produced by the module.
To address this, modules often implemented unnecessary try/except blocks around most code where specific error
handling was not possible, only to call AnsibleModule.fail_json with a generic failure message.
This pattern is no longer necessary, as all unhandled exceptions in Ansible Python modules are now captured by the
AnsiballZ wrapper and returned as a structured module result,
with automatic inclusion of traceback information when enabled by the controller.
Improved handling of undefined
Undefined handling has been improved to avoid situations where a Jinja plugin silently ignores undefined values.
This commonly occurs when a Jinja plugin, such as a filter or test, checks the type of a variable without accounting for the possibility of an undefined value being present.
Example - missing attribute
This task incorrectly references an undefined exists attribute from a stat result in a conditional.
The undefined value was not detected in previous versions because it is passed to the false Jinja test plugin,
which silently ignores undefined values.
As a result, this conditional could never be True in earlier versions of ansible-core,
and there was no indication that the failed_when expression was invalid.
- stat:
path: /does-not-exist
register: result
failed_when: result.exists is false
# ^ missing reference to stat
In the current release the faulty expression is detected and results in an error.
This can be corrected by adding the missing stat attribute to the conditional:
- stat:
path: /does-not-exist
register: result
failed_when: result.stat.exists is false
Displaying tracebacks
In previous ansible-core versions, tracebacks from some controller-side errors were available by increasing verbosity
with the -vvv option, but the availability and behavior was inconsistent.
This feature was also limited to errors.
Handling of errors, warnings and deprecations throughout much of the ansible-core codebase has now been standardized.
Tracebacks can be optionally collected and displayed for all exceptions, as well as at the call site of errors,
warnings, or deprecations (even in module code) using the ANSIBLE_DISPLAY_TRACEBACK environment variable.
Valid options are:
always- Tracebacks will always be displayed. This option takes precedence over others below.never- Tracebacks will never be displayed. This option takes precedence over others below.error- Tracebacks will be displayed for errors.warning- Tracebacks will be displayed for warnings other than deprecation warnings.deprecated- Tracebacks will be displayed for deprecation warnings.
Multiple options can be combined by separating them with commas.
Plugin API
Deprecating values
Plugins and Python modules can tag returned values as deprecated with the new deprecate_value function from
ansible.module_utils.datatag.
A description of the deprecated feature, optional help text, and removal timeframes can be attached to the value,
which will appear in a runtime warning if the deprecated value is referenced in an expression.
The warning message will include information about the module/plugin that applied the deprecation tag and the
location of the expression that accessed it.
from ansible.module_utils.datatag import deprecate_value
...
module.exit_json(
color_name=deprecate_value(
value="blue",
msg="The `color_name` return value is deprecated.",
help_text="Use `color_code` instead.",
),
color_code="#0000ff",
)
When accessing the color_name from the module result, the following warning will be shown
[DEPRECATION WARNING]: The `color_name` return value is deprecated. This feature will be removed from the 'ns.collection.paint' module in a future release.
Origin: /examples/use_deprecated.yml:8:14
6
7 - debug:
8 var: result.color_name
^ column 14
Use `color_code` instead.
Applying template trust to individual values
String values are no longer trusted to be rendered as templates by default. Strings loaded from playbooks, vars files,
and other built-in trusted sources are usually marked trusted by default.
Plugins that create new string instances with embedded templates must use the new trust_as_template function
from ansible.template to tag those values as originating from a trusted source to allow the templates
to be rendered.
Warning
This section and the associated public API are currently incomplete.
Applying template trust in inventory and vars plugins
Inventory plugins can set group and host variables.
In most cases, these variables are static values from external sources and do not require trust.
Values that can contain templates will require explicit trust via trust_as_template to be allowed to render,
but trust should not be applied to variable values from external sources that could be maliciously altered to include
templates.
Warning
This section and the associated public API are currently incomplete.
Raising exceptions
When raising exceptions in an exception handler, be sure to use raise ... from as appropriate.
This supersedes the use of the AnsibleError arg orig_exc to represent the cause.
Specifying orig_exc as the cause is still permitted for backward compatibility.
Failure to use raise ... from when orig_exc is set will result in a warning.
Additionally, if the two cause exceptions do not match, a warning will be issued.
Overly-broad exception handling in Jinja plugins
Jinja plugins with overly broad exception handling, such as except Exception,
may behave incorrectly when accessing the contents of variables which are containers (dict, list).
This can occur when a templated value from a variable is undefined,
is an undecryptable vaulted value, or another value which triggers lazily reported fault conditions.
Jinja plugins should catch more specific exception types where possible, and do so around the smallest reasonable portion of code. Be especially careful to avoid broad exception handling around code which accesses the contents of container variables.
Ansible custom data types
Many variable objects in ansible-core are represented by custom types.
In previous versions these could be seen as types such as:
AnsibleUnicode(a subclass ofstr)AnsibleSequence(a subclass oflist)AnsibleMapping(a subclass ofdict)
These types, and more, now have new subclasses derived from their native Python types. In most cases these types behave indistinguishably from the types they extend, and existing code should function normally. However, some Python libraries do not handle builtin object subclasses properly. Custom plugins that interact with such libraries may require changes to convert and pass the native types.
Warning
This section and the associated public API are currently incomplete.
AnsibleVaultEncryptedUnicode replaced by EncryptedString
The AnsibleVaultEncryptedUnicode type has been replaced by EncryptedString.
Plugins which create AnsibleVaultEncryptedUnicode will now receive EncryptedString instances instead.
This feature ensures backward compatibility with previous versions of ansible-core.
Plugins which perform isinstance checks, looking for AnsibleVaultEncryptedUnicode, will no longer encounter these types.
Values formerly represented by that type will now appear as a tagged str instead.
Special handling in plugins is no longer required to access the contents of these values.
No implicit conversion of non-string dict keys
In previous versions, ansible-core relied on Python’s json.dumps to implicitly convert int, float, bool and None dictionary keys to strings in various scenarios, including returning of module results.
For example, a module was allowed to contain the following code:
oid = 123
d = {oid: "value"}
module.exit_json(return_value=d)
Starting with this release, modules must explicitly convert any non-string keys to strings (for example, by using the str() Python function) before passing dictionaries to the AnsibleModule.exit_json() method of ansible-core. The above code must be changed as follows:
oid = 123
d = {str(oid): "value"}
module.exit_json(return_value=d)
If you encounter "[ERROR]: Task failed: Module failed: Key of type '<NON-STRING>' is not JSON serializable by the 'module_legacy_m2c' profile., it indicates that the module that is used in the task does not perform the required key conversion.
Command Line
No notable changes
Deprecated
No notable changes
Modules
With the changes to the templating system it is no longer possible to use the
async_statusmodule’sstartedandfinishedinteger properties as values in conditionals as booleans are required. It is recommended to usestartedandfinishedtest plugins instead, for example:
- async_status:
jid: '{{ registered_task_result.ansible_job_id }}'
register: job_result
until: job_result is finished
retries: 5
delay: 10
Modules removed
The following modules no longer exist:
No notable changes
Deprecation notices
No notable changes
Noteworthy module changes
No notable changes
Plugins
Noteworthy plugin changes
The
sshconnection plugin now supports usingSSH_ASKPASSto supply passwords for authentication as an alternative to thesshpassprogram. The default is to useSSH_ASKPASSinstead ofsshpass. This is controlled by thepassword_mechanismconfiguration for thesshconnection plugin. To switch back to usingsshpassmake one of the following changes:To your
ansible.cfgfile:[ssh_connection] password_mechanism = sshpass
By exporting an environment variable:
export ANSIBLE_SSH_PASSWORD_MECHANISM=sshpass
By setting the following variable:
ansible_ssh_password_mechanism: sshpass
Coercing unrecognized input values in the
boolfilter is deprecated. Theboolfilter now returns onlyTrueorFalse, depending on the input:True- Returned forTrue,1and case-insensitive matches on the strings: “yes”, “on”, “true”, “1”False- Returned forFalse,0and case-insensitive matches on the strings: “no”, “off”, “false”, “0”
Any other input will result in a deprecation warning. This warning will become an error in
ansible-core2.23.When a deprecation warning is issued, the return value is
Falseunless the input equals1, which can occur when the input is thefloatvalue of1.0.This filter now returns
Falseinstead ofNonewhen the input isNone. The aforementioned deprecation warning is also issued in this case.Passing nested non-scalars with embedded templates that may resolve to
Undefinedto Jinja2 filter plugins, such asdefaultandmandatory, and test plugins includingdefinedandundefinedno longer evaluate as they did in previous versions because nested non-scalars with embedded templates are templated on use only. In 2.19, this assertion passes:- assert: that: # Unlike earlier versions, complex_var is defined even though complex_var.nested is not. - complex_var is defined # Unlike earlier versions, the default value is not applied because complex_var is defined. - (complex_var | default(unused)).nested is undefined # Like earlier versions, directly accessing complex_var.nested evaluates as undefined. - complex_var.nested is undefined vars: complex_var: # Before 2.19, complex_var.nested is evaluated immediately when complex_var is accessed. # In 2.19, complex_var.nested is evaluated only when it is accessed. nested: "{{ undefined_variable }}" unused: # This variable is used only if complex_var is undefined. # This only happens in ansible-core before 2.19. nested: default
Porting custom scripts
No notable changes
Networking
No notable changes
Porting Guide for v12.1.0
Added Collections
hitachivantara.vspone_object (version 1.0.0)
ravendb.ravendb (version 1.0.3)
Major Changes
containers.podman
Add inventory plugins for buildah and podman
Add podman system connection modules
fortinet.fortios
Supported new versions 7.6.3 and 7.6.4.
Supported the authentication method when using username and password in v7.6.4.
grafana.grafana
Add SUSE support to Alloy role by @pozsa in https://github.com/grafana/grafana-ansible-collection/pull/423
Fixes to foldersFromFilesStructure option by @root-expert in https://github.com/grafana/grafana-ansible-collection/pull/351
Migrate RedHat install to ansible.builtin.package by @r65535 in https://github.com/grafana/grafana-ansible-collection/pull/431
add macOS support to alloy role by @l50 in https://github.com/grafana/grafana-ansible-collection/pull/418
replace None with [] for safe length checks by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/426
Deprecated Features
community.general
hiera lookup plugin - retrieving data with Hiera has been deprecated a long time ago; because of that this plugin will be removed from community.general 13.0.0. If you disagree with this deprecation, please create an issue in the community.general repository (https://github.com/ansible-collections/community.general/issues/4462, https://github.com/ansible-collections/community.general/pull/10779).
oci_utils module utils - utils is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/issues/10318, https://github.com/ansible-collections/community.general/pull/10652).
oci_vcn - module is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/issues/10318, https://github.com/ansible-collections/community.general/pull/10652).
oracle* doc fragments - fragments are deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/issues/10318, https://github.com/ansible-collections/community.general/pull/10652).
community.zabbix
zabbix_maintenance module - Depreicated minutes argument for time_periods
hetzner.hcloud
server_type_info - Deprecate Server Type
deprecationproperty.
purestorage.flasharray
purefa_volume_tags - Deprecated due to removal of REST 1.x support. Will be removed in Collection 2.0.0
Porting Guide for v12.0.0
Added Collections
community.proxmox (version 1.3.0)
hitachivantara.vspone_block (version 4.1.0)
microsoft.iis (version 1.0.3)
Known Issues
community.general
reveal_ansible_type filter plugin and ansible_type test plugin - note that ansible-core’s Data Tagging feature implements new aliases, such as
_AnsibleTaggedStrforstr,_AnsibleTaggedIntforint, and_AnsibleTaggedFloatforfloat(https://github.com/ansible-collections/community.general/pull/9833).
community.hrobot
storagebox* modules - the Hetzner Robot API for storage boxes is deprecated and will be sunset on July 30, 2025. The modules are currently not compatible with the new API. We will try to adjust them until then, but usage and return values might change slightly due to differences in the APIs. For the new API, an API token needs to be registered and provided as
hetzner_token(https://github.com/ansible-collections/community.hrobot/pull/166).
community.libvirt
virt_volume - check_mode is disabled. It was not fully supported in the previous code either (‘state/present’, ‘command/create’ did not support it).
dellemc.openmanage
idrac_attributes - The module accepts both the string as well as integer value for the field “SNMP.1.AgentCommunity” for iDRAC10.
idrac_diagnostics - Issue(285322) - This module doesn’t support export of diagnostics file to HTTP and HTTPS share via SOCKS proxy.
idrac_diagnostics - This module doesn’t support export of diagnostics file to HTTP and HTTPS share via SOCKS proxy.
idrac_firmware - Issue(279282) - This module does not support firmware update using HTTP, HTTPS, and FTP shares with authentication on iDRAC8.
ome_smart_fabric_uplink - Issue(186024) - The module supported by OpenManage Enterprise Modular, however it does not allow the creation of multiple uplinks of the same name. If an uplink is created using the same name as an existing uplink, then the existing uplink is modified.
ome_smart_fabric_uplink - The module supported by OpenManage Enterprise Modular, however it does not allow the creation of multiple uplinks of the same name. If an uplink is created using the same name as an existing uplink, then the existing uplink is modified.
purestorage.flasharray
All Fusion fleet members will be assumed to be at the same Purity//FA version level as the array connected to by Ansible.
FlashArray//CBS is not currently supported as a member of a Fusion fleet
vmware.vmware_rest
The lookup plugins use
cloud.common, but this collection does not support ansible-core 2.19 or higher (https://github.com/ansible-collections/vmware.vmware_rest/pull/621).
vyos.vyos
existing code for 1.3 facility protocol and facility level are not compatible, only one will be set and level is the priority.
Breaking Changes
Ansible-core
Support for the
tomllibrary has been removed from TOML inventory parsing and dumping. Usetomlifor parsing on Python 3.10. Python 3.11 and later have built-in support for parsing. Usetomli-wto support outputting inventory in TOML format.assert - The
quietargument must be a commonly-accepted boolean value. Previously, unrecognized values were silently treated as False.conditionals - Conditional expressions that result in non-boolean values are now an error by default. Such results often indicate unintentional use of templates where they are not supported, resulting in a conditional that is always true. When this option is enabled, conditional expressions which are a literal
Noneor empty string will evaluate as true, for backwards compatibility. The error can be temporarily changed to a deprecation warning by enabling theALLOW_BROKEN_CONDITIONALSconfig option.first_found lookup - When specifying
filesorpathsas a templated list containing undefined values, the undefined list elements will be discarded with a warning. Previously, the entire list would be discarded without any warning.internals - The
AnsibleLoaderandAnsibleDumperclasses for working with YAML are now factory functions and cannot be extended.internals - The
ansible.utils.native_jinjaPython module has been removed.lookup plugins - Lookup plugins called as with_(lookup) will no longer have the _subdir attribute set.
lookup plugins -
termswill always be passed torunas the first positional arg, where previously it was sometimes passed as a keyword arg when usingwith_syntax.loops - Omit placeholders no longer leak between loop item templating and task templating. Previously,
omitplaceholders could remain embedded in loop items after templating and be used as anomitfor task templating. Now, values resolving toomitare dropped immediately when loop items are templated. To turn missing values into anomitfor task templating, use| default(omit). This solution is backward-compatible with previous versions of ansible-core.modules - Ansible modules using
sys.excepthookmust use a standardtry/exceptinstead.plugins - Any plugin that sources or creates templates must properly tag them as trusted.
plugins - Custom Jinja plugins that accept undefined top-level arguments must opt in to receiving them.
plugins - Custom Jinja plugins that use
environment.getitemto retrieve undefined values will now trigger aMarkerErrorexception. This exception must be handled to allow the plugin to return aMarker, or the plugin must opt-in to acceptingMarkervalues.public API - The
ansible.vars.fact_cache.FactCachewrapper has been removed.serialization of
omitsentinel - Serialization of variables containingomitsentinels (e.g., by theto_jsonandto_yamlfilters oransible-inventory) will fail if the variable has not completed templating. Previously, serialization succeeded with placeholder strings emitted in the serialized output.set_fact - The string values “yes”, “no”, “true” and “false” were previously converted (ignoring case) to boolean values when not using Jinja2 native mode. Since Jinja2 native mode is always used, this conversion no longer occurs. When boolean values are required, native boolean syntax should be used where variables are defined, such as in YAML. When native boolean syntax is not an option, the
boolfilter can be used to parse string values into booleans.template lookup - The
convert_dataoption is deprecated and no longer has any effect. Use thefrom_jsonfilter on the lookup result instead.templating - Access to
_prefixed attributes and methods, and methods with known side effects, is no longer permitted. In cases where a matching mapping key is present, the associated value will be returned instead of an error. This increases template environment isolation and ensures more consistent behavior between the.and[]operators.templating - Conditionals and lookups which use embedded inline templates in Jinja string constants now display a warning. These templates should be converted to their expression equivalent.
templating - Many Jinja plugins (filters, lookups, tests) and methods previously silently ignored undefined inputs, which often masked subtle errors. Passing an undefined argument to a Jinja plugin or method that does not declare undefined support now results in an undefined value.
templating - Templates are always rendered in Jinja2 native mode. As a result, non-string values are no longer automatically converted to strings.
templating - Templates resulting in
Noneare no longer automatically converted to an empty string.templating - Templates with embedded inline templates that were not contained within a Jinja string constant now result in an error, as support for multi-pass templating was removed for security reasons. In most cases, such templates can be easily rewritten to avoid the use of embedded inline templates.
templating - The
allow_unsafe_lookupsoption no longer has any effect. Lookup plugins are responsible for tagging strings containing templates to allow evaluation as a template.templating - The result of the
range()global function cannot be returned from a template- it should always be passed to a filter (e.g.,random). Previously, range objects returned from an intermediate template were always converted to a list, which is inconsistent with inline consumption of range objects.templating -
#jinja2:overrides in templates with invalid override names or types are now templating errors.
amazon.aws
amazon.aws collection - Support for ansible-core < 2.17 has been dropped (https://github.com/ansible-collections/amazon.aws/pull/2601).
amazon.aws collection - Support for the
EC2_ACCESS_KEYenvironment variable was deprecated in release6.0.0and has now been removed. Please use theaccess_keyparameter orAWS_ACCESS_KEY_IDenvironment variable instead (https://github.com/ansible-collections/amazon.aws/pull/2527).amazon.aws collection - Support for the
EC2_REGIONenvironment variable was deprecated in release6.0.0and has now been removed. Please use theregionparameter orAWS_REGIONenvironment variable instead (https://github.com/ansible-collections/amazon.aws/pull/2527).amazon.aws collection - Support for the
EC2_SECRET_KEYenvironment variable was deprecated in release6.0.0and has now been removed. Please use thesecret_keyparameter orAWS_SECRET_ACCESS_KEYenvironment variable instead (https://github.com/ansible-collections/amazon.aws/pull/2527).amazon.aws collection - Support for the
EC2_SECURITY_TOKENandAWS_SECURITY_TOKENenvironment variables were deprecated in release6.0.0and have now been removed. Please use thesession_tokenparameter orAWS_SESSION_TOKENenvironment variable instead (https://github.com/ansible-collections/amazon.aws/pull/2527).amazon.aws collection - Support for the
EC2_URLandS3_URLenvironment variables were deprecated in release6.0.0and have now been removed. Please use theendpoint_urlparameter orAWS_URLenvironment variable instead (https://github.com/ansible-collections/amazon.aws/pull/2527).amazon.aws collection - The
access_token,aws_security_tokenandsecurity_tokenaliases for thesession_tokenparameter were deprecated in release6.0.0and have now been removed. Please use thesession_tokenname instead (https://github.com/ansible-collections/amazon.aws/pull/2527).amazon.aws collection - The
boto_profilealias for theprofileparameter was deprecated in release6.0.0and has now been removed. Please use theprofilename instead (https://github.com/ansible-collections/amazon.aws/pull/2527).amazon.aws collection - The
ec2_access_keyalias for theaccess_keyparameter was deprecated in release6.0.0and has now been removed. Please use theaccess_keyname instead (https://github.com/ansible-collections/amazon.aws/pull/2527).amazon.aws collection - The
ec2_regionalias for theregionparameter was deprecated in release6.0.0and has now been removed. Please use theregionname instead (https://github.com/ansible-collections/amazon.aws/pull/2527).amazon.aws collection - The
ec2_secret_keyalias for thesecret_keyparameter was deprecated in release6.0.0and has now been removed. Please use thesecret_keyname instead (https://github.com/ansible-collections/amazon.aws/pull/2527).amazon.aws collection - The
endpoint,ec2_urlands3_urlaliases for theendpoint_urlparameter were deprecated in release6.0.0and have now been removed. Please use theregionname instead (https://github.com/ansible-collections/amazon.aws/pull/2527).docs_fragments - The previously deprecated
amazon.aws.aws_credentialsdocs fragment has been removed please useamazon.aws.common.pluginsinstead (https://github.com/ansible-collections/amazon.aws/pull/2527).docs_fragments - The previously deprecated
amazon.aws.aws_regiondocs fragment has been removed please useamazon.aws.region.pluginsinstead (https://github.com/ansible-collections/amazon.aws/pull/2527).docs_fragments - The previously deprecated
amazon.aws.awsdocs fragment has been removed please useamazon.aws.common.modulesinstead (https://github.com/ansible-collections/amazon.aws/pull/2527).docs_fragments - The previously deprecated
amazon.aws.ec2docs fragment has been removed please useamazon.aws.region.modulesinstead (https://github.com/ansible-collections/amazon.aws/pull/2527).ec2_vpc_peering_info - the result key has been removed from the return value. vpc_peering_connections should be used instead (https://github.com/ansible-collections/amazon.aws/pull/2618).
module_utils.botocore - drop deprecated
boto3parameter forget_aws_region()andget_aws_connection_info(), this parameter has had no effect since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2443).module_utils.ec2 - drop deprecated
boto3parameter forget_ec2_security_group_ids_from_names()andget_aws_connection_info(), this parameter has had no effect since release 4.0.0 (https://github.com/ansible-collections/amazon.aws/pull/2603).rds_param_group - the redirect has been removed and playbooks should be updated to use rds_instance_param_group (https://github.com/ansible-collections/amazon.aws/pull/2618).
ansible.posix
firewalld - Changed the type of forward and masquerade options from str to bool (https://github.com/ansible-collections/ansible.posix/issues/582).
firewalld - Changed the type of icmp_block_inversion option from str to bool (https://github.com/ansible-collections/ansible.posix/issues/586).
community.aws
Support for
ansible-core<2.17has been dropped (https://github.com/ansible-collections/community.aws/pull/2303).The community.aws collection has dropped support for
botocore<1.31.0andboto3<1.28.0. Most modules will continue to work with older versions of the AWS SDK. However, compatibility with older versions of the SDK is not guaranteed and will not be tested. When using older versions of the SDK a warning will be emitted by Ansible (https://github.com/ansible-collections/community.aws/pull/2195).connection/aws_ssm - The connection plugin has been migrated from the
community.awscollection. Playbooks or Inventory using the Fully Qualified Collection Name for this connection plugin should be updated to useamazon.aws.aws_ssm.
community.crypto
All doc_fragments are now private to the collection and must not be used from other collections or unrelated plugins/modules. Breaking changes in these can happen at any time, even in bugfix releases (https://github.com/ansible-collections/community.crypto/pull/898).
All module_utils and plugin_utils are now private to the collection and must not be used from other collections or unrelated plugins/modules. Breaking changes in these can happen at any time, even in bugfix releases (https://github.com/ansible-collections/community.crypto/pull/887).
Ignore value of
select_crypto_backendfor all modules except acme_* and …, and always assume the valueauto. This ensures that thecryptographyversion is always checked (https://github.com/ansible-collections/community.crypto/pull/883).The validation for relative timestamps is now more strict. A string starting with
+or-must be valid, otherwise validation will fail. In the past such strings were often silently ignored, and in many cases the code which triggered the validation was not able to handle no result (https://github.com/ansible-collections/community.crypto/pull/885).acme.certificates module utils - the
retrieve_acme_v1_certificate()helper function has been removed (https://github.com/ansible-collections/community.crypto/pull/873).get_certificate - the default for
asn1_base64changed fromfalsetotrue(https://github.com/ansible-collections/community.crypto/pull/873).x509_crl - the
modeparameter no longer denotes the update mode, but the CRL file mode. Usecrl_modeinstead for the update mode (https://github.com/ansible-collections/community.crypto/pull/873).
community.hashi_vault
ansible-core - support for all end-of-life versions of
ansible-corehas been dropped. The collection is tested withansible-core>=2.17(https://github.com/ansible-collections/community.hashi_vault/issues/470).python - support for older versions of Python has been dropped. The collection is tested with all supported controller-side versions and a few lower target-side versions depending on the tests (https://github.com/ansible-collections/community.hashi_vault/issues/470).
community.okd
Remove openshift inventory plugin deprecated in 3.0.0 (https://github.com/openshift/community.okd/pull/252).
community.postgresql
postgresql_info - the
dbalias is deprecated and will be removed in the next major release, use thelogin_dbargument instead.postgresql_pg_hba - regarding #776 ‘keep_comments_at_rules’ has been deprecated and won’t do anything, the default is to keep the comments at the rules they are specified with. keep_comments_at_rules will be removed in 5.0.0 (https://github.com/ansible-collections/community.postgresql/pull/778)
postgresql_user - the
dbalias is deprecated and will be removed in the next major release, use thelogin_dbargument instead.
community.zabbix
All Roles - Remove support for Ubuntu 20.04
zabbix 6.4 in roles is no longer supported
dellemc.enterprise_sonic
sonic_aaa - Update AAA module to align with SONiC functionality (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/382).
sonic_bgp_communities - Change ‘aann’ option as a suboption of ‘members’ and update its type from string to list of strings (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/440).
sonic_route_maps - Change the ‘set ip_next_hop’ option from a single-line option to a dictionary (https://github.com/ansible-collection/dellemc.enterprise_sonic/pull/421).
sonic_vlan_mapping - New vlan_mapping resource module. The users of the vlan_mapping resource module with playbooks written for the SONiC 4.1 will need to revise their playbooks based on the new argspec to use those playbooks for SONiC 4.2 and later versions. (https://github.com/ansible-collections/dellemc.enterprise_sonic/pull/296).
hetzner.hcloud
Drop support for ansible-core 2.15.
Drop support for ansible-core 2.16.
Drop support for python 3.8.
inventory - The default value for the hostvars_prefix option is now set to hcloud_. Make sure to update all references to host variables provided by the inventory. You may revert this change by setting the hostvars_prefix option to “”.
server - The deprecated
force_upgradeargument is removed from the server module. Please use theforceargument instead.volume - Volumes are no longer detached when the server argument is not provided. Please use the
volume_attachmentmodule to manage volume attachments.
kubernetes.core
Remove deprecated
k8sinvetory plugin (https://github.com/ansible-collections/kubernetes.core/pull/867).Remove support for
ansible-core<2.16(https://github.com/ansible-collections/kubernetes.core/pull/867).
theforeman.foreman
Drop support for Ansible 2.9.
Drop support for Python 2.7 and 3.5.
vmware.vmware
drop support for ansible 2.15 since it is EOL https://github.com/ansible-collections/vmware.vmware/issues/103
updated minimum pyVmomi version to 8.0.3.0.1 https://github.com/ansible-collections/vmware.vmware/issues/56
vyos.vyos
Removed vyos_logging. Use vyos_logging_global instead.
lldp_global - if “address” is available, merge will cause it to be added, in contrast to the previous behavior where it was replaced. When used in replace mode, it will remove any existing addresses and replace them with the new one.
vyos_bgp_address_family - Support for 1.3+ VyOS only
vyos_bgp_global - Support for 1.3+ VyOS only
vyos_firewall_rules - removed p2p options as they have been removed prior to 1.3 of VyOS
vyos_firewall_rules - tcp.flags is now a list with an inversion flag to support 1.4+ firewall rules, but still supports 1.3-
vyos_lldp_global - civic_address is no longer a valid key (removed prior to 1.3)
vyos_logging_global - For 1.4, protocol is an attribute of the syslog host, not the facility
vyos_snmp_server - no longer works with versions prior to 1.3
vyos_snmp_server - parameter engine_id is no longer a user or trap_target parameter and is now a snmp_v3 parameter
vyos_snmp_server - parameters encrypted-key and plaintext-key are now encrypted-password and plaintext-password
vyos_user - explicit support for version 1.3+ only
vyos_user - removed level (and its alias, role) they were removed in 1.3
Major Changes
Ansible-core
Jinja plugins - Jinja builtin filter and test plugins are now accessible via their fully-qualified names
ansible.builtin.{name}.Task Execution / Forks - Forks no longer inherit stdio from the parent
ansible-playbookprocess.stdout,stderr, andstdinwithin a worker are detached from the terminal, and non-functional. All needs to access stdio from a fork for controller side plugins requires use ofDisplay.ansible-test - Packages beneath
module_utilscan now contain__init__.pyfiles.variables - The type system underlying Ansible’s variable storage has been significantly overhauled and formalized. Attempts to store unsupported Python object types in variables now more consistently yields early warnings or errors.
variables - To support new Ansible features, many variable objects are now represented by subclasses of their respective native Python types. In most cases, they behave indistinguishably from their original types, but some Python libraries do not handle builtin object subclasses properly. Custom plugins that interact with such libraries may require changes to convert and pass the native types.
amazon.aws
amazon.aws collection - The amazon.aws collection has dropped support for
botocore<1.34.0andboto3<1.34.0. Most modules will continue to work with older versions of the AWS SDK, however compatibility with older versions of the SDK is not guaranteed and will not be tested. When using older versions of the SDK a warning will be emitted by Ansible (https://github.com/ansible-collections/amazon.aws/pull/2426).amazon.aws collection - due to the AWS SDKs announcing the end of support for Python less than 3.8 (https://aws.amazon.com/blogs/developer/python-support-policy-updates-for-aws-sdks-and-tools/), support for Python less than 3.8 by this collection was deprecated in release 6.0.0 and removed in release 10.0.0. (https://github.com/ansible-collections/amazon.aws/pull/2426).
connection/aws_ssm - The module has been migrated from the
community.awscollection. Playbooks using the Fully Qualified Collection Name for this module should be updated to useamazon.aws.aws_ssm.
ansible.netcommon
Bumping requires_ansible to >=2.16.0, since previous ansible-core versions are EoL now.
ansible.utils
Bumping requires_ansible to >=2.16.0, since previous ansible-core versions are EoL now.
arista.eos
Bumping requires_ansible to >=2.16.0, since previous ansible-core versions are EoL now.
cisco.ios
Bumping dependencies of ansible.netcommon to >=8.1.0, since previous versions of the dependency had compatibility issues with ansible-core>=2.19.
Bumping requires_ansible to >=2.16.0, since previous ansible-core versions are EoL now.
cisco.iosxr
Bumping dependencies of ansible.netcommon to >=8.1.0, since previous versions of the dependency had compatibility issues with ansible-core>=2.19.
Bumping requires_ansible to >=2.16.0, since previous ansible-core versions are EoL now.
cisco.nxos
Bumping dependencies of ansible.netcommon to >=8.1.0, since previous versions of the dependency had compatibility issues with ansible-core>=2.19.
Bumping requires_ansible to >=2.16.0, since previous ansible-core versions are EoL now.
community.aws
community.aws collection - The community.aws collection has dropped support for
botocore<1.34.0andboto3<1.34.0. Most modules will continue to work with older versions of the AWS SDK, however compatibility with older versions of the SDK is not guaranteed and will not be tested. When using older versions of the SDK a warning will be emitted by Ansible (https://github.com/ansible-collections/amazon.aws/pull/2426).
community.libvirt
virt_volume - a new command ‘create_cidata_cdrom’ enables the creation of a cloud-init CDROM, which can be attached to a cloud-init enabled base image, for bootstrapping networking, users etc.
virt_volume - the commands create_from, delete, download, info, resize, upload, wipe, facts did not work and were not tested. They have either been refactored to work, and tested, or removed.
virt_volume - the mechanism of passing variables to the member functions was not flexible enough to cope with differing parameter requirements. All parameters are now passed as kwargs, which allows the member functions to select the parameters they need.
virt_volume - the module appears to have been derived from virt_pool, but not cleaned up to remove much non-functional code. It has been refactored to remove the pool-specific code, and to make it more flexible.
community.postgresql
the collection does not test against Python 2 and starts accepting content written in Python 3 since collection version 4.0.0 (https://github.com/ansible-collections/community.postgresql/issues/829).
community.vmware
vmware_dvswitch_pvlans - The VLAN ID type has been updated to be handled as an integer (https://github.com/ansible-collections/community.vmware/pull/2267).
community.zabbix
All Roles - Updated to support Zabbix 7.4
All Roles - Updated to support version 7.2
dellemc.openmanage
OpenManage iDRAC Ansible modules are now compatible with Ansible Core version 2.19.
idrac_attributes - This module is enhanced to support iDRAC10.
idrac_attributes - This role is enhanced to support iDRAC10.
idrac_bios - This module is enhanced to support iDRAC10.
idrac_bios - This role is enhanced to support iDRAC10.
idrac_boot - This module is enhanced to support iDRAC10.
idrac_boot - This role is enhanced to support iDRAC10.
idrac_certificates - This module is enhanced to support iDRAC10.
idrac_diagnostics - This module is enhanced to support iDRAC10.
idrac_firmware - This module is enhanced to support iDRAC10.
idrac_gather_facts - This role is enhanced to support iDRAC10.
idrac_job_queue - This role is enhanced to support iDRAC10.
idrac_lifecycle_controller_job_status_info - This module is enhanced to support iDRAC10.
idrac_lifecycle_controller_jobs - This module is enhanced to support iDRAC10.
idrac_lifecycle_controller_logs - This module is enhanced to support iDRAC10.
idrac_lifecycle_controller_status_info - This module is enhanced to support iDRAC10.
idrac_network_attributes - This module is enhanced to support iDRAC10.
idrac_reset - This module is enhanced to support iDRAC10.
idrac_reset - This role is enhanced to support iDRAC10.
idrac_secure_boot - This module is enhanced to support iDRAC10.
idrac_server_powerstate - This role is enhanced to support iDRAC10.
idrac_session - This module is enhanced to support iDRAC10.
idrac_support_assist - This module is enhanced to support iDRAC10.
idrac_syslog - This module is deprecated.
idrac_system_erase - This module is enhanced to support iDRAC10.
idrac_system_info - This module is enhanced to support iDRAC10.
idrac_user - This module is enhanced to support iDRAC10.
idrac_user - This role is enhanced to support iDRAC10.
idrac_user_info - This module is enhanced to support iDRAC10.
idrac_virtual_media - This module is enhanced to support iDRAC10.
ome_firmware - This module is enhanced to support OME 4.5.
ome_firmware_baseline - This module is enhanced to support OME 4.5.
ome_firmware_baseline_compliance_info - This module is enhanced to support OME 4.5.
ome_firmware_baseline_info - This module is enhanced to support OME 4.5.
ome_firmware_catalog - This module is enhanced to support OME 4.5.
omevv_baseline_profile - This module allows to manage baseline profile.
omevv_baseline_profile_info - This module allows to retrieve baseline profile information.
omevv_compliance_info - This module allows to retrieve firmware compliance reports.
omevv_firmware - This module allows to update firmware of the single host and single cluster.
redfish_event_subscription - This module is enhanced to support iDRAC10.
redfish_firmware - This module is enhanced to support iDRAC10.
redfish_power_state - This module is enhanced to support iDRAC10.
dellemc.unity
Adding support for Unity v5.5.
fortinet.fortios
Support check_mode on all the configuration modules.
Supported new versions 7.6.1 and 7.6.2.
Updated the examples with correct values that have minimum or maximum values.
google.cloud
google_cloud_ops_agents - role submodule removed because it prevents the collection from passing sanity and lint tests
grafana.grafana
Ability to set custom directory path for *.alloy config files by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/294
Add delete protection by @KucicM in https://github.com/grafana/grafana-ansible-collection/pull/381
Add foldersFromFilesStructure option by @root-expert in https://github.com/grafana/grafana-ansible-collection/pull/326
Add tempo role by @CSTDev in https://github.com/grafana/grafana-ansible-collection/pull/323
Add tests and support version latest by @pieterlexis-tomtom in https://github.com/grafana/grafana-ansible-collection/pull/299
Bump ansible-lint from 24.9.2 to 25.6.1 by @dependabot[bot] in https://github.com/grafana/grafana-ansible-collection/pull/391
Bump brace-expansion from 1.1.11 to 1.1.12 in the npm_and_yarn group across 1 directory by @dependabot[bot] in https://github.com/grafana/grafana-ansible-collection/pull/396
Changes for issue
Do not log grafana.ini contents when setting facts by @root-expert in https://github.com/grafana/grafana-ansible-collection/pull/325
Don’t override defaults by @56quarters in https://github.com/grafana/grafana-ansible-collection/pull/382
Don’t use a proxy when doing Alloy readiness check by @benoitc-croesus in https://github.com/grafana/grafana-ansible-collection/pull/375
Fix ‘dict object’ has no attribute ‘path’ when running with –check by @JMLX42 in https://github.com/grafana/grafana-ansible-collection/pull/283
Fix Mimir URL verify task by @parcimonic in https://github.com/grafana/grafana-ansible-collection/pull/358
Fix loki_operational_config section not getting rendered in config.yml by @olegkaspersky in https://github.com/grafana/grafana-ansible-collection/pull/330
Fix sectionless items edge case by @santilococo in https://github.com/grafana/grafana-ansible-collection/pull/303
Fix some regression introduced by v6 by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/376
Fix tags Inherit default vars by @MJurayev in https://github.com/grafana/grafana-ansible-collection/pull/341
Fix the markdown code fences for install command by @benmatselby in https://github.com/grafana/grafana-ansible-collection/pull/306
Grafana fix facts in main.yml by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/315
Make dashboard imports more flexible by @torfbolt in https://github.com/grafana/grafana-ansible-collection/pull/308
Make systemd create /var/lib/otel-collector by @pieterlexis-tomtom in https://github.com/grafana/grafana-ansible-collection/pull/336
Update Mimir README.md by @Gufderald in https://github.com/grafana/grafana-ansible-collection/pull/397
Update grafana template by @santilococo in https://github.com/grafana/grafana-ansible-collection/pull/300
Update when statement to test for dashboard files found by @hal58th in https://github.com/grafana/grafana-ansible-collection/pull/363
Use become false in find task by @santilococo in https://github.com/grafana/grafana-ansible-collection/pull/368
Validate config by @pieterlexis-tomtom in https://github.com/grafana/grafana-ansible-collection/pull/327
add catalog-info file for internal dev catalog by @theSuess in https://github.com/grafana/grafana-ansible-collection/pull/317
add loki bloom support by @voidquark in https://github.com/grafana/grafana-ansible-collection/pull/298
add publish step to GitHub Actions workflow for Ansible Galaxy by @thelooter in https://github.com/grafana/grafana-ansible-collection/pull/340
add user module to create/update/delete grafana users by @mvalois in https://github.com/grafana/grafana-ansible-collection/pull/178
alloy_readiness_check_use_https by @piotr-g in https://github.com/grafana/grafana-ansible-collection/pull/359
declare collection dependencies by @ishanjainn in https://github.com/grafana/grafana-ansible-collection/pull/390
declare collection dependencies by @kleini in https://github.com/grafana/grafana-ansible-collection/pull/386
declare collection dependencies by @kleini in https://github.com/grafana/grafana-ansible-collection/pull/392
ensure IP assert returns boolean result by @aardbol in https://github.com/grafana/grafana-ansible-collection/pull/398
ensure alerting provisioning directory exists by @derhuerst in https://github.com/grafana/grafana-ansible-collection/pull/364
force temporary directory even in check mode for dashboards.yml by @cmehat in https://github.com/grafana/grafana-ansible-collection/pull/339
grafana.ini yaml syntax by @intermittentnrg in https://github.com/grafana/grafana-ansible-collection/pull/232
improve mimir/alloy examples playbook by @smCloudInTheSky in https://github.com/grafana/grafana-ansible-collection/pull/369
integrate sles legacy init-script support by @floerica in https://github.com/grafana/grafana-ansible-collection/pull/184
management of the config.river with the conversion of the config.yaml by @lbrule in https://github.com/grafana/grafana-ansible-collection/pull/149
mark configuration deployment task with no_log by @kkantonop in https://github.com/grafana/grafana-ansible-collection/pull/380
properly validate config by @pieterlexis-tomtom in https://github.com/grafana/grafana-ansible-collection/pull/354
store APT key with .asc extension by @derhuerst in https://github.com/grafana/grafana-ansible-collection/pull/394
template ingester and querier section by @Gufderald in https://github.com/grafana/grafana-ansible-collection/pull/371
use ansible_facts instead of ansible_* variables by @kleini in https://github.com/grafana/grafana-ansible-collection/pull/296
use ansible_facts instead of variables by @kleini in https://github.com/grafana/grafana-ansible-collection/pull/365
junipernetworks.junos
Bumping requires_ansible to >=2.16.0, since previous ansible-core versions are EoL now.
netapp.ontap
library netapp-lib is now an optional requirement.
na_ontap_autoupdate_support - REST only support to enable automatic software update, requires ONTAP 9.10 or later.
na_ontap_lun - added compatibility for ASA r2 systems.
na_ontap_lun_copy - added check to prevent use on unsupported ASA r2 systems.
na_ontap_lun_map - added compatibility for ASA r2 systems.
na_ontap_lun_map_reporting_nodes - added compatibility for ASA r2 systems.
na_ontap_nvme_namespace - added compatibility for ASA r2 systems.
na_ontap_nvme_subsystem - added compatibility for ASA r2 systems.
na_ontap_s3_buckets - new option snapshot_policy added in REST, requires ONTAP 9.16.1 or later.
vmware.vmware
cluster modules - Add identifying information about the cluster managed to the output of cluster modules
folder_paths - Throw an error when a relative folder path is provided and the datacenter name is not provided
module_utils/argument_spec - make argument specs public so other collections can use them https://github.com/ansible-collections/vmware.vmware/issues/144
module_utils/clients - make client utils public so other collections can use them https://github.com/ansible-collections/vmware.vmware/issues/144
update query file to include cluster module queries
vmware.vmware_rest
Remove
cloud.commonas a dependency, so it will not be installed automatically anymore (https://github.com/ansible-collections/vmware.vmware_rest/pull/621).modules - disable turbo mode for module execution by default. Make it optional to enable it using an environment variable (https://github.com/ansible-collections/vmware.vmware_rest/issues/499)
vyos.vyos
bgp modules - Added support for 1.4+ “system-as”. 1.3 embedded as_number is still supported
vyos bgp modules - Many configuration attributes moved from bgp_global to bgp_address_family module (see documentation).
vyos_bgp_address_family - Aligned with version 1.3+ configuration - aggregate_address, maximum_paths, network, and redistribute moved from bgp_global module. These are now Address-family specific. Many neighbor attributes also moved from vyos_bgp_global to vyos_bgp_address_family module.
vyos_bgp_global - Aligned with version 1.3+ configuration - aggregate_address, maximum_paths, network, and redistribute Removed to bgp_address_family module.
vyos_user - add support for encrypted password specification
vyos_user - add support for public-key authentication
Removed Collections
cisco.asa (previously included version: 6.0.0)
cisco.ise (previously included version: 2.9.5)
cloud.common (previously included version: 4.0.0)
community.network (previously included version: 5.1.0)
ibm.spectrum_virtualize (previously included version: 2.0.0)
sensu.sensu_go (previously included version: 1.14.0)
You can still install a removed collection manually with ansible-galaxy collection install <name-of-collection>.
Removed Features
The
cisco.isecollection was considered unmaintained and has been removed from Ansible 12 (https://forum.ansible.com/t/43367). Users can still install this collection withansible-galaxy collection install cisco.ise.The collection
ibm.spectrum_virtualizehas been completely removed from Ansible. It has been renamed toibm.storage_virtualize. The collection will be completely removed from Ansible eventually. Please update your FQCNs fromibm.spectrum_virtualizetoibm.storage_virtualize.The deprecated
cisco.asacollection has been removed (https://forum.ansible.com/t/38960).The deprecated
community.networkcollection has been removed (https://forum.ansible.com/t/8030).The sensu.sensu_go collection has been removed from Ansible 12 due to violations of the Ansible inclusion requirements. The collection has unresolved sanity test failures. See Collections Removal Process for collections not satisfying the collection requirements for more details (https://forum.ansible.com/t/8380). Users can still install this collection with
ansible-galaxy collection install sensu.sensu_go.
Ansible-core
Remove deprecated plural form of collection path (https://github.com/ansible/ansible/pull/84156).
Removed deprecated STRING_CONVERSION_ACTION (https://github.com/ansible/ansible/issues/84220).
encrypt - passing unsupported passlib hashtype now raises AnsibleFilterError.
manager - remove deprecated include_delegate_to parameter from get_vars API.
modules - Modules returning non-UTF8 strings now result in an error. The
MODULE_STRICT_UTF8_RESPONSEsetting can be used to disable this check.removed deprecated pycompat24 and compat.importlib.
selector - remove deprecated compat.selector related files (https://github.com/ansible/ansible/pull/84155).
windows - removed common module functions
ConvertFrom-AnsibleJson,Format-AnsibleExceptionfrom Windows modules as they are not used and add unneeded complexity to the code.
ansible.posix
skippy - Remove skippy pluglin as it is no longer supported(https://github.com/ansible-collections/ansible.posix/issues/350).
ansible.windows
win_domain - Removed deprecated module, use
microsoft.ad.domaininsteadwin_domain_controller - Removed deprecated module, use
microsoft.ad.domain_controllerinsteadwin_domain_membership - Removed deprecated module, use
microsoft.ad.membershipinsteadwin_feature - Removed deprecated return value
restart_neededinfeature_result, usereboot_requiredinsteadwin_updates - Removed deprecated return value
filtered_reason, usefiltered_reasonsinstead
cisco.nxos
This release removes all deprecated plugins that have reached their end-of-life, including:
nxos_snmp_community
nxos_snmp_contact
nxos_snmp_host
nxos_snmp_location
nxos_snmp_user
community.crypto
All Entrust content is being removed since the Entrust service in currently being sunsetted after the sale of Entrust’s Public Certificates Business to Sectigo; see the announcement with key dates and the migration brief for customers for details. Since this process will be completed in 2025, we decided to remove all Entrust content from community.general 3.0.0 (https://github.com/ansible-collections/community.crypto/issues/895, https://github.com/ansible-collections/community.crypto/pull/901).
The collection no longer supports cryptography < 3.3 (https://github.com/ansible-collections/community.crypto/pull/878, https://github.com/ansible-collections/community.crypto/pull/882).
acme.acme module utils - the
get_default_argspec()function has been removed. Usecreate_default_argspec()instead (https://github.com/ansible-collections/community.crypto/pull/873).acme.backends module utils - the methods
get_ordered_csr_identifiers()andget_cert_information()ofCryptoBackendnow must be implemented (https://github.com/ansible-collections/community.crypto/pull/873).acme.documentation docs fragment - the
documentationdocs fragment has been removed. Use both thebasicandaccountdocs fragments inacmeinstead (https://github.com/ansible-collections/community.crypto/pull/873).acme_* modules - support for ACME v1 has been removed (https://github.com/ansible-collections/community.crypto/pull/873).
community.crypto no longer supports Ansible 2.9, ansible-base 2.10, and ansible-core versions 2.11, 2.12, 2.13, 2.14, 2.15, and 2.16. While content from this collection might still work with some older versions of ansible-core, it will not work with any Python version before 3.7 (https://github.com/ansible-collections/community.crypto/pull/870).
crypto.basic module utils - remove
CRYPTOGRAPHY_HAS_*flags. All tested features are supported since cryptography 3.0 (https://github.com/ansible-collections/community.crypto/pull/878).crypto.cryptography_support module utils - remove
cryptography_serial_number_of_cert()helper function (https://github.com/ansible-collections/community.crypto/pull/878).crypto.module_backends.common module utils - this module utils has been removed. Use the
argspecmodule utils instead (https://github.com/ansible-collections/community.crypto/pull/873).crypto.support module utils - remove
pyopensslbackend (https://github.com/ansible-collections/community.crypto/pull/874).ecs_certificate - the module has been removed. Please use community.crypto 2.x.y if you need this module (https://github.com/ansible-collections/community.crypto/pull/900).
ecs_domain - the module has been removed. Please use community.crypto 2.x.y if you need this module (https://github.com/ansible-collections/community.crypto/pull/900).
execution environment dependencies - remove PyOpenSSL dependency (https://github.com/ansible-collections/community.crypto/pull/874).
openssl_csr_pipe - the module now ignores check mode and will always behave as if check mode is not active (https://github.com/ansible-collections/community.crypto/pull/873).
openssl_pkcs12 - support for the
pyopensslbackend has been removed (https://github.com/ansible-collections/community.crypto/pull/873).openssl_privatekey_pipe - the module now ignores check mode and will always behave as if check mode is not active (https://github.com/ansible-collections/community.crypto/pull/873).
time module utils - remove
pyopensslbackend (https://github.com/ansible-collections/community.crypto/pull/874).x509_certificate - the
entrustprovider has been removed. Please use community.crypto 2.x.y if you need this provider (https://github.com/ansible-collections/community.crypto/pull/900).x509_certificate_pipe - the
entrustprovider has been removed. Please use community.crypto 2.x.y if you need this provider (https://github.com/ansible-collections/community.crypto/pull/900).x509_certificate_pipe - the module now ignores check mode and will always behave as if check mode is not active (https://github.com/ansible-collections/community.crypto/pull/873).
community.general
Dropped support for ansible-core 2.15. The collection now requires ansible-core 2.16 or newer. This means that on the controller, Python 3.10+ is required. On the target side, Python 2.7 and Python 3.6+ are supported (https://github.com/ansible-collections/community.general/pull/10160, https://github.com/ansible-collections/community.general/pull/10192).
The Proxmox content (modules and plugins) has been moved to the new collection community.proxmox. Since community.general 11.0.0, these modules and plugins have been replaced by deprecated redirections to community.proxmox. You need to explicitly install community.proxmox, for example with
ansible-galaxy collection install community.proxmox, or by installing a new enough version of the Ansible community package. We suggest to update your roles and playbooks to use the new FQCNs as soon as possible to avoid getting deprecation messages (https://github.com/ansible-collections/community.general/pull/10110).apt_rpm - the
presentandinstalledstates are no longer equivalent tolatest, but topresent_not_latest(https://github.com/ansible-collections/community.general/pull/10126).clc_* modules and doc fragment - the modules were removed since CenturyLink Cloud services went EOL in September 2023 (https://github.com/ansible-collections/community.general/pull/10126).
django_manage - the
ack_venv_creation_deprecationoption has been removed. It had no effect anymore anyway (https://github.com/ansible-collections/community.general/pull/10126).git_config - it is no longer allowed to use
state=presentwith no value to read the config value. Use thecommunity.general.git_config_infomodule instead (https://github.com/ansible-collections/community.general/pull/10126).git_config - the
list_alloption has been removed. Use thecommunity.general.git_config_infomodule instead (https://github.com/ansible-collections/community.general/pull/10126).hipchat - the module was removed since the hipchat service has been discontinued and the self-hosted variant has been End of Life since 2020 (https://github.com/ansible-collections/community.general/pull/10126).
manifold lookup plugin - the plugin was removed since the company was acquired in 2021 and service was ceased afterwards (https://github.com/ansible-collections/community.general/pull/10126).
mh.mixins.deps module utils - this module utils has been removed. Use the
depsmodule utils instead (https://github.com/ansible-collections/community.general/pull/10126).mh.mixins.vars module utils - this module utils has been removed. Use
VarDictfrom thevardictmodule utils instead (https://github.com/ansible-collections/community.general/pull/10126).mh.module_helper module utils -
AnsibleModuleandVarsMixinare no longer provided (https://github.com/ansible-collections/community.general/pull/10126).mh.module_helper module utils -
VarDictis now imported from thevardictmodule utils and no longer from the removedmh.mixins.varsmodule utils (https://github.com/ansible-collections/community.general/pull/10126).mh.module_helper module utils - the attributes
use_old_vardictandmute_vardict_deprecationfromModuleHelperhave been removed. We suggest to remove them from your modules if you no longer support community.general < 11.0.0 (https://github.com/ansible-collections/community.general/pull/10126).module_helper module utils -
StateMixin,DependencyCtxMgr,VarMeta,VarDict, andVarsMixinare no longer provided (https://github.com/ansible-collections/community.general/pull/10126).pipx - module no longer supports
pipxolder than 1.7.0 (https://github.com/ansible-collections/community.general/pull/10137).pipx_info - module no longer supports
pipxolder than 1.7.0 (https://github.com/ansible-collections/community.general/pull/10137).profitbrick* modules - the modules were removed since the supporting library is unsupported since 2021 (https://github.com/ansible-collections/community.general/pull/10126).
redfish_utils module utils - the
_init_sessionmethod has been removed (https://github.com/ansible-collections/community.general/pull/10126).stackpath_compute inventory plugin - the plugin was removed since the company and the service were sunset in June 2024 (https://github.com/ansible-collections/community.general/pull/10126).
community.libvirt
virt_volume - PoolConnection class has been removed
virt_volume - the ‘deleted’ state has been removed as its definition was not entirely accurate, and the ‘wipe’ boolean option is added to ‘state/absent’ and ‘command/delete’.
virt_volume - undocumented but unused FLAGS have been removed.
virt_volume - undocumented but unused/non-functional functions (get_status, get_status2, get_state, get_uuid, build) have been removed.
community.postgresql
postgresql_info - the db alias has been removed in
community.postgresql 4.0.0. Please use thelogin_dboption instead (https://github.com/ansible-collections/community.postgresql/issues/801).postgresql_lang - the module has been removed in
community.postgresql 4.0.0. Please use thecommunity.postgresql.postgresql_extmodule instead (https://github.com/ansible-collections/community.postgresql/issues/561).postgresql_privs - the
passwordargument has been removed incommunity.postgresql 4.0.0. Use thelogin_passwordargument instead (https://github.com/ansible-collections/community.postgresql/issues/408).postgresql_user - the
privargument has been removed incommunity.postgresql 4.0.0. Please use thecommunity.postgresql.postgresql_privsmodule to grant/revoke privileges instead (https://github.com/ansible-collections/community.postgresql/issues/493).
community.windows
win_domain_computer - Removed deprecated module, use
microsoft.ad.computerinsteadwin_domain_group - Removed deprecated module, use
microsoft.ad.groupinsteadwin_domain_group_membership - Removed deprecated module, use
microsoft.ad.membershipinsteadwin_domain_object_info - Removed deprecated module, use
microsoft.ad.object_infoinsteadwin_domain_ou - Removed deprecated module, use
microsoft.ad.ouinsteadwin_domain_user - Removed deprecated module, use
microsoft.ad.userinsteadwin_lineinfile - Removed deprecated return value
backup, usebackup_fileinsteadwin_xml - Removed deprecated, and undocumented, return value
backup, usebackup_fileinstead
junipernetworks.junos
This includes the following modules:
This release removes all deprecated plugins that have reached their end-of-life.
junos_scp
vmware.vmware
vm_list_group_by_clusters - Tombstone module in favor of vmware.vmware.vm_list_group_by_clusters_info
Deprecated Features
The
ibm.qradarcollection has been deprecated. It will be removed from Ansible 13 if no one starts maintaining it again before Ansible 13. See Collections Removal Process for unmaintained collections for more details (https://forum.ansible.com/t/44259).
Ansible-core
CLI - The
--inventory-fileoption alias is deprecated. Use the-ior--inventoryoption instead.Jinja test plugins - Returning a non-boolean result from a Jinja test plugin is deprecated.
Passing a
warnings` or ``deprecationskey toexit_jsonorfail_jsonis deprecated. UseAnsibleModule.warnorAnsibleModule.deprecateinstead.Strategy Plugins - Use of strategy plugins not provided in
ansible.builtinare deprecated and do not carry any backwards compatibility guarantees going forward. A future release will remove the ability to use external strategy plugins. No alternative for third party strategy plugins is currently planned.The
ShellModule.checksummethod is now deprecated and will be removed in ansible-core 2.23. UseActionBase._execute_remote_stat()instead.The
ansible.module_utils.common.collections.count()function is deprecated and will be removed in ansible-core 2.23. Usecollections.Counter()from the Python standard library instead.YAML parsing - Usage of the YAML 1.1
!!omapand!!pairstags is deprecated. Use standard mappings instead.YAML parsing - Usage of the undocumented
!vault-encryptedYAML tag is deprecated. Use!vaultinstead.ansible.compat.importlib_resourcesis deprecated and will be removed in ansible-core 2.23. Useimportlib.resourcesfrom the Python standard library instead.ansible.module_utils.compat.datetime- The datetime compatibility shims are now deprecated. They are scheduled to be removed inansible-corev2.21. This includesUTC,utcfromtimestamp()andutcnowimportable from said module (https://github.com/ansible/ansible/pull/81874).bool filter - Support for coercing unrecognized input values (including None) has been deprecated. Consult the filter documentation for acceptable values, or consider use of the
truthyandfalsytests.cache plugins - The ansible.plugins.cache.base Python module is deprecated. Use ansible.plugins.cache instead.
callback plugins - The v2_on_any callback method is deprecated. Use specific callback methods instead.
callback plugins - The v1 callback API (callback methods not prefixed with v2_) is deprecated. Use v2_ prefixed methods instead.
conditionals - Conditionals using Jinja templating delimiters (e.g.,
{{,{%) should be rewritten as expressions without delimiters, unless the entire conditional value is a single template that resolves to a trusted string expression. This is useful for dynamic indirection of conditional expressions, but is limited to trusted literal string expressions.config - The
ACTION_WARNINGSconfig has no effect. It previously disabled command warnings, which have since been removed.config - The
DEFAULT_ALLOW_UNSAFE_LOOKUPSconfiguration option is deprecated and no longer has any effect. Ansible templating no longer encounters situations where use of lookup plugins is considered “unsafe”.config - The
DEFAULT_JINJA2_NATIVEoption has no effect. Jinja2 native mode is now the default and only option.config - The
DEFAULT_NULL_REPRESENTATIONoption has no effect. Null values are no longer automatically converted to another value during templating of single variable references.config - The
DEFAULT_UNDEFINED_VAR_BEHAVIORconfiguration option is deprecated and no longer has any effect. Attempting to use an undefined variable where undefined values are unexpected is now always an error. This behavior was enabled by default in previous versions, and disabling it yielded inconsistent results.config - The
STRING_TYPE_FILTERSconfiguration option is deprecated and no longer has any effect. Since the template engine now always preserves native types, there is no longer a risk of unintended conversion from strings to native types.config - Using the
DEFAULT_JINJA2_EXTENSIONSconfiguration option to enable Jinja2 extensions is deprecated. Previously, custom Jinja extensions were disabled by default, as they can destabilize the Ansible templating environment. Templates should only make use of filter, test and lookup plugins.config - Using the
DEFAULT_MANAGED_STRconfiguration option to customize the value of theansible_managedvariable is deprecated. Theansible_managedvariable can now be set the same as any other variable.display - The
Display.get_deprecation_messagemethod has been deprecated. CallDisplay.deprecatedto display a deprecation message, or call it withremoved=Trueto raise anAnsibleError.file loading - Loading text files with
DataLoadercontaining data that cannot be decoded under the expected encoding is deprecated. In most cases the encoding must be UTF-8, although some plugins allow choosing a different encoding. Previously, invalid data was silently wrapped in Unicode surrogate escape sequences, often resulting in later errors or other data corruption.first_found lookup - Splitting of file paths on
,;:is deprecated. Pass a list of paths instead. Thesplitmethod on strings can be used to split variables into a list as needed.interpreter discovery - The
auto_legacyandauto_legacy_silentoptions forINTERPRETER_PYTHONare deprecated. Useautoorauto_silentoptions instead, as they have the same effect.inventory plugins - Setting invalid Ansible variable names in inventory plugins is deprecated.
oneline callback - The
onelinecallback and its associated ad-hoc CLI args (-o,--one-line) are deprecated.paramiko - The paramiko connection plugin has been deprecated with planned removal in 2.21.
playbook - The
timedout.frametask result value (injected when a task timeout occurs) is deprecated. Includeerrorin theDISPLAY_TRACEBACKconfig value to capture a full Python traceback for timed out actions.playbook syntax - Specifying the task
argskeyword without a value is deprecated.playbook syntax - Using
key=valueargs and the taskargskeyword on the same task is deprecated.playbook syntax - Using a mapping with the
actionkeyword is deprecated. (https://github.com/ansible/ansible/issues/84101)playbook variables - The
play_hostsvariable has been deprecated, useansible_play_batchinstead.plugin error handling - The
AnsibleErrorconstructor argsuppress_extended_erroris deprecated. Usingsuppress_extended_error=Truehas the same effect asshow_content=False.plugins - Accessing plugins with
_-prefixed filenames without the_prefix is deprecated.public API - The
ansible.errors.AnsibleFilterTypeErrorexception type has been deprecated. UseAnsibleTypeErrorinstead.public API - The
ansible.errors._AnsibleActionDoneexception type has been deprecated. Action plugins should return a task result dictionary in success cases instead of raising.public API - The
ansible.module_utils.common.json.json_dumpfunction is deprecated. Call Python stdlibjson.dumpsinstead, withclsset to an Ansible profile encoder type fromansible.module_utils.common.json.get_encoder.template lookup - The jinja2_native option is no longer used in the Ansible Core code base. Jinja2 native mode is now the default and only option.
templating - Support for enabling Jinja2 extensions (not plugins) has been deprecated.
templating - The
disable_lookupsoption has no effect, since plugins must be updated to apply trust before any templating can be performed.tree callback - The
treecallback and its associated ad-hoc CLI args (-t,--tree) are deprecated.
amazon.aws
autoscaling_group - the
decrement_desired_capacityparameter has been deprecated and will be removed in release 14.0.0 of this collection. Management of instances attached an autoscaling group can be performed using theamazon.aws.autoscaling_instancemodule (https://github.com/ansible-collections/amazon.aws/pull/2396).autoscaling_group - the
replace_batch_size,lc_checkandlt_checkparameters have been deprecated and will be removed in release 14.0.0 of this collection. Rolling replacement of instances in an autoscaling group can be performed using theamazon.aws.autoscaling_instance_refreshmodule (https://github.com/ansible-collections/amazon.aws/pull/2396).autoscaling_group - the functionality provided through the
detach_instancesparameter has been deprecated and will be removed in release 14.0.0 of this collection. Management of instances attached an autoscaling group can be performed using theamazon.aws.autoscaling_instancemodule (https://github.com/ansible-collections/amazon.aws/pull/2396).autoscaling_group - the functionality provided through the
replace_all_instancesparameter has been deprecated and will be removed in release 14.0.0 of this collection. Rolling replacement of instances in an autoscaling group can be performed using theamazon.aws.autoscaling_instance_refreshmodule (https://github.com/ansible-collections/amazon.aws/pull/2396).autoscaling_group - the functionality provided through the
replace_instancesparameter has been deprecated and will be removed in release 14.0.0 of this collection. Management of instances attached an autoscaling group can be performed using theamazon.aws.autoscaling_instancemodule (https://github.com/ansible-collections/amazon.aws/pull/2396).
ansible.netcommon
Added deprecation warnings for the above plugins, displayed when running respective filter plugins.
parse_cli_textfsm filter plugin is deprecated and will be removed in a future release after 2027-02-01. Use ansible.utils.cli_parse with the ansible.utils.textfsm_parser parser as a replacement.
parse_cli filter plugin is deprecated and will be removed in a future release after 2027-02-01. Use ansible.utils.cli_parse as a replacement.
parse_xml filter plugin is deprecated and will be removed in a future release after 2027-02-01. Use ansible.utils.cli_parse with the ansible.utils.xml_parser parser as a replacement.
cisco.ios
ios_vlans - deprecate mtu, please use ios_interfaces to configure mtu to the interface where vlans is applied.
cisco.nxos
nxos_hsrp - deprecate nxos.nxos.nxos_hsrp in favor of nxos.nxos.nxos_hsrp_interfaces.
nxos_vrf_interface - deprecate nxos.nxos.nxos_vrf_interface in favor of nxos.nxos.nxos_vrf_interfaces.
community.aws
community.aws collection - due to the AWS SDKs announcing the end of support for Python less than 3.8 (https://aws.amazon.com/blogs/developer/python-support-policy-updates-for-aws-sdks-and-tools/) support for Python less than 3.8 by this collection has been deprecated and will removed in release 10.0.0 (https://github.com/ansible-collections/community.aws/pull/2195).
community.crypto
Support for ansible-core 2.11, 2.12, 2.13, 2.14, 2.15, and 2.16 is deprecated, and will be removed in the next major release (community.crypto 3.0.0). Some modules might still work with some of these versions afterwards, but we will no longer keep compatibility code that was needed to support them. Note that this means that support for all Python versions before 3.7 will be dropped, also on the target side (https://github.com/ansible-collections/community.crypto/issues/559, https://github.com/ansible-collections/community.crypto/pull/839).
Support for cryptography < 3.4 is deprecated, and will be removed in the next major release (community.crypto 3.0.0). Some modules might still work with older versions of cryptography, but we will no longer keep compatibility code that was needed to support them (https://github.com/ansible-collections/community.crypto/issues/559, https://github.com/ansible-collections/community.crypto/pull/839).
acme_certificate - deprecate the
agreementoption which has no more effect. It will be removed from community.crypto 4.0.0 (https://github.com/ansible-collections/community.crypto/pull/891).acme_certificate - the option
modify_account’s default valuetruehas been deprecated. It will change tofalsein community.crypto 4.0.0. We recommend to set the option to an explicit value to avoid deprecation warnings, and to prefer setting it tofalsealready now. Better use thecommunity.crypto.acme_accountmodule instead (https://github.com/ansible-collections/community.crypto/issues/924).openssl_pkcs12 - deprecate the
maciter_sizeoption which has no more effect. It will be removed from community.crypto 4.0.0 (https://github.com/ansible-collections/community.crypto/pull/891).openssl_pkcs12 - the PyOpenSSL based backend is deprecated and will be removed from community.crypto 3.0.0. From that point on you need cryptography 3.0 or newer to use this module (https://github.com/ansible-collections/community.crypto/issues/667, https://github.com/ansible-collections/community.crypto/pull/831).
community.general
MH module utils - attribute
debugdefinition in subclasses of MH is now deprecated, as that name will become a delegation toAnsibleModulein community.general 12.0.0, and any such attribute will be overridden by that delegation in that version (https://github.com/ansible-collections/community.general/pull/9577).The proxmox content (modules and plugins) is being moved to the new collection community.proxmox. In community.general 11.0.0, these modules and plugins will be replaced by deprecated redirections to community.proxmox. You need to explicitly install community.proxmox, for example with
ansible-galaxy collection install community.proxmox. We suggest to update your roles and playbooks to use the new FQCNs as soon as possible to avoid getting deprecation messages (https://github.com/ansible-collections/community.general/pull/10109).atomic_container - module is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/9487).
atomic_host - module is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/9487).
atomic_image - module is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/9487).
bearychat - module is deprecated and will be removed in community.general 12.0.0 (https://github.com/ansible-collections/community.general/issues/10514).
catapult - module is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/issues/10318, https://github.com/ansible-collections/community.general/pull/10329).
cpanm - deprecate
mode=compatibility,mode=newshould be used instead (https://github.com/ansible-collections/community.general/pull/10434).facter - module is deprecated and will be removed in community.general 12.0.0, use
community.general.facter_factsinstead (https://github.com/ansible-collections/community.general/pull/9451).github_repo - deprecate
force_defaults=true(https://github.com/ansible-collections/community.general/pull/10435).locale_gen -
ubuntu_mode=True, ormechanism=ubuntu_legacyis deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/9238).manifold lookup plugin - plugin is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/10028).
opkg - deprecate value
""for parameterforce(https://github.com/ansible-collections/community.general/pull/9172).pacemaker_cluster - the parameter
statewill become a required parameter in community.general 12.0.0 (https://github.com/ansible-collections/community.general/pull/10227).pipx module_utils - function
make_process_list()is deprecated and will be removed in community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/10031).profitbricks - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733).
profitbricks_datacenter - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733).
profitbricks_nic - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733).
profitbricks_volume - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733).
profitbricks_volume_attachments - module is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/9733).
pure module utils - the module utils is deprecated and will be removed from community.general 12.0.0. The modules using this were removed in community.general 3.0.0 (https://github.com/ansible-collections/community.general/pull/9432).
purestorage doc fragments - the doc fragment is deprecated and will be removed from community.general 12.0.0. The modules using this were removed in community.general 3.0.0 (https://github.com/ansible-collections/community.general/pull/9432).
redfish_utils module utils - deprecate method
RedfishUtils._init_session()(https://github.com/ansible-collections/community.general/pull/9190).rocketchat - the default value for
is_pre740, currentlytrue, is deprecated and will change tofalsein community.general 13.0.0 (https://github.com/ansible-collections/community.general/pull/10490).sensu_check - module is deprecated and will be removed in community.general 13.0.0, use collection
sensu.sensu_goinstead (https://github.com/ansible-collections/community.general/pull/9483).sensu_client - module is deprecated and will be removed in community.general 13.0.0, use collection
sensu.sensu_goinstead (https://github.com/ansible-collections/community.general/pull/9483).sensu_handler - module is deprecated and will be removed in community.general 13.0.0, use collection
sensu.sensu_goinstead (https://github.com/ansible-collections/community.general/pull/9483).sensu_silence - module is deprecated and will be removed in community.general 13.0.0, use collection
sensu.sensu_goinstead (https://github.com/ansible-collections/community.general/pull/9483).sensu_subscription - module is deprecated and will be removed in community.general 13.0.0, use collection
sensu.sensu_goinstead (https://github.com/ansible-collections/community.general/pull/9483).slack - the default value
autoof theprepend_hashoption is deprecated and will change toneverin community.general 12.0.0 (https://github.com/ansible-collections/community.general/pull/9443).stackpath_compute inventory plugin - plugin is deprecated and will be removed in community.general 11.0.0 (https://github.com/ansible-collections/community.general/pull/10026).
yaml callback plugin - deprecate plugin in favor of
result_format=yamlin pluginansible.bulitin.default(https://github.com/ansible-collections/community.general/pull/9456).yaml callback plugin - the YAML callback plugin was deprecated for removal in community.general 13.0.0. Since it needs to use ansible-core internals since ansible-core 2.19 that are changing a lot, we will remove this plugin already from community.general 12.0.0 to ease the maintenance burden (https://github.com/ansible-collections/community.general/pull/10213).
community.hashi_vault
ansible-core - support for several
ansible-coreversions will be dropped inv7.0.0. The collection will focus on current supported versions ofansible-coregoing forward and more agressively drop end-of-life or soon-to-be EOL versions (https://docs.ansible.com/ansible/devel/reference_appendices/release_and_maintenance.html).python - support for several
pythonversions will be dropped inv7.0.0. The collection will focus onpythonversions that are supported by the active versions ofansible-coreon the controller side at a minimum, and some subset of target versions (https://docs.ansible.com/ansible/devel/reference_appendices/release_and_maintenance.html).
community.hrobot
boot - the various
archsuboptions have been deprecated and will be removed from community.hrobot 3.0.0 (https://github.com/ansible-collections/community.hrobot/pull/134).
community.postgresql
postgresql modules - the
portalias is deprecated and will be removed incommunity.postgresql 5.0.0, use thelogin_portargument instead.postgresql modules = the
login,unix_socketandhostaliases are deprecated and will be removed incommunity.postgresql 5.0.0, use thelogin_user,login_unix_socketandlogin_hostarguments instead.postgresql_copy - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_db - the
renamechoice of the state option is deprecated and will be removed in version 5.0.0, use thepostgresql_querymodule instead.postgresql_ext - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_idx - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_membership - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_owner - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_ping - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_privs - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_publication - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_query - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_schema - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_script - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_sequence - the
rename_tooption is deprecated and will be removed in version 5.0.0, use thepostgresql_querymodule instead.postgresql_sequence - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_set - the module has been deprecated and will be removed in
community.postgresql 5.0.0. Please use thecommunity.postgresql.postgresql_alter_systemmodule instead (https://github.com/ansible-collections/community.postgresql/issues/823).postgresql_set - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_slot - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_subscription - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_table - the
renameoption is deprecated and will be removed in version 5.0.0, use thepostgresql_query moduleinstead.postgresql_table - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_tablespace - the
rename_tooption is deprecated and will be removed in version 5.0.0, use thepostgresql_querymodule instead.postgresql_tablespace - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
postgresql_user_obj_stat_info - the parameter aliases db and database are deprecated and will be removed in community.postgresql 5.0.0. Use login_db instead.
community.vmware
module_utils.vmware - Deprecate
connect_to_api(https://github.com/ansible-collections/community.vmware/pull/2372).module_utils.vmware - host_version_at_least is deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2303).
plugin_utils.inventory - this plugin util is deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2304).
plugins.httpapi - this is deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2306).
vcenter_folder - the module has been deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2340).
vm_device_helper.py - is_nvdimm_controller is deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2311).
vm_device_helper.py - is_nvdimm_device is deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2311).
vmware - find_host_portgroup_by_name is deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2311).
vmware - find_vmdk_file is deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2311).
vmware - network_exists_by_name is deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2311).
vmware - vmdk_disk_path_split is deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2311).
vmware_cluster_ha - the module has been deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2321).
vmware_cluster_info - the module has been deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2260).
vmware_content_deploy_ovf_template - the module has been deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2332).
vmware_content_deploy_template - the module has been deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2332).
vmware_content_library_manager - the module has been deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2345).
vmware_dvs_portgroup -
mac_learningis deprecated in favour ofnetwork_policy.mac_learning(https://github.com/ansible-collections/community.vmware/pull/2360).vmware_guest_powerstate - the module has been deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2398).
vmware_host - the module has been deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2337).
vmware_host_inventory - the inventory plugin is deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2283).
vmware_maintenancemode - the module has been deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2293).
vmware_rest_client - get_folder_by_name is deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2311).
vmware_vm_inventory - the inventory plugin is deprecated and will be removed in community.vmware 7.0.0 (https://github.com/ansible-collections/community.vmware/pull/2283).
community.windows
win_audit_policy_system - Deprecated module and will be redirected to
ansible.windows.win_audit_policy_system. Useansible.windows.win_audit_policy_systeminstead as the redirection will be removed in 4.0.0win_audit_rule - Deprecated module and will be redirected to
ansible.windows.win_audit_rule. Useansible.windows.win_audit_ruleinstead as the redirection will be removed in 4.0.0win_auto_logon - Deprecated module and will be redirected to
ansible.windows.win_auto_logon. Useansible.windows.win_auto_logoninstead as the redirection will be removed in 4.0.0win_certificate_info - Deprecated module and will be redirected to
ansible.windows.win_certificate_info. Useansible.windows.win_certificate_infoinstead as the redirection will be removed in 4.0.0win_computer_description - Deprecated module and will be redirected to
ansible.windows.win_computer_description. Useansible.windows.win_computer_descriptioninstead as the redirection will be removed in 4.0.0win_credential - Deprecated module and will be redirected to
ansible.windows.win_credential. Useansible.windows.win_credentialinstead as the redirection will be removed in 4.0.0win_dhcp_lease - Deprecated module and will be redirected to
ansible.windows.win_dhcp_lease. Useansible.windows.win_dhcp_leaseinstead as the redirection will be removed in 4.0.0win_dns_record - Deprecated module and will be redirected to
ansible.windows.win_dns_record. Useansible.windows.win_dns_recordinstead as the redirection will be removed in 4.0.0win_dns_zone - Deprecated module and will be redirected to
ansible.windows.win_dns_zone. Useansible.windows.win_dns_zoneinstead as the redirection will be removed in 4.0.0win_eventlog - Deprecated module and will be redirected to
ansible.windows.win_eventlog. Useansible.windows.win_eventloginstead as the redirection will be removed in 4.0.0win_feature_info - Deprecated module and will be redirected to
ansible.windows.win_feature_info. Useansible.windows.win_feature_infoinstead as the redirection will be removed in 4.0.0win_file_compression - Deprecated module and will be redirected to
ansible.windows.win_file_compression. Useansible.windows.win_file_compressioninstead as the redirection will be removed in 4.0.0win_firewall - Deprecated module and will be redirected to
ansible.windows.win_firewall. Useansible.windows.win_firewallinstead as the redirection will be removed in 4.0.0win_hosts - Deprecated module and will be redirected to
ansible.windows.win_hosts. Useansible.windows.win_hostsinstead as the redirection will be removed in 4.0.0win_hotfix - Deprecated module and will be redirected to
ansible.windows.win_hotfix. Useansible.windows.win_hotfixinstead as the redirection will be removed in 4.0.0win_http_proxy - Deprecated module and will be redirected to
ansible.windows.win_http_proxy. Useansible.windows.win_http_proxyinstead as the redirection will be removed in 4.0.0win_iis_virtualdirectory - Deprecated module, use
microsoft.iis.virtual_directoryinstead as the module will be removed in 4.0.0win_iis_webapplication - Deprecated module, use
microsoft.iis.web_applicationinstead instead as the module will be removed in 4.0.0win_iis_webapppool - Deprecated module, use
microsoft.iis.web_app_poolinstead instead as the module will be removed in 4.0.0win_iis_webbinding - Deprecated module, use
microsoft.iis.websiteinstead instead as the module will be removed in 4.0.0win_iis_website - Deprecated module, use
microsoft.iis.websiteinstead instead as the module will be removed in 4.0.0win_inet_proxy - Deprecated module and will be redirected to
ansible.windows.win_inet_proxy. Useansible.windows.win_inet_proxyinstead as the redirection will be removed in 4.0.0win_listen_ports_facts - Deprecated module and will be redirected to
ansible.windows.win_listen_ports_facts. Useansible.windows.win_listen_ports_factsinstead as the redirection will be removed in 4.0.0win_mapped_drive - Deprecated module and will be redirected to
ansible.windows.win_mapped_drive. Useansible.windows.win_mapped_driveinstead as the redirection will be removed in 4.0.0win_product_facts - Deprecated module and will be redirected to
ansible.windows.win_product_facts. Useansible.windows.win_product_factsinstead as the redirection will be removed in 4.0.0win_region - Deprecated module and will be redirected to
ansible.windows.win_region. Useansible.windows.win_regioninstead as the redirection will be removed in 4.0.0win_route - Deprecated module and will be redirected to
ansible.windows.win_route. Useansible.windows.win_routeinstead as the redirection will be removed in 4.0.0win_timezone - Deprecated module and will be redirected to
ansible.windows.win_timezone. Useansible.windows.win_timezoneinstead as the redirection will be removed in 4.0.0win_user_profile - Deprecated module and will be redirected to
ansible.windows.win_user_profile. Useansible.windows.win_user_profileinstead as the redirection will be removed in 4.0.0
community.zabbix
Web Role - Depricated zabbix_web_SSLSessionCacheTimeout for zabbix_web_ssl_session_cache_timeout
Web Role - Depricated zabbix_web_SSLSessionCache for zabbix_web_ssl_session_cache
vmware.vmware_rest
content_library_item_info - the module has been deprecated and will be removed in vmware.vmware_rest 5.0.0
lookup plugins - Deprecate all lookup plugins in favor of vmware.vmware.moid_from_path (https://github.com/ansible-collections/vmware.vmware_rest/pull/608)
vyos.vyos
vyos_bgp_global - no_ipv4_unicast - deprecated for use with VyOS 1.4+, use ipv4_unicast instead
vyos_firewall_interfaces - deprecated for use with VyOS 1.4+, firewalls are no longer connected directly to interfaces. See the Firewall Configuration documentation for how to establish a connection betwen the firewall rulesets and the flow, interface, or zone.
vyos_lldp_global - address is deprecated, use addresses instead. To be removed in 7.0.0.
vyos_logging_global - protocol is deprecated for 1.4 and later, use facility instead. To be removed in next major version where supprot for 1.3 is removed