commit 4549b9d167968e9b2ff62e7dbe1569354866304ca11c49182031b27d403e7794
| author | 斟酌 鵬兄 <tgckpg@gmail.com> |
| date | 2026-04-23T11:05:07Z |
| subject | Controller to not touch osup if possible |
commit 4549b9d167968e9b2ff62e7dbe1569354866304ca11c49182031b27d403e7794
Author: 斟酌 鵬兄 <tgckpg@gmail.com>
Date: 2026-04-23T11:05:07Z
Controller to not touch osup if possible
---
clitools/devtools/run-controller.sh | 2 +-
clitools/pkg/controller/osupgrade/progress.go | 111 ++++----------------------
clitools/pkg/controller/osupgrade/watch.go | 9 +--
clitools/pkg/controller/server.go | 4 +-
devtools/test-upgrade.sh | 2 +-
macos/flashusb.sh | 4 +-
6 files changed, 25 insertions(+), 107 deletions(-)
diff --git a/clitools/devtools/run-controller.sh b/clitools/devtools/run-controller.sh
index 8e70f15..395b2f1 100755
--- a/clitools/devtools/run-controller.sh
+++ b/clitools/devtools/run-controller.sh
@@ -14,4 +14,4 @@ else
-addext "subjectAltName=IP:127.0.0.1,DNS:localhost"
fi
-go run "$PROJ_ROOT"/cmd/ctl controller --tls-cert-file "$OUT_DIR"/tls.crt --tls-private-key-file "$OUT_DIR"/tls.key --namespace default
+go run "$PROJ_ROOT"/cmd/ctl controller --tls-cert-file "$OUT_DIR"/tls.crt --tls-private-key-file "$OUT_DIR"/tls.key
diff --git a/clitools/pkg/controller/osupgrade/progress.go b/clitools/pkg/controller/osupgrade/progress.go
index c537b6c..4932a2b 100644
--- a/clitools/pkg/controller/osupgrade/progress.go
+++ b/clitools/pkg/controller/osupgrade/progress.go
@@ -14,7 +14,6 @@ import (
"k8s.io/klog/v2"
monov1alpha1 "example.com/monok8s/pkg/apis/monok8s/v1alpha1"
- "example.com/monok8s/pkg/buildinfo"
"example.com/monok8s/pkg/kube"
)
@@ -39,34 +38,7 @@ func EnsureOSUpgradeProgressForNode(
return fmt.Errorf("osupgrade is nil")
}
- // Keep using your existing helper if it already encapsulates
- // selector matching / parent linkage / create-or-update semantics.
- osup, err := ensureProgressHeartbeat(ctx, clients, namespace, nodeName, osu)
- if err != nil {
- return err
- }
-
- klog.InfoS("ensured OSUpgradeProgress from admission",
- "osupgrade", osu.Name,
- "osupgradeProgress", osup.Name,
- "node", nodeName,
- )
-
- return nil
-}
-
-func ensureProgressHeartbeat(ctx context.Context, clients *kube.Clients,
- namespace string, nodeName string,
- osu *monov1alpha1.OSUpgrade,
-) (*monov1alpha1.OSUpgradeProgress, error) {
name := fmt.Sprintf("%s-%s", osu.Name, nodeName)
- now := metav1.Now()
-
- currentVersion := buildinfo.KubeVersion
- targetVersion := ""
- if osu.Status != nil {
- targetVersion = osu.Status.ResolvedVersion
- }
progress := &monov1alpha1.OSUpgradeProgress{
TypeMeta: metav1.TypeMeta{
@@ -83,84 +55,35 @@ func ensureProgressHeartbeat(ctx context.Context, clients *kube.Clients,
Name: osu.Name,
},
},
- Status: &monov1alpha1.OSUpgradeProgressStatus{
- CurrentVersion: currentVersion,
- TargetVersion: targetVersion,
- Phase: monov1alpha1.OSUpgradeProgressPhasePending,
- LastUpdatedAt: &now,
- Message: "acknowledged",
- },
}
created, err := createProgress(ctx, clients, osup_gvr, progress)
if err == nil {
klog.InfoS("created osupgradeprogress", "name", created.Name, "namespace", created.Namespace)
- return created, nil
+ return nil
}
if !apierrors.IsAlreadyExists(err) {
- return nil, fmt.Errorf("create OSUpgradeProgress %s/%s: %w", namespace, name, err)
+ return fmt.Errorf("create OSUpgradeProgress %s/%s: %w", namespace, name, err)
}
- var out *monov1alpha1.OSUpgradeProgress
- err = retry.RetryOnConflict(retry.DefaultRetry, func() error {
- existing, err := getProgress(ctx, clients, osup_gvr, namespace, name)
- if err != nil {
- return fmt.Errorf("get existing OSUpgradeProgress %s/%s: %w", namespace, name, err)
- }
-
- // Keep spec aligned with source and node.
- existing.Spec.NodeName = nodeName
- existing.Spec.SourceRef.Name = osu.Name
-
- existing, err = updateProgressSpec(ctx, clients, osup_gvr, existing)
- if err != nil {
- if isUnknownUpdateResult(err) {
- latest, getErr := getProgress(ctx, clients, osup_gvr, namespace, name)
- if getErr == nil {
- out = latest
- }
- }
- return fmt.Errorf("update OSUpgradeProgress spec %s/%s: %w", namespace, name, err)
- }
-
- if existing.Status == nil {
- existing.Status = &monov1alpha1.OSUpgradeProgressStatus{}
- }
-
- existing.Status.CurrentVersion = currentVersion
- existing.Status.TargetVersion = targetVersion
- existing.Status.LastUpdatedAt = &now
-
- if existing.Status.Phase == "" {
- existing.Status.Phase = monov1alpha1.OSUpgradeProgressPhasePending
- }
- if existing.Status.Message == "" {
- existing.Status.Message = "acknowledged"
- }
-
- existing, err = updateProgressStatus(ctx, clients, osup_gvr, existing)
- if err != nil {
- if isUnknownUpdateResult(err) {
- latest, getErr := getProgress(ctx, clients, osup_gvr, namespace, name)
- if getErr == nil {
- out = latest
- }
- }
- return fmt.Errorf("update OSUpgradeProgress status %s/%s: %w", namespace, name, err)
- }
-
- out = existing
- return nil
- })
+ existing, err := getProgress(ctx, clients, osup_gvr, namespace, name)
if err != nil {
- if out != nil {
- return out, nil
- }
- return nil, err
+ return fmt.Errorf("get existing OSUpgradeProgress %s/%s: %w", namespace, name, err)
+ }
+
+ if existing.Spec.NodeName != nodeName || existing.Spec.SourceRef.Name != osu.Name {
+ return fmt.Errorf(
+ "conflicting OSUpgradeProgress %s/%s already exists: got spec.nodeName=%q spec.sourceRef.name=%q, want nodeName=%q sourceRef.name=%q",
+ namespace,
+ name,
+ existing.Spec.NodeName,
+ existing.Spec.SourceRef.Name,
+ nodeName,
+ osu.Name,
+ )
}
- klog.InfoS("updated osupgradeprogress", "name", out.Name, "namespace", out.Namespace)
- return out, nil
+ return nil
}
func updateProgressRobust(
diff --git a/clitools/pkg/controller/osupgrade/watch.go b/clitools/pkg/controller/osupgrade/watch.go
index 8ff8bf4..a4885c7 100644
--- a/clitools/pkg/controller/osupgrade/watch.go
+++ b/clitools/pkg/controller/osupgrade/watch.go
@@ -276,13 +276,7 @@ func listTargetNodeNames(
if err != nil {
return nil, fmt.Errorf("invalid nodeSelector: %w", err)
}
-
- reqs, selectable := sel.Requirements()
- if !selectable {
- return nil, fmt.Errorf("nodeSelector is not selectable")
- }
-
- selector = selector.Add(reqs...)
+ selector = sel
}
list, err := clients.Kubernetes.CoreV1().
@@ -306,7 +300,6 @@ func listTargetNodeNames(
}
func shouldUseNode(node *corev1.Node) bool {
- // Keep this conservative for now. Tighten if you want only Ready nodes.
return node != nil && node.Name != ""
}
diff --git a/clitools/pkg/controller/server.go b/clitools/pkg/controller/server.go
index 9feb297..f35b149 100644
--- a/clitools/pkg/controller/server.go
+++ b/clitools/pkg/controller/server.go
@@ -73,13 +73,13 @@ func (s *Server) Initialize() {
ws.Consumes(restful.MIME_JSON)
ws.Produces(restful.MIME_JSON)
- ws.Route(ws.GET("/status").To(s.queryStatus).
+ ws.Route(ws.GET("/healthz").To(s.queryHealthz).
Doc("Return basic controller status"))
s.restfulCont.Add(ws)
}
-func (s *Server) queryStatus(request *restful.Request, response *restful.Response) {
+func (s *Server) queryHealthz(request *restful.Request, response *restful.Response) {
resp := StatusResponse{
OK: true,
Service: "monok8s-controller",
diff --git a/devtools/test-upgrade.sh b/devtools/test-upgrade.sh
index 11e4eec..4e5ae4d 100755
--- a/devtools/test-upgrade.sh
+++ b/devtools/test-upgrade.sh
@@ -8,7 +8,7 @@ set -e
BASE_URL="http://localhost:8000"
TARGET_VERSION="v1.34.6"
STABLE_VERSION="v1.34.6"
-NAME="my-upgrade-2"
+NAME="my-upgrade-1"
echo "apiVersion: monok8s.io/v1alpha1"
echo "kind: OSUpgrade"
diff --git a/macos/flashusb.sh b/macos/flashusb.sh
index 2d39d29..430af9d 100755
--- a/macos/flashusb.sh
+++ b/macos/flashusb.sh
@@ -2,7 +2,9 @@
set -eu
### User-configurable vars
-IMG_DIR="./out"
+SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]}")"
+OUT_DIR="$( realpath "$SCRIPT_DIR"/../out/ )"
+IMG_DIR="$OUT_DIR"
CONFIG_PART_SUFFIX="s1" # config partition after flashing
ENV_SEARCH_DIR="./out" # optional; leave empty to use selected image dir