diff --git a/action/config_template.py b/action/config_template.py index c7fcfc18..ee4adb8d 100644 --- a/action/config_template.py +++ b/action/config_template.py @@ -43,7 +43,6 @@ from ansible import constants as C from ansible import errors from ansible.parsing.yaml.dumper import AnsibleDumper - CONFIG_TYPES = { 'ini': 'return_config_overrides_ini', 'json': 'return_config_overrides_json', @@ -172,16 +171,16 @@ class ConfigTemplateParser(ConfigParser.RawConfigParser): if self._defaults: _write_comments('DEFAULT') fp.write("[%s]\n" % 'DEFAULT') - for key, value in self._defaults.items(): + for key, value in sorted(self._defaults.items()): _write_comments('DEFAULT', optname=key) self._write_check(fp, key=key, value=value) else: fp.write("\n") - for section in self._sections: + for section in sorted(self._sections): _write_comments(section) fp.write("[%s]\n" % section) - for key, value in self._sections[section].items(): + for key, value in sorted(self._sections[section].items()): _write_comments(section, optname=key) self._write_check(fp, key=key, value=value, section=True) else: diff --git a/tests/test-config_template.yml b/tests/test-config_template.yml index ffcb5c57..ed195cf3 100644 --- a/tests/test-config_template.yml +++ b/tests/test-config_template.yml @@ -203,12 +203,56 @@ - "{{ ini_file.content | b64decode | search('#This is a comment')}}" - "{{ ini_file.content | b64decode | search('# A default section comment\n# broken into multiple lines\n\\[DEFAULT\\]')}}" + - name: Template multiple times to assert no changes + config_template: + src: "{{ playbook_dir }}/templates/test_with_comments.ini" + dest: "/tmp/test_with_comments.ini" + config_type: "ini" + config_overrides: "{{ item[1] }}" + register: template_changed + failed_when: template_changed | changed + with_nested: + - [ 0, 1, 2 ] + - [ "{{ test_config_ini_overrides }}" ] + vars: test_config_ini_overrides: DEFAULT: new_key: "new_value" foo: baz: "bar" + section1: + key1: "value1" + key2: "value2" + key3: "value3" + key4: "value4" + key5: "value5" + key6: "value6" + key7: "value7" + key8: "value8" + key9: "value9" + key10: "value10" + key11: "value11" + section2: + key1: "value1" + section3: + key1: "value1" + section4: + key1: "value1" + section5: + key1: "value1" + section6: + key1: "value1" + section7: + key1: "value1" + section8: + key1: "value1" + section9: + key1: "value1" + section10: + key1: "value1" + section11: + key1: "value1" test_config_yml_overrides: list_one: - four