2021-04-26 18:25:45 +02:00
|
|
|
# -*- coding: utf-8 -*-
|
2022-08-05 13:17:19 +02:00
|
|
|
# Copyright (c) 2021, Frank Dornheim <dornheim@posteo.de>
|
|
|
|
# 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
|
2021-04-26 18:25:45 +02:00
|
|
|
|
|
|
|
|
|
|
|
from __future__ import (absolute_import, division, print_function)
|
|
|
|
__metaclass__ = type
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
import os
|
|
|
|
|
|
|
|
from ansible.errors import AnsibleError
|
|
|
|
from ansible.inventory.data import InventoryData
|
|
|
|
from ansible_collections.community.general.plugins.inventory.lxd import InventoryModule
|
|
|
|
|
|
|
|
|
|
|
|
HOST_COMPARATIVE_DATA = {
|
|
|
|
'ansible_connection': 'ssh', 'ansible_host': '10.98.143.199', 'ansible_lxd_os': 'ubuntu', 'ansible_lxd_release': 'focal',
|
|
|
|
'ansible_lxd_profile': ['default'], 'ansible_lxd_state': 'running', 'ansible_lxd_location': 'Berlin',
|
|
|
|
'ansible_lxd_vlan_ids': {'my-macvlan': 666}, 'inventory_hostname': 'vlantest', 'inventory_hostname_short': 'vlantest'}
|
|
|
|
GROUP_COMPARATIVE_DATA = {
|
|
|
|
'all': [], 'ungrouped': [], 'testpattern': ['vlantest'], 'vlan666': ['vlantest'], 'locationBerlin': ['vlantest'],
|
|
|
|
'osUbuntu': ['vlantest'], 'releaseFocal': ['vlantest'], 'releaseBionic': [], 'profileDefault': ['vlantest'],
|
|
|
|
'profileX11': [], 'netRangeIPv4': ['vlantest'], 'netRangeIPv6': ['vlantest']}
|
|
|
|
GROUP_Config = {
|
|
|
|
'testpattern': {'type': 'pattern', 'attribute': 'test'},
|
|
|
|
'vlan666': {'type': 'vlanid', 'attribute': 666},
|
|
|
|
'locationBerlin': {'type': 'location', 'attribute': 'Berlin'},
|
|
|
|
'osUbuntu': {'type': 'os', 'attribute': 'ubuntu'},
|
|
|
|
'releaseFocal': {'type': 'release', 'attribute': 'focal'},
|
|
|
|
'releaseBionic': {'type': 'release', 'attribute': 'bionic'},
|
|
|
|
'profileDefault': {'type': 'profile', 'attribute': 'default'},
|
|
|
|
'profileX11': {'type': 'profile', 'attribute': 'x11'},
|
|
|
|
'netRangeIPv4': {'type': 'network_range', 'attribute': '10.98.143.0/24'},
|
|
|
|
'netRangeIPv6': {'type': 'network_range', 'attribute': 'fd42:bd00:7b11:2167:216:3eff::/96'}}
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
def inventory():
|
|
|
|
inv = InventoryModule()
|
|
|
|
inv.inventory = InventoryData()
|
|
|
|
|
|
|
|
# Test Values
|
|
|
|
inv.data = inv.load_json_data('tests/unit/plugins/inventory/fixtures/lxd_inventory.atd') # Load Test Data
|
|
|
|
inv.groupby = GROUP_Config
|
2021-12-13 22:01:52 +01:00
|
|
|
inv.prefered_instance_network_interface = 'eth'
|
|
|
|
inv.prefered_instance_network_family = 'inet'
|
2021-04-26 18:25:45 +02:00
|
|
|
inv.filter = 'running'
|
|
|
|
inv.dump_data = False
|
2021-12-13 22:01:52 +01:00
|
|
|
inv.type_filter = 'both'
|
2021-04-26 18:25:45 +02:00
|
|
|
|
|
|
|
return inv
|
|
|
|
|
|
|
|
|
2021-06-10 22:05:04 +02:00
|
|
|
def test_verify_file(tmp_path, inventory):
|
|
|
|
file = tmp_path / "foobar.lxd.yml"
|
|
|
|
file.touch()
|
|
|
|
assert inventory.verify_file(str(file)) is True
|
|
|
|
|
|
|
|
|
2021-04-26 18:25:45 +02:00
|
|
|
def test_verify_file_bad_config(inventory):
|
|
|
|
assert inventory.verify_file('foobar.lxd.yml') is False
|
|
|
|
|
|
|
|
|
|
|
|
def test_build_inventory_hosts(inventory):
|
|
|
|
"""Load example data and start the inventoryto test the host generation.
|
|
|
|
|
|
|
|
After the inventory plugin has run with the test data, the result of the host is checked."""
|
|
|
|
inventory._populate()
|
|
|
|
generated_data = inventory.inventory.get_host('vlantest').get_vars()
|
|
|
|
|
|
|
|
eq = True
|
|
|
|
for key, value in HOST_COMPARATIVE_DATA.items():
|
|
|
|
if generated_data[key] != value:
|
|
|
|
eq = False
|
|
|
|
assert eq
|
|
|
|
|
|
|
|
|
|
|
|
def test_build_inventory_groups(inventory):
|
|
|
|
"""Load example data and start the inventory to test the group generation.
|
|
|
|
|
|
|
|
After the inventory plugin has run with the test data, the result of the host is checked."""
|
|
|
|
inventory._populate()
|
|
|
|
generated_data = inventory.inventory.get_groups_dict()
|
|
|
|
|
|
|
|
eq = True
|
|
|
|
for key, value in GROUP_COMPARATIVE_DATA.items():
|
|
|
|
if generated_data[key] != value:
|
|
|
|
eq = False
|
|
|
|
assert eq
|
|
|
|
|
|
|
|
|
|
|
|
def test_build_inventory_groups_with_no_groupselection(inventory):
|
|
|
|
"""Load example data and start the inventory to test the group generation with groupby is none.
|
|
|
|
|
|
|
|
After the inventory plugin has run with the test data, the result of the host is checked."""
|
|
|
|
inventory.groupby = None
|
|
|
|
inventory._populate()
|
|
|
|
generated_data = inventory.inventory.get_groups_dict()
|
|
|
|
group_comparative_data = {'all': [], 'ungrouped': []}
|
|
|
|
|
|
|
|
eq = True
|
|
|
|
print("data: {0}".format(generated_data))
|
|
|
|
for key, value in group_comparative_data.items():
|
|
|
|
if generated_data[key] != value:
|
|
|
|
eq = False
|
|
|
|
assert eq
|