diff --git a/lib/ansible/playbook/__init__.py b/lib/ansible/playbook/__init__.py index d461c35ab50..a5b8f1cc996 100644 --- a/lib/ansible/playbook/__init__.py +++ b/lib/ansible/playbook/__init__.py @@ -258,6 +258,8 @@ class PlayBook(object): facts = result.get('ansible_facts', {}) self.SETUP_CACHE[host].update(facts) if task.register: + if 'stdout' in result: + result['stdout_lines'] = result['stdout'].splitlines() self.SETUP_CACHE[host][task.register] = result # flag which notify handlers need to be run diff --git a/test/TestPlayBook.py b/test/TestPlayBook.py index eff544151a0..dccf35d2183 100644 --- a/test/TestPlayBook.py +++ b/test/TestPlayBook.py @@ -181,3 +181,20 @@ class TestPlaybook(unittest.TestCase): ) play = ansible.playbook.Play(playbook, playbook.playbook[0], os.getcwd()) assert play.hosts == ';'.join(('host1', 'host2', 'host3')) + + def test_results_list(self): + # Test that we can iterate over the lines of a command's stdout in a register variable. + test_callbacks = TestCallbacks() + playbook = ansible.playbook.PlayBook( + playbook=os.path.join(self.test_dir, 'results_list.yml'), + host_list='test/ansible_hosts', + stats=ans_callbacks.AggregateStats(), + callbacks=test_callbacks, + runner_callbacks=test_callbacks + ) + result = playbook.run() + self.assertIn('localhost', result) + self.assertIn('ok', result['localhost']) + self.assertEqual(result['localhost']['ok'], 6) + self.assertIn('failures', result['localhost']) + self.assertEqual(result['localhost']['failures'], 0) diff --git a/test/results_list.yml b/test/results_list.yml new file mode 100644 index 00000000000..c44e22ba408 --- /dev/null +++ b/test/results_list.yml @@ -0,0 +1,19 @@ +--- +# Test iterating over lines of stdout stored in a register. +- hosts: localhost + vars: + small_file: /etc/resolv.conf + temp_file: /tmp/ansible_result_list.tmp + + tasks: + - action: command cat $small_file + register: result + + - action: file dest=$temp_file state=absent + + - action: shell echo '$item' >> $temp_file + with_items: ${result.stdout_lines} + + - action: command diff $small_file $temp_file + + - action: file dest=$temp_file state=absent