If you frequently call the same module with the same arguments, it can be useful to define default arguments for that particular module using the ``module_defaults`` attribute.
The ``module_defaults`` attribute can be used at the play, block, and task level. Any module arguments explicitly specified in a task will override any established default for that module argument::
Any module defaults set at the play level (and block/task level when using ``include_role`` or ``import_role``) will apply to any roles used, which may cause unexpected behavior in the role.
Here are some more realistic use cases for this feature.
Interacting with an API that requires auth::
- hosts: localhost
module_defaults:
uri:
force_basic_auth: true
user: some_user
password: some_password
tasks:
- uri:
url: http://some.api.host/v1/whatever1
- uri:
url: http://some.api.host/v1/whatever2
- uri:
url: http://some.api.host/v1/whatever3
Setting a default AWS region for specific EC2-related modules::
Ansible 2.7 adds a preview-status feature to group together modules that share common sets of parameters. This makes it easier to author playbooks making heavy use of API-based modules such as cloud modules.