From 90cbb8c01beed9f3a14cb35c68f04bf8b6d088ff Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Wed, 25 May 2016 17:14:04 -0400 Subject: [PATCH] re-add the service action plugin (#13001) * readd the service action plugin, was removed cause it created unexpected fact gathering and there are no split service plugins that would make this useful (yet) Revert "removed action plugin as service facts and separate modules don't work yet and this forces gathering facts" This reverts commit 7368030651aaaf45d97d2935b9b8829ce3d510cc. * now only does minimal fact gathering --- lib/ansible/plugins/action/service.py | 64 +++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 lib/ansible/plugins/action/service.py diff --git a/lib/ansible/plugins/action/service.py b/lib/ansible/plugins/action/service.py new file mode 100644 index 0000000000..54a5a6094c --- /dev/null +++ b/lib/ansible/plugins/action/service.py @@ -0,0 +1,64 @@ +# (c) 2015, Ansible Inc, +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + + +from ansible.plugins.action import ActionBase + + +class ActionModule(ActionBase): + + TRANSFERS_FILES = False + + def run(self, tmp=None, task_vars=None): + ''' handler for package operations ''' + if task_vars is None: + task_vars = dict() + + result = super(ActionModule, self).run(tmp, task_vars) + + module = self._task.args.get('use', 'auto') + + if module == 'auto': + try: + module = self._templar.template('{{ansible_service_mgr}}') + except: + pass # could not get it from template! + + if module == 'auto': + facts = self._execute_module(module_name='setup', module_args=dict(gather_subset='!all', filter='ansible_service_mgr'), task_vars=task_vars) + self._display.debug("Facts %s" % facts) + if 'failed' not in facts: + module = getattr(facts['ansible_facts'], 'ansible_service_mgr', 'auto') + + if not module or module == 'auto' or module not in self._shared_loader_obj.module_loader: + module = 'service' + + if module != 'auto': + # run the 'service' module + new_module_args = self._task.args.copy() + if 'use' in new_module_args: + del new_module_args['use'] + + self._display.vvvv("Running %s" % module) + result.update(self._execute_module(module_name=module, module_args=new_module_args, task_vars=task_vars)) + else: + result['failed'] = True + result['msg'] = 'Could not detect which service manager to use. Try gathering facts or setting the "use" option.' + + return result