Skip to content

Commit

Permalink
[apiclient] improve VMSpec and add vm.create_template
Browse files Browse the repository at this point in the history
  • Loading branch information
lanfon72 committed Jun 25, 2024
1 parent 41e983a commit 9be7202
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 6 deletions.
13 changes: 11 additions & 2 deletions apiclient/harvester_api/managers/virtualmachines.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,14 +34,14 @@ def get_status(self, name="", namespace=DEFAULT_NAMESPACE, *, raw=False, **kwarg

def create(self, name, vm_spec, namespace=DEFAULT_NAMESPACE, *, raw=False):
if isinstance(vm_spec, self.Spec):
vm_spec = vm_spec.to_dict(name, namespace)
vm_spec = self.Spec.to_dict(vm_spec, name, namespace)
path = self.PATH_fmt.format(uid="", ns=namespace)
return self._create(path, json=vm_spec, raw=raw)

def update(self, name, vm_spec, namespace=DEFAULT_NAMESPACE, *,
raw=False, as_json=True, **kwargs):
if isinstance(vm_spec, self.Spec):
vm_spec = vm_spec.to_dict(name, namespace)
vm_spec = self.Spec.to_dict(vm_spec, name, namespace)
path = self.PATH_fmt.format(uid=f"/{name}", ns=namespace)
return self._update(path, vm_spec, raw=raw, as_json=as_json, **kwargs)

Expand Down Expand Up @@ -114,3 +114,12 @@ def remove_volume(self, name, disk_name, namespace=DEFAULT_NAMESPACE, *, raw=Fal
json = dict(diskName=disk_name)
params = dict(action="removeVolume")
return self._create(path, params=params, json=json, raw=raw)

def create_template(
self, name, template_name, keep_data=False, description="", namespace=DEFAULT_NAMESPACE,
*, raw=False
):
path = self.PATH_fmt.format(uid=f"/{name}", ns=namespace)
json = dict(description=description, name=template_name, withData=keep_data)
params = dict(action="createTemplate")
return self._create(path, params=params, json=json, raw=raw)
14 changes: 10 additions & 4 deletions apiclient/harvester_api/models/virtualmachines.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from copy import deepcopy
from json import dumps
from json import dumps, loads

import yaml

Expand Down Expand Up @@ -339,14 +339,16 @@ def from_dict(cls, data):
raise ValueError("Only support extract data comes from 'kubevirt.io.virtualmachine'")

data = deepcopy(data)
data['metadata'].pop('resourceVersion') # remove for create new ones
spec, metadata = data.get('spec', {}), data.get('metadata', {})
vm_spec = spec['template']['spec']

run_strategy = spec['runStrategy']
os_type = metadata.get('labels', {}).get("harvesterhci.io/os", "")
desc = metadata['annotations'].get("field.cattle.io/description", "")
reserved_mem = metadata['annotations'].get("harvesterhci.io/reservedMemory", "")
run_strategy = spec['runStrategy']
# ???: volume template claims not load
vol_claims = {v['metadata']['name']: VolumeSpec.from_dict(v) for v in loads(
metadata['annotations'].get("harvesterhci.io/volumeClaimTemplates", "[]"))}

hostname = vm_spec['hostname']
eviction_strategy = vm_spec['evictionStrategy']
Expand All @@ -369,8 +371,12 @@ def from_dict(cls, data):

obj._features = features
obj._firmwares = firmware
obj._cloudinit_vol = dict(disk=devices['disks'][-1], volume=volumes[-1])
obj.networks = [dict(iface=i, network=n) for i, n in zip(devices['interfaces'], networks)]
obj.volumes = [dict(disk=d, volume=v) for d, v in zip(devices['disks'][:-1], volumes[:-1])]
obj._cloudinit_vol = dict(disk=devices['disks'][-1], volume=volumes[-1])
for v in obj.volumes:
if "persistentVolumeClaim" in v['volume']:
v['claim'] = vol_claims[v['volume']['persistentVolumeClaim']['claimName']]

obj._data = data
return obj

0 comments on commit 9be7202

Please sign in to comment.