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. - Specify the preference matcher of the VirtualMachine.
- Only used when I(state=present). - Only used when I(state=present).
type: dict 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: spec:
description: description:
- Specify the template spec of the VirtualMachine. - Specify the template spec of the VirtualMachine.
@@ -144,6 +150,46 @@ EXAMPLES = """
- ssh-ed25519 AAAA... - ssh-ed25519 AAAA...
name: cloudinit 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 - name: Delete a VirtualMachine
kubernetes.kubevirt.kubevirt_vm: kubernetes.kubevirt.kubevirt_vm:
name: testvm name: testvm
@@ -243,6 +289,10 @@ spec:
preference: preference:
{{ preference | to_yaml | indent(4) }} {{ preference | to_yaml | indent(4) }}
{% endif %} {% endif %}
{% if data_volume_templates %}
dataVolumeTemplates:
{{ data_volume_templates | to_yaml | indent(4) }}
{%- endif %}
template: template:
{% if annotations or labels %} {% if annotations or labels %}
metadata: metadata:
@@ -292,6 +342,7 @@ def arg_spec() -> Dict:
"running": {"type": "bool", "default": True}, "running": {"type": "bool", "default": True},
"instancetype": {"type": "dict"}, "instancetype": {"type": "dict"},
"preference": {"type": "dict"}, "preference": {"type": "dict"},
"data_volume_templates": {"type": "list", "elements": "dict"},
"spec": {"type": "dict"}, "spec": {"type": "dict"},
"wait": {"type": "bool", "default": False}, "wait": {"type": "bool", "default": False},
"wait_sleep": {"type": "int", "default": 5}, "wait_sleep": {"type": "int", "default": 5},

View File

@@ -35,6 +35,30 @@ FIXTURE1 = {
}, },
"spec": { "spec": {
"running": True, "running": True,
"dataVolumeTemplates": [
{
"metadata": {
"name": "testdv"
},
"spec": {
"source": {
"registry": {
"url": "docker://quay.io/containerdisks/fedora:latest"
},
},
"storage": {
"accessModes": [
"ReadWriteOnce"
],
"resources": {
"requests": {
"storage": "5Gi"
}
}
}
}
}
],
"template": { "template": {
"metadata": { "metadata": {
"labels": { "labels": {
@@ -62,6 +86,19 @@ metadata:
service: loadbalancer service: loadbalancer
spec: spec:
running: True running: True
dataVolumeTemplates:
- metadata:
name: testdv
spec:
source:
registry:
url: docker://quay.io/containerdisks/fedora:latest
storage:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
template: template:
metadata: metadata:
labels: labels:
@@ -81,6 +118,30 @@ FIXTURE2 = {
'service': 'loadbalancer', 'service': 'loadbalancer',
'environment': 'staging' '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': { 'spec': {
'domain': { 'domain': {
'devices': {} 'devices': {}
@@ -135,6 +196,30 @@ class TestCreateVM(unittest.TestCase):
"service": "loadbalancer", "service": "loadbalancer",
"environment": "staging" "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': { 'spec': {
'domain': { 'domain': {
'devices': {} 'devices': {}