summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSloane Hertel <shertel@redhat.com>2017-12-08 10:13:22 -0500
committerToshio Kuratomi <a.badger@gmail.com>2018-01-24 08:51:05 -0800
commitdeaa9a21f9b5cdc65791cf4c8ef46c2353ae108d (patch)
tree8e5fb44a05bd4b4f6fa34b89d8fcd897322166a9
parent6233daaa446993e4820f0eaa83ffdeb673dbcced (diff)
downloadansible-deaa9a21f9b5cdc65791cf4c8ef46c2353ae108d.tar.gz
Fix using loops with environment and add tests (#32796)
(cherry picked from commit 7bb35e8781b46cb6024a6e45e76cb663185fe10d)
-rw-r--r--lib/ansible/plugins/action/__init__.py7
-rw-r--r--test/integration/targets/environment/test_environment.yml90
2 files changed, 93 insertions, 4 deletions
diff --git a/lib/ansible/plugins/action/__init__.py b/lib/ansible/plugins/action/__init__.py
index 45a256b24f..a2717e2fef 100644
--- a/lib/ansible/plugins/action/__init__.py
+++ b/lib/ansible/plugins/action/__init__.py
@@ -176,10 +176,9 @@ class ActionBase(with_metaclass(ABCMeta, object)):
if not isinstance(environments, list):
environments = [ environments ]
- # the environments as inherited need to be reversed, to make
- # sure we merge in the parent's values first so those in the
- # block then task 'win' in precedence
- environments.reverse()
+ # The order of environments matters to make sure we merge
+ # in the parent's values first so those in the block then
+ # task 'win' in precedence
for environment in environments:
if environment is None or len(environment) == 0:
continue
diff --git a/test/integration/targets/environment/test_environment.yml b/test/integration/targets/environment/test_environment.yml
index e35a438582..f8e49ac8d0 100644
--- a/test/integration/targets/environment/test_environment.yml
+++ b/test/integration/targets/environment/test_environment.yml
@@ -74,3 +74,93 @@
- '"not1" in test_env5.stdout_lines'
- '"val2" in test_env5.stdout_lines'
environment: "{{test2}}"
+
+- name: test setting environment while using loops
+ hosts: testhost
+ environment:
+ foo: outer
+ tasks:
+ - name: verify foo==outer
+ command: /bin/echo $foo
+ loop:
+ - 1
+ register: test_foo
+
+ - name: assert foo==outer
+ assert:
+ that:
+ - "{{ test_foo.results[0].stdout == 'outer' }}"
+
+ - name: set environment on a task
+ environment:
+ foo: in_task
+ command: /bin/echo $foo
+ loop:
+ - 1
+ register: test_foo
+
+ - name: assert foo==in_task
+ assert:
+ that:
+ - "test_foo.results[0].stdout == 'in_task'"
+
+ - name: test that the outer env var is set appropriately still
+ command: /bin/echo $foo
+ loop:
+ - 1
+ register: test_foo
+
+ - name: assert foo==outer
+ assert:
+ that:
+ - "{{ test_foo.results[0].stdout == 'outer' }}"
+
+ - name: set environment on a block
+ environment:
+ foo: in_block
+ block:
+ - name: test the environment is set in the block
+ command: /bin/echo $foo
+ loop:
+ - 1
+ register: test_foo
+
+ - name: assert foo==in_block
+ assert:
+ that:
+ - "test_foo.results[0].stdout == 'in_block'"
+
+ - name: test setting environment in a task inside a block
+ environment:
+ foo: in_block_in_task
+ command: /bin/echo $foo
+ loop:
+ - 1
+ register: test_foo
+
+ - name: assert foo==in_block_in_task
+ assert:
+ that:
+ - "test_foo.results[0].stdout == 'in_block_in_task'"
+
+ - name: test the environment var is set to the parent value
+ command: /bin/echo $foo
+ loop:
+ - 1
+ register: test_foo
+
+ - name: assert foo==in_block
+ assert:
+ that:
+ - "test_foo.results[0].stdout == 'in_block'"
+
+ - name: test the env var foo has the initial value
+ command: /bin/echo $foo
+ loop:
+ - 1
+ register: test_foo
+
+ - name: assert foo==outer
+ assert:
+ that:
+ - "{{ test_foo.results[0].stdout == 'outer' }}"