# test code for the template module # (c) 2014, Michael DeHaan # This file is part of Ansible # # Ansible is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Ansible is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Ansible. If not, see . # DOS TEMPLATE - name: fill in a basic template (DOS) win_template: src: foo.j2 dest: '{{ win_output_dir }}/foo.dos.templated' register: template_result - name: verify that the file was marked as changed (DOS) assert: that: - 'template_result is changed' - name: fill in a basic template again (DOS) win_template: src: foo.j2 dest: '{{ win_output_dir }}/foo.dos.templated' register: template_result2 - name: verify that the template was not changed (DOS) assert: that: - 'template_result2 is not changed' # VERIFY DOS CONTENTS - name: copy known good into place (DOS) win_copy: src: foo.dos.txt dest: '{{ win_output_dir }}\\foo.dos.txt' - name: compare templated file to known good (DOS) raw: fc.exe {{ win_output_dir }}\\foo.dos.templated {{ win_output_dir }}\\foo.dos.txt register: diff_result - debug: var: diff_result - name: verify templated file matches known good (DOS) assert: that: - '"FC: no differences encountered" in diff_result.stdout' - "diff_result.rc == 0" # UNIX TEMPLATE - name: fill in a basic template (Unix) win_template: src: foo.j2 dest: '{{ win_output_dir }}/foo.unix.templated' newline_sequence: '\n' register: template_result - name: verify that the file was marked as changed (Unix) assert: that: - 'template_result is changed' - name: fill in a basic template again (Unix) win_template: src: foo.j2 dest: '{{ win_output_dir }}/foo.unix.templated' newline_sequence: '\n' register: template_result2 - name: verify that the template was not changed (Unix) assert: that: - 'template_result2 is not changed' # VERIFY UNIX CONTENTS - name: copy known good into place (Unix) win_copy: src: foo.unix.txt dest: '{{ win_output_dir }}\\foo.unix.txt' - name: compare templated file to known good (Unix) raw: fc.exe {{ win_output_dir }}\\foo.unix.templated {{ win_output_dir }}\\foo.unix.txt register: diff_result - debug: var: diff_result - name: verify templated file matches known good (Unix) assert: that: - '"FC: no differences encountered" in diff_result.stdout' # VERIFY DOS CONTENTS - name: copy known good into place (DOS) win_copy: src: foo.dos.txt dest: '{{ win_output_dir }}\\foo.dos.txt' - name: compare templated file to known good (DOS) raw: fc.exe {{ win_output_dir }}\\foo.dos.templated {{ win_output_dir }}\\foo.dos.txt register: diff_result - debug: var: diff_result - name: verify templated file matches known good (DOS) assert: that: - '"FC: no differences encountered" in diff_result.stdout' # TEST BACKUP - name: test backup (check_mode) win_template: src: foo.j2 dest: '{{ win_output_dir }}/foo.unix.templated' backup: yes register: cm_backup_result check_mode: yes - name: verify that a backup_file was returned assert: that: - cm_backup_result is changed - cm_backup_result.backup_file is not none - name: test backup (normal mode) win_template: src: foo.j2 dest: '{{ win_output_dir }}/foo.unix.templated' backup: yes register: nm_backup_result - name: check backup_file win_stat: path: '{{ nm_backup_result.backup_file }}' register: backup_file - name: verify that a backup_file was returned assert: that: - nm_backup_result is changed - backup_file.stat.exists == true - name: create template dest directory win_file: path: '{{win_output_dir}}\directory' state: directory - name: template src file to directory with backslash (check mode) win_template: src: foo.j2 dest: '{{win_output_dir}}\directory\' check_mode: yes register: template_to_dir_backslash_check - name: get result of template src file to directory with backslash (check_mode) win_stat: path: '{{win_output_dir}}\directory\foo.j2' register: template_to_dir_backslash_result_check - name: assert template src file to directory with backslash (check mode) assert: that: - template_to_dir_backslash_check is changed - not template_to_dir_backslash_result_check.stat.exists - name: template src file to directory with backslash win_template: src: foo.j2 dest: '{{win_output_dir}}\directory\' register: template_to_dir_backslash - name: get result of template src file to directory with backslash win_stat: path: '{{win_output_dir}}\directory\foo.j2' register: template_to_dir_backslash_result - name: assert template src file to directory with backslash assert: that: - template_to_dir_backslash is changed - template_to_dir_backslash_result.stat.exists - template_to_dir_backslash_result.stat.checksum == 'ed4f166b2937875ecad39c06648551f5af0b56d3' - name: template src file to directory with backslash (idempotent) win_template: src: foo.j2 dest: '{{win_output_dir}}\directory\' register: template_to_dir_backslash_again - name: assert template src file to directory with backslash (idempotent) assert: that: - not template_to_dir_backslash_again is changed - name: template src file to directory (check mode) win_template: src: another_foo.j2 dest: '{{win_output_dir}}\directory' check_mode: yes register: template_to_dir_check - name: get result of template src file to directory (check_mode) win_stat: path: '{{win_output_dir}}\directory\another_foo.j2' register: template_to_dir_result_check - name: assert template src file to directory (check mode) assert: that: - template_to_dir_check is changed - not template_to_dir_result_check.stat.exists - name: template src file to directory win_template: src: another_foo.j2 dest: '{{win_output_dir}}\directory' register: template_to_dir - name: get result of template src file to directory win_stat: path: '{{win_output_dir}}\directory\another_foo.j2' register: template_to_dir_result - name: assert template src file to directory with assert: that: - template_to_dir is changed - template_to_dir_result.stat.exists - template_to_dir_result.stat.checksum == 'b10b6f27290d554a77da2457b2ccd7d6de86b920' - name: template src file to directory (idempotent) win_template: src: another_foo.j2 dest: '{{win_output_dir}}\directory' register: template_to_dir_again - name: assert template src file to directory (idempotent) assert: that: - not template_to_dir_again is changed - name: template a file with utf-8 encoding win_template: src: foo.utf-8.j2 dest: '{{ win_output_dir }}\foo.encoding.txt' register: template_utf8 - name: slurp utf-8 templated file slurp: path: '{{ win_output_dir }}\foo.encoding.txt' register: template_utf8_actual - name: get expected templated contents set_fact: expected_content: '{{ lookup("template", "foo.utf-8.j2") | trim }}' - name: assert template a file with utf-8 encoding assert: that: - template_utf8 is changed - template_utf8_actual.content | b64decode(encoding='utf-8') == expected_content + "\r\n" - name: template a file with windows-1252 encoding win_template: src: foo.utf-8.j2 dest: '{{ win_output_dir }}\foo.encoding.txt' output_encoding: windows-1252 register: template_windows_1252 - name: slurp windows-1252 encoding slurp: path: '{{ win_output_dir }}\foo.encoding.txt' register: template_windows_1252_actual - name: assert template a file with windows-1252 encoding assert: that: - template_windows_1252 is changed - template_windows_1252_actual.content | b64decode(encoding='windows-1252') == expected_content + "\r\n"