Skip to content

Commit ee189bc

Browse files
authored
Add new resource: VirtualMachineClone (RedHatQE#1324)
1 parent d328301 commit ee189bc

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed
+69
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# API reference: https://kubevirt.io/user-guide/operations/clone_api/
2+
3+
from ocp_resources.resource import NamespacedResource
4+
from ocp_resources.virtual_machine import VirtualMachine
5+
6+
7+
class VirtualMachineClone(NamespacedResource):
8+
api_group = NamespacedResource.ApiGroup.CLONE_KUBEVIRT_IO
9+
10+
def __init__(
11+
self,
12+
source_name=None,
13+
source_kind=None,
14+
target_name=None,
15+
label_filters=None,
16+
annotation_filters=None,
17+
new_mac_addresses=None,
18+
new_smbios_serial=None,
19+
**kwargs,
20+
):
21+
"""
22+
Create VirtualMachineClone object.
23+
24+
Args:
25+
source_name (str): the clone's source name
26+
source_kind (str, optional): the clone's source type, default - VirtualMachine.kind
27+
target_name (str, optional): the clone's target name, default - randomly generated name
28+
label_filters (list, optional): List of label filters, e.g. ["*", "!someKey/*"]
29+
annotation_filters (list, optional): List of annotation filters, e.g. ["firstKey/*", "secondKey/*"]
30+
new_mac_addresses (dict, optional): Dict of new MAC addresses, {interface_name: mac_address}
31+
new_smbios_serial (str, optional): the clone's new smbios serial
32+
"""
33+
super().__init__(**kwargs)
34+
self.source_name = source_name
35+
self.source_kind = source_kind
36+
self.target_name = target_name
37+
self.label_filters = label_filters
38+
self.annotation_filters = annotation_filters
39+
self.new_mac_addresses = new_mac_addresses
40+
self.new_smbios_serial = new_smbios_serial
41+
42+
def to_dict(self):
43+
super().to_dict()
44+
if not self.yaml_file:
45+
if not self.source_name:
46+
raise ValueError("yaml_file or parameter 'source_name' required.")
47+
spec = self.res.setdefault("spec", {})
48+
49+
source = spec.setdefault("source", {})
50+
source["apiGroup"] = NamespacedResource.ApiGroup.KUBEVIRT_IO
51+
source["kind"] = (
52+
self.source_kind if self.source_kind else VirtualMachine.kind
53+
)
54+
source["name"] = self.source_name
55+
56+
if self.target_name:
57+
target = spec.setdefault("target", {})
58+
target["apiGroup"] = NamespacedResource.ApiGroup.KUBEVIRT_IO
59+
target["kind"] = VirtualMachine.kind
60+
target["name"] = self.target_name
61+
62+
if self.label_filters:
63+
spec["labelFilters"] = self.label_filters
64+
if self.annotation_filters:
65+
spec["annotationFilters"] = self.annotation_filters
66+
if self.new_mac_addresses:
67+
spec["newMacAddresses"] = self.new_mac_addresses
68+
if self.new_smbios_serial:
69+
spec["newSMBiosSerial"] = self.new_smbios_serial

0 commit comments

Comments
 (0)