Hi team,
I’m having trouble getting the actions plugin inside the collection being
used on playbook execution
This happens due to the name change from dellos10.py to os10.py for the
plugin
*Summary of issue*
*====================*
Action Plugin in collection:
/root/.ansible/collections/ansible_collections/dellemc_networking/os10/plugins/action/os10.py
Roles Task yaml referring module:
/root/.ansible/collections/ansible_collections/dellemc_networking/os10/roles/os10_vlan/tasks/provision_os10.yaml
- name: "Provisioning VLAN configuration for os10"
os10_config:
src: os10_vlan.j2
when: (ansible_network_os is defined and ansible_network_os ==
"dellemc_networking.os10.os10")
# notify: save config os10
register: output
When a playbook referring role os10_vlan is getting executed, the Action
plugin os10.py is not being loaded. Only the ‘normal’ action plugin got
loaded and eventually, the playbook failed.
*Root cause:*
*==========*
In Ansible(2.9.4), file: lib/ansible/executor/task_executor.py Function:
_get_action_handler
We have the following code that loads the appropriate Action plugin for the
module used in the playbook(os10_config)
*module_prefix = self._task.action.split('.')[-1].split('_')[0]*
*collections = self._task.collections*
*if self._shared_loader_obj.action_loader.has_plugin(self._task.action,
collection_list=collections):*
* handler_name = self._task.action*
* # FIXME: is this code path even live anymore? check w/ networking
folks; it trips sometimes when it shouldn't*
*elif all((module_prefix in C.NETWORK_GROUP_MODULES, module_prefix in
self._shared_loader_obj.action_loader)):*
* handler_name = module_prefix*
*else:*
* # FUTURE: once we're comfortable with collections impl,
preface this action with ansible.builtin so it can't be hijacked*
* handler_name = 'normal'*
* collections = None # until then, we don't want the task's
collection list to be consulted; use the builtin*
The first IF statement, checks for a Action plugin with the same name as
module name(os0_config) in the collection. This IF check fails ,since our
plugin is ‘os10’ and not ‘os10_config’
The second ELIF statement, checks if the module prefix(‘os10’) is part of
NETWORK_GROUP_MODULES and if so, searches it for Action plugin in
collections.
The Ansible maintains only the following list of prefixes in
NETWORK_GROUP_MODULES by default.Since ‘os10’ prefix is not part of this
list,
the ELIF check also fails. Eventually we end up loading ‘normal’ plugin.
File: : lib/ansible/config/base.yml
*NETWORK_GROUP_MODULES:*
* name: Network module families*
* default: [eos, nxos, ios, iosxr, junos, enos, ce, vyos, sros, dellos9,
dellos10, dellos6, asa, aruba, aireos, bigip, ironware, onyy*
*x, netconf]*
* description: 'TODO: write it'*
*Fix:*
*====*
export ANSIBLE_NETWORK_GROUP_MODULES=os10
Is this the right way to handle this?
Thanks
Mohamed Javeed
--
You received this message because you are subscribed to the Google Groups
"Ansible Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-devel/dd0b278d-ee97-496b-a375-ab42de02d270%40googlegroups.com.