Support for module param defaults (#22648)
This commit is contained in:
parent
f9bd29fe4d
commit
8673e1e661
4 changed files with 104 additions and 0 deletions
|
@ -521,6 +521,18 @@ class TaskExecutor:
|
||||||
# get handler
|
# get handler
|
||||||
self._handler = self._get_action_handler(connection=self._connection, templar=templar)
|
self._handler = self._get_action_handler(connection=self._connection, templar=templar)
|
||||||
|
|
||||||
|
# Apply default params for action/module, if present
|
||||||
|
# These are collected as a list of dicts, so we need to merge them
|
||||||
|
module_defaults = {}
|
||||||
|
for default in self._task.module_defaults:
|
||||||
|
module_defaults.update(default)
|
||||||
|
if module_defaults:
|
||||||
|
module_defaults = templar.template(module_defaults)
|
||||||
|
if self._task.action in module_defaults:
|
||||||
|
tmp_args = module_defaults[self._task.action].copy()
|
||||||
|
tmp_args.update(self._task.args)
|
||||||
|
self._task.args = tmp_args
|
||||||
|
|
||||||
# And filter out any fields which were set to default(omit), and got the omit token value
|
# And filter out any fields which were set to default(omit), and got the omit token value
|
||||||
omit_token = variables.get('omit')
|
omit_token = variables.get('omit')
|
||||||
if omit_token is not None:
|
if omit_token is not None:
|
||||||
|
|
|
@ -152,6 +152,9 @@ class Base(with_metaclass(BaseMeta, object)):
|
||||||
# variables
|
# variables
|
||||||
_vars = FieldAttribute(isa='dict', priority=100, inherit=False)
|
_vars = FieldAttribute(isa='dict', priority=100, inherit=False)
|
||||||
|
|
||||||
|
# module default params
|
||||||
|
_module_defaults = FieldAttribute(isa='list', extend=True, prepend=True)
|
||||||
|
|
||||||
# flags and misc. settings
|
# flags and misc. settings
|
||||||
_environment = FieldAttribute(isa='list', extend=True, prepend=True)
|
_environment = FieldAttribute(isa='list', extend=True, prepend=True)
|
||||||
_no_log = FieldAttribute(isa='bool')
|
_no_log = FieldAttribute(isa='bool')
|
||||||
|
|
0
test/integration/targets/module_defaults/aliases
Normal file
0
test/integration/targets/module_defaults/aliases
Normal file
89
test/integration/targets/module_defaults/tasks/main.yml
Normal file
89
test/integration/targets/module_defaults/tasks/main.yml
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
- name: main block
|
||||||
|
vars:
|
||||||
|
test_file: /tmp/ansible-test.module_defaults.foo
|
||||||
|
module_defaults:
|
||||||
|
debug:
|
||||||
|
msg: test default
|
||||||
|
file:
|
||||||
|
path: '{{ test_file }}'
|
||||||
|
block:
|
||||||
|
- debug:
|
||||||
|
register: foo
|
||||||
|
|
||||||
|
- name: test that 'debug' task used default 'msg' param
|
||||||
|
assert:
|
||||||
|
that: foo.msg == "test default"
|
||||||
|
|
||||||
|
- name: remove test file
|
||||||
|
file:
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: touch test file
|
||||||
|
file:
|
||||||
|
state: touch
|
||||||
|
|
||||||
|
- name: stat test file
|
||||||
|
stat:
|
||||||
|
path: '{{ test_file }}'
|
||||||
|
register: foo
|
||||||
|
|
||||||
|
- name: check that test file exists
|
||||||
|
assert:
|
||||||
|
that: foo.stat.exists
|
||||||
|
|
||||||
|
- name: remove test file
|
||||||
|
file:
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: test that module defaults from parent are inherited and merged
|
||||||
|
module_defaults:
|
||||||
|
# Meaningless values to make sure that 'module_defaults' gets
|
||||||
|
# evaluated for this block
|
||||||
|
foo:
|
||||||
|
bar: baz
|
||||||
|
block:
|
||||||
|
- debug:
|
||||||
|
register: foo
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that: foo.msg == "test default"
|
||||||
|
|
||||||
|
- name: test that we can override module defaults inherited from parent
|
||||||
|
module_defaults:
|
||||||
|
debug:
|
||||||
|
msg: "different test message"
|
||||||
|
block:
|
||||||
|
- debug:
|
||||||
|
register: foo
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that: foo.msg == "different test message"
|
||||||
|
|
||||||
|
- name: test that module defaults inherited from parent can be removed
|
||||||
|
module_defaults:
|
||||||
|
debug: {}
|
||||||
|
block:
|
||||||
|
- debug:
|
||||||
|
register: foo
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
foo.msg == "Hello world!"
|
||||||
|
|
||||||
|
- name: test that module defaults can be overridden by module params
|
||||||
|
block:
|
||||||
|
- debug:
|
||||||
|
msg: another test message
|
||||||
|
register: foo
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
foo.msg == "another test message"
|
||||||
|
|
||||||
|
- debug:
|
||||||
|
msg: '{{ omit }}'
|
||||||
|
register: foo
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
foo.msg == "Hello world!"
|
Loading…
Reference in a new issue