a8c02b7049
Instead of getting rid of pipes.quote, use pipes.quote and get rid of the manually entered toplevel quotes. This should properly escape backslashes, quotes, and other characters. Also fix the new checksumming python "one-liner" for csh. ansible_shell_type needs to be set to csh. Fixes #10363 Fixes #10353
176 lines
5.1 KiB
YAML
176 lines
5.1 KiB
YAML
# test code for the template module
|
|
# (c) 2014, Michael DeHaan <michael.dehaan@gmail.com>
|
|
|
|
# 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 <http://www.gnu.org/licenses/>.
|
|
|
|
- name: fill in a basic template
|
|
template: src=foo.j2 dest={{output_dir}}/foo.templated mode=0644
|
|
register: template_result
|
|
|
|
- assert:
|
|
that:
|
|
- "'changed' in template_result"
|
|
- "'dest' in template_result"
|
|
- "'group' in template_result"
|
|
- "'gid' in template_result"
|
|
- "'md5sum' in template_result"
|
|
- "'checksum' in template_result"
|
|
- "'owner' in template_result"
|
|
- "'size' in template_result"
|
|
- "'src' in template_result"
|
|
- "'state' in template_result"
|
|
- "'uid' in template_result"
|
|
|
|
- name: verify that the file was marked as changed
|
|
assert:
|
|
that:
|
|
- "template_result.changed == true"
|
|
|
|
# VERIFY CONTENTS
|
|
|
|
- name: copy known good into place
|
|
copy: src=foo.txt dest={{output_dir}}/foo.txt
|
|
|
|
- name: compare templated file to known good
|
|
shell: diff {{output_dir}}/foo.templated {{output_dir}}/foo.txt
|
|
register: diff_result
|
|
|
|
- name: verify templated file matches known good
|
|
assert:
|
|
that:
|
|
- 'diff_result.stdout == ""'
|
|
- "diff_result.rc == 0"
|
|
|
|
# VERIFY MODE
|
|
|
|
- name: set file mode
|
|
file: path={{output_dir}}/foo.templated mode=0644
|
|
register: file_result
|
|
|
|
- name: ensure file mode did not change
|
|
assert:
|
|
that:
|
|
- "file_result.changed != True"
|
|
|
|
# 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
|
|
file: state=directory dest={{output_dir | expanduser}}/template-dir mode=0755 owner=nobody group=root
|
|
|
|
- name: set file mode when the destination is a directory
|
|
template: src=foo.j2 dest={{output_dir | expanduser}}/template-dir/ mode=0600 owner=root group=root
|
|
|
|
- name: set file mode when the destination is a directory
|
|
template: src=foo.j2 dest={{output_dir | expanduser}}/template-dir/ mode=0600 owner=root group=root
|
|
register: file_result
|
|
|
|
- name: check that the file has the correct attributes
|
|
stat: path={{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
|
|
stat: path={{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'"
|
|
|
|
- name: Check that template to a dirctory where the directory does not end with a / is allowed
|
|
template: src=foo.j2 dest={{output_dir | expanduser}}/template-dir mode=0600 owner=root group=root
|
|
|
|
- name: make a symlink to the templated file
|
|
file:
|
|
path: '{{ output_dir }}/foo.symlink'
|
|
src: '{{ output_dir }}/foo.templated'
|
|
state: link
|
|
|
|
- name: check that templating the symlink results in the file being templated
|
|
template:
|
|
src: foo.j2
|
|
dest: '{{output_dir}}/foo.symlink'
|
|
mode: 0600
|
|
follow: True
|
|
register: template_result
|
|
|
|
- assert:
|
|
that:
|
|
- "template_result.changed == True"
|
|
|
|
- name: check that the file has the correct attributes
|
|
stat: path={{output_dir | expanduser}}/template-dir/foo.j2
|
|
register: file_attrs
|
|
|
|
- assert:
|
|
that:
|
|
- "file_attrs.stat.mode == '0600'"
|
|
|
|
- name: check that templating the symlink again makes no changes
|
|
template:
|
|
src: foo.j2
|
|
dest: '{{output_dir}}/foo.symlink'
|
|
mode: 0600
|
|
follow: True
|
|
register: template_result
|
|
|
|
- assert:
|
|
that:
|
|
- "template_result.changed == False"
|
|
|
|
# Test strange filenames
|
|
|
|
- name: Create a temp dir for filename tests
|
|
file:
|
|
state: directory
|
|
dest: '{{ output_dir }}/filename-tests'
|
|
|
|
- name: create a file with an unusual filename
|
|
template:
|
|
src: foo.j2
|
|
dest: "{{ output_dir }}/filename-tests/foo t'e~m\\plated"
|
|
register: template_result
|
|
|
|
- assert:
|
|
that:
|
|
- "template_result.changed == True"
|
|
|
|
- name: check that the unusual filename was created
|
|
command: "ls {{ output_dir }}/filename-tests/"
|
|
register: unusual_results
|
|
|
|
- assert:
|
|
that:
|
|
- "\"foo t'e~m\\plated\" in unusual_results.stdout_lines"
|
|
- "{{unusual_results.stdout_lines| length}} == 1"
|
|
|
|
- name: check that the unusual filename can be checked for changes
|
|
template:
|
|
src: foo.j2
|
|
dest: "{{ output_dir }}/filename-tests/foo t'e~m\\plated"
|
|
register: template_result
|
|
|
|
- assert:
|
|
that:
|
|
- "template_result.changed == False"
|
|
|