c03c7db223
Change-Id: Id9fe6c119b0e99a956c7c42581699842f99e02aa
288 lines
10 KiB
YAML
288 lines
10 KiB
YAML
---
|
|
# Copyright 2016, Comcast Corp.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
- name: Test config_template
|
|
hosts: localhost
|
|
connection: local
|
|
gather_facts: yes
|
|
tasks:
|
|
# Test basic function of config_template
|
|
- name: Template test INI template
|
|
config_template:
|
|
src: "{{ playbook_dir }}/templates/test.ini"
|
|
dest: "/tmp/test.ini"
|
|
config_overrides: "{{ test_config_ini_overrides }}"
|
|
config_type: "ini"
|
|
|
|
- name: Read test.ini
|
|
slurp:
|
|
src: /tmp/test.ini
|
|
register: ini_file
|
|
- debug:
|
|
msg: "ini - {{ ini_file.content | b64decode }}"
|
|
- name: Validate output
|
|
assert:
|
|
that:
|
|
- "(lookup('ini', 'new_key section=DEFAULT file=/tmp/test.ini')) == 'new_value'"
|
|
- "(lookup('ini', 'baz section=foo file=/tmp/test.ini')) == 'bar'"
|
|
|
|
# Test basic function of config_template with content instead of src
|
|
- name: Template test INI template
|
|
config_template:
|
|
content: "{{ lookup('file', playbook_dir + '/templates/test.ini') }}"
|
|
dest: "/tmp/test_with_content.ini"
|
|
config_overrides: "{{ test_config_ini_overrides }}"
|
|
config_type: "ini"
|
|
|
|
- name: Read test.ini
|
|
slurp:
|
|
src: /tmp/test_with_content.ini
|
|
register: ini_file_with_content
|
|
- debug:
|
|
msg: "ini - {{ ini_file_with_content.content | b64decode }}"
|
|
- name: Validate output
|
|
assert:
|
|
that:
|
|
- "(lookup('ini', 'new_key section=DEFAULT file=/tmp/test_with_content.ini')) == 'new_value'"
|
|
- "(lookup('ini', 'baz section=foo file=/tmp/test_with_content.ini')) == 'bar'"
|
|
|
|
# Test list additions in config_template
|
|
- name: Template test YML template
|
|
config_template:
|
|
src: "{{ playbook_dir }}/templates/test.yml"
|
|
dest: "/tmp/test_extend.yml"
|
|
config_overrides: "{{ test_config_yml_overrides }}"
|
|
config_type: "yaml"
|
|
list_extend: True
|
|
|
|
- name: Read test_extend.yml
|
|
slurp:
|
|
src: /tmp/test_extend.yml
|
|
register: extend_file
|
|
- name: Read expected test_extend.yml
|
|
slurp:
|
|
src: "{{ playbook_dir }}/files/test_extend.yml.expected"
|
|
register: extend_file_expected
|
|
- debug:
|
|
msg: "extend - {{ extend_file.content | b64decode }}"
|
|
- debug:
|
|
msg: "extend.expected - {{ extend_file_expected.content | b64decode }}"
|
|
- name: Compare files
|
|
assert:
|
|
that:
|
|
- "(extend_file.content | b64decode) == (extend_file_expected.content | b64decode)"
|
|
|
|
# Test list replacement in config_template
|
|
- name: Template test YML template
|
|
config_template:
|
|
src: "{{ playbook_dir }}/templates/test.yml"
|
|
dest: "/tmp/test_no_extend.yml"
|
|
config_overrides: "{{ test_config_yml_overrides }}"
|
|
config_type: "yaml"
|
|
list_extend: False
|
|
- name: Read test_no_extend.yml
|
|
slurp:
|
|
src: /tmp/test_no_extend.yml
|
|
register: no_extend_file
|
|
- name: Read expected test_no_extend.yml
|
|
slurp:
|
|
src: "{{ playbook_dir }}/files/test_no_extend.yml.expected"
|
|
register: no_extend_file_expected
|
|
- debug:
|
|
msg: "no_extend - {{ no_extend_file.content | b64decode }}"
|
|
- debug:
|
|
msg: "no_extend.expected - {{ no_extend_file_expected.content | b64decode }}"
|
|
- name: Compare files
|
|
assert:
|
|
that:
|
|
- "(no_extend_file.content | b64decode) == (no_extend_file_expected.content | b64decode)"
|
|
|
|
# Test dumping hostvars using config overrides
|
|
- name: Template test YML template with hostvars override
|
|
config_template:
|
|
src: "{{ playbook_dir }}/templates/test.yml"
|
|
dest: "/tmp/test_hostvars.yml"
|
|
config_overrides: "{{ test_config_yml_hostvars_overrides }}"
|
|
config_type: "yaml"
|
|
- name: Read test_hostvars.yml
|
|
slurp:
|
|
src: /tmp/test_hostvars.yml
|
|
register: hostvars_file
|
|
- debug:
|
|
msg: "hostvars - {{ (hostvars_file.content | b64decode | from_yaml).test_hostvar }}"
|
|
- debug:
|
|
msg: "hostvars.expected - {{ test_config_yml_hostvars_overrides.test_hostvar }}"
|
|
- name: Compare files
|
|
assert:
|
|
that:
|
|
- "((hostvars_file.content | b64decode | from_yaml).test_hostvar) == (test_config_yml_hostvars_overrides.test_hostvar)"
|
|
|
|
|
|
# Test multistropt ordering
|
|
- name: Template MultiStrOpts using overrides
|
|
config_template:
|
|
src: test_multistropts.ini
|
|
dest: /tmp/test_multistropts.ini
|
|
config_overrides:
|
|
testsection:
|
|
test: output
|
|
config_type: ini
|
|
- name: Read test_multistropts.ini
|
|
slurp:
|
|
src: /tmp/test_multistropts.ini
|
|
register: multistropts_file
|
|
- name: Read test_multistropts.ini.expected
|
|
slurp:
|
|
src: files/test_multistropts.ini.expected
|
|
register: multistropts_expected_file
|
|
- debug:
|
|
msg: "multistropts rendered - {{ multistropts_file.content | b64decode }}"
|
|
- debug:
|
|
msg: "multistropts expected - {{ multistropts_expected_file.content | b64decode }}"
|
|
- name: Compare files
|
|
assert:
|
|
that:
|
|
- "multistropts_file.content == multistropts_expected_file.content"
|
|
|
|
|
|
# Test content attribute with a dictionary input and config_type equal to 'json'
|
|
- name: Template test JSON template with content attribute
|
|
config_template:
|
|
dest: "/tmp/test_content_no_overrides.json"
|
|
config_overrides: {}
|
|
config_type: "json"
|
|
content: "{{ lookup('file', playbook_dir ~ '/templates/test.json') | from_json }}"
|
|
- name: Read test_content_no_overrides.json
|
|
slurp:
|
|
src: /tmp/test_content_no_overrides.json
|
|
register: content_no_overrides_file
|
|
- name: Read expected test_content_no_overrides.json
|
|
slurp:
|
|
src: "{{ playbook_dir }}/files/test_content_no_overrides.json.expected"
|
|
register: content_no_overrides_file_expected
|
|
- debug:
|
|
msg: "content_no_overrides.json - {{ content_no_overrides_file.content | b64decode | from_json }}"
|
|
- debug:
|
|
msg: "content_no_overrides.json.expected - {{ content_no_overrides_file_expected.content | b64decode | from_json }}"
|
|
# NOTE (alextricity25): The config_template module doesn't use ordered dicts when reading and writing json
|
|
# data, so we can't guarantee that the string literal of both file's content will be the same. Instead, we compare
|
|
# the content after transforming it into a dictionary.
|
|
- name: Compare file content
|
|
assert:
|
|
that:
|
|
- "(content_no_overrides_file.content | b64decode | from_json) == (content_no_overrides_file_expected.content | b64decode | from_json)"
|
|
|
|
# Test the ignore_none_type attribute when set to False
|
|
- name: Template test with ignore_none_type set to false
|
|
config_template:
|
|
src: "{{ playbook_dir }}/templates/test_ignore_none_type.ini"
|
|
dest: "/tmp/test_ignore_none_type.ini"
|
|
config_overrides: "{{ test_config_ini_overrides }}"
|
|
config_type: "ini"
|
|
ignore_none_type: False
|
|
- name: Read test_ignore_none_type.ini
|
|
slurp:
|
|
src: /tmp/test_ignore_none_type.ini
|
|
register: test_ignore_none_type
|
|
- debug:
|
|
msg: "test_ignore_none_type.ini - {{ test_ignore_none_type.content | b64decode }}"
|
|
- name: Validate output has valueless options printed out
|
|
assert:
|
|
that:
|
|
- "{{ test_ignore_none_type.content | b64decode | search('(?m)^india$') }}"
|
|
- "{{ test_ignore_none_type.content | b64decode | search('(?m)^juliett kilo$') }}"
|
|
|
|
# Test basic function of config_template
|
|
- name: Template test INI comments
|
|
config_template:
|
|
src: "{{ playbook_dir }}/templates/test_with_comments.ini"
|
|
dest: "/tmp/test_with_comments.ini"
|
|
config_overrides: "{{ test_config_ini_overrides }}"
|
|
config_type: "ini"
|
|
tags: test
|
|
|
|
- name: Read test.ini
|
|
slurp:
|
|
src: /tmp/test_with_comments.ini
|
|
register: ini_file
|
|
tags: test
|
|
|
|
- debug:
|
|
msg: "ini - {{ ini_file.content | b64decode }}"
|
|
- name: Validate output
|
|
tags: test
|
|
assert:
|
|
that:
|
|
- "(lookup('ini', 'new_key section=DEFAULT file=/tmp/test_with_comments.ini')) == 'new_value'"
|
|
- "(lookup('ini', 'baz section=foo file=/tmp/test_with_comments.ini')) == 'bar'"
|
|
- "{{ 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
|
|
test_config_yml_hostvars_overrides:
|
|
test_hostvar: "{{ ansible_default_ipv4.address }}"
|