diff --git a/lib/ansible/playbook/__init__.py b/lib/ansible/playbook/__init__.py index 021d62890d..47bfadcdd2 100644 --- a/lib/ansible/playbook/__init__.py +++ b/lib/ansible/playbook/__init__.py @@ -177,6 +177,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 _load_playbook_from_file(self, path, vars={}): @@ -371,6 +373,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 859e04667d..5f24557c21 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -578,6 +578,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 4abcd2cd82..718ac10f7c 100644 --- a/lib/ansible/utils/__init__.py +++ b/lib/ansible/utils/__init__.py @@ -647,6 +647,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()