diff --git a/lib/ansible/playbook/__init__.py b/lib/ansible/playbook/__init__.py index 74cbeeaa96..b3d1a7ced3 100644 --- a/lib/ansible/playbook/__init__.py +++ b/lib/ansible/playbook/__init__.py @@ -181,6 +181,8 @@ class PlayBook(object): ansible.callbacks.load_callback_plugins() ansible.callbacks.set_playbook(self.callbacks, self) + self._ansible_version = utils.version_info(gitinfo=True) + # ***************************************************** def _get_playbook_vars(self, play_ds, existing_vars): @@ -409,6 +411,7 @@ class PlayBook(object): ) runner.module_vars.update({'play_hosts': hosts}) + runner.module_vars.update({'ansible_version': self._ansible_version}) if task.async_seconds == 0: results = runner.run() diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index 87740cddcc..9533a087ca 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -622,6 +622,9 @@ class Runner(object): if self.inventory.src() is not None: inject['inventory_file'] = self.inventory.src() + # could be already set by playbook code + inject.setdefault('ansible_version', utils.version_info(gitinfo=False)) + # allow with_foo to work in playbooks... items = None items_plugin = self.module_vars.get('items_lookup_plugin', None) diff --git a/lib/ansible/utils/__init__.py b/lib/ansible/utils/__init__.py index 5da39acab7..bf44029390 100644 --- a/lib/ansible/utils/__init__.py +++ b/lib/ansible/utils/__init__.py @@ -804,6 +804,30 @@ def version(prog): result = result + " {0}".format(gitinfo) return result +def version_info(gitinfo=False): + if gitinfo: + # expensive call, user with care + ansible_version_string = version('') + else: + ansible_version_string = __version__ + ansible_version = ansible_version_string.split()[0] + ansible_versions = ansible_version.split('.') + for counter in range(len(ansible_versions)): + if ansible_versions[counter] == "": + ansible_versions[counter] = 0 + try: + ansible_versions[counter] = int(ansible_versions[counter]) + except: + pass + if len(ansible_versions) < 3: + for counter in range(len(ansible_versions), 3): + ansible_versions.append(0) + return {'string': ansible_version_string.strip(), + 'full': ansible_version, + 'major': ansible_versions[0], + 'minor': ansible_versions[1], + 'revision': ansible_versions[2]} + def getch(): ''' read in a single character ''' fd = sys.stdin.fileno()