From 5122455db833eeddc92b74c44d112c125878502b Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Fri, 3 Jul 2015 13:54:31 -0400 Subject: [PATCH] ported missing sequence updates from 1.9 --- lib/ansible/plugins/lookup/sequence.py | 27 +++++++++++++------ .../roles/test_iterators/tasks/main.yml | 7 ++++- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/lib/ansible/plugins/lookup/sequence.py b/lib/ansible/plugins/lookup/sequence.py index 1ddeba932f8..1e66626b68e 100644 --- a/lib/ansible/plugins/lookup/sequence.py +++ b/lib/ansible/plugins/lookup/sequence.py @@ -152,15 +152,26 @@ class LookupModule(LookupBase): ) elif self.count is not None: # convert count to end - self.end = self.start + self.count * self.stride - 1 + if self.count != 0: + self.end = self.start + self.count * self.stride - 1 + else: + self.start = 0 + self.end = 0 + self.stride = 0 del self.count - if self.end < self.start: - raise AnsibleError("can't count backwards") + if self.stride > 0 and self.end < self.start: + raise AnsibleError("to count backwards make stride negative") + if self.stride < 0 and self.end > self.start: + raise AnsibleError("to count forward don't make stride negative") if self.format.count('%') != 1: raise AnsibleError("bad formatting string: %s" % self.format) def generate_sequence(self): - numbers = xrange(self.start, self.end + 1, self.stride) + if self.stride > 0: + adjust = 1 + else: + adjust = -1 + numbers = xrange(self.start, self.end + adjust, self.stride) for i in numbers: try: @@ -191,13 +202,13 @@ class LookupModule(LookupBase): raise AnsibleError("unknown error parsing with_sequence arguments: %r. Error was: %s" % (term, e)) self.sanity_check() - - results.extend(self.generate_sequence()) + if self.stride != 0: + results.extend(self.generate_sequence()) except AnsibleError: raise - except Exception: + except Exception as e: raise AnsibleError( - "unknown error generating sequence" + "unknown error generating sequence: %s" % e ) return results diff --git a/test/integration/roles/test_iterators/tasks/main.yml b/test/integration/roles/test_iterators/tasks/main.yml index ad55d6d6105..b324da7932f 100644 --- a/test/integration/roles/test_iterators/tasks/main.yml +++ b/test/integration/roles/test_iterators/tasks/main.yml @@ -81,10 +81,15 @@ with_sequence: count=0 register: count_of_zero +- name: test with_sequence count 1 + set_fact: "{{ 'x' + item }}={{ item }}" + with_sequence: count=1 + register: count_of_one + - assert: that: - count_of_zero | skipped - - not count_of_zero | failed + - not count_of_one | skipped # WITH_RANDOM_CHOICE