mirror of https://github.com/ansible/ansible.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
5.0 KiB
YAML
172 lines
5.0 KiB
YAML
# DTFIX-FUTURE: finish the full precedence description in DT docs and include it here
|
|
|
|
- name: validate templated raw params from the action statement and the args keyword are merged
|
|
echo: '{{ vp }}'
|
|
args: '{{ rp }}'
|
|
vars:
|
|
vp:
|
|
a: a from vp
|
|
b: b from vp
|
|
rp:
|
|
a: a from rp
|
|
c: c from rp
|
|
register: res
|
|
|
|
- assert:
|
|
that:
|
|
- res.action_args.a == 'a from vp'
|
|
- res.action_args.b == 'b from vp'
|
|
- res.action_args.c == 'c from rp'
|
|
|
|
- name: validate non-raw task arg precedence
|
|
echo: '{{ vp }} a={{ "templated a from k=v" }} chdir={{"from_kv"}} warn={{omit}} bogus={{omit}}'
|
|
args:
|
|
a: masked
|
|
b: '{{ "templated b from args" }}'
|
|
chdir: masked by kv
|
|
warn: masked by omit
|
|
vars:
|
|
vp:
|
|
a: masked
|
|
c: '{{ "templated c from vp" }}'
|
|
chdir: masked by kv/args
|
|
warn: masked by omit/args
|
|
register: res
|
|
|
|
- assert:
|
|
that:
|
|
- res.action_args.a == "templated a from k=v"
|
|
- res.action_args.b == "templated b from args"
|
|
- res.action_args.c == "templated c from vp"
|
|
- res.action_args.chdir == "from_kv"
|
|
- res.action_args is not contains "warn"
|
|
|
|
|
|
- name: validate raw task arg precedence
|
|
echo_raw: '{{ "vp_scalar" }} chdir={{"from_kv"}} warn={{omit}}' # devel omit is `obliterate`- does not support fallback
|
|
args:
|
|
a: '{{ "templated a from args" }}'
|
|
chdir: masked
|
|
warn: masked by omit
|
|
register: res
|
|
|
|
- assert:
|
|
that:
|
|
- res.action_args._raw_params == "vp_scalar"
|
|
- res.action_args.a == "templated a from args"
|
|
- res.action_args.chdir == "from_kv"
|
|
- res.action_args is not contains "warn"
|
|
|
|
## Error cases
|
|
|
|
- name: non-raw vp args must be dict
|
|
echo: '{{ ["vp_list"] }}'
|
|
ignore_errors: true
|
|
register: res
|
|
|
|
- assert:
|
|
that: res is failed and res.msg is contains "must resolve to a 'dict'"
|
|
|
|
- name: non-raw vp args must be dict
|
|
echo: '{{ "foo" }} arg1=blah'
|
|
ignore_errors: true
|
|
register: res
|
|
|
|
- assert:
|
|
that: res is failed and res.msg is contains "must resolve to a 'dict'"
|
|
|
|
- name: presence of (templated, hence deferred) non-k=v tokens in _raw_params fails for non-raw actions
|
|
echo: a=aval {{ "non_kv_thing" }} b=bval
|
|
ignore_errors: true
|
|
register: res
|
|
|
|
- assert:
|
|
that: res is failed and res.msg is contains "must resolve to a 'dict'"
|
|
|
|
- name: leftover non k=v tokens for non-raw actions is an error
|
|
echo: a=aval non_kv_junk b=bval
|
|
ignore_errors: true
|
|
register: res
|
|
|
|
- assert:
|
|
that:
|
|
res.msg is contains "does not support raw params"
|
|
|
|
# normal precedence: action.kv, task args, variable_params
|
|
# special-case buggy precedence with action dict + `module`: action.args, action.module.kv, action.(discrete args), task args, variable_params
|
|
- name: assert (deprecated) buggy action.module arg precedence
|
|
action:
|
|
args: # precedence 0
|
|
a: from_action_args
|
|
|
|
module: echo {{ vp }} a=from_action_module_kv_masked b=from_action_module_kv # precedence 1
|
|
|
|
# precedence 2
|
|
a: from_discrete_args_masked
|
|
b: from_discrete_args_masked
|
|
c: from_discrete_args
|
|
|
|
args: # precedence 3
|
|
a: from_task_args_masked
|
|
b: from_task_args_masked
|
|
c: from_task_args_masked
|
|
d: from_task_args
|
|
|
|
vars: # precedence 4
|
|
vp:
|
|
a: from_vp_masked
|
|
b: from_vp_masked
|
|
c: from_vp_masked
|
|
d: from_vp_masked
|
|
e: from_vp
|
|
register: res
|
|
|
|
- assert:
|
|
that: |
|
|
res.action_args == {"a": "from_action_args", "b": "from_action_module_kv", "c": "from_discrete_args", "d": "from_task_args", "e": "from_vp"}
|
|
|
|
# DTFIX-FUTURE: ensure that we're testing the new behavior we want before nuking some/all of these "asserting broken/weird behavior" test cases
|
|
# Nonsensical cases, asserting existing weird-ish behavior
|
|
|
|
- name: (nonsensical, validating existing behavior) raw vp args template result gets stringified in _raw_params after shell k=v arg removal if k=v args remain
|
|
echo_raw: '{{ {"a":"stringified"} }} chdir=chdirvalue other=causes_vp_stringification'
|
|
register: res
|
|
|
|
- assert:
|
|
that:
|
|
#- res.action_args._raw_params is string
|
|
#- res.action_args._raw_params is not contains "chdir"
|
|
- res.action_args.chdir == "chdirvalue"
|
|
|
|
- name: (nonsensical, validating existing behavior) raw vp args template result preserves type in _raw_params after shell k=v arg removal if no k=v args remain
|
|
echo_raw: '{{ ["listval"] }} chdir=chdirvalue'
|
|
register: res
|
|
|
|
- assert:
|
|
that:
|
|
- res.action_args._raw_params[0] == "listval"
|
|
- res.action_args.chdir == "chdirvalue"
|
|
|
|
- name: (nonsensical, validating existing behavior) crazy busted inline kv parsing for non-raw actions
|
|
echo: a=aval {{ "k=v" }} {{ wtf=oopsquotes }} b=bval
|
|
vars:
|
|
kvstring: k=v
|
|
ignore_errors: true
|
|
register: res
|
|
|
|
- assert:
|
|
that:
|
|
- res.action_args.a == "aval"
|
|
- res.action_args.b == "bval"
|
|
- res.action_args['{'~'{ "k'] == 'v" }}'
|
|
- res.action_args['{'~'{ wtf'] == 'oopsquotes }}'
|
|
|
|
- name: (nonsensical, validating existing behavior) use legacy module arg with null value
|
|
action: echo
|
|
args:
|
|
module: ~
|
|
register: res
|
|
|
|
- assert:
|
|
that: res.action_args.module == none
|