From de5f7c7265940b46ec1ab05f9398514611e0dce5 Mon Sep 17 00:00:00 2001 From: Kevin Klinger Date: Tue, 20 Jul 2021 17:58:05 +0200 Subject: [PATCH 1/3] FIX: misspelled taint in manifest --- manifests/system-upgrade-controller.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/manifests/system-upgrade-controller.yaml b/manifests/system-upgrade-controller.yaml index 5f3644a0..2624eb11 100644 --- a/manifests/system-upgrade-controller.yaml +++ b/manifests/system-upgrade-controller.yaml @@ -65,7 +65,7 @@ spec: - key: "node-role.kubernetes.io/master" operator: "Exists" effect: "NoSchedule" - - key: "node-role.kubernetes.io/control-plane" + - key: "node-role.kubernetes.io/controlplane" operator: "Exists" effect: "NoSchedule" - key: "node-role.kubernetes.io/etcd" From d09068ed319b293823a6eb046092877457bd2304 Mon Sep 17 00:00:00 2001 From: Kevin Klinger Date: Fri, 13 Aug 2021 17:39:54 +0200 Subject: [PATCH 2/3] Added example for SUSE as node OS --- examples/suse/sles.yaml | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 examples/suse/sles.yaml diff --git a/examples/suse/sles.yaml b/examples/suse/sles.yaml new file mode 100644 index 00000000..31fced5a --- /dev/null +++ b/examples/suse/sles.yaml @@ -0,0 +1,37 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: sles + namespace: system-upgrade +type: Opaque +stringData: + saltMaster: 3000-24.1 + upgrade.sh: | + #!/bin/sh + set -e + secrets=$(dirname $0) + zypper up -y + zypper in -y --oldpackage salt-master-$(cat $secrets/saltMaster) +--- +apiVersion: upgrade.cattle.io/v1 +kind: Plan +metadata: + name: sles + namespace: system-upgrade +spec: + concurrency: 2 + nodeSelector: + matchExpressions: + - {key: node-role.kubernetes.io/worker, operator: In, values: ["true"]} + serviceAccountName: system-upgrade + secrets: + - name: sles + path: /host/run/system-upgrade/secrets/sles + drain: + force: true + version: sles + upgrade: + image: registry.suse.com/suse/sle15:latest + command: ["chroot", "/host"] + args: ["sh", "/run/system-upgrade/secrets/sles/upgrade.sh"] From 2e3a20c9011824f3ca5292e74952187acf7df9cf Mon Sep 17 00:00:00 2001 From: Kevin Klinger Date: Thu, 19 Aug 2021 18:06:31 +0200 Subject: [PATCH 3/3] Add labeling features after update --- pkg/apis/upgrade.cattle.io/v1/types.go | 7 +++++++ pkg/upgrade/handle_batch.go | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/pkg/apis/upgrade.cattle.io/v1/types.go b/pkg/apis/upgrade.cattle.io/v1/types.go index 3df0e57e..84ea9345 100644 --- a/pkg/apis/upgrade.cattle.io/v1/types.go +++ b/pkg/apis/upgrade.cattle.io/v1/types.go @@ -44,6 +44,7 @@ type PlanSpec struct { Prepare *ContainerSpec `json:"prepare,omitempty"` Cordon bool `json:"cordon,omitempty"` Drain *DrainSpec `json:"drain,omitempty"` + Label *LabelSpec `json:"label,omitempty"` Upgrade *ContainerSpec `json:"upgrade,omitempty" wrangler:"required"` } @@ -80,3 +81,9 @@ type SecretSpec struct { Name string `json:"name,omitempty"` Path string `json:"path,omitempty"` } + +// LabelSpec specifies which label should be added to the node after update. +type LabelSpec struct { + Key string `json:"key,omitempty"` + Value string `json:"value,omitempty"` +} diff --git a/pkg/upgrade/handle_batch.go b/pkg/upgrade/handle_batch.go index 78c81bfc..e5f8909e 100644 --- a/pkg/upgrade/handle_batch.go +++ b/pkg/upgrade/handle_batch.go @@ -95,6 +95,15 @@ func (ctl *Controller) handleJobs(ctx context.Context) error { } return obj, enqueueOrDelete(jobs, obj, upgradejob.ConditionComplete) } + + // label the node after the update + if plan.Spec.Label != nil { + node.ObjectMeta.Labels[plan.Spec.Label.Key] = plan.Spec.Label.Value + if _, err := ctl.kcs.CoreV1().Nodes().Update(ctx, node, metav1.UpdateOptions{}); err != nil { + return obj, err + } + } + // if the job is hasn't failed or completed but the job Node is not on the applying list, consider it running out-of-turn and delete it if i := sort.SearchStrings(plan.Status.Applying, nodeName); i == len(plan.Status.Applying) || (i < len(plan.Status.Applying) && plan.Status.Applying[i] != nodeName) {