mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-10-04 23:44:00 -07:00
Add inventory plugin iocage (#9262)
* Add inventory plugin iocage #9261 * inventory/iocage.py BOTMETA entry added. * Remove missing methods from the test. * Avoid shell mode. * Parameter host is optional default=localhost * Fix AnsibleError calls. * Update plugins/inventory/iocage.py Co-authored-by: Felix Fontein <felix@fontein.de> * Update plugins/inventory/iocage.py Co-authored-by: Felix Fontein <felix@fontein.de> * Update plugins/inventory/iocage.py Co-authored-by: Felix Fontein <felix@fontein.de> * Update plugins/inventory/iocage.py Co-authored-by: Felix Fontein <felix@fontein.de> * Update plugins/inventory/iocage.py Co-authored-by: Felix Fontein <felix@fontein.de> * Update plugins/inventory/iocage.py Co-authored-by: Felix Fontein <felix@fontein.de> * Update plugins/inventory/iocage.py Co-authored-by: Felix Fontein <felix@fontein.de> * iocage_data removed. Not necessarily defined at this point. * Description mentions that remote hosts are contacted via SSH. * test inventory iocage * Create get_jails and get_properties in iocage plugin to simplify testing. * Update test_iocage.py * Add fixtures iocage_* * Update documentation. * Update documentation. * Update documentation. * Fix localhost environment. * Update plugins/inventory/iocage.py Co-authored-by: Felix Fontein <felix@fontein.de> * Update plugins/inventory/iocage.py Co-authored-by: Felix Fontein <felix@fontein.de> --------- Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
parent
9751461295
commit
23d97fa4b0
19 changed files with 1791 additions and 0 deletions
112
tests/unit/plugins/inventory/test_iocage.py
Normal file
112
tests/unit/plugins/inventory/test_iocage.py
Normal file
|
@ -0,0 +1,112 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright (c) 2024 Vladimir Botka <vbotka@gmail.com>
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
import pytest
|
||||
import yaml
|
||||
|
||||
from ansible.inventory.data import InventoryData
|
||||
from ansible.template import Templar
|
||||
from ansible_collections.community.general.plugins.inventory.iocage import InventoryModule
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def inventory():
|
||||
inv = InventoryModule()
|
||||
inv.inventory = InventoryData()
|
||||
inv.templar = Templar(None)
|
||||
inv.jails = load_txt_data('tests/unit/plugins/inventory/fixtures/iocage_jails.txt')
|
||||
inv.js_ok = load_yml_data('tests/unit/plugins/inventory/fixtures/iocage_jails.yml')
|
||||
prpts_101 = load_txt_data('tests/unit/plugins/inventory/fixtures/iocage_properties_test_101.txt')
|
||||
prpts_102 = load_txt_data('tests/unit/plugins/inventory/fixtures/iocage_properties_test_102.txt')
|
||||
prpts_103 = load_txt_data('tests/unit/plugins/inventory/fixtures/iocage_properties_test_103.txt')
|
||||
inv.prpts = {'test_101': prpts_101, 'test_102': prpts_102, 'test_103': prpts_103}
|
||||
inv.ps_ok = load_yml_data('tests/unit/plugins/inventory/fixtures/iocage_properties.yml')
|
||||
inv.ok = load_yml_data('tests/unit/plugins/inventory/fixtures/iocage_inventory.yml')
|
||||
return inv
|
||||
|
||||
|
||||
def load_txt_data(path):
|
||||
f = open(path, 'r')
|
||||
s = f.read()
|
||||
f.close()
|
||||
return s
|
||||
|
||||
|
||||
def load_yml_data(path):
|
||||
f = open(path, 'r')
|
||||
d = yaml.safe_load(f)
|
||||
f.close()
|
||||
return d
|
||||
|
||||
|
||||
def get_option(option):
|
||||
groups = {}
|
||||
groups['test'] = "inventory_hostname.startswith('test')"
|
||||
|
||||
if option == 'groups':
|
||||
return groups
|
||||
elif option == 'keyed_groups':
|
||||
return []
|
||||
elif option == 'compose':
|
||||
return {}
|
||||
elif option == 'strict':
|
||||
return False
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def test_verify_file_bad_config(inventory):
|
||||
assert inventory.verify_file('foobar.iocage.yml') is False
|
||||
|
||||
|
||||
def test_verify_file(tmp_path, inventory):
|
||||
file = tmp_path / "foobar.iocage.yml"
|
||||
file.touch()
|
||||
assert inventory.verify_file(str(file))
|
||||
|
||||
|
||||
def test_get_jails(inventory):
|
||||
results = {'_meta': {'hostvars': {}}}
|
||||
inventory.get_jails(inventory.jails, results)
|
||||
assert results == inventory.js_ok
|
||||
|
||||
|
||||
def test_get_properties(inventory):
|
||||
results = {'_meta': {'hostvars': {}}}
|
||||
inventory.get_jails(inventory.jails, results)
|
||||
for hostname, host_vars in results['_meta']['hostvars'].items():
|
||||
inventory.get_properties(inventory.prpts[hostname], results, hostname)
|
||||
assert results == inventory.ps_ok
|
||||
|
||||
|
||||
def test_populate(inventory, mocker):
|
||||
results = {'_meta': {'hostvars': {}}}
|
||||
inventory.get_jails(inventory.jails, results)
|
||||
for hostname, host_vars in results['_meta']['hostvars'].items():
|
||||
inventory.get_properties(inventory.prpts[hostname], results, hostname)
|
||||
inventory.get_option = mocker.MagicMock(side_effect=get_option)
|
||||
inventory.populate(results)
|
||||
|
||||
# test
|
||||
hosts = ('test_101', 'test_102', 'test_103')
|
||||
vars = ('iocage_basejail', 'iocage_boot', 'iocage_ip4', 'iocage_ip6', 'iocage_properties',
|
||||
'iocage_release', 'iocage_state', 'iocage_template', 'iocage_type')
|
||||
|
||||
# test host_vars
|
||||
for host in hosts:
|
||||
h = inventory.inventory.get_host(host)
|
||||
for var in vars:
|
||||
assert inventory.ok['all']['children']['test']['hosts'][host][var] == h.get_vars()[var]
|
||||
|
||||
# test groups
|
||||
test_101_info = inventory.inventory.get_host('test_101')
|
||||
test_102_info = inventory.inventory.get_host('test_102')
|
||||
test_103_info = inventory.inventory.get_host('test_103')
|
||||
g = inventory.inventory.groups['test']
|
||||
assert g.hosts == [test_101_info, test_102_info, test_103_info]
|
Loading…
Add table
Add a link
Reference in a new issue