mirror of
https://github.com/kubevirt/kubevirt.core.git
synced 2026-07-28 18:34:36 +00:00
fix(inventory): Fix inventory source caching
Fix inventory source caching by separating the fetching of objects and populating the inventory. This way objects can be fetched from the K8S API or from a configured cached and the cache related parameters on the plugin now actually work. The inventory source cache was tested with the ansible.builtin.jsonfile cache plugin and 100k hosts (~2G JSON file). Though it took a noticeable amount of time for the inventory plugin to run it worked fine and no failures could be observed. Signed-off-by: Felix Matouschek <fmatouschek@redhat.com>
This commit is contained in:
@@ -8,7 +8,6 @@ __metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
from ansible_collections.kubevirt.core.plugins.inventory.kubevirt import (
|
||||
InventoryOptions,
|
||||
)
|
||||
@@ -60,19 +59,25 @@ WINDOWS_VMI_4 = merge_dicts(
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"client,vmi,expected",
|
||||
"vmi,expected",
|
||||
[
|
||||
({"vmis": [BASE_VMI]}, BASE_VMI, False),
|
||||
({"vmis": [WINDOWS_VMI_1]}, WINDOWS_VMI_1, True),
|
||||
({"vmis": [WINDOWS_VMI_2]}, WINDOWS_VMI_2, True),
|
||||
({"vmis": [WINDOWS_VMI_3]}, WINDOWS_VMI_3, True),
|
||||
({"vmis": [WINDOWS_VMI_4]}, WINDOWS_VMI_4, True),
|
||||
(BASE_VMI, False),
|
||||
(WINDOWS_VMI_1, True),
|
||||
(WINDOWS_VMI_2, True),
|
||||
(WINDOWS_VMI_3, True),
|
||||
(WINDOWS_VMI_4, True),
|
||||
],
|
||||
indirect=["client"],
|
||||
)
|
||||
def test_ansible_connection_winrm(inventory, hosts, client, vmi, expected):
|
||||
inventory.populate_inventory_from_namespace(
|
||||
client, "", DEFAULT_NAMESPACE, InventoryOptions()
|
||||
def test_ansible_connection_winrm(inventory, hosts, vmi, expected):
|
||||
inventory.populate_inventory(
|
||||
{
|
||||
"default_hostname": "test",
|
||||
"cluster_domain": "test.com",
|
||||
"namespaces": {
|
||||
"default": {"vms": [], "vmis": [vmi], "services": {}},
|
||||
},
|
||||
},
|
||||
InventoryOptions(),
|
||||
)
|
||||
|
||||
host = f"{DEFAULT_NAMESPACE}-{vmi['metadata']['name']}"
|
||||
|
||||
@@ -6,8 +6,6 @@ from __future__ import absolute_import, division, print_function
|
||||
|
||||
__metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
from ansible_collections.kubevirt.core.plugins.inventory.kubevirt import (
|
||||
InventoryOptions,
|
||||
)
|
||||
@@ -36,16 +34,10 @@ VMI = {
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"client",
|
||||
[{"vmis": [VMI]}],
|
||||
indirect=["client"],
|
||||
)
|
||||
def test_set_composable_vars(
|
||||
inventory,
|
||||
groups,
|
||||
hosts,
|
||||
client,
|
||||
):
|
||||
inventory._options = {
|
||||
"compose": {"set_from_another_var": "vmi_node_name"},
|
||||
@@ -53,8 +45,15 @@ def test_set_composable_vars(
|
||||
"keyed_groups": [{"prefix": "fedora", "key": "vmi_guest_os_info.versionId"}],
|
||||
"strict": True,
|
||||
}
|
||||
inventory.populate_inventory_from_namespace(
|
||||
client, "", DEFAULT_NAMESPACE, InventoryOptions()
|
||||
inventory.populate_inventory(
|
||||
{
|
||||
"default_hostname": "test",
|
||||
"cluster_domain": "test.com",
|
||||
"namespaces": {
|
||||
"default": {"vms": [], "vmis": [VMI], "services": {}},
|
||||
},
|
||||
},
|
||||
InventoryOptions(),
|
||||
)
|
||||
|
||||
host = f"{DEFAULT_NAMESPACE}-testvmi"
|
||||
|
||||
@@ -6,17 +6,10 @@ from __future__ import absolute_import, division, print_function
|
||||
|
||||
__metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
from ansible_collections.kubevirt.core.plugins.inventory.kubevirt import (
|
||||
InventoryOptions,
|
||||
)
|
||||
|
||||
from ansible_collections.kubevirt.core.tests.unit.plugins.inventory.constants import (
|
||||
DEFAULT_NAMESPACE,
|
||||
)
|
||||
|
||||
VM1 = {
|
||||
"metadata": {
|
||||
"name": "testvm1",
|
||||
@@ -50,16 +43,16 @@ VMI1 = {
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"client",
|
||||
[
|
||||
({"vms": [VM1, VM2], "vmis": [VMI1]}),
|
||||
],
|
||||
indirect=["client"],
|
||||
)
|
||||
def test_stopped_vm(inventory, hosts, client):
|
||||
inventory.populate_inventory_from_namespace(
|
||||
client, "", DEFAULT_NAMESPACE, InventoryOptions()
|
||||
def test_stopped_vm(inventory, hosts):
|
||||
inventory.populate_inventory(
|
||||
{
|
||||
"default_hostname": "test",
|
||||
"cluster_domain": "test.com",
|
||||
"namespaces": {
|
||||
"default": {"vms": [VM1, VM2], "vmis": [VMI1], "services": {}},
|
||||
},
|
||||
},
|
||||
InventoryOptions(),
|
||||
)
|
||||
|
||||
# The running VM should be present with ansible_host or ansible_port
|
||||
|
||||
Reference in New Issue
Block a user