@@ -110,6 +110,51 @@ spec:
110110 type : string
111111 type : object
112112 x-kubernetes-map-type : atomic
113+ desiredAgent :
114+ description : |-
115+ DesiredAgent, when set, drives a managed agent upgrade on this host.
116+ The three fields below are always set together by the
117+ ByoHostAgentUpgrade rollout controller; nil means no managed upgrade
118+ is in progress.
119+ properties :
120+ assignedAt :
121+ description : |-
122+ AssignedAt is when the ByoHostAgentUpgrade rollout controller set
123+ this field, used to measure elapsed time against
124+ ByoHostAgentUpgradeSpec.PerHostTimeout. Only the controller reads or
125+ writes it; the agent ignores it.
126+ format : date-time
127+ type : string
128+ packageChecksum :
129+ description : |-
130+ PackageChecksum, if set, is the expected checksum ("sha256:<hex>") of
131+ the specific .deb/.rpm file extracted from the PackageURL bundle —
132+ not of the OCI image itself, which digest-pinning the reference
133+ above already covers. The agent refuses to install on mismatch.
134+ type : string
135+ packageURL :
136+ description : |-
137+ PackageURL is an OCI image reference — pulled via `imgpkg pull` — for
138+ a bundle containing the .deb/.rpm that installs Version. Not
139+ templated and does not reference a Secret — an image reference is
140+ not sensitive. The agent extracts the bundle, picks the single *.deb
141+ or *.rpm inside it matching its own already-known package manager,
142+ and installs it; nothing else is executed. Never used to install a
143+ version older than the one currently running — that always requires
144+ manual (SSH/Ansible) intervention outside this field. Pinning this
145+ reference by digest (@sha256:...) rather than a mutable tag is the
146+ primary integrity mechanism; see PackageChecksum for a secondary
147+ check.
148+ type : string
149+ version :
150+ description : |-
151+ Version is the agent version this host should be running. The agent
152+ compares this against its own version.Get().GitVersion on every
153+ reconcile tick and only acts on a mismatch.
154+ type : string
155+ required :
156+ - version
157+ type : object
113158 installationSecret :
114159 description : |-
115160 InstallationSecret is an optional reference to InstallationSecret
@@ -384,6 +429,249 @@ spec:
384429---
385430apiVersion : apiextensions.k8s.io/v1
386431kind : CustomResourceDefinition
432+ metadata :
433+ annotations :
434+ controller-gen.kubebuilder.io/version : v0.21.0
435+ labels :
436+ cluster.x-k8s.io/provider : infrastructure-byoh
437+ cluster.x-k8s.io/v1beta1 : v1beta1
438+ name : byohostagentupgrades.infrastructure.cluster.x-k8s.io
439+ spec :
440+ group : infrastructure.cluster.x-k8s.io
441+ names :
442+ kind : ByoHostAgentUpgrade
443+ listKind : ByoHostAgentUpgradeList
444+ plural : byohostagentupgrades
445+ shortNames :
446+ - byohau
447+ singular : byohostagentupgrade
448+ scope : Namespaced
449+ versions :
450+ - additionalPrinterColumns :
451+ - jsonPath : .status.phase
452+ name : Phase
453+ type : string
454+ - jsonPath : .spec.targetVersion
455+ name : Target
456+ type : string
457+ - jsonPath : .status.upgraded
458+ name : Upgraded
459+ type : string
460+ - jsonPath : .status.total
461+ name : Total
462+ type : string
463+ name : v1beta1
464+ schema :
465+ openAPIV3Schema :
466+ description : |-
467+ ByoHostAgentUpgrade is the Schema for the byohostagentupgrades API. See
468+ docs/proposals/agent-self-upgrade-adr.md §2.3.
469+ properties :
470+ apiVersion :
471+ description : |-
472+ APIVersion defines the versioned schema of this representation of an object.
473+ Servers should convert recognized schemas to the latest internal value, and
474+ may reject unrecognized values.
475+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
476+ type : string
477+ kind :
478+ description : |-
479+ Kind is a string value representing the REST resource this object represents.
480+ Servers may infer this from the endpoint the client submits requests to.
481+ Cannot be updated.
482+ In CamelCase.
483+ More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
484+ type : string
485+ metadata :
486+ type : object
487+ spec :
488+ description : ByoHostAgentUpgradeSpec defines the desired state of ByoHostAgentUpgrade.
489+ properties :
490+ maxUnavailable :
491+ anyOf :
492+ - type : integer
493+ - type : string
494+ description : |-
495+ MaxUnavailable bounds |InFlight ∪ Disconnected| - hosts this rollout
496+ is actively upgrading, plus hosts unavailable for any other reason -
497+ at any single point in time. Defaults to 1 if unset.
498+ x-kubernetes-int-or-string : true
499+ packageChecksum :
500+ description : |-
501+ PackageChecksum, if set, is the expected checksum ("sha256:<hex>") of
502+ the .deb/.rpm extracted from the PackageURL bundle.
503+ type : string
504+ packageURL :
505+ description : |-
506+ PackageURL is an OCI image reference - pulled via `imgpkg pull`, the
507+ same mechanism ByoHostSpec.DesiredAgent.PackageURL uses - for the
508+ bundle containing this cohort's .deb/.rpm. All hosts matched by
509+ Selector must share the same package family (HostOSFamilyLabel); this
510+ is not validated here (see the ADR's open question on that gap).
511+ type : string
512+ perHostTimeout :
513+ description : |-
514+ PerHostTimeout bounds how long a host may stay in flight (assigned
515+ DesiredAgent but not yet converged, and not yet explicitly
516+ failed) before this rollout considers it failed. Defaults to 10m if
517+ unset.
518+ type : string
519+ selector :
520+ description : |-
521+ Selector selects which ByoHosts, within this object's own namespace,
522+ this rollout targets. Namespace boundaries provide isolation - there
523+ is no separate tenant/cohort concept: create this object in the
524+ namespace you want upgraded, and further narrow with Selector (e.g.
525+ by HostArchitectureLabel/HostOSFamilyLabel for a mixed fleet, or
526+ clusterv1.ClusterNameLabel for a single ByoCluster's hosts).
527+ properties :
528+ matchExpressions :
529+ description : matchExpressions is a list of label selector requirements. The requirements are ANDed.
530+ items :
531+ description : |-
532+ A label selector requirement is a selector that contains values, a key, and an operator that
533+ relates the key and values.
534+ properties :
535+ key :
536+ description : key is the label key that the selector applies to.
537+ type : string
538+ operator :
539+ description : |-
540+ operator represents a key's relationship to a set of values.
541+ Valid operators are In, NotIn, Exists and DoesNotExist.
542+ type : string
543+ values :
544+ description : |-
545+ values is an array of string values. If the operator is In or NotIn,
546+ the values array must be non-empty. If the operator is Exists or DoesNotExist,
547+ the values array must be empty. This array is replaced during a strategic
548+ merge patch.
549+ items :
550+ type : string
551+ type : array
552+ x-kubernetes-list-type : atomic
553+ required :
554+ - key
555+ - operator
556+ type : object
557+ type : array
558+ x-kubernetes-list-type : atomic
559+ matchLabels :
560+ additionalProperties :
561+ type : string
562+ description : |-
563+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
564+ map is equivalent to an element of matchExpressions, whose key field is "key", the
565+ operator is "In", and the values array contains only "value". The requirements are ANDed.
566+ type : object
567+ type : object
568+ x-kubernetes-map-type : atomic
569+ targetVersion :
570+ description : |-
571+ TargetVersion is the agent version this rollout converges selected
572+ hosts to. Must be an explicit, fully-resolved version - never
573+ "latest" or any other floating reference - enforced here rather than
574+ by convention.
575+ pattern : ^v[0-9]+\.[0-9]+(\.[0-9]+)?(-[0-9A-Za-z.-]+)?(\+[0-9A-Za-z.-]+)?$
576+ type : string
577+ required :
578+ - packageURL
579+ - selector
580+ - targetVersion
581+ type : object
582+ status :
583+ description : ByoHostAgentUpgradeStatus defines the observed state of ByoHostAgentUpgrade.
584+ properties :
585+ conditions :
586+ description : Conditions provide observations of the operational state of a Cluster API resource.
587+ items :
588+ description : Condition defines an observation of a Cluster API resource operational state.
589+ properties :
590+ lastTransitionTime :
591+ description : |-
592+ lastTransitionTime is the last time the condition transitioned from one status to another.
593+ This should be when the underlying condition changed. If that is not known, then using the time when
594+ the API field changed is acceptable.
595+ format : date-time
596+ type : string
597+ message :
598+ description : |-
599+ message is a human readable message indicating details about the transition.
600+ This field may be empty.
601+ maxLength : 10240
602+ minLength : 1
603+ type : string
604+ reason :
605+ description : |-
606+ reason is the reason for the condition's last transition in CamelCase.
607+ The specific API may choose whether or not this field is considered a guaranteed API.
608+ This field may be empty.
609+ maxLength : 256
610+ minLength : 1
611+ type : string
612+ severity :
613+ description : |-
614+ severity provides an explicit classification of Reason code, so the users or machines can immediately
615+ understand the current situation and act accordingly.
616+ The Severity field MUST be set only when Status=False.
617+ maxLength : 32
618+ type : string
619+ status :
620+ description : status of the condition, one of True, False, Unknown.
621+ type : string
622+ type :
623+ description : |-
624+ type of condition in CamelCase or in foo.example.com/CamelCase.
625+ Many .condition.type values are consistent across resources like Available, but because arbitrary conditions
626+ can be useful (see .node.status.conditions), the ability to deconflict is important.
627+ maxLength : 256
628+ minLength : 1
629+ type : string
630+ required :
631+ - lastTransitionTime
632+ - status
633+ - type
634+ type : object
635+ type : array
636+ failedHosts :
637+ description : |-
638+ FailedHosts lists hosts that explicitly failed (AgentUpgradeSucceeded
639+ == False) or timed out. Once populated, Phase is Failed and stays
640+ Failed - this list is never used to retry automatically.
641+ items :
642+ type : string
643+ type : array
644+ phase :
645+ description : |-
646+ ByoHostAgentUpgradePhase is the coarse-grained state of a
647+ ByoHostAgentUpgrade rollout.
648+ type : string
649+ total :
650+ description : Total is the number of ByoHosts currently matching Selector.
651+ format : int32
652+ type : integer
653+ unavailableCount :
654+ description : |-
655+ UnavailableCount is the most recently computed
656+ |InFlight ∪ Disconnected|, exposed for observability rather than kept
657+ purely internal.
658+ format : int32
659+ type : integer
660+ upgraded :
661+ description : |-
662+ Upgraded is the number of matched hosts that have converged on
663+ TargetVersion.
664+ format : int32
665+ type : integer
666+ type : object
667+ type : object
668+ served : true
669+ storage : true
670+ subresources :
671+ status : {}
672+ ---
673+ apiVersion : apiextensions.k8s.io/v1
674+ kind : CustomResourceDefinition
387675metadata :
388676 annotations :
389677 controller-gen.kubebuilder.io/version : v0.21.0
@@ -1463,6 +1751,7 @@ rules:
14631751 - ' *'
14641752 - bootstrapkubeconfigs
14651753 - byoclusters
1754+ - byohostagentupgrades
14661755 - byohosts
14671756 - byomachines
14681757 - byomachinetemplates
@@ -1480,6 +1769,7 @@ rules:
14801769 resources :
14811770 - bootstrapkubeconfigs/finalizers
14821771 - byoclusters/finalizers
1772+ - byohostagentupgrades/finalizers
14831773 - byohosts/finalizers
14841774 - byomachines/finalizers
14851775 - byomachinetemplates/finalizers
@@ -1491,6 +1781,7 @@ rules:
14911781 resources :
14921782 - bootstrapkubeconfigs/status
14931783 - byoclusters/status
1784+ - byohostagentupgrades/status
14941785 - byohosts/status
14951786 - byomachines/status
14961787 - byomachinetemplates/status
0 commit comments