Added basic support for hash_behaviour=merge in roles

Dict vars passed to roles are now properly merged
instead of simply overriding dict vars that are
coming from vars_files.
This commit is contained in:
George Miroshnykov
2013-06-04 01:19:11 +03:00
parent fc2d25eb82
commit c642ba77ae
6 changed files with 74 additions and 53 deletions

View File

@@ -96,6 +96,8 @@ class TestPlaybook(unittest.TestCase):
os.unlink('/tmp/ansible_test_data_template.out')
if os.path.exists('/tmp/ansible_test_messages.out'):
os.unlink('/tmp/ansible_test_messages.out')
if os.path.exists('/tmp/ansible_test_role_messages.out'):
os.unlink('/tmp/ansible_test_role_messages.out')
def _prepare_stage_dir(self):
stage_path = os.path.join(self.test_dir, 'test_data')
@@ -304,20 +306,17 @@ class TestPlaybook(unittest.TestCase):
)
playbook.run()
with open('/tmp/ansible_test_messages.out') as f:
actual = [l.strip() for l in f.readlines()]
print "**ACTUAL**"
print actual
expected = [
filename = '/tmp/ansible_test_messages.out'
expected_lines = [
"goodbye: Goodbye World!"
]
self._compare_file_output(filename, expected_lines)
print "**EXPECTED**"
print expected
assert actual == expected
filename = '/tmp/ansible_test_role_messages.out'
expected_lines = [
"inside_a_role: Indeed!"
]
self._compare_file_output(filename, expected_lines)
# restore default hash behavior
C.DEFAULT_HASH_BEHAVIOUR = saved_hash_behavior
@@ -337,21 +336,34 @@ class TestPlaybook(unittest.TestCase):
)
playbook.run()
with open('/tmp/ansible_test_messages.out') as f:
actual = [l.strip() for l in f.readlines()]
print "**ACTUAL**"
print actual
expected = [
"hello: Hello World!",
"goodbye: Goodbye World!"
filename = '/tmp/ansible_test_messages.out'
expected_lines = [
"goodbye: Goodbye World!",
"hello: Hello World!"
]
self._compare_file_output(filename, expected_lines)
print "**EXPECTED**"
print expected
assert actual == expected
filename = '/tmp/ansible_test_role_messages.out'
expected_lines = [
"goodbye: Goodbye World!",
"hello: Hello World!",
"inside_a_role: Indeed!"
]
self._compare_file_output(filename, expected_lines)
# restore default hash behavior
C.DEFAULT_HASH_BEHAVIOUR = saved_hash_behavior
def _compare_file_output(self, filename, expected_lines):
actual_lines = []
with open(filename) as f:
actual_lines = [l.strip() for l in f.readlines()]
actual_lines = sorted(actual_lines)
print "**ACTUAL**"
print actual_lines
print "**EXPECTED**"
print expected_lines
assert actual_lines == expected_lines

View File

@@ -9,3 +9,8 @@
tasks:
- name: generate messages
action: template src=message.j2 dest=/tmp/ansible_test_messages.out
roles:
- role: hash_behavior_test_role
messages:
inside_a_role: "Indeed!"

View File

@@ -0,0 +1,2 @@
- name: generate role messages
action: template src=role_message.j2 dest=/tmp/ansible_test_role_messages.out

View File

@@ -0,0 +1,3 @@
{% for k, v in messages.iteritems() %}
{{ k }}: {{ v }}
{% endfor %}