Merge pull request #88 from 0xFelix/cleanup-yaml

cleanup: Cleanup YAML passed to k8s module

Signed-off-by: Felix Matouschek <fmatouschek@redhat.com>
This commit is contained in:
Felix Matouschek
2024-04-24 14:53:08 +02:00
committed by GitHub
2 changed files with 69 additions and 78 deletions

View File

@@ -265,12 +265,12 @@ apiVersion: {{ api_version }}
kind: VirtualMachine kind: VirtualMachine
metadata: metadata:
{% if name %} {% if name %}
name: "{{ name }}" name: {{ name }}
{% endif %} {% endif %}
{% if generate_name %} {% if generate_name %}
generateName: "{{ generate_name }}" generateName: {{ generate_name }}
{% endif %} {% endif %}
namespace: "{{ namespace }}" namespace: {{ namespace }}
{% if annotations %} {% if annotations %}
annotations: annotations:
{{ annotations | to_yaml | indent(4) }} {{ annotations | to_yaml | indent(4) }}
@@ -280,7 +280,7 @@ metadata:
{{ labels | to_yaml | indent(4) }} {{ labels | to_yaml | indent(4) }}
{%- endif %} {%- endif %}
spec: spec:
running: {{ running }} running: {{ running | lower }}
{% if instancetype %} {% if instancetype %}
instancetype: instancetype:
{{ instancetype | to_yaml | indent(4) }} {{ instancetype | to_yaml | indent(4) }}
@@ -291,7 +291,7 @@ spec:
{%- endif %} {%- endif %}
{% if data_volume_templates %} {% if data_volume_templates %}
dataVolumeTemplates: dataVolumeTemplates:
{{ data_volume_templates | to_yaml | indent(4) }} {{ data_volume_templates | to_yaml | indent(2) }}
{%- endif %} {%- endif %}
template: template:
{% if annotations or labels %} {% if annotations or labels %}

View File

@@ -8,6 +8,8 @@ __metaclass__ = type
import pytest import pytest
from yaml import dump
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
from ansible_collections.kubernetes.core.plugins.module_utils.k8s import runner from ansible_collections.kubernetes.core.plugins.module_utils.k8s import runner
from ansible_collections.kubevirt.core.plugins.modules import kubevirt_vm from ansible_collections.kubevirt.core.plugins.modules import kubevirt_vm
@@ -21,7 +23,7 @@ from ansible_collections.kubevirt.core.tests.unit.utils.ansible_module_mock impo
@pytest.fixture(scope="module") @pytest.fixture(scope="module")
def vm_definition(): def vm_definition_create():
return { return {
"apiVersion": "kubevirt.io/v1", "apiVersion": "kubevirt.io/v1",
"kind": "VirtualMachine", "kind": "VirtualMachine",
@@ -64,52 +66,46 @@ def vm_definition():
@pytest.fixture(scope="module") @pytest.fixture(scope="module")
def vm_manifest(): def module_params_default():
return """apiVersion: kubevirt.io/v1 return {
kind: VirtualMachine "api_version": "kubevirt.io/v1",
metadata: "annotations": None,
name: "testvm" "labels": None,
namespace: "default" "running": True,
labels: "instancetype": None,
environment: staging "preference": None,
service: loadbalancer "data_volume_templates": None,
spec: "spec": None,
running: True "wait": False,
instancetype: "wait_sleep": 5,
name: u1.medium "wait_timeout": 5,
preference: "kubeconfig": None,
name: fedora "context": None,
dataVolumeTemplates: "host": None,
- metadata: "api_key": None,
name: testdv "username": None,
spec: "password": None,
source: "validate_certs": None,
registry: "ca_cert": None,
url: docker://quay.io/containerdisks/fedora:latest "client_cert": None,
storage: "client_key": None,
accessModes: "proxy": None,
- ReadWriteOnce "no_proxy": None,
resources: "proxy_headers": None,
requests: "persist_config": None,
storage: 5Gi "impersonate_user": None,
template: "impersonate_groups": None,
metadata: "state": "present",
labels: "force": False,
environment: staging "delete_options": None,
service: loadbalancer }
spec:
domain:
devices: {}
terminationGracePeriodSeconds: 180
"""
@pytest.fixture(scope="module") @pytest.fixture(scope="module")
def module_params_create(): def module_params_create(module_params_default):
return { return module_params_default | {
"name": "testvm", "name": "testvm",
"namespace": "default", "namespace": "default",
"state": "present",
"labels": {"service": "loadbalancer", "environment": "staging"}, "labels": {"service": "loadbalancer", "environment": "staging"},
"instancetype": {"name": "u1.medium"}, "instancetype": {"name": "u1.medium"},
"preference": {"name": "fedora"}, "preference": {"name": "fedora"},
@@ -137,34 +133,10 @@ def module_params_create():
@pytest.fixture(scope="module") @pytest.fixture(scope="module")
def k8s_module_params_create(module_params_create, vm_manifest): def k8s_module_params_create(module_params_create, vm_definition_create):
return module_params_create | { return module_params_create | {
"api_version": "kubevirt.io/v1",
"running": True,
"wait": False,
"wait_sleep": 5,
"wait_timeout": 120,
"force": False,
"generate_name": None, "generate_name": None,
"annotations": None, "resource_definition": dump(vm_definition_create, sort_keys=False),
"kubeconfig": None,
"context": None,
"host": None,
"api_key": None,
"username": None,
"password": None,
"validate_certs": None,
"ca_cert": None,
"client_cert": None,
"client_key": None,
"proxy": None,
"no_proxy": None,
"proxy_headers": None,
"persist_config": None,
"impersonate_user": None,
"impersonate_groups": None,
"delete_options": None,
"resource_definition": vm_manifest,
"wait_condition": {"type": "Ready", "status": True}, "wait_condition": {"type": "Ready", "status": True},
} }
@@ -176,17 +148,34 @@ def test_module_fails_when_required_args_missing(monkeypatch):
kubevirt_vm.main() kubevirt_vm.main()
def test_module_create( @pytest.mark.parametrize(
monkeypatch, mocker, module_params_create, k8s_module_params_create, vm_definition "module_params,k8s_module_params,vm_definition,method",
[
(
"module_params_create",
"k8s_module_params_create",
"vm_definition_create",
"create",
),
],
)
def test_module(
request,
monkeypatch,
mocker,
module_params,
k8s_module_params,
vm_definition,
method,
): ):
monkeypatch.setattr(AnsibleModule, "exit_json", exit_json) monkeypatch.setattr(AnsibleModule, "exit_json", exit_json)
monkeypatch.setattr(runner, "get_api_client", lambda _: None) monkeypatch.setattr(runner, "get_api_client", lambda _: None)
set_module_args(module_params_create) set_module_args(request.getfixturevalue(module_params))
perform_action = mocker.patch.object(runner, "perform_action") perform_action = mocker.patch.object(runner, "perform_action")
perform_action.return_value = { perform_action.return_value = {
"method": "create", "method": method,
"changed": True, "changed": True,
"result": "success", "result": "success",
} }
@@ -194,5 +183,7 @@ def test_module_create(
with pytest.raises(AnsibleExitJson): with pytest.raises(AnsibleExitJson):
kubevirt_vm.main() kubevirt_vm.main()
perform_action.assert_called_once_with( perform_action.assert_called_once_with(
mocker.ANY, vm_definition, k8s_module_params_create mocker.ANY,
request.getfixturevalue(vm_definition),
request.getfixturevalue(k8s_module_params),
) )