-
Notifications
You must be signed in to change notification settings - Fork 0
/
vm-template.ytt.yml
126 lines (125 loc) · 3.77 KB
/
vm-template.ytt.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#! This is a ytt [1] template.
#!
#! [1]: https://get-ytt.io/
#@ load("@ytt:data", "data")
---
apiVersion: template.openshift.io/v1
kind: Template
metadata:
annotations:
#@yaml/text-templated-strings
name.os.template.kubevirt.io/(@= data.values.os_short_name @): (@= data.values.os_long_name @)
#@yaml/text-templated-strings
validations: |
[
{
"name": "minimal-required-memory",
"path": "jsonpath::.spec.domain.resources.requests.memory",
"rule": "integer",
"message": "This VM requires more memory.",
"min": (@= str(data.values.min_memory) @)
}
]
labels:
#@yaml/text-templated-strings
flavor.template.kubevirt.io/(@= data.values.flavor @): "true"
#@yaml/text-templated-strings
os.template.kubevirt.io/(@= data.values.os_short_name @): "true"
template.kubevirt.io/type: vm
vm.kubevirt.io/template: #@ data.values.vm_template.format(data.values.flavor)
vm.kubevirt.io/template.namespace: openshift
workload.template.kubevirt.io/server: "true"
name: #@ "{}-{}".format(data.values.name, data.values.network_mode)
objects:
- apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
name: ${NAME}
spec:
dataVolumeTemplates:
- apiVersion: cdi.kubevirt.io/v1alpha1
kind: DataVolume
metadata:
name: ${NAME}-disk0
spec:
pvc:
accessModes:
- #@ data.values.disk_access_mode
resources:
requests:
storage: #@ data.values.disk_size
storageClassName: #@ data.values.storage_class
volumeMode: #@ data.values.disk_volume_mode
source:
http:
url: #@ data.values.image_url
running: false
template:
metadata:
labels:
kubevirt.io/domain: ${NAME}
kubevirt.io/size: #@ data.values.flavor
spec:
domain:
cpu:
cores: 1
sockets: 1
threads: 1
devices:
disks:
- bootOrder: 1
disk:
bus: virtio
name: disk0
- disk:
bus: virtio
name: cloudinitdisk
interfaces:
#@ if data.values.network_mode == "bridge":
- bridge: {}
model: virtio
name: nic-0
#@ else:
- masquerade: {}
model: virtio
name: nic-0
#@ end
networkInterfaceMultiqueue: true
rng: {}
machine:
type: #@ data.values.machine_type
resources:
requests:
memory: 4Gi
evictionStrategy: LiveMigrate
hostname: ${NAME}
networks:
#@ if data.values.network_mode == "bridge":
- multus:
networkName: #@ data.values.network_name
name: nic-0
#@ else:
- name: nic-0
pod: {}
#@ end
terminationGracePeriodSeconds: 0
volumes:
- dataVolume:
name: ${NAME}-disk0
name: disk0
- cloudInitNoCloud:
#@yaml/text-templated-strings
userData: |
#cloud-config
name: default
ssh_authorized_keys:
- |
${SSH_KEY}
name: cloudinitdisk
parameters:
- description: Name for the new VM
name: NAME
required: true
- description: SSH public key for access to VM
name: SSH_KEY
required: true