There isn't a great answer here. roles weren't originally designed to work this way.
You may want to look into collections instead, which have proper python imports, that aren't effectively "fake". A collection can include modules/plugins, as well as roles. However the location of the module moves. This doesn't really solve things for older versions of Ansible however, as collections are a recent addition. On Fri, Mar 6, 2020 at 11:01 AM Rich Megginson <[email protected]> wrote: > When developing a role that has a local module with some code split into > module_utils, how do you set up your pythonpath or venv so that pylint > and unit testing resolves the imports correctly? > > For example: https://github.com/linux-system-roles/network/ > > The module code is in > > https://github.com/linux-system-roles/network/blob/master/library/network_connections.py > > The module_utils code is in > > https://github.com/linux-system-roles/network/tree/master/module_utils/network_lsr > > The module code imports the module_utils code like this: > > # pylint: disable=import-error, no-name-in-module > from ansible.module_utils.network_lsr import MyError > > As you can see, we have to disable pylint checking, because there is no > ansible.module_utils.network_lsr - there is a module_utils.network_lsr > however. We have to do something similar in the unit test code: > > https://github.com/linux-system-roles/network/blob/master/tests/unit/test_nm_provider.py > > sys.modules["ansible"] = mock.Mock() > sys.modules["ansible.module_utils.basic"] = mock.Mock() > sys.modules["ansible.module_utils"] = mock.Mock() > sys.modules["ansible.module_utils.network_lsr"] = __import__("network_lsr") > > This seems pretty hackish, and I'm hoping there is a better or standard > way to do this. > > -- > 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/d5f0c3ad-f7e5-09de-b5b4-3e9c741cd567%40redhat.com > . > -- Matt Martz @sivel sivel.net -- 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/CAD8N0v_Pn-V51-dC-05VQkL6zoh%3D9kVPZVB%2BpiS7nXY4HjiydA%40mail.gmail.com.
