summaryrefslogtreecommitdiffstats
path: root/ansible_collections/community/general/docs/docsite/rst/guide_deps.rst
blob: 4c0c4687a4f8ab7206003993753026fd59797bfd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
..
  Copyright (c) Ansible Project
  GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
  SPDX-License-Identifier: GPL-3.0-or-later

.. _ansible_collections.community.general.docsite.guide_deps:

``deps`` Guide
==============


Using ``deps``
^^^^^^^^^^^^^^

The ``ansible_collections.community.general.plugins.module_utils.deps`` module util simplifies
the importing of code as described in :ref:`Importing and using shared code <shared_code>`.
Please notice that ``deps`` is meant to be used specifically with Ansible modules, and not other types of plugins.

The same example from the Developer Guide would become:

.. code-block:: python

    from ansible_collections.community.general.plugins.module_utils import deps

    with deps.declare("foo"):
        import foo

Then in ``main()``, just after the argspec (or anywhere in the code, for that matter), do

.. code-block:: python

    deps.validate(module)  # assuming module is a valid AnsibleModule instance

By default, ``deps`` will rely on ``ansible.module_utils.basic.missing_required_lib`` to generate
a message about a failing import. That function accepts parameters ``reason`` and ``url``, and
and so does ``deps```:

.. code-block:: python

    with deps.declare("foo", reason="foo is needed to properly bar", url="https://foo.bar.io"):
        import foo

If you would rather write a custom message instead of using ``missing_required_lib`` then do:

.. code-block:: python

    with deps.declare("foo", msg="Custom msg explaining why foo is needed"):
        import foo

``deps`` allows for multiple dependencies to be declared:

.. code-block:: python

    with deps.declare("foo"):
        import foo

    with deps.declare("bar"):
        import bar

    with deps.declare("doe"):
        import doe

By default, ``deps.validate()`` will check on all the declared dependencies, but if so desired,
they can be validated selectively by doing:

.. code-block:: python

    deps.validate(module, "foo")       # only validates the "foo" dependency

    deps.validate(module, "doe:bar")   # only validates the "doe" and "bar" dependencies

    deps.validate(module, "-doe:bar")  # validates all dependencies except "doe" and "bar"

.. versionadded:: 6.1.0