diff --git a/test/integration/Makefile b/test/integration/Makefile index 19e087e75be..065f28aea50 100644 --- a/test/integration/Makefile +++ b/test/integration/Makefile @@ -35,6 +35,9 @@ test_hash: ANSIBLE_HASH_BEHAVIOUR=replace ansible-playbook test_hash.yml -i $(INVENTORY) $(CREDENTIALS_ARG) -v -e '{"test_hash":{"extra_args":"this is an extra arg"}}' ANSIBLE_HASH_BEHAVIOUR=merge ansible-playbook test_hash.yml -i $(INVENTORY) $(CREDENTIALS_ARG) -v -e '{"test_hash":{"extra_args":"this is an extra arg"}}' +test_var_precedence: + ansible-playbook test_var_precedence.yml -i $(INVENTORY) $(CREDENTIALS_ARG) -v -e 'extra_var=extra_var' + cloud: amazon rackspace cloud_cleanup: amazon_cleanup rackspace_cleanup diff --git a/test/integration/host_vars/testhost b/test/integration/host_vars/testhost index 6e1d11307f9..62ac1d62918 100644 --- a/test/integration/host_vars/testhost +++ b/test/integration/host_vars/testhost @@ -8,3 +8,6 @@ test_hash: # Support execution from within a virtualenv ansible_python_interpreter: '/usr/bin/env python' + +# Var precedence testing +defaults_file_var_role3: "overridden from inventory" diff --git a/test/integration/roles/test_var_precedence/meta/main.yml b/test/integration/roles/test_var_precedence/meta/main.yml new file mode 100644 index 00000000000..423b94e31cc --- /dev/null +++ b/test/integration/roles/test_var_precedence/meta/main.yml @@ -0,0 +1,4 @@ +dependencies: + - { role: test_var_precedence_role1, param_var: "param_var_role1" } + - { role: test_var_precedence_role2, param_var: "param_var_role2" } + - { role: test_var_precedence_role3, param_var: "param_var_role3" } diff --git a/test/integration/roles/test_var_precedence/tasks/main.yml b/test/integration/roles/test_var_precedence/tasks/main.yml new file mode 100644 index 00000000000..27972675052 --- /dev/null +++ b/test/integration/roles/test_var_precedence/tasks/main.yml @@ -0,0 +1,5 @@ +- assert: + that: + - 'extra_var == "extra_var"' + - 'vars_var == "vars_var"' + - 'vars_files_var == "vars_files_var"' diff --git a/test/integration/roles/test_var_precedence_role1/defaults/main.yml b/test/integration/roles/test_var_precedence_role1/defaults/main.yml new file mode 100644 index 00000000000..dda4224c35e --- /dev/null +++ b/test/integration/roles/test_var_precedence_role1/defaults/main.yml @@ -0,0 +1,5 @@ +--- +# should be overridden by vars_files in the main play +vars_files_var: "BAD!" +# should be seen in role1 (no override) +defaults_file_var_role1: "defaults_file_var_role1" diff --git a/test/integration/roles/test_var_precedence_role1/tasks/main.yml b/test/integration/roles/test_var_precedence_role1/tasks/main.yml new file mode 100644 index 00000000000..a0db785a871 --- /dev/null +++ b/test/integration/roles/test_var_precedence_role1/tasks/main.yml @@ -0,0 +1,12 @@ +- debug: var=extra_var +- debug: var=param_var +- debug: var=vars_var +- debug: var=vars_files_var +- debug: var=defaults_file_var_role1 +- assert: + that: + - 'extra_var == "extra_var"' + - 'param_var == "param_var_role1"' + - 'vars_var == "vars_var"' + - 'vars_files_var == "vars_files_var"' + - 'defaults_file_var_role1 == "defaults_file_var_role1"' diff --git a/test/integration/roles/test_var_precedence_role1/vars/main.yml b/test/integration/roles/test_var_precedence_role1/vars/main.yml new file mode 100644 index 00000000000..0adb2faed4c --- /dev/null +++ b/test/integration/roles/test_var_precedence_role1/vars/main.yml @@ -0,0 +1,3 @@ +--- +# should override the global vars_files_var since it's local to the role +vars_files_var: "vars_files_var_role1" diff --git a/test/integration/roles/test_var_precedence_role2/defaults/main.yml b/test/integration/roles/test_var_precedence_role2/defaults/main.yml new file mode 100644 index 00000000000..8ed63ced96c --- /dev/null +++ b/test/integration/roles/test_var_precedence_role2/defaults/main.yml @@ -0,0 +1,5 @@ +--- +# should be overridden by vars_files in the main play +vars_files_var: "BAD!" +# should be overridden by the vars file in role2 +defaults_file_var_role2: "BAD!" diff --git a/test/integration/roles/test_var_precedence_role2/tasks/main.yml b/test/integration/roles/test_var_precedence_role2/tasks/main.yml new file mode 100644 index 00000000000..f38d63b3ee9 --- /dev/null +++ b/test/integration/roles/test_var_precedence_role2/tasks/main.yml @@ -0,0 +1,12 @@ +- debug: var=extra_var +- debug: var=param_var +- debug: var=vars_var +- debug: var=vars_files_var +- debug: var=defaults_file_var_role1 +- assert: + that: + - 'extra_var == "extra_var"' + - 'param_var == "param_var_role2"' + - 'vars_var == "vars_var"' + - 'vars_files_var == "vars_files_var"' + - 'defaults_file_var_role2 == "overridden by role vars"' diff --git a/test/integration/roles/test_var_precedence_role2/vars/main.yml b/test/integration/roles/test_var_precedence_role2/vars/main.yml new file mode 100644 index 00000000000..f079e4d01d0 --- /dev/null +++ b/test/integration/roles/test_var_precedence_role2/vars/main.yml @@ -0,0 +1,5 @@ +--- +# should override the global vars_files_var since it's local to the role +vars_files_var: "vars_files_var_role1" +# should override the value in defaults/main.yml for role 2 +defaults_file_var_role2: "overridden by role vars" diff --git a/test/integration/roles/test_var_precedence_role3/defaults/main.yml b/test/integration/roles/test_var_precedence_role3/defaults/main.yml new file mode 100644 index 00000000000..763b0d508ed --- /dev/null +++ b/test/integration/roles/test_var_precedence_role3/defaults/main.yml @@ -0,0 +1,7 @@ +--- +# should be overridden by vars_files in the main play +vars_files_var: "BAD!" +# should override the defaults var for role 1 and 2 +defaults_file_var: "last one wins" +# should be overridden from the inventory value +defaults_file_var_role3: "BAD!" diff --git a/test/integration/roles/test_var_precedence_role3/tasks/main.yml b/test/integration/roles/test_var_precedence_role3/tasks/main.yml new file mode 100644 index 00000000000..f07f329fd02 --- /dev/null +++ b/test/integration/roles/test_var_precedence_role3/tasks/main.yml @@ -0,0 +1,12 @@ +- debug: var=extra_var +- debug: var=param_var +- debug: var=vars_var +- debug: var=vars_files_var +- debug: var=defaults_file_var_role1 +- assert: + that: + - 'extra_var == "extra_var"' + - 'param_var == "param_var_role3"' + - 'vars_var == "vars_var"' + - 'vars_files_var == "vars_files_var"' + - 'defaults_file_var_role3 == "overridden from inventory"' diff --git a/test/integration/roles/test_var_precedence_role3/vars/main.yml b/test/integration/roles/test_var_precedence_role3/vars/main.yml new file mode 100644 index 00000000000..0adb2faed4c --- /dev/null +++ b/test/integration/roles/test_var_precedence_role3/vars/main.yml @@ -0,0 +1,3 @@ +--- +# should override the global vars_files_var since it's local to the role +vars_files_var: "vars_files_var_role1" diff --git a/test/integration/test_var_precedence.yml b/test/integration/test_var_precedence.yml new file mode 100644 index 00000000000..cacbe71c90c --- /dev/null +++ b/test/integration/test_var_precedence.yml @@ -0,0 +1,19 @@ +--- +- hosts: testhost + vars: + - vars_var: "vars_var" + - param_var: "BAD!" + - vars_files_var: "BAD!" + vars_files: + - vars/test_var_precedence.yml + roles: + - { role: test_var_precedence, param_var: "param_var" } + tasks: + - debug: var=extra_var + - debug: var=vars_var + - debug: var=vars_files_var + - assert: + that: + - 'extra_var == "extra_var"' + - 'vars_var == "vars_var"' + - 'vars_files_var == "vars_files_var"' diff --git a/test/integration/vars/test_var_precedence.yml b/test/integration/vars/test_var_precedence.yml new file mode 100644 index 00000000000..3f43f1031de --- /dev/null +++ b/test/integration/vars/test_var_precedence.yml @@ -0,0 +1,4 @@ +--- +extra_var: "BAD!" +role_var: "BAD!" +vars_files_var: "vars_files_var"