EVOLUTION-MANAGER
Edit File: net_base.py
# Copyright: (c) 2015, Ansible Inc, # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) from __future__ import (absolute_import, division, print_function) __metaclass__ = type import copy from ansible.errors import AnsibleError from ansible.plugins.action import ActionBase from ansible.utils.display import Display display = Display() class ActionModule(ActionBase): def run(self, tmp=None, task_vars=None): del tmp # tmp no longer has any effect result = {} play_context = copy.deepcopy(self._play_context) play_context.network_os = self._get_network_os(task_vars) new_task = self._task.copy() module = self._get_implementation_module(play_context.network_os, self._task.action) if not module: if self._task.args['fail_on_missing_module']: result['failed'] = True else: result['failed'] = False result['msg'] = ('Could not find implementation module %s for %s' % (self._task.action, play_context.network_os)) return result new_task.action = module action = self._shared_loader_obj.action_loader.get(play_context.network_os, task=new_task, connection=self._connection, play_context=play_context, loader=self._loader, templar=self._templar, shared_loader_obj=self._shared_loader_obj) display.vvvv('Running implementation module %s' % module) return action.run(task_vars=task_vars) def _get_network_os(self, task_vars): if 'network_os' in self._task.args and self._task.args['network_os']: display.vvvv('Getting network OS from task argument') network_os = self._task.args['network_os'] elif self._play_context.network_os: display.vvvv('Getting network OS from inventory') network_os = self._play_context.network_os elif 'network_os' in task_vars.get('ansible_facts', {}) and task_vars['ansible_facts']['network_os']: display.vvvv('Getting network OS from fact') network_os = task_vars['ansible_facts']['network_os'] else: raise AnsibleError('ansible_network_os must be specified on this host to use platform agnostic modules') return network_os def _get_implementation_module(self, network_os, platform_agnostic_module): module_name = network_os.split('.')[-1] + '_' + platform_agnostic_module.partition('_')[2] if '.' in network_os: fqcn_module = '.'.join(network_os.split('.')[0:-1]) implementation_module = fqcn_module + '.' + module_name else: implementation_module = module_name if implementation_module not in self._shared_loader_obj.module_loader: implementation_module = None return implementation_module