Restructured into a collection
This commit is contained in:
parent
ae58080401
commit
3f38940a9c
12 changed files with 128 additions and 78 deletions
71
README.md
71
README.md
|
@ -59,74 +59,3 @@ is evaluated, but before the condition is. If these variables already existed,
|
|||
their state will be saved and they will be restored after the instruction is
|
||||
done executing. This is different from the core Ansible behaviour, which does
|
||||
not evaluate the `vars` unless they are used.
|
||||
|
||||
A somewhat silly example can be found in the `example` directory. Trying to
|
||||
execute it using `ansible-inventory --graph` results in the following output.
|
||||
|
||||
```
|
||||
[WARNING]: reconstructed - error on host evil-vm: evil-vm is obviously evil,
|
||||
skipping.
|
||||
@all:
|
||||
|--@managed:
|
||||
| |--@by_environment:
|
||||
| | |--@env_dev:
|
||||
| | | |--vm00
|
||||
| | | |--vm01
|
||||
| | | |--vm02
|
||||
| | | |--vm03
|
||||
| | | |--vm04
|
||||
| | | |--vm09
|
||||
| | |--@env_prod:
|
||||
| | | |--vm05
|
||||
| | | |--vm06
|
||||
| | | |--vm07
|
||||
| | | |--vm08
|
||||
| |--@by_failover_stack:
|
||||
| | |--@fostack_1:
|
||||
| | | |--vm00
|
||||
| | | |--vm02
|
||||
| | | |--vm05
|
||||
| | | |--vm07
|
||||
| | |--@fostack_2:
|
||||
| | | |--vm01
|
||||
| | | |--vm03
|
||||
| | | |--vm06
|
||||
| | | |--vm08
|
||||
| | |--@no_failover:
|
||||
| | | |--vm04
|
||||
| | | |--vm09
|
||||
| |--@by_network:
|
||||
| | |--@net_dev:
|
||||
| | | |--vm00
|
||||
| | | |--vm01
|
||||
| | | |--vm02
|
||||
| | | |--vm03
|
||||
| | | |--vm04
|
||||
| | |--@net_infra:
|
||||
| | | |--vm05
|
||||
| | | |--vm06
|
||||
| | | |--vm07
|
||||
| | | |--vm08
|
||||
| | | |--vm09
|
||||
| |--@by_service:
|
||||
| | |--@svc_ldap:
|
||||
| | | |--@svcm_ldap_back:
|
||||
| | | | |--@svcm_ldap_ro:
|
||||
| | | | | |--vm02
|
||||
| | | | | |--vm03
|
||||
| | | | | |--vm07
|
||||
| | | | | |--vm08
|
||||
| | | | |--@svcm_ldap_rw:
|
||||
| | | | | |--vm04
|
||||
| | | | | |--vm09
|
||||
| | | |--@svcm_ldap_front:
|
||||
| | | | |--vm00
|
||||
| | | | |--vm01
|
||||
| | | | |--vm05
|
||||
| | | | |--vm06
|
||||
|--@reedmably_evil:
|
||||
| |--evil-but-nicer-vm
|
||||
|--@ungrouped:
|
||||
| |--evil-vm
|
||||
| |--localhost
|
||||
```
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
[defaults]
|
||||
inventory = example/
|
||||
jinja2_extensions = jinja2.ext.do
|
1
example/.gitignore
vendored
Normal file
1
example/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
collections/ansible_collections
|
98
example/README.md
Normal file
98
example/README.md
Normal file
|
@ -0,0 +1,98 @@
|
|||
reconstructed example
|
||||
=====================
|
||||
|
||||
The example in this directory generates a graph of hosts, organised based on
|
||||
the contents of a variable called ``inv__data`` associated to each host
|
||||
statically in the ``inventory/00-data.yml`` file. The main ``reconstructed``
|
||||
script, located in ``inventory/01-test-reconstructed.yml``, is executed once
|
||||
for each host. It creates the various groups at the appropriate locations,
|
||||
defines additional facts, and adds hosts to the groups.
|
||||
|
||||
The example can be executed using :
|
||||
|
||||
```
|
||||
ansible-galaxy collection install .. -p ./collections
|
||||
ansible-inventory --playbook-dir . --graph
|
||||
```
|
||||
|
||||
When executed, ``localhost`` will be skipped as it doesn't have the
|
||||
``inv__data`` fact.
|
||||
|
||||
Two hosts in there, ``evil-vm`` and ``evil-but-nicer-vm``, are meant to
|
||||
illustrate the ``fail`` action as well as error recovery.
|
||||
|
||||
The rest of the hosts correspond to two instances of a LDAP cluster, in which
|
||||
two hosts are used as the frontend, two hosts as the read-only replicas, and
|
||||
the last one as the master. Groups are generated based on the environment,
|
||||
network, and failover stack, as well as service, components of the service,
|
||||
and instances of a service.
|
||||
|
||||
Below is the output that should be obtained.
|
||||
|
||||
```
|
||||
[WARNING]: reconstructed - error on host evil-vm: evil-vm is obviously evil,
|
||||
skipping.
|
||||
@all:
|
||||
|--@managed:
|
||||
| |--@by_environment:
|
||||
| | |--@env_dev:
|
||||
| | | |--vm00
|
||||
| | | |--vm01
|
||||
| | | |--vm02
|
||||
| | | |--vm03
|
||||
| | | |--vm04
|
||||
| | | |--vm09
|
||||
| | |--@env_prod:
|
||||
| | | |--vm05
|
||||
| | | |--vm06
|
||||
| | | |--vm07
|
||||
| | | |--vm08
|
||||
| |--@by_failover_stack:
|
||||
| | |--@fostack_1:
|
||||
| | | |--vm00
|
||||
| | | |--vm02
|
||||
| | | |--vm05
|
||||
| | | |--vm07
|
||||
| | |--@fostack_2:
|
||||
| | | |--vm01
|
||||
| | | |--vm03
|
||||
| | | |--vm06
|
||||
| | | |--vm08
|
||||
| | |--@no_failover:
|
||||
| | | |--vm04
|
||||
| | | |--vm09
|
||||
| |--@by_network:
|
||||
| | |--@net_dev:
|
||||
| | | |--vm00
|
||||
| | | |--vm01
|
||||
| | | |--vm02
|
||||
| | | |--vm03
|
||||
| | | |--vm04
|
||||
| | |--@net_infra:
|
||||
| | | |--vm05
|
||||
| | | |--vm06
|
||||
| | | |--vm07
|
||||
| | | |--vm08
|
||||
| | | |--vm09
|
||||
| |--@by_service:
|
||||
| | |--@svc_ldap:
|
||||
| | | |--@svcm_ldap_back:
|
||||
| | | | |--@svcm_ldap_ro:
|
||||
| | | | | |--vm02
|
||||
| | | | | |--vm03
|
||||
| | | | | |--vm07
|
||||
| | | | | |--vm08
|
||||
| | | | |--@svcm_ldap_rw:
|
||||
| | | | | |--vm04
|
||||
| | | | | |--vm09
|
||||
| | | |--@svcm_ldap_front:
|
||||
| | | | |--vm00
|
||||
| | | | |--vm01
|
||||
| | | | |--vm05
|
||||
| | | | |--vm06
|
||||
|--@reedmably_evil:
|
||||
| |--evil-but-nicer-vm
|
||||
|--@ungrouped:
|
||||
| |--evil-vm
|
||||
| |--localhost
|
||||
```
|
4
example/ansible.cfg
Normal file
4
example/ansible.cfg
Normal file
|
@ -0,0 +1,4 @@
|
|||
[defaults]
|
||||
inventory = inventory
|
||||
collections_path = collections
|
||||
jinja2_extensions = jinja2.ext.do
|
0
example/collections/.empty
Normal file
0
example/collections/.empty
Normal file
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
plugin: reconstructed
|
||||
plugin: tseeker.reconstructed.reconstructed
|
||||
instructions:
|
||||
|
||||
# Check whether that host is managed
|
3
example/requirements.yml
Normal file
3
example/requirements.yml
Normal file
|
@ -0,0 +1,3 @@
|
|||
collections:
|
||||
- name: tseeker.reconstructed
|
||||
version: 1.0.0
|
18
galaxy.yml
Normal file
18
galaxy.yml
Normal file
|
@ -0,0 +1,18 @@
|
|||
namespace: tseeker
|
||||
name: reconstructed
|
||||
version: 1.0.0
|
||||
readme: README.md
|
||||
authors:
|
||||
- Emmanuel BENOÎT <tseeker@nocternity.net>
|
||||
description: An inventory plug-in that can be used to generate groups programatically.
|
||||
license:
|
||||
- GPL-3.0-or-later
|
||||
tags: [ inventory, group, plugin ]
|
||||
repository: https://github.com/tseeker/reconstructed
|
||||
issues: https://github.com/tseeker/reconstructed/issues
|
||||
build_ignore:
|
||||
- example/collections
|
||||
- .pytest_cache
|
||||
- .pre-commit-config.yaml
|
||||
- .yamllint
|
||||
- requirements-dev.txt
|
|
@ -23,7 +23,7 @@ DOCUMENTATION = """
|
|||
- Token that ensures this is a source file for the C(group_creator)
|
||||
plugin.
|
||||
required: True
|
||||
choices: ['reconstructed']
|
||||
choices: ['tseeker.reconstructed.reconstructed','reconstructed']
|
||||
instructions:
|
||||
description:
|
||||
- The list of instructions to be executed in order to generate the
|
||||
|
@ -1042,7 +1042,7 @@ def parse_instruction(inventory, templar, display, record):
|
|||
class InventoryModule(BaseInventoryPlugin):
|
||||
"""Constructs groups based on lists of instructions."""
|
||||
|
||||
NAME = "reconstructed"
|
||||
NAME = "tseeker.reconstructed.reconstructed"
|
||||
|
||||
def verify_file(self, path):
|
||||
return super().verify_file(path) and path.endswith((".yaml", ".yml"))
|
|
@ -4,7 +4,7 @@ import sys
|
|||
|
||||
sys.path.insert(
|
||||
0,
|
||||
os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "inventory_plugins")),
|
||||
os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "plugins/inventory")),
|
||||
)
|
||||
|
||||
import reconstructed
|
||||
|
|
Loading…
Reference in a new issue