kubevirt_vm: Allow to specify DataVolume templates

By allowing to specify DataVolume templates VMs with persistent storage
can be created using the kubevirt_vm module.

Signed-off-by: Felix Matouschek <fmatouschek@redhat.com>
This commit is contained in:
Felix Matouschek
2023-07-17 11:05:02 +02:00
parent 1e94c19ac4
commit bce4f17188
4 changed files with 185 additions and 0 deletions

View File

@@ -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

View File

@@ -0,0 +1,8 @@
- hosts: localhost
tasks:
- name: Delete VM
kubernetes.kubevirt.kubevirt_vm:
name: testvm-with-dv
namespace: default
state: absent
wait: yes

View File

@@ -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},

View File

@@ -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': {}