diff --git a/examples/play-create-dv.yml b/examples/play-create-dv.yml new file mode 100644 index 0000000..38f6aa4 --- /dev/null +++ b/examples/play-create-dv.yml @@ -0,0 +1,41 @@ +- hosts: localhost + tasks: + - name: Create VM + kubernetes.kubevirt.kubevirt_vm: + state: present + name: testvm-with-dv + namespace: default + labels: + app: test + instancetype: + name: u1.medium + preference: + name: fedora + data_volume_templates: + - metadata: + name: testdv + spec: + source: + registry: + url: docker://quay.io/containerdisks/fedora:latest + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 5Gi + spec: + domain: + devices: {} + volumes: + - dataVolume: + name: testdv + name: datavolume + - cloudInitNoCloud: + userData: |- + #cloud-config + # The default username is: fedora + ssh_authorized_keys: + - ssh-ed25519 AAAA... + name: cloudinit + wait: yes diff --git a/examples/play-delete-dv.yml b/examples/play-delete-dv.yml new file mode 100644 index 0000000..b17cf2b --- /dev/null +++ b/examples/play-delete-dv.yml @@ -0,0 +1,8 @@ +- hosts: localhost + tasks: + - name: Delete VM + kubernetes.kubevirt.kubevirt_vm: + name: testvm-with-dv + namespace: default + state: absent + wait: yes diff --git a/plugins/modules/kubevirt_vm.py b/plugins/modules/kubevirt_vm.py index 008a798..85e2efa 100644 --- a/plugins/modules/kubevirt_vm.py +++ b/plugins/modules/kubevirt_vm.py @@ -75,6 +75,12 @@ options: - Specify the preference matcher of the VirtualMachine. - Only used when I(state=present). type: dict + data_volume_templates: + description: + - Specify the DataVolume templates of the VirtualMachine. + - 'See: http://kubevirt.io/api-reference/v1.0.0/definitions.html#_v1_datavolumetemplatespec' + type: list + elements: 'dict' spec: description: - Specify the template spec of the VirtualMachine. @@ -144,6 +150,46 @@ EXAMPLES = """ - ssh-ed25519 AAAA... name: cloudinit +- name: Create a VirtualMachine with a DataVolume template + kubernetes.kubevirt.kubevirt_vm: + state: present + name: testvm-with-dv + namespace: default + labels: + app: test + instancetype: + name: u1.medium + preference: + name: fedora + data_volume_templates: + - metadata: + name: testdv + spec: + source: + registry: + url: docker://quay.io/containerdisks/fedora:latest + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 5Gi + spec: + domain: + devices: {} + volumes: + - dataVolume: + name: testdv + name: datavolume + - cloudInitNoCloud: + userData: |- + #cloud-config + # The default username is: fedora + ssh_authorized_keys: + - ssh-ed25519 AAAA... + name: cloudinit + wait: yes + - name: Delete a VirtualMachine kubernetes.kubevirt.kubevirt_vm: name: testvm @@ -243,6 +289,10 @@ spec: preference: {{ preference | to_yaml | indent(4) }} {% endif %} + {% if data_volume_templates %} + dataVolumeTemplates: + {{ data_volume_templates | to_yaml | indent(4) }} + {%- endif %} template: {% if annotations or labels %} metadata: @@ -292,6 +342,7 @@ def arg_spec() -> Dict: "running": {"type": "bool", "default": True}, "instancetype": {"type": "dict"}, "preference": {"type": "dict"}, + "data_volume_templates": {"type": "list", "elements": "dict"}, "spec": {"type": "dict"}, "wait": {"type": "bool", "default": False}, "wait_sleep": {"type": "int", "default": 5}, diff --git a/tests/unit/modules/test_module_kubevirt_vm.py b/tests/unit/modules/test_module_kubevirt_vm.py index 339e4e3..7cdc769 100644 --- a/tests/unit/modules/test_module_kubevirt_vm.py +++ b/tests/unit/modules/test_module_kubevirt_vm.py @@ -35,6 +35,30 @@ FIXTURE1 = { }, "spec": { "running": True, + "dataVolumeTemplates": [ + { + "metadata": { + "name": "testdv" + }, + "spec": { + "source": { + "registry": { + "url": "docker://quay.io/containerdisks/fedora:latest" + }, + }, + "storage": { + "accessModes": [ + "ReadWriteOnce" + ], + "resources": { + "requests": { + "storage": "5Gi" + } + } + } + } + } + ], "template": { "metadata": { "labels": { @@ -62,6 +86,19 @@ metadata: service: loadbalancer spec: running: True + dataVolumeTemplates: + - metadata: + name: testdv + spec: + source: + registry: + url: docker://quay.io/containerdisks/fedora:latest + storage: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 5Gi template: metadata: labels: @@ -81,6 +118,30 @@ FIXTURE2 = { 'service': 'loadbalancer', 'environment': 'staging' }, + 'data_volume_templates': [ + { + 'metadata': { + 'name': 'testdv' + }, + 'spec': { + 'source': { + 'registry': { + 'url': 'docker://quay.io/containerdisks/fedora:latest' + }, + }, + 'storage': { + 'accessModes': [ + 'ReadWriteOnce' + ], + 'resources': { + 'requests': { + 'storage': '5Gi' + } + } + } + } + } + ], 'spec': { 'domain': { 'devices': {} @@ -135,6 +196,30 @@ class TestCreateVM(unittest.TestCase): "service": "loadbalancer", "environment": "staging" }, + 'data_volume_templates': [ + { + 'metadata': { + 'name': 'testdv' + }, + 'spec': { + 'source': { + 'registry': { + 'url': 'docker://quay.io/containerdisks/fedora:latest' + }, + }, + 'storage': { + 'accessModes': [ + 'ReadWriteOnce' + ], + 'resources': { + 'requests': { + 'storage': '5Gi' + } + } + } + } + } + ], 'spec': { 'domain': { 'devices': {}