mirror of
https://github.com/outbackdingo/cozystack.git
synced 2026-01-28 02:18:36 +00:00
Signed-off-by: Andrei Kvapil <kvapss@gmail.com> <!-- Thank you for making a contribution! Here are some tips for you: - Start the PR title with the [label] of Cozystack component: - For system components: [platform], [system], [linstor], [cilium], [kube-ovn], [dashboard], [cluster-api], etc. - For managed apps: [apps], [tenant], [kubernetes], [postgres], [virtual-machine] etc. - For development and maintenance: [tests], [ci], [docs], [maintenance]. - If it's a work in progress, consider creating this PR as a draft. - Don't hesistate to ask for opinion and review in the community chats, even if it's still a draft. - Add the label `backport` if it's a bugfix that needs to be backported to a previous version. --> ## What this PR does Fix regression introduced by https://github.com/cozystack/cozystack/pull/1169, now we have correct singular names for virtualmachines which are conflictiing with KubeVirt ones. Solution: explicitly specify apiversion ### Release note <!-- Write a release note: - Explain what has changed internally and for users. - Start with the same [label] as in the PR title - Follow the guidelines at https://github.com/kubernetes/community/blob/master/contributors/guide/release-notes.md. --> ```release-note [virtual-machine] Fix vm update hook ``` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Improved reliability of VM update hooks by targeting the correct API resource, preventing occasional patch failures when updating instancetype and preference. * Ensures VM updates apply consistently across environments without changing existing behavior. * **Chores** * Aligned resource references with fully qualified API names to enhance compatibility with current cluster configurations. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
107 lines
3.3 KiB
YAML
107 lines
3.3 KiB
YAML
{{- $vmName := include "virtual-machine.fullname" . -}}
|
|
{{- $namespace := .Release.Namespace -}}
|
|
|
|
{{- $existingVM := lookup "kubevirt.io/v1" "VirtualMachine" $namespace $vmName -}}
|
|
|
|
{{- $instanceType := .Values.instanceType | default "" -}}
|
|
{{- $instanceProfile := .Values.instanceProfile | default "" -}}
|
|
|
|
{{- $needUpdateType := false -}}
|
|
{{- $needUpdateProfile := false -}}
|
|
|
|
{{- if and $existingVM $instanceType -}}
|
|
{{- if not (eq $existingVM.spec.instancetype.name $instanceType) -}}
|
|
{{- $needUpdateType = true -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- if and $existingVM $instanceProfile -}}
|
|
{{- if not (eq $existingVM.spec.preference.name $instanceProfile) -}}
|
|
{{- $needUpdateProfile = true -}}
|
|
{{- end -}}
|
|
{{- end -}}
|
|
|
|
{{- if or $needUpdateType $needUpdateProfile }}
|
|
apiVersion: batch/v1
|
|
kind: Job
|
|
metadata:
|
|
name: "{{ $.Release.Name }}-update-hook"
|
|
annotations:
|
|
helm.sh/hook: pre-install,pre-upgrade
|
|
helm.sh/hook-weight: "0"
|
|
helm.sh/hook-delete-policy: hook-succeeded,before-hook-creation
|
|
spec:
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: "{{ $.Release.Name }}-update-hook"
|
|
policy.cozystack.io/allow-to-apiserver: "true"
|
|
spec:
|
|
serviceAccountName: {{ $.Release.Name }}-update-hook
|
|
restartPolicy: Never
|
|
containers:
|
|
- name: update-resources
|
|
image: docker.io/alpine/k8s:1.33.4
|
|
resources:
|
|
requests:
|
|
memory: "16Mi"
|
|
cpu: "10m"
|
|
limits:
|
|
memory: "128Mi"
|
|
cpu: "100m"
|
|
command: ["sh", "-exc"]
|
|
args:
|
|
- |
|
|
{{- if $needUpdateType }}
|
|
echo "Patching VirtualMachine for instancetype update..."
|
|
kubectl patch virtualmachines.kubevirt.io {{ $vmName }} -n {{ $namespace }} \
|
|
--type merge \
|
|
-p '{"spec":{"instancetype":{"name": "{{ $instanceType }}", "revisionName": null}}}'
|
|
{{- end }}
|
|
|
|
{{- if $needUpdateProfile }}
|
|
echo "Patching VirtualMachine for preference update..."
|
|
kubectl patch virtualmachines.kubevirt.io {{ $vmName }} -n {{ $namespace }} \
|
|
--type merge \
|
|
-p '{"spec":{"preference":{"name": "{{ $instanceProfile }}", "revisionName": null}}}'
|
|
{{- end }}
|
|
---
|
|
apiVersion: v1
|
|
kind: ServiceAccount
|
|
metadata:
|
|
name: {{ $.Release.Name }}-update-hook
|
|
annotations:
|
|
helm.sh/hook: pre-install,pre-upgrade
|
|
helm.sh/hook-weight: "-5"
|
|
helm.sh/hook-delete-policy: before-hook-creation
|
|
---
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
kind: Role
|
|
metadata:
|
|
name: {{ $.Release.Name }}-update-hook
|
|
annotations:
|
|
helm.sh/hook: pre-install,pre-upgrade
|
|
helm.sh/hook-weight: "-5"
|
|
helm.sh/hook-delete-policy: before-hook-creation
|
|
rules:
|
|
- apiGroups: ["kubevirt.io"]
|
|
resources: ["virtualmachines"]
|
|
verbs: ["patch", "get", "list", "watch"]
|
|
---
|
|
apiVersion: rbac.authorization.k8s.io/v1
|
|
kind: RoleBinding
|
|
metadata:
|
|
name: {{ $.Release.Name }}-update-hook
|
|
annotations:
|
|
helm.sh/hook: pre-install,pre-upgrade
|
|
helm.sh/hook-weight: "-5"
|
|
helm.sh/hook-delete-policy: before-hook-creation
|
|
subjects:
|
|
- kind: ServiceAccount
|
|
name: {{ $.Release.Name }}-update-hook
|
|
roleRef:
|
|
kind: Role
|
|
name: {{ $.Release.Name }}-update-hook
|
|
apiGroup: rbac.authorization.k8s.io
|
|
{{- end }}
|