mirror of
https://github.com/kubevirt/kubevirt.core.git
synced 2026-05-07 22:02:38 +00:00
cleanup(inventory): Use dicts where possible
Use dicts instead of ResourceFields where possible to allow easier serialization/deserialization of objects fetched from the K8S API. Signed-off-by: Felix Matouschek <fmatouschek@redhat.com>
This commit is contained in:
@@ -22,7 +22,9 @@ BASE_VMI = {
|
||||
"metadata": {
|
||||
"name": "testvmi",
|
||||
"namespace": "default",
|
||||
"uid": "e86c603c-fb13-4933-bf67-de100bdba0c3",
|
||||
},
|
||||
"spec": {},
|
||||
"status": {
|
||||
"interfaces": [{"ipAddress": "10.10.10.10"}],
|
||||
},
|
||||
|
||||
@@ -21,7 +21,9 @@ VMI = {
|
||||
"metadata": {
|
||||
"name": "testvmi",
|
||||
"namespace": "default",
|
||||
"uid": "6ffdef43-6c39-4441-a088-82d319ea5c13",
|
||||
},
|
||||
"spec": {},
|
||||
"status": {
|
||||
"interfaces": [{"ipAddress": "10.10.10.10"}],
|
||||
"migrationMethod": "BlockMigration",
|
||||
|
||||
@@ -24,6 +24,7 @@ VM1 = {
|
||||
"uid": "940003aa-0160-4b7e-9e55-8ec3df72047f",
|
||||
},
|
||||
"spec": {"running": True},
|
||||
"status": {},
|
||||
}
|
||||
|
||||
VM2 = {
|
||||
@@ -33,6 +34,7 @@ VM2 = {
|
||||
"uid": "c2c68de5-b9d7-4c25-872f-462e7245b3e6",
|
||||
},
|
||||
"spec": {"running": False},
|
||||
"status": {},
|
||||
}
|
||||
|
||||
VMI1 = {
|
||||
@@ -41,6 +43,7 @@ VMI1 = {
|
||||
"namespace": "default",
|
||||
"uid": "a84319a9-db31-4a36-9b66-3e387578f871",
|
||||
},
|
||||
"spec": {},
|
||||
"status": {
|
||||
"interfaces": [{"ipAddress": "10.10.10.10"}],
|
||||
},
|
||||
|
||||
@@ -8,8 +8,6 @@ __metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
from addict import Dict
|
||||
|
||||
from ansible_collections.kubevirt.core.plugins.inventory.kubevirt import (
|
||||
InventoryModule,
|
||||
)
|
||||
@@ -48,6 +46,55 @@ def test_format_var_name(name, expected):
|
||||
assert InventoryModule.format_var_name(name) == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"obj,expected",
|
||||
[
|
||||
({}, False),
|
||||
({"spec": {}}, False),
|
||||
({"status": {}}, False),
|
||||
({"metadata": {}}, False),
|
||||
({"spec": {}, "status": {}}, False),
|
||||
({"spec": {}, "metadata": {}}, False),
|
||||
({"status": {}, "metadata": {}}, False),
|
||||
({"spec": {}, "status": {}, "metadata": {}}, False),
|
||||
({"spec": {}, "status": {}, "metadata": {}, "something": {}}, False),
|
||||
({"spec": {}, "status": {}, "metadata": {"name": "test"}}, False),
|
||||
({"spec": {}, "status": {}, "metadata": {"namespace": "test"}}, False),
|
||||
({"spec": {}, "status": {}, "metadata": {"uid": "test"}}, False),
|
||||
(
|
||||
{
|
||||
"spec": {},
|
||||
"status": {},
|
||||
"metadata": {"name": "test", "namespace": "test"},
|
||||
},
|
||||
False,
|
||||
),
|
||||
(
|
||||
{
|
||||
"spec": {},
|
||||
"status": {},
|
||||
"metadata": {"name": "test", "namespace": "test", "something": "test"},
|
||||
},
|
||||
False,
|
||||
),
|
||||
(
|
||||
{"spec": {}, "status": {}, "metadata": {"name": "test", "uid": "test"}},
|
||||
False,
|
||||
),
|
||||
(
|
||||
{
|
||||
"spec": {},
|
||||
"status": {},
|
||||
"metadata": {"name": "test", "namespace": "test", "uid": "test"},
|
||||
},
|
||||
True,
|
||||
),
|
||||
],
|
||||
)
|
||||
def test_obj_is_valid(obj, expected):
|
||||
assert InventoryModule.obj_is_valid(obj) == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"service,node_name,expected",
|
||||
[
|
||||
@@ -223,7 +270,7 @@ def test_get_cluster_domain(inventory, client):
|
||||
)
|
||||
def test_set_groups_from_labels(inventory, groups, labels, expected):
|
||||
hostname = "default-testvm"
|
||||
inventory.set_groups_from_labels(hostname, Dict(labels))
|
||||
inventory.set_groups_from_labels(hostname, labels)
|
||||
for group in expected:
|
||||
assert group in groups
|
||||
assert hostname in groups[group]["children"]
|
||||
|
||||
@@ -8,8 +8,6 @@ __metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
from addict import Dict
|
||||
|
||||
from ansible_collections.kubevirt.core.tests.unit.plugins.inventory.constants import (
|
||||
DEFAULT_NAMESPACE,
|
||||
)
|
||||
@@ -65,15 +63,11 @@ def test_add_host(inventory, groups, hosts, host_format, expected):
|
||||
inventory.inventory.add_group(namespace_group)
|
||||
|
||||
inventory.add_host(
|
||||
Dict(
|
||||
{
|
||||
"metadata": {
|
||||
"name": "testvm",
|
||||
"namespace": DEFAULT_NAMESPACE,
|
||||
"uid": "f8abae7c-d792-4b9b-af95-62d322ae5bc1",
|
||||
}
|
||||
}
|
||||
),
|
||||
{
|
||||
"name": "testvm",
|
||||
"namespace": DEFAULT_NAMESPACE,
|
||||
"uid": "f8abae7c-d792-4b9b-af95-62d322ae5bc1",
|
||||
},
|
||||
host_format,
|
||||
namespace_group,
|
||||
)
|
||||
|
||||
@@ -8,9 +8,6 @@ __metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
from addict import Dict
|
||||
|
||||
|
||||
from ansible_collections.kubevirt.core.plugins.inventory.kubevirt import (
|
||||
InventoryOptions,
|
||||
)
|
||||
@@ -25,6 +22,8 @@ VM1 = {
|
||||
"namespace": DEFAULT_NAMESPACE,
|
||||
"uid": "940003aa-0160-4b7e-9e55-8ec3df72047f",
|
||||
},
|
||||
"spec": {},
|
||||
"status": {},
|
||||
}
|
||||
|
||||
VM2 = {
|
||||
@@ -33,6 +32,8 @@ VM2 = {
|
||||
"namespace": DEFAULT_NAMESPACE,
|
||||
"uid": "c2c68de5-b9d7-4c25-872f-462e7245b3e6",
|
||||
},
|
||||
"spec": {},
|
||||
"status": {},
|
||||
}
|
||||
|
||||
VMI1 = {
|
||||
@@ -41,6 +42,7 @@ VMI1 = {
|
||||
"namespace": DEFAULT_NAMESPACE,
|
||||
"uid": "a84319a9-db31-4a36-9b66-3e387578f871",
|
||||
},
|
||||
"spec": {},
|
||||
"status": {
|
||||
"interfaces": [{"ipAddress": "10.10.10.10"}],
|
||||
},
|
||||
@@ -52,6 +54,7 @@ VMI2 = {
|
||||
"namespace": DEFAULT_NAMESPACE,
|
||||
"uid": "fd35700a-9cbe-488b-8f32-7adbe57eadc2",
|
||||
},
|
||||
"spec": {},
|
||||
"status": {
|
||||
"interfaces": [{"ipAddress": "10.10.10.10"}],
|
||||
},
|
||||
@@ -78,20 +81,20 @@ VMI2 = {
|
||||
def test_populate_inventory_from_namespace(
|
||||
mocker, inventory, groups, vms, vmis, expected
|
||||
):
|
||||
_vms = {vm["metadata"]["name"]: Dict(vm) for vm in vms}
|
||||
_vmis = {vmi["metadata"]["name"]: Dict(vmi) for vmi in vmis}
|
||||
_vms = {vm["metadata"]["name"]: vm for vm in vms}
|
||||
_vmis = {vmi["metadata"]["name"]: vmi for vmi in vmis}
|
||||
opts = InventoryOptions()
|
||||
|
||||
def format_hostname(obj):
|
||||
return opts.host_format.format(
|
||||
namespace=obj.metadata.namespace,
|
||||
name=obj.metadata.name,
|
||||
uid=obj.metadata.uid,
|
||||
namespace=obj["metadata"]["namespace"],
|
||||
name=obj["metadata"]["name"],
|
||||
uid=obj["metadata"]["uid"],
|
||||
)
|
||||
|
||||
def add_host_call(obj):
|
||||
return mocker.call(
|
||||
obj,
|
||||
obj["metadata"],
|
||||
opts.host_format,
|
||||
f"namespace_{DEFAULT_NAMESPACE}",
|
||||
)
|
||||
|
||||
@@ -8,8 +8,6 @@ __metaclass__ = type
|
||||
|
||||
import pytest
|
||||
|
||||
from addict import Dict
|
||||
|
||||
from ansible_collections.kubevirt.core.plugins.inventory.kubevirt import (
|
||||
InventoryOptions,
|
||||
)
|
||||
@@ -29,7 +27,7 @@ def test_use_ip_address_by_default(mocker, inventory, opts):
|
||||
hostname = "default-testvm"
|
||||
ip_address = "1.1.1.1"
|
||||
|
||||
inventory.set_ansible_host_and_port(Dict(), hostname, ip_address, None, opts)
|
||||
inventory.set_ansible_host_and_port({}, hostname, ip_address, None, opts)
|
||||
|
||||
set_variable.assert_has_calls(
|
||||
[
|
||||
@@ -50,12 +48,10 @@ def test_kube_secondary_dns(mocker, inventory, base_domain):
|
||||
set_variable = mocker.patch.object(inventory.inventory, "set_variable")
|
||||
|
||||
hostname = "default-testvm"
|
||||
vmi = Dict(
|
||||
{
|
||||
"metadata": {"name": "testvm", "namespace": "default"},
|
||||
"status": {"interfaces": [{"name": "awesome"}]},
|
||||
}
|
||||
)
|
||||
vmi = {
|
||||
"metadata": {"name": "testvm", "namespace": "default"},
|
||||
"status": {"interfaces": [{"name": "awesome"}]},
|
||||
}
|
||||
|
||||
inventory.set_ansible_host_and_port(
|
||||
vmi,
|
||||
@@ -85,12 +81,10 @@ def test_kube_secondary_dns_precedence_over_service(mocker, inventory):
|
||||
set_variable = mocker.patch.object(inventory.inventory, "set_variable")
|
||||
|
||||
hostname = "default-testvm"
|
||||
vmi = Dict(
|
||||
{
|
||||
"metadata": {"name": "testvm", "namespace": "default"},
|
||||
"status": {"interfaces": [{"name": "awesome"}]},
|
||||
}
|
||||
)
|
||||
vmi = {
|
||||
"metadata": {"name": "testvm", "namespace": "default"},
|
||||
"status": {"interfaces": [{"name": "awesome"}]},
|
||||
}
|
||||
|
||||
inventory.set_ansible_host_and_port(
|
||||
vmi,
|
||||
@@ -170,13 +164,11 @@ def test_service(mocker, inventory, service, expected_host, expected_port):
|
||||
set_variable = mocker.patch.object(inventory.inventory, "set_variable")
|
||||
|
||||
hostname = "default-testvm"
|
||||
vmi = Dict(
|
||||
{
|
||||
"status": {
|
||||
"nodeName": "testnode.example.com",
|
||||
},
|
||||
}
|
||||
)
|
||||
vmi = {
|
||||
"status": {
|
||||
"nodeName": "testnode.example.com",
|
||||
},
|
||||
}
|
||||
|
||||
inventory.set_ansible_host_and_port(
|
||||
vmi,
|
||||
@@ -198,13 +190,11 @@ def test_service_append_base_domain(mocker, inventory):
|
||||
set_variable = mocker.patch.object(inventory.inventory, "set_variable")
|
||||
|
||||
hostname = "default-testvm"
|
||||
vmi = Dict(
|
||||
{
|
||||
"status": {
|
||||
"nodeName": "testnode",
|
||||
},
|
||||
}
|
||||
)
|
||||
vmi = {
|
||||
"status": {
|
||||
"nodeName": "testnode",
|
||||
},
|
||||
}
|
||||
service = {
|
||||
"spec": {
|
||||
"type": "NodePort",
|
||||
@@ -243,13 +233,11 @@ def test_service_fallback(mocker, inventory, host, port):
|
||||
mocker.patch.object(inventory, "get_port_from_service", return_value=port)
|
||||
|
||||
hostname = "default-testvm"
|
||||
vmi = Dict(
|
||||
{
|
||||
"status": {
|
||||
"nodeName": "testnode",
|
||||
},
|
||||
}
|
||||
)
|
||||
vmi = {
|
||||
"status": {
|
||||
"nodeName": "testnode",
|
||||
},
|
||||
}
|
||||
inventory.set_ansible_host_and_port(
|
||||
vmi,
|
||||
hostname,
|
||||
@@ -271,7 +259,7 @@ def test_no_service_if_network_name(mocker, inventory):
|
||||
|
||||
hostname = "default-testvm"
|
||||
inventory.set_ansible_host_and_port(
|
||||
Dict(),
|
||||
{},
|
||||
hostname,
|
||||
"1.2.3.4",
|
||||
{"something": "something"},
|
||||
|
||||
@@ -11,8 +11,6 @@ from string import ascii_lowercase
|
||||
|
||||
import pytest
|
||||
|
||||
from addict import Dict
|
||||
|
||||
from ansible_collections.kubevirt.core.plugins.inventory.kubevirt import (
|
||||
InventoryOptions,
|
||||
)
|
||||
@@ -26,6 +24,8 @@ from ansible_collections.kubevirt.core.plugins.inventory.kubevirt import (
|
||||
"metadata": {
|
||||
"something": "idontcare",
|
||||
},
|
||||
"spec": {},
|
||||
"status": {},
|
||||
},
|
||||
{},
|
||||
),
|
||||
@@ -34,6 +34,8 @@ from ansible_collections.kubevirt.core.plugins.inventory.kubevirt import (
|
||||
"metadata": {
|
||||
"annotations": {"testanno": "testval"},
|
||||
},
|
||||
"spec": {},
|
||||
"status": {},
|
||||
},
|
||||
{"annotations": {"testanno": "testval"}},
|
||||
),
|
||||
@@ -42,6 +44,8 @@ from ansible_collections.kubevirt.core.plugins.inventory.kubevirt import (
|
||||
"metadata": {
|
||||
"labels": {"testlabel": "testval"},
|
||||
},
|
||||
"spec": {},
|
||||
"status": {},
|
||||
},
|
||||
{"labels": {"testlabel": "testval"}},
|
||||
),
|
||||
@@ -50,6 +54,8 @@ from ansible_collections.kubevirt.core.plugins.inventory.kubevirt import (
|
||||
"metadata": {
|
||||
"resourceVersion": "123",
|
||||
},
|
||||
"spec": {},
|
||||
"status": {},
|
||||
},
|
||||
{"resource_version": "123"},
|
||||
),
|
||||
@@ -58,11 +64,15 @@ from ansible_collections.kubevirt.core.plugins.inventory.kubevirt import (
|
||||
"metadata": {
|
||||
"uid": "48e6ed2c-d8a2-4172-844d-0fe7056aa180",
|
||||
},
|
||||
"spec": {},
|
||||
"status": {},
|
||||
},
|
||||
{"uid": "48e6ed2c-d8a2-4172-844d-0fe7056aa180"},
|
||||
),
|
||||
(
|
||||
{
|
||||
"metadata": {},
|
||||
"spec": {},
|
||||
"status": {
|
||||
"interfaces": [{"ipAddress": "10.10.10.10"}],
|
||||
},
|
||||
@@ -75,7 +85,7 @@ def test_set_common_vars(inventory, hosts, obj, expected):
|
||||
hostname = "default-testvm"
|
||||
prefix = "".join(choice(ascii_lowercase) for i in range(5))
|
||||
inventory.inventory.add_host(hostname)
|
||||
inventory.set_common_vars(hostname, prefix, Dict(obj), InventoryOptions())
|
||||
inventory.set_common_vars(hostname, prefix, obj, InventoryOptions())
|
||||
|
||||
for key, value in expected.items():
|
||||
prefixed_key = f"{prefix}_{key}"
|
||||
@@ -99,7 +109,7 @@ def test_set_common_vars_create_groups(mocker, inventory, create_groups):
|
||||
opts = InventoryOptions(create_groups=create_groups)
|
||||
|
||||
inventory.set_common_vars(
|
||||
hostname, "prefix", Dict({"metadata": {"labels": labels}}), opts
|
||||
hostname, "prefix", {"metadata": {"labels": labels}, "status": {}}, opts
|
||||
)
|
||||
|
||||
if create_groups:
|
||||
@@ -111,12 +121,16 @@ def test_set_common_vars_create_groups(mocker, inventory, create_groups):
|
||||
def test_called_by_set_vars_from(mocker, inventory):
|
||||
hostname = "default-testvm"
|
||||
opts = InventoryOptions()
|
||||
obj = {"status": {}}
|
||||
|
||||
set_common_vars = mocker.patch.object(inventory, "set_common_vars")
|
||||
|
||||
inventory.set_vars_from_vm(hostname, Dict(), opts)
|
||||
inventory.set_vars_from_vmi(hostname, Dict(), {}, opts)
|
||||
inventory.set_vars_from_vm(hostname, obj, opts)
|
||||
inventory.set_vars_from_vmi(hostname, obj, {}, opts)
|
||||
|
||||
set_common_vars.assert_has_calls(
|
||||
[mocker.call(hostname, "vm", {}, opts), mocker.call(hostname, "vmi", {}, opts)]
|
||||
[
|
||||
mocker.call(hostname, "vm", obj, opts),
|
||||
mocker.call(hostname, "vmi", obj, opts),
|
||||
]
|
||||
)
|
||||
|
||||
@@ -6,8 +6,6 @@ from __future__ import absolute_import, division, print_function
|
||||
|
||||
__metaclass__ = type
|
||||
|
||||
from addict import Dict
|
||||
|
||||
from ansible_collections.kubevirt.core.plugins.inventory.kubevirt import (
|
||||
InventoryOptions,
|
||||
LABEL_KUBEVIRT_IO_DOMAIN,
|
||||
@@ -20,7 +18,7 @@ def test_ignore_vmi_without_interface(mocker, inventory):
|
||||
inventory, "set_ansible_host_and_port"
|
||||
)
|
||||
|
||||
vmi = Dict({"status": {}})
|
||||
vmi = {"status": {}}
|
||||
inventory.set_vars_from_vmi("default-testvm", vmi, {}, InventoryOptions())
|
||||
|
||||
set_ansible_host_and_port.assert_not_called()
|
||||
@@ -33,9 +31,10 @@ def test_use_first_interface_by_default(mocker, inventory):
|
||||
)
|
||||
|
||||
hostname = "default-testvm"
|
||||
vmi = Dict(
|
||||
{"status": {"interfaces": [{"ipAddress": "1.1.1.1"}, {"ipAddress": "2.2.2.2"}]}}
|
||||
)
|
||||
vmi = {
|
||||
"metadata": {},
|
||||
"status": {"interfaces": [{"ipAddress": "1.1.1.1"}, {"ipAddress": "2.2.2.2"}]},
|
||||
}
|
||||
opts = InventoryOptions()
|
||||
inventory.set_vars_from_vmi(hostname, vmi, {}, opts)
|
||||
|
||||
@@ -51,16 +50,15 @@ def test_use_named_interface(mocker, inventory):
|
||||
)
|
||||
|
||||
hostname = "default-testvm"
|
||||
vmi = Dict(
|
||||
{
|
||||
"status": {
|
||||
"interfaces": [
|
||||
{"name": "first", "ipAddress": "1.1.1.1"},
|
||||
{"name": "second", "ipAddress": "2.2.2.2"},
|
||||
]
|
||||
}
|
||||
}
|
||||
)
|
||||
vmi = {
|
||||
"metadata": {},
|
||||
"status": {
|
||||
"interfaces": [
|
||||
{"name": "first", "ipAddress": "1.1.1.1"},
|
||||
{"name": "second", "ipAddress": "2.2.2.2"},
|
||||
]
|
||||
},
|
||||
}
|
||||
opts = InventoryOptions(network_name="second")
|
||||
inventory.set_vars_from_vmi(hostname, vmi, {}, opts)
|
||||
|
||||
@@ -75,9 +73,10 @@ def test_ignore_vmi_without_named_interface(mocker, inventory):
|
||||
inventory, "set_ansible_host_and_port"
|
||||
)
|
||||
|
||||
vmi = Dict(
|
||||
{"status": {"interfaces": [{"name": "somename", "ipAddress": "1.1.1.1"}]}}
|
||||
)
|
||||
vmi = {
|
||||
"metadata": {},
|
||||
"status": {"interfaces": [{"name": "somename", "ipAddress": "1.1.1.1"}]},
|
||||
}
|
||||
inventory.set_vars_from_vmi(
|
||||
"default-testvm", vmi, {}, InventoryOptions(network_name="awesome")
|
||||
)
|
||||
@@ -92,7 +91,7 @@ def test_set_winrm_if_windows(mocker, inventory):
|
||||
set_variable = mocker.patch.object(inventory.inventory, "set_variable")
|
||||
|
||||
hostname = "default-testvm"
|
||||
vmi = Dict({"status": {"interfaces": [{"ipAddress": "1.1.1.1"}]}})
|
||||
vmi = {"metadata": {}, "status": {"interfaces": [{"ipAddress": "1.1.1.1"}]}}
|
||||
inventory.set_vars_from_vmi(hostname, vmi, {}, InventoryOptions())
|
||||
|
||||
set_variable.assert_called_once_with(hostname, "ansible_connection", "winrm")
|
||||
@@ -105,12 +104,10 @@ def test_service_lookup(mocker, inventory):
|
||||
)
|
||||
|
||||
hostname = "default-testvm"
|
||||
vmi = Dict(
|
||||
{
|
||||
"metadata": {"labels": {LABEL_KUBEVIRT_IO_DOMAIN: "testdomain"}},
|
||||
"status": {"interfaces": [{"name": "somename", "ipAddress": "1.1.1.1"}]},
|
||||
}
|
||||
)
|
||||
vmi = {
|
||||
"metadata": {"labels": {LABEL_KUBEVIRT_IO_DOMAIN: "testdomain"}},
|
||||
"status": {"interfaces": [{"name": "somename", "ipAddress": "1.1.1.1"}]},
|
||||
}
|
||||
opts = InventoryOptions()
|
||||
service = {"metadata": {"name": "testsvc"}}
|
||||
inventory.set_vars_from_vmi(hostname, vmi, {"testdomain": service}, opts)
|
||||
|
||||
Reference in New Issue
Block a user