mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Add tests for undefined variable detection
Tests `test_playbook_undefined_varsX_fail` check if ansible detects undefined variables when `error_on_undefined_vars` is enabled. These tests fail without "Improve behavior with error_on_undefined_vars enabled" patch. Tests `test_playbook_undefined_varsX_ignore` check if ansible ignores undefined variables when `error_on_undefined_vars` is disabled. Also modify PlayBook._run_task_internal() so error_on_undefined_vars is testable.
This commit is contained in:
parent
fff4f1da33
commit
e3adfbf5f8
5 changed files with 67 additions and 1 deletions
|
@ -312,7 +312,8 @@ class PlayBook(object):
|
||||||
conditional=task.only_if, callbacks=self.runner_callbacks,
|
conditional=task.only_if, callbacks=self.runner_callbacks,
|
||||||
sudo=task.sudo, sudo_user=task.sudo_user,
|
sudo=task.sudo, sudo_user=task.sudo_user,
|
||||||
transport=task.transport, sudo_pass=task.sudo_pass, is_playbook=True,
|
transport=task.transport, sudo_pass=task.sudo_pass, is_playbook=True,
|
||||||
check=self.check, diff=self.diff, environment=task.environment, complex_args=task.args
|
check=self.check, diff=self.diff, environment=task.environment, complex_args=task.args,
|
||||||
|
error_on_undefined_vars=C.DEFAULT_UNDEFINED_VAR_BEHAVIOR
|
||||||
)
|
)
|
||||||
|
|
||||||
if task.async_seconds == 0:
|
if task.async_seconds == 0:
|
||||||
|
|
|
@ -266,6 +266,52 @@ class TestPlaybook(unittest.TestCase):
|
||||||
)
|
)
|
||||||
playbook.run()
|
playbook.run()
|
||||||
|
|
||||||
|
def _test_playbook_undefined_vars(self, playbook, fail_on_undefined):
|
||||||
|
# save DEFAULT_UNDEFINED_VAR_BEHAVIOR so we can restore it in the end of the test
|
||||||
|
saved_undefined_var_behavior = C.DEFAULT_UNDEFINED_VAR_BEHAVIOR
|
||||||
|
C.DEFAULT_UNDEFINED_VAR_BEHAVIOR = fail_on_undefined
|
||||||
|
|
||||||
|
test_callbacks = TestCallbacks()
|
||||||
|
playbook = ansible.playbook.PlayBook(
|
||||||
|
playbook=os.path.join(self.test_dir, 'test_playbook_undefined_vars', playbook),
|
||||||
|
host_list='test/test_playbook_undefined_vars/hosts',
|
||||||
|
stats=ans_callbacks.AggregateStats(),
|
||||||
|
callbacks=test_callbacks,
|
||||||
|
runner_callbacks=test_callbacks
|
||||||
|
)
|
||||||
|
actual = playbook.run()
|
||||||
|
|
||||||
|
C.DEFAULT_UNDEFINED_VAR_BEHAVIOR = saved_undefined_var_behavior
|
||||||
|
|
||||||
|
# if different, this will output to screen
|
||||||
|
print "**ACTUAL**"
|
||||||
|
print utils.jsonify(actual, format=True)
|
||||||
|
expected = {
|
||||||
|
"localhost": {
|
||||||
|
"changed": 0,
|
||||||
|
"failures": 0,
|
||||||
|
"ok": int(not fail_on_undefined) + 1,
|
||||||
|
"skipped": 0,
|
||||||
|
"unreachable": int(fail_on_undefined)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "**EXPECTED**"
|
||||||
|
print utils.jsonify(expected, format=True)
|
||||||
|
|
||||||
|
assert utils.jsonify(expected, format=True) == utils.jsonify(actual, format=True)
|
||||||
|
|
||||||
|
def test_playbook_undefined_vars1_ignore(self):
|
||||||
|
self._test_playbook_undefined_vars('playbook1.yml', False)
|
||||||
|
|
||||||
|
def test_playbook_undefined_vars1_fail(self):
|
||||||
|
self._test_playbook_undefined_vars('playbook1.yml', True)
|
||||||
|
|
||||||
|
def test_playbook_undefined_vars2_ignore(self):
|
||||||
|
self._test_playbook_undefined_vars('playbook2.yml', False)
|
||||||
|
|
||||||
|
def test_playbook_undefined_vars2_fail(self):
|
||||||
|
self._test_playbook_undefined_vars('playbook2.yml', True)
|
||||||
|
|
||||||
def test_yaml_hosts_list(self):
|
def test_yaml_hosts_list(self):
|
||||||
# Make sure playbooks support hosts: [host1, host2]
|
# Make sure playbooks support hosts: [host1, host2]
|
||||||
# TODO: Actually run the play on more than one host
|
# TODO: Actually run the play on more than one host
|
||||||
|
|
5
test/test_playbook_undefined_vars/hosts
Normal file
5
test/test_playbook_undefined_vars/hosts
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
localhost
|
||||||
|
|
||||||
|
[all:vars]
|
||||||
|
inventory_var_good="{{ playbook_var_good }}"
|
||||||
|
inventory_var_bad="{{ playbook_var_bad }}"
|
7
test/test_playbook_undefined_vars/playbook1.yml
Normal file
7
test/test_playbook_undefined_vars/playbook1.yml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
- hosts: all
|
||||||
|
vars:
|
||||||
|
playbook_var_good: "ok"
|
||||||
|
playbook_var_bad: "{{ undefined_var }}"
|
||||||
|
tasks:
|
||||||
|
- debug: msg="{{ playbook_var_good }}"
|
||||||
|
- debug: msg="{{ playbook_var_bad }}"
|
7
test/test_playbook_undefined_vars/playbook2.yml
Normal file
7
test/test_playbook_undefined_vars/playbook2.yml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
- hosts: all
|
||||||
|
vars:
|
||||||
|
playbook_var_good: "ok"
|
||||||
|
playbook_var_bad: "{{ undefined_var }}"
|
||||||
|
tasks:
|
||||||
|
- debug: msg="{{ inventory_var_good }}"
|
||||||
|
- debug: msg="{{ inventory_var_bad }}"
|
Loading…
Reference in a new issue