# 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' - 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 # VERIFY MODE # can't set file mode on windows so commenting this test out #- name: set file mode # win_file: path={{win_output_dir}}/foo.templated mode=0644 # register: file_result #- name: ensure file mode did not change # assert: # that: # - "file_result.changed != True" # commenting out all the following tests as expanduser and file modes not windows concepts. # VERIFY dest as a directory does not break file attributes # Note: expanduser is needed to go down the particular codepath that was broken before #- name: setup directory for test # win_file: state=directory dest={{win_output_dir | expanduser}}/template-dir mode=0755 owner=nobody group=root #- name: set file mode when the destination is a directory # win_template: src=foo.j2 dest={{win_output_dir | expanduser}}/template-dir/ mode=0600 owner=root group=root #- name: set file mode when the destination is a directory # win_template: src=foo.j2 dest={{win_output_dir | expanduser}}/template-dir/ mode=0600 owner=root group=root # register: file_result # #- name: check that the file has the correct attributes # win_stat: path={{win_output_dir | expanduser}}/template-dir/foo.j2 # register: file_attrs # #- assert: # that: # - "file_attrs.stat.uid == 0" # - "file_attrs.stat.pw_name == 'root'" # - "file_attrs.stat.mode == '0600'" # #- name: check that the containing directory did not change attributes # win_stat: path={{win_output_dir | expanduser}}/template-dir/ # register: dir_attrs # #- assert: # that: # - "dir_attrs.stat.uid != 0" # - "dir_attrs.stat.pw_name == 'nobody'" # - "dir_attrs.stat.mode == '0755'"