diff --git a/openapi/generated_openapi/zz_generated.openapi.go b/openapi/generated_openapi/zz_generated.openapi.go index f8bbb3a4a34..677ba38df7c 100644 --- a/openapi/generated_openapi/zz_generated.openapi.go +++ b/openapi/generated_openapi/zz_generated.openapi.go @@ -1251,6 +1251,32 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/openshift/api/template/v1.TemplateInstanceSpec": schema_openshift_api_template_v1_TemplateInstanceSpec(ref), "github.com/openshift/api/template/v1.TemplateInstanceStatus": schema_openshift_api_template_v1_TemplateInstanceStatus(ref), "github.com/openshift/api/template/v1.TemplateList": schema_openshift_api_template_v1_TemplateList(ref), + "github.com/openshift/api/update/v1alpha1.ClusterOperatorStatusInsight": schema_openshift_api_update_v1alpha1_ClusterOperatorStatusInsight(ref), + "github.com/openshift/api/update/v1alpha1.ClusterVersionStatusInsight": schema_openshift_api_update_v1alpha1_ClusterVersionStatusInsight(ref), + "github.com/openshift/api/update/v1alpha1.ControlPlane": schema_openshift_api_update_v1alpha1_ControlPlane(ref), + "github.com/openshift/api/update/v1alpha1.ControlPlaneInformer": schema_openshift_api_update_v1alpha1_ControlPlaneInformer(ref), + "github.com/openshift/api/update/v1alpha1.ControlPlaneInsight": schema_openshift_api_update_v1alpha1_ControlPlaneInsight(ref), + "github.com/openshift/api/update/v1alpha1.ControlPlaneInsightUnion": schema_openshift_api_update_v1alpha1_ControlPlaneInsightUnion(ref), + "github.com/openshift/api/update/v1alpha1.ControlPlaneUpdateVersions": schema_openshift_api_update_v1alpha1_ControlPlaneUpdateVersions(ref), + "github.com/openshift/api/update/v1alpha1.HealthInsight": schema_openshift_api_update_v1alpha1_HealthInsight(ref), + "github.com/openshift/api/update/v1alpha1.InsightImpact": schema_openshift_api_update_v1alpha1_InsightImpact(ref), + "github.com/openshift/api/update/v1alpha1.InsightRemediation": schema_openshift_api_update_v1alpha1_InsightRemediation(ref), + "github.com/openshift/api/update/v1alpha1.InsightScope": schema_openshift_api_update_v1alpha1_InsightScope(ref), + "github.com/openshift/api/update/v1alpha1.MachineConfigPoolStatusInsight": schema_openshift_api_update_v1alpha1_MachineConfigPoolStatusInsight(ref), + "github.com/openshift/api/update/v1alpha1.NodeStatusInsight": schema_openshift_api_update_v1alpha1_NodeStatusInsight(ref), + "github.com/openshift/api/update/v1alpha1.NodeSummary": schema_openshift_api_update_v1alpha1_NodeSummary(ref), + "github.com/openshift/api/update/v1alpha1.Pool": schema_openshift_api_update_v1alpha1_Pool(ref), + "github.com/openshift/api/update/v1alpha1.PoolResourceRef": schema_openshift_api_update_v1alpha1_PoolResourceRef(ref), + "github.com/openshift/api/update/v1alpha1.ResourceRef": schema_openshift_api_update_v1alpha1_ResourceRef(ref), + "github.com/openshift/api/update/v1alpha1.UpdateStatus": schema_openshift_api_update_v1alpha1_UpdateStatus(ref), + "github.com/openshift/api/update/v1alpha1.UpdateStatusList": schema_openshift_api_update_v1alpha1_UpdateStatusList(ref), + "github.com/openshift/api/update/v1alpha1.UpdateStatusSpec": schema_openshift_api_update_v1alpha1_UpdateStatusSpec(ref), + "github.com/openshift/api/update/v1alpha1.UpdateStatusStatus": schema_openshift_api_update_v1alpha1_UpdateStatusStatus(ref), + "github.com/openshift/api/update/v1alpha1.Version": schema_openshift_api_update_v1alpha1_Version(ref), + "github.com/openshift/api/update/v1alpha1.VersionMetadata": schema_openshift_api_update_v1alpha1_VersionMetadata(ref), + "github.com/openshift/api/update/v1alpha1.WorkerPoolInformer": schema_openshift_api_update_v1alpha1_WorkerPoolInformer(ref), + "github.com/openshift/api/update/v1alpha1.WorkerPoolInsight": schema_openshift_api_update_v1alpha1_WorkerPoolInsight(ref), + "github.com/openshift/api/update/v1alpha1.WorkerPoolInsightUnion": schema_openshift_api_update_v1alpha1_WorkerPoolInsightUnion(ref), "github.com/openshift/api/user/v1.Group": schema_openshift_api_user_v1_Group(ref), "github.com/openshift/api/user/v1.GroupList": schema_openshift_api_user_v1_GroupList(ref), "github.com/openshift/api/user/v1.Identity": schema_openshift_api_user_v1_Identity(ref), @@ -64138,6 +64164,1359 @@ func schema_openshift_api_template_v1_TemplateList(ref common.ReferenceCallback) } } +func schema_openshift_api_update_v1alpha1_ClusterOperatorStatusInsight(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterOperatorStatusInsight reports the state of a ClusterOperator resource (which represents a control plane component update in standalone clusters), during the update", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "conditions provide details about the operator. It contains at most 10 items. Known conditions are: - Updating: whether the operator is updating; When Updating=False, the reason field can be Pending or Updated - Healthy: whether the operator is considered healthy; When Healthy=False, the reason field can be Unavailable or Degraded, and Unavailable is \"stronger\" than Degraded", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Condition"), + }, + }, + }, + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the operator", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource is the ClusterOperator resource that represents the operator", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.ResourceRef"), + }, + }, + }, + Required: []string{"name", "resource"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.ResourceRef", "k8s.io/apimachinery/pkg/apis/meta/v1.Condition"}, + } +} + +func schema_openshift_api_update_v1alpha1_ClusterVersionStatusInsight(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ClusterVersionStatusInsight reports the state of a ClusterVersion resource (which represents a control plane update in standalone clusters), during the update.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "conditions provides detailed observed conditions about ClusterVersion. It contains at most 10 items. Known conditions are: - Updating: whether the control plane (represented by this ClusterVersion) is updating", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Condition"), + }, + }, + }, + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource is the ClusterVersion resource that represents the control plane", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.ResourceRef"), + }, + }, + "assessment": { + SchemaProps: spec.SchemaProps{ + Description: "assessment is the assessment of the control plane update process. Valid values are: Unknown, Progressing, Completed, Degraded", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "versions": { + SchemaProps: spec.SchemaProps{ + Description: "versions contains the original and target versions of the upgrade", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.ControlPlaneUpdateVersions"), + }, + }, + "completion": { + SchemaProps: spec.SchemaProps{ + Description: "completion is a percentage of the update completion (0-100)", + Default: 0, + Type: []string{"integer"}, + Format: "int32", + }, + }, + "startedAt": { + SchemaProps: spec.SchemaProps{ + Description: "startedAt is the time when the update started", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "completedAt": { + SchemaProps: spec.SchemaProps{ + Description: "completedAt is the time when the update completed", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "estimatedCompletedAt": { + SchemaProps: spec.SchemaProps{ + Description: "estimatedCompletedAt is the estimated time when the update will complete", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + }, + Required: []string{"resource", "assessment", "versions", "completion", "startedAt"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.ControlPlaneUpdateVersions", "github.com/openshift/api/update/v1alpha1.ResourceRef", "k8s.io/apimachinery/pkg/apis/meta/v1.Condition", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_openshift_api_update_v1alpha1_ControlPlane(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ControlPlane contains a summary and insights related to the control plane update.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "conditions provides details about the control plane update. This is a high-level status of an abstract control plane concept, and will typically be the controller's interpretation / summarization of the insights it received (that will be placed in .informers[].insights for clients that want to perform further analysis of the data). Known condition types are: * \"Updating\": Whether the cluster control plane is currently updating or not", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Condition"), + }, + }, + }, + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource is the resource that represents the control plane. It will typically be a ClusterVersion resource in standalone OpenShift and HostedCluster in Hosted Control Planes. This field is optional because the information may be unknown temporarily.", + Ref: ref("github.com/openshift/api/update/v1alpha1.ResourceRef"), + }, + }, + "poolResource": { + SchemaProps: spec.SchemaProps{ + Description: "poolResource is the resource that represents control plane node pool, typically a MachineConfigPool. This field is optional because some form factors (like Hosted Control Planes) do not have dedicated control plane node pools, and also because the information may be unknown temporarily.", + Ref: ref("github.com/openshift/api/update/v1alpha1.PoolResourceRef"), + }, + }, + "informers": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "name", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "informers is a list of insight producers. An informer is a system, internal or external to the cluster, that produces units of information relevant to the update process, either about its progress or its health. Each informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, relevant to the control plane update. Contains at most 16 items.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.ControlPlaneInformer"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.ControlPlaneInformer", "github.com/openshift/api/update/v1alpha1.PoolResourceRef", "github.com/openshift/api/update/v1alpha1.ResourceRef", "k8s.io/apimachinery/pkg/apis/meta/v1.Condition"}, + } +} + +func schema_openshift_api_update_v1alpha1_ControlPlaneInformer(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ControlPlaneInformer represents a system, internal or external to the cluster, that produces units of information relevant to the update process, either about its progress or its health. Each informer is identified by a name, and contains a list of insights it contributed to the Update Status API, relevant to the control plane update.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the insight producer", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "insights": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "uid", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "insights is a list of insights produced by this producer. Insights are units of information relevant to an update progress or health information. There are two types of update insights: status insights and health insights. The first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not.\n\nStatus Insights expose the state of a single resource that is directly involved in the update process, usually a resource that either has a notion of \"being updated,\" (such as a Node or ClusterOperator) or represents a higher-level abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents a pool of nodes).\n\nHealth Insights report a state or condition in the cluster that is abnormal or negative and either affects or is affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate a condition that warrants attention by the cluster administrator.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.ControlPlaneInsight"), + }, + }, + }, + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.ControlPlaneInsight"}, + } +} + +func schema_openshift_api_update_v1alpha1_ControlPlaneInsight(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ControlPlaneInsight is a unique piece of either status/progress or update health information produced by update informer", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "uid identifies the insight over time", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "acquiredAt": { + SchemaProps: spec.SchemaProps{ + Description: "acquiredAt is the time when the data was acquired by the producer", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "insight": { + SchemaProps: spec.SchemaProps{ + Description: "insight is a discriminated union of all insights types that can be reported for the control plane", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.ControlPlaneInsightUnion"), + }, + }, + }, + Required: []string{"uid", "acquiredAt", "insight"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.ControlPlaneInsightUnion", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_openshift_api_update_v1alpha1_ControlPlaneInsightUnion(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ControlPlaneInsightUnion is the discriminated union of all insights types that can be reported for the control plane, identified by type field", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type identifies the type of the update insight, one of: ClusterVersion, ClusterOperator, MachineConfigPool, Node, Health ClusterVersion, ClusterOperator, MachineConfigPool, Node types are progress insights about a resource directly involved in the update process Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is affected by the update.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "clusterVersion": { + SchemaProps: spec.SchemaProps{ + Description: "clusterVersion is a status insight about the state of a control plane update, where the control plane is represented by a ClusterVersion resource usually managed by CVO", + Ref: ref("github.com/openshift/api/update/v1alpha1.ClusterVersionStatusInsight"), + }, + }, + "clusterOperator": { + SchemaProps: spec.SchemaProps{ + Description: "clusterOperator is a status insight about the state of a control plane cluster operator update represented by a ClusterOperator resource", + Ref: ref("github.com/openshift/api/update/v1alpha1.ClusterOperatorStatusInsight"), + }, + }, + "machineConfigPool": { + SchemaProps: spec.SchemaProps{ + Description: "machineConfigPool is a status insight about the state of a worker pool update, where the worker pool is represented by a MachineConfigPool resource", + Ref: ref("github.com/openshift/api/update/v1alpha1.MachineConfigPoolStatusInsight"), + }, + }, + "node": { + SchemaProps: spec.SchemaProps{ + Description: "node is a status insight about the state of a worker node update, where the worker node is represented by a Node resource", + Ref: ref("github.com/openshift/api/update/v1alpha1.NodeStatusInsight"), + }, + }, + "health": { + SchemaProps: spec.SchemaProps{ + Description: "health is a generic health insight about the update. It does not represent a status of any specific resource but surfaces actionable information about the health of the cluster or an update", + Ref: ref("github.com/openshift/api/update/v1alpha1.HealthInsight"), + }, + }, + }, + Required: []string{"type"}, + }, + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-unions": []interface{}{ + map[string]interface{}{ + "discriminator": "type", + "fields-to-discriminateBy": map[string]interface{}{ + "clusterOperator": "ClusterOperatorStatusInsight", + "clusterVersion": "ClusterVersionStatusInsight", + "health": "HealthInsight", + "machineConfigPool": "MachineConfigPoolStatusInsight", + "node": "NodeStatusInsight", + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.ClusterOperatorStatusInsight", "github.com/openshift/api/update/v1alpha1.ClusterVersionStatusInsight", "github.com/openshift/api/update/v1alpha1.HealthInsight", "github.com/openshift/api/update/v1alpha1.MachineConfigPoolStatusInsight", "github.com/openshift/api/update/v1alpha1.NodeStatusInsight"}, + } +} + +func schema_openshift_api_update_v1alpha1_ControlPlaneUpdateVersions(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ControlPlaneUpdateVersions contains the original and target versions of the upgrade", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "previous": { + SchemaProps: spec.SchemaProps{ + Description: "previous is the version of the control plane before the update. When the cluster is being installed for the first time, the version will have a placeholder value '' and carry 'Installation' metadata", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.Version"), + }, + }, + "target": { + SchemaProps: spec.SchemaProps{ + Description: "target is the version of the control plane after the update. It may never be '' or have `Installation` metadata", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.Version"), + }, + }, + }, + Required: []string{"previous", "target"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.Version"}, + } +} + +func schema_openshift_api_update_v1alpha1_HealthInsight(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "HealthInsight is a piece of actionable information produced by an insight producer about the health of the cluster or an update", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "startedAt": { + SchemaProps: spec.SchemaProps{ + Description: "startedAt is the time when the condition reported by the insight started", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "scope": { + SchemaProps: spec.SchemaProps{ + Description: "scope is list of objects involved in the insight", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.InsightScope"), + }, + }, + "impact": { + SchemaProps: spec.SchemaProps{ + Description: "impact describes the impact the reported condition has on the cluster or update", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.InsightImpact"), + }, + }, + "remediation": { + SchemaProps: spec.SchemaProps{ + Description: "remediation contains information about how to resolve or prevent the reported condition", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.InsightRemediation"), + }, + }, + }, + Required: []string{"startedAt", "scope", "impact", "remediation"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.InsightImpact", "github.com/openshift/api/update/v1alpha1.InsightRemediation", "github.com/openshift/api/update/v1alpha1.InsightScope", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_openshift_api_update_v1alpha1_InsightImpact(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "InsightImpact describes the impact the reported condition has on the cluster or update", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "level": { + SchemaProps: spec.SchemaProps{ + Description: "level is the severity of the impact. Valid values are Unknown, Info, Warning, Error, Critical.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is the type of the impact. Valid values are None, Unknown, API Availability, Cluster Capacity, Application Availability, Application Outage, Data Loss, Update Speed, Update Stalled.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "summary": { + SchemaProps: spec.SchemaProps{ + Description: "summary is a short summary of the impact. It must not be empty and must be shorter than 256 characters.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "description": { + SchemaProps: spec.SchemaProps{ + Description: "description is a human-oriented, possibly longer-form description of the condition reported by the insight It must be shorter than 4096 characters.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"level", "type", "summary"}, + }, + }, + } +} + +func schema_openshift_api_update_v1alpha1_InsightRemediation(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "InsightRemediation contains information about how to resolve or prevent the reported condition", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "reference": { + SchemaProps: spec.SchemaProps{ + Description: "reference is a URL where administrators can find information to resolve or prevent the reported condition", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "estimatedFinish": { + SchemaProps: spec.SchemaProps{ + Description: "estimatedFinish is the estimated time when the informer expects the condition to be resolved, if applicable.", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + }, + Required: []string{"reference"}, + }, + }, + Dependencies: []string{ + "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_openshift_api_update_v1alpha1_InsightScope(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "InsightScope is a list of resources involved in the insight", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is either ControlPlane or WorkerPool", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "resources": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-type": "atomic", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "resources is a list of resources involved in the insight, of any group/kind. Maximum 16 resources can be listed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.ResourceRef"), + }, + }, + }, + }, + }, + }, + Required: []string{"type"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.ResourceRef"}, + } +} + +func schema_openshift_api_update_v1alpha1_MachineConfigPoolStatusInsight(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "MachineConfigPoolStatusInsight reports the state of a MachineConfigPool resource during the update", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "conditions provide details about the machine config pool update. It contains at most 10 items. Known conditions are: - Updating: whether the pool is updating; When Updating=False, the reason field can be Pending, Updated or Excluded", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Condition"), + }, + }, + }, + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the machine config pool", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource is the MachineConfigPool resource that represents the pool\n\nNote: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to resource name (because the rest is implied by status insight type). However, because we use resource references in many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable than type safety for producers.", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.PoolResourceRef"), + }, + }, + "scopeType": { + SchemaProps: spec.SchemaProps{ + Description: "scopeType describes whether the pool is a control plane or a worker pool", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "assessment": { + SchemaProps: spec.SchemaProps{ + Description: "assessment is the assessment of the machine config pool update process. Valid values are: Pending, Completed, Degraded, Excluded, Progressing", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "completion": { + SchemaProps: spec.SchemaProps{ + Description: "completion is a percentage of the update completion (0-100)", + Default: 0, + Type: []string{"integer"}, + Format: "int32", + }, + }, + "summaries": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "summaries is a list of counts of nodes matching certain criteria (e.g. updated, degraded, etc.). Maximum 16 items can be listed.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.NodeSummary"), + }, + }, + }, + }, + }, + }, + Required: []string{"name", "resource", "scopeType", "assessment", "completion"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.NodeSummary", "github.com/openshift/api/update/v1alpha1.PoolResourceRef", "k8s.io/apimachinery/pkg/apis/meta/v1.Condition"}, + } +} + +func schema_openshift_api_update_v1alpha1_NodeStatusInsight(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeStatusInsight reports the state of a Node during the update", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "conditions provides details about the control plane update. Known conditions are: - Updating: whether the Node is updating; When Updating=False, the reason field can be Updated, Pending, or Paused. When Updating=True, the reason field can be Draining, Updating, or Rebooting - Available: whether the Node is available (accepting workloads) - Degraded: whether the Node is degraded (problem observed)", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Condition"), + }, + }, + }, + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the node", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource is the Node resource that represents the node\n\nNote: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to resource name (because the rest is implied by status insight type). However, because we use resource references in many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable than type safety for producers.", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.ResourceRef"), + }, + }, + "poolResource": { + SchemaProps: spec.SchemaProps{ + Description: "poolResource is the resource that represents the pool the node is a member of\n\nNote: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows only the \"correct\" resource types to be referenced (here, MachineConfigPool or NodePool). However, because we use resource references in many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable than type safety for producers.", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.PoolResourceRef"), + }, + }, + "scopeType": { + SchemaProps: spec.SchemaProps{ + Description: "scopeType describes whether the node belongs to control plane or a worker pool", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "version": { + SchemaProps: spec.SchemaProps{ + Description: "version is the version of the node, when known", + Type: []string{"string"}, + Format: "", + }, + }, + "estimatedToComplete": { + SchemaProps: spec.SchemaProps{ + Description: "estimatedToComplete is the estimated time to complete the update, when known", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Duration"), + }, + }, + "message": { + SchemaProps: spec.SchemaProps{ + Description: "message is a short human-readable message about the node update status. It must be shorter than 100 characters.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"name", "resource", "poolResource", "scopeType"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.PoolResourceRef", "github.com/openshift/api/update/v1alpha1.ResourceRef", "k8s.io/apimachinery/pkg/apis/meta/v1.Condition", "k8s.io/apimachinery/pkg/apis/meta/v1.Duration"}, + } +} + +func schema_openshift_api_update_v1alpha1_NodeSummary(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "NodeSummary is a count of nodes matching certain criteria (e.g. updated, degraded, etc.)", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type is the type of the summary. Valid values are: Total, Available, Progressing, Outdated, Draining, Excluded, Degraded The summaries are not exclusive, a single node may be counted in multiple summaries.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "count": { + SchemaProps: spec.SchemaProps{ + Description: "count is the number of nodes matching the criteria", + Default: 0, + Type: []string{"integer"}, + Format: "int32", + }, + }, + }, + Required: []string{"type", "count"}, + }, + }, + } +} + +func schema_openshift_api_update_v1alpha1_Pool(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Pool contains a summary and insights related to a node pool update", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "conditions provides details about the node pool update. This is a high-level status of an abstract \"pool of nodes\" concept, and will typically be the controller's interpretation / summarization of the insights it received (that will be placed in .informers[].insights for clients that want to perform further analysis of the data). Known condition types are: * \"Updating\": Whether the pool of nodes is currently updating or not", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Condition"), + }, + }, + }, + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the pool, follows the same rules as a Kubernetes resource name (RFC-1123 subdomain)", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource is the resource that represents the pool, either a MachineConfigPool in Standalone OpenShift or a NodePool in Hosted Control Planes.", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.PoolResourceRef"), + }, + }, + "informers": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "name", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "informers is a list of insight producers. An informer is a system, internal or external to the cluster, that produces units of information relevant to the update process, either about its progress or its health. Each informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, relevant to the process of updating this pool of nodes.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.WorkerPoolInformer"), + }, + }, + }, + }, + }, + }, + Required: []string{"name", "resource"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.PoolResourceRef", "github.com/openshift/api/update/v1alpha1.WorkerPoolInformer", "k8s.io/apimachinery/pkg/apis/meta/v1.Condition"}, + } +} + +func schema_openshift_api_update_v1alpha1_PoolResourceRef(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PoolResourceRef is a reference to a kubernetes resource that represents a node pool", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "group": { + SchemaProps: spec.SchemaProps{ + Description: "group of the object being referenced, if any", + Type: []string{"string"}, + Format: "", + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource of object being referenced", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name of the object being referenced", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "namespace of the object being referenced, if any", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"resource", "name"}, + }, + }, + } +} + +func schema_openshift_api_update_v1alpha1_ResourceRef(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ResourceRef is a reference to a kubernetes resource, typically involved in an insight", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "group": { + SchemaProps: spec.SchemaProps{ + Description: "group of the object being referenced, if any", + Type: []string{"string"}, + Format: "", + }, + }, + "resource": { + SchemaProps: spec.SchemaProps{ + Description: "resource of object being referenced", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name of the object being referenced", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "namespace": { + SchemaProps: spec.SchemaProps{ + Description: "namespace of the object being referenced, if any", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"resource", "name"}, + }, + }, + } +} + +func schema_openshift_api_update_v1alpha1_UpdateStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "UpdateStatus reports status for in-progress cluster version updates\n\nCompatibility level 4: No compatibility is provided, the API can change at any point for any reason. These capabilities should not be used by applications needing long term support.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "metadata is standard Kubernetes object metadata", + Default: map[string]interface{}{}, + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"), + }, + }, + "spec": { + SchemaProps: spec.SchemaProps{ + Description: "spec is empty for now, UpdateStatus is purely status-reporting API. In the future spec may be used to hold configuration to drive what information is surfaced and how", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.UpdateStatusSpec"), + }, + }, + "status": { + SchemaProps: spec.SchemaProps{ + Description: "status exposes the health and status of the ongoing cluster update", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.UpdateStatusStatus"), + }, + }, + }, + Required: []string{"spec"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.UpdateStatusSpec", "github.com/openshift/api/update/v1alpha1.UpdateStatusStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta"}, + } +} + +func schema_openshift_api_update_v1alpha1_UpdateStatusList(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "UpdateStatusList is a list of UpdateStatus resources\n\nCompatibility level 4: No compatibility is provided, the API can change at any point for any reason. These capabilities should not be used by applications needing long term support.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "kind": { + SchemaProps: spec.SchemaProps{ + Description: "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + Type: []string{"string"}, + Format: "", + }, + }, + "apiVersion": { + SchemaProps: spec.SchemaProps{ + Description: "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + SchemaProps: spec.SchemaProps{ + Description: "metadata is standard Kubernetes object metadata", + Default: map[string]interface{}{}, + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"), + }, + }, + "items": { + SchemaProps: spec.SchemaProps{ + Description: "items is a list of UpdateStatus resources", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.UpdateStatus"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.UpdateStatus", "k8s.io/apimachinery/pkg/apis/meta/v1.ListMeta"}, + } +} + +func schema_openshift_api_update_v1alpha1_UpdateStatusSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "UpdateStatusSpec is empty for now, UpdateStatus is purely status-reporting API. In the future spec may be used to hold configuration to drive what information is surfaced and how", + Type: []string{"object"}, + }, + }, + } +} + +func schema_openshift_api_update_v1alpha1_UpdateStatusStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "UpdateStatusStatus is the API about in-progress updates. It aggregates and summarizes UpdateInsights produced by update informers", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "conditions": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "type", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "conditions provide details about the controller operational matters, exposing whether the controller managing this UpdateStatus is functioning well, receives insights from individual informers, and is able to interpret them and relay them through this UpdateStatus. These condition do not communicate anything about the state of the update itself but may indicate whether the UpdateStatus content is reliable or not.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Condition"), + }, + }, + }, + }, + }, + "controlPlane": { + SchemaProps: spec.SchemaProps{ + Description: "controlPlane contains a summary and insights related to the control plane update", + Ref: ref("github.com/openshift/api/update/v1alpha1.ControlPlane"), + }, + }, + "workerPools": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "name", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "workerPools contains summaries and insights related to the worker pools update. Each item in the list represents a single worker pool and carries all insights reported for it by informers. It has at most 32 items.\n so hundreds, and hypothetically more empty ones.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.Pool"), + }, + }, + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.ControlPlane", "github.com/openshift/api/update/v1alpha1.Pool", "k8s.io/apimachinery/pkg/apis/meta/v1.Condition"}, + } +} + +func schema_openshift_api_update_v1alpha1_Version(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "Version describes a version involved in an update, typically on one side of an update edge", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "version": { + SchemaProps: spec.SchemaProps{ + Description: "version is a semantic version string, or a placeholder '' for the special case where this is a \"previous\" version in a new installation, in which case the metadata must contain an item with key 'Installation'", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "metadata": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "key", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "metadata is a list of metadata associated with the version. It is a list of key-value pairs. The value is optional and when not provided, the metadata item has boolean semantics (presence indicates true). For example, 'Partial' metadata on a previous version indicates that the previous update was never fully completed. Can contain at most 5 items.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.VersionMetadata"), + }, + }, + }, + }, + }, + }, + Required: []string{"version"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.VersionMetadata"}, + } +} + +func schema_openshift_api_update_v1alpha1_VersionMetadata(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "VersionMetadata is a key:value item assigned to version involved in the update. Value can be empty, then the metadata have boolean semantics (true when present, false when absent)", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "key": { + SchemaProps: spec.SchemaProps{ + Description: "key is the name of this metadata value. Valid values are: Installation, Partial, Architecture", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "value": { + SchemaProps: spec.SchemaProps{ + Description: "value is the value for the metadata, at most 32 characters long. It is not expected to be provided for Installation and Partial metadata. For Architecture metadata, it is expected to be a string that indicates the architecture of the payload image of the version involved in the upgrade, when relevant.", + Type: []string{"string"}, + Format: "", + }, + }, + }, + Required: []string{"key"}, + }, + }, + } +} + +func schema_openshift_api_update_v1alpha1_WorkerPoolInformer(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "WorkerPoolInformer represents a system, internal or external to the cluster, that produces units of information relevant to the update process, either about its progress or its health. Each informer is identified by a name, and contains a list of insights it contributed to the Update Status API, relevant to a specific worker pool.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "name": { + SchemaProps: spec.SchemaProps{ + Description: "name is the name of the insight producer", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "insights": { + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-list-map-keys": []interface{}{ + "uid", + }, + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge", + }, + }, + SchemaProps: spec.SchemaProps{ + Description: "insights is a list of insights produced by this producer. Insights are units of information relevant to an update progress or health information. There are two types of update insights: status insights and health insights. The first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not.\n\nStatus Insights expose the state of a single resource that is directly involved in the update process, usually a resource that either has a notion of \"being updated,\" (such as a Node or ClusterOperator) or represents a higher-level abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents a pool of nodes).\n\nHealth Insights report a state or condition in the cluster that is abnormal or negative and either affects or is affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate a condition that warrants attention by the cluster administrator.", + Type: []string{"array"}, + Items: &spec.SchemaOrArray{ + Schema: &spec.Schema{ + SchemaProps: spec.SchemaProps{ + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.WorkerPoolInsight"), + }, + }, + }, + }, + }, + }, + Required: []string{"name"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.WorkerPoolInsight"}, + } +} + +func schema_openshift_api_update_v1alpha1_WorkerPoolInsight(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "WorkerPoolInsight is a unique piece of either status/progress or update health information produced by update informer", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "uid": { + SchemaProps: spec.SchemaProps{ + Description: "uid identifies the insight over time", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "acquiredAt": { + SchemaProps: spec.SchemaProps{ + Description: "acquiredAt is the time when the data was acquired by the producer", + Ref: ref("k8s.io/apimachinery/pkg/apis/meta/v1.Time"), + }, + }, + "insight": { + SchemaProps: spec.SchemaProps{ + Description: "insight is a discriminated union of all insights types that can be reported for a worker pool", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/update/v1alpha1.WorkerPoolInsightUnion"), + }, + }, + }, + Required: []string{"uid", "acquiredAt", "insight"}, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.WorkerPoolInsightUnion", "k8s.io/apimachinery/pkg/apis/meta/v1.Time"}, + } +} + +func schema_openshift_api_update_v1alpha1_WorkerPoolInsightUnion(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "WorkerPoolInsightUnion is the discriminated union of insights types that can be reported for a worker pool, identified by type field", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "type": { + SchemaProps: spec.SchemaProps{ + Description: "type identifies the type of the update insight, one of: MachineConfigPool, Node, Health MachineConfigPool, Node types are progress insights about a resource directly involved in the update process Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is affected by the update.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + "machineConfigPool": { + SchemaProps: spec.SchemaProps{ + Description: "machineConfigPool is a status insight about the state of a worker pool update, where the worker pool is represented by a MachineConfigPool resource", + Ref: ref("github.com/openshift/api/update/v1alpha1.MachineConfigPoolStatusInsight"), + }, + }, + "node": { + SchemaProps: spec.SchemaProps{ + Description: "node is a status insight about the state of a worker node update, where the worker node is represented by a Node resource", + Ref: ref("github.com/openshift/api/update/v1alpha1.NodeStatusInsight"), + }, + }, + "health": { + SchemaProps: spec.SchemaProps{ + Description: "health is a generic health insight about the update. It does not represent a status of any specific resource but surfaces actionable information about the health of the cluster or an update", + Ref: ref("github.com/openshift/api/update/v1alpha1.HealthInsight"), + }, + }, + }, + Required: []string{"type"}, + }, + VendorExtensible: spec.VendorExtensible{ + Extensions: spec.Extensions{ + "x-kubernetes-unions": []interface{}{ + map[string]interface{}{ + "discriminator": "type", + "fields-to-discriminateBy": map[string]interface{}{ + "health": "HealthInsight", + "machineConfigPool": "MachineConfigPoolStatusInsight", + "node": "NodeStatusInsight", + }, + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/update/v1alpha1.HealthInsight", "github.com/openshift/api/update/v1alpha1.MachineConfigPoolStatusInsight", "github.com/openshift/api/update/v1alpha1.NodeStatusInsight"}, + } +} + func schema_openshift_api_user_v1_Group(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ diff --git a/openapi/openapi.json b/openapi/openapi.json index 24945234fde..bf8c3decf9c 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -37593,6 +37593,849 @@ } } }, + "com.github.openshift.api.update.v1alpha1.ClusterOperatorStatusInsight": { + "description": "ClusterOperatorStatusInsight reports the state of a ClusterOperator resource (which represents a control plane component update in standalone clusters), during the update", + "type": "object", + "required": [ + "name", + "resource" + ], + "properties": { + "conditions": { + "description": "conditions provide details about the operator. It contains at most 10 items. Known conditions are: - Updating: whether the operator is updating; When Updating=False, the reason field can be Pending or Updated - Healthy: whether the operator is considered healthy; When Healthy=False, the reason field can be Unavailable or Degraded, and Unavailable is \"stronger\" than Degraded", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Condition" + }, + "x-kubernetes-list-map-keys": [ + "type" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" + }, + "name": { + "description": "name is the name of the operator", + "type": "string", + "default": "" + }, + "resource": { + "description": "resource is the ClusterOperator resource that represents the operator", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.ResourceRef" + } + } + }, + "com.github.openshift.api.update.v1alpha1.ClusterVersionStatusInsight": { + "description": "ClusterVersionStatusInsight reports the state of a ClusterVersion resource (which represents a control plane update in standalone clusters), during the update.", + "type": "object", + "required": [ + "resource", + "assessment", + "versions", + "completion", + "startedAt" + ], + "properties": { + "assessment": { + "description": "assessment is the assessment of the control plane update process. Valid values are: Unknown, Progressing, Completed, Degraded", + "type": "string", + "default": "" + }, + "completedAt": { + "description": "completedAt is the time when the update completed", + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" + }, + "completion": { + "description": "completion is a percentage of the update completion (0-100)", + "type": "integer", + "format": "int32", + "default": 0 + }, + "conditions": { + "description": "conditions provides detailed observed conditions about ClusterVersion. It contains at most 10 items. Known conditions are: - Updating: whether the control plane (represented by this ClusterVersion) is updating", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Condition" + }, + "x-kubernetes-list-map-keys": [ + "type" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" + }, + "estimatedCompletedAt": { + "description": "estimatedCompletedAt is the estimated time when the update will complete", + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" + }, + "resource": { + "description": "resource is the ClusterVersion resource that represents the control plane", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.ResourceRef" + }, + "startedAt": { + "description": "startedAt is the time when the update started", + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" + }, + "versions": { + "description": "versions contains the original and target versions of the upgrade", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.ControlPlaneUpdateVersions" + } + } + }, + "com.github.openshift.api.update.v1alpha1.ControlPlane": { + "description": "ControlPlane contains a summary and insights related to the control plane update.", + "type": "object", + "properties": { + "conditions": { + "description": "conditions provides details about the control plane update. This is a high-level status of an abstract control plane concept, and will typically be the controller's interpretation / summarization of the insights it received (that will be placed in .informers[].insights for clients that want to perform further analysis of the data). Known condition types are: * \"Updating\": Whether the cluster control plane is currently updating or not", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Condition" + }, + "x-kubernetes-list-map-keys": [ + "type" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" + }, + "informers": { + "description": "informers is a list of insight producers. An informer is a system, internal or external to the cluster, that produces units of information relevant to the update process, either about its progress or its health. Each informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, relevant to the control plane update. Contains at most 16 items.", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.ControlPlaneInformer" + }, + "x-kubernetes-list-map-keys": [ + "name" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge" + }, + "poolResource": { + "description": "poolResource is the resource that represents control plane node pool, typically a MachineConfigPool. This field is optional because some form factors (like Hosted Control Planes) do not have dedicated control plane node pools, and also because the information may be unknown temporarily.", + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.PoolResourceRef" + }, + "resource": { + "description": "resource is the resource that represents the control plane. It will typically be a ClusterVersion resource in standalone OpenShift and HostedCluster in Hosted Control Planes. This field is optional because the information may be unknown temporarily.", + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.ResourceRef" + } + } + }, + "com.github.openshift.api.update.v1alpha1.ControlPlaneInformer": { + "description": "ControlPlaneInformer represents a system, internal or external to the cluster, that produces units of information relevant to the update process, either about its progress or its health. Each informer is identified by a name, and contains a list of insights it contributed to the Update Status API, relevant to the control plane update.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "insights": { + "description": "insights is a list of insights produced by this producer. Insights are units of information relevant to an update progress or health information. There are two types of update insights: status insights and health insights. The first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not.\n\nStatus Insights expose the state of a single resource that is directly involved in the update process, usually a resource that either has a notion of \"being updated,\" (such as a Node or ClusterOperator) or represents a higher-level abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents a pool of nodes).\n\nHealth Insights report a state or condition in the cluster that is abnormal or negative and either affects or is affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate a condition that warrants attention by the cluster administrator.", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.ControlPlaneInsight" + }, + "x-kubernetes-list-map-keys": [ + "uid" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "name": { + "description": "name is the name of the insight producer", + "type": "string", + "default": "" + } + } + }, + "com.github.openshift.api.update.v1alpha1.ControlPlaneInsight": { + "description": "ControlPlaneInsight is a unique piece of either status/progress or update health information produced by update informer", + "type": "object", + "required": [ + "uid", + "acquiredAt", + "insight" + ], + "properties": { + "acquiredAt": { + "description": "acquiredAt is the time when the data was acquired by the producer", + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" + }, + "insight": { + "description": "insight is a discriminated union of all insights types that can be reported for the control plane", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.ControlPlaneInsightUnion" + }, + "uid": { + "description": "uid identifies the insight over time", + "type": "string", + "default": "" + } + } + }, + "com.github.openshift.api.update.v1alpha1.ControlPlaneInsightUnion": { + "description": "ControlPlaneInsightUnion is the discriminated union of all insights types that can be reported for the control plane, identified by type field", + "type": "object", + "required": [ + "type" + ], + "properties": { + "clusterOperator": { + "description": "clusterOperator is a status insight about the state of a control plane cluster operator update represented by a ClusterOperator resource", + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.ClusterOperatorStatusInsight" + }, + "clusterVersion": { + "description": "clusterVersion is a status insight about the state of a control plane update, where the control plane is represented by a ClusterVersion resource usually managed by CVO", + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.ClusterVersionStatusInsight" + }, + "health": { + "description": "health is a generic health insight about the update. It does not represent a status of any specific resource but surfaces actionable information about the health of the cluster or an update", + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.HealthInsight" + }, + "machineConfigPool": { + "description": "machineConfigPool is a status insight about the state of a worker pool update, where the worker pool is represented by a MachineConfigPool resource", + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.MachineConfigPoolStatusInsight" + }, + "node": { + "description": "node is a status insight about the state of a worker node update, where the worker node is represented by a Node resource", + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.NodeStatusInsight" + }, + "type": { + "description": "type identifies the type of the update insight, one of: ClusterVersion, ClusterOperator, MachineConfigPool, Node, Health ClusterVersion, ClusterOperator, MachineConfigPool, Node types are progress insights about a resource directly involved in the update process Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is affected by the update.", + "type": "string", + "default": "" + } + }, + "x-kubernetes-unions": [ + { + "discriminator": "type", + "fields-to-discriminateBy": { + "clusterOperator": "ClusterOperatorStatusInsight", + "clusterVersion": "ClusterVersionStatusInsight", + "health": "HealthInsight", + "machineConfigPool": "MachineConfigPoolStatusInsight", + "node": "NodeStatusInsight" + } + } + ] + }, + "com.github.openshift.api.update.v1alpha1.ControlPlaneUpdateVersions": { + "description": "ControlPlaneUpdateVersions contains the original and target versions of the upgrade", + "type": "object", + "required": [ + "previous", + "target" + ], + "properties": { + "previous": { + "description": "previous is the version of the control plane before the update. When the cluster is being installed for the first time, the version will have a placeholder value '' and carry 'Installation' metadata", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.Version" + }, + "target": { + "description": "target is the version of the control plane after the update. It may never be '' or have `Installation` metadata", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.Version" + } + } + }, + "com.github.openshift.api.update.v1alpha1.HealthInsight": { + "description": "HealthInsight is a piece of actionable information produced by an insight producer about the health of the cluster or an update", + "type": "object", + "required": [ + "startedAt", + "scope", + "impact", + "remediation" + ], + "properties": { + "impact": { + "description": "impact describes the impact the reported condition has on the cluster or update", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.InsightImpact" + }, + "remediation": { + "description": "remediation contains information about how to resolve or prevent the reported condition", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.InsightRemediation" + }, + "scope": { + "description": "scope is list of objects involved in the insight", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.InsightScope" + }, + "startedAt": { + "description": "startedAt is the time when the condition reported by the insight started", + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" + } + } + }, + "com.github.openshift.api.update.v1alpha1.InsightImpact": { + "description": "InsightImpact describes the impact the reported condition has on the cluster or update", + "type": "object", + "required": [ + "level", + "type", + "summary" + ], + "properties": { + "description": { + "description": "description is a human-oriented, possibly longer-form description of the condition reported by the insight It must be shorter than 4096 characters.", + "type": "string" + }, + "level": { + "description": "level is the severity of the impact. Valid values are Unknown, Info, Warning, Error, Critical.", + "type": "string", + "default": "" + }, + "summary": { + "description": "summary is a short summary of the impact. It must not be empty and must be shorter than 256 characters.", + "type": "string", + "default": "" + }, + "type": { + "description": "type is the type of the impact. Valid values are None, Unknown, API Availability, Cluster Capacity, Application Availability, Application Outage, Data Loss, Update Speed, Update Stalled.", + "type": "string", + "default": "" + } + } + }, + "com.github.openshift.api.update.v1alpha1.InsightRemediation": { + "description": "InsightRemediation contains information about how to resolve or prevent the reported condition", + "type": "object", + "required": [ + "reference" + ], + "properties": { + "estimatedFinish": { + "description": "estimatedFinish is the estimated time when the informer expects the condition to be resolved, if applicable.", + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" + }, + "reference": { + "description": "reference is a URL where administrators can find information to resolve or prevent the reported condition", + "type": "string", + "default": "" + } + } + }, + "com.github.openshift.api.update.v1alpha1.InsightScope": { + "description": "InsightScope is a list of resources involved in the insight", + "type": "object", + "required": [ + "type" + ], + "properties": { + "resources": { + "description": "resources is a list of resources involved in the insight, of any group/kind. Maximum 16 resources can be listed.", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.ResourceRef" + }, + "x-kubernetes-list-type": "atomic" + }, + "type": { + "description": "type is either ControlPlane or WorkerPool", + "type": "string", + "default": "" + } + } + }, + "com.github.openshift.api.update.v1alpha1.MachineConfigPoolStatusInsight": { + "description": "MachineConfigPoolStatusInsight reports the state of a MachineConfigPool resource during the update", + "type": "object", + "required": [ + "name", + "resource", + "scopeType", + "assessment", + "completion" + ], + "properties": { + "assessment": { + "description": "assessment is the assessment of the machine config pool update process. Valid values are: Pending, Completed, Degraded, Excluded, Progressing", + "type": "string", + "default": "" + }, + "completion": { + "description": "completion is a percentage of the update completion (0-100)", + "type": "integer", + "format": "int32", + "default": 0 + }, + "conditions": { + "description": "conditions provide details about the machine config pool update. It contains at most 10 items. Known conditions are: - Updating: whether the pool is updating; When Updating=False, the reason field can be Pending, Updated or Excluded", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Condition" + }, + "x-kubernetes-list-map-keys": [ + "type" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" + }, + "name": { + "description": "name is the name of the machine config pool", + "type": "string", + "default": "" + }, + "resource": { + "description": "resource is the MachineConfigPool resource that represents the pool\n\nNote: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to resource name (because the rest is implied by status insight type). However, because we use resource references in many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable than type safety for producers.", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.PoolResourceRef" + }, + "scopeType": { + "description": "scopeType describes whether the pool is a control plane or a worker pool", + "type": "string", + "default": "" + }, + "summaries": { + "description": "summaries is a list of counts of nodes matching certain criteria (e.g. updated, degraded, etc.). Maximum 16 items can be listed.", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.NodeSummary" + }, + "x-kubernetes-list-map-keys": [ + "type" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" + } + } + }, + "com.github.openshift.api.update.v1alpha1.NodeStatusInsight": { + "description": "NodeStatusInsight reports the state of a Node during the update", + "type": "object", + "required": [ + "name", + "resource", + "poolResource", + "scopeType" + ], + "properties": { + "conditions": { + "description": "conditions provides details about the control plane update. Known conditions are: - Updating: whether the Node is updating; When Updating=False, the reason field can be Updated, Pending, or Paused. When Updating=True, the reason field can be Draining, Updating, or Rebooting - Available: whether the Node is available (accepting workloads) - Degraded: whether the Node is degraded (problem observed)", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Condition" + }, + "x-kubernetes-list-map-keys": [ + "type" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" + }, + "estimatedToComplete": { + "description": "estimatedToComplete is the estimated time to complete the update, when known", + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Duration" + }, + "message": { + "description": "message is a short human-readable message about the node update status. It must be shorter than 100 characters.", + "type": "string" + }, + "name": { + "description": "name is the name of the node", + "type": "string", + "default": "" + }, + "poolResource": { + "description": "poolResource is the resource that represents the pool the node is a member of\n\nNote: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows only the \"correct\" resource types to be referenced (here, MachineConfigPool or NodePool). However, because we use resource references in many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable than type safety for producers.", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.PoolResourceRef" + }, + "resource": { + "description": "resource is the Node resource that represents the node\n\nNote: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to resource name (because the rest is implied by status insight type). However, because we use resource references in many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable than type safety for producers.", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.ResourceRef" + }, + "scopeType": { + "description": "scopeType describes whether the node belongs to control plane or a worker pool", + "type": "string", + "default": "" + }, + "version": { + "description": "version is the version of the node, when known", + "type": "string" + } + } + }, + "com.github.openshift.api.update.v1alpha1.NodeSummary": { + "description": "NodeSummary is a count of nodes matching certain criteria (e.g. updated, degraded, etc.)", + "type": "object", + "required": [ + "type", + "count" + ], + "properties": { + "count": { + "description": "count is the number of nodes matching the criteria", + "type": "integer", + "format": "int32", + "default": 0 + }, + "type": { + "description": "type is the type of the summary. Valid values are: Total, Available, Progressing, Outdated, Draining, Excluded, Degraded The summaries are not exclusive, a single node may be counted in multiple summaries.", + "type": "string", + "default": "" + } + } + }, + "com.github.openshift.api.update.v1alpha1.Pool": { + "description": "Pool contains a summary and insights related to a node pool update", + "type": "object", + "required": [ + "name", + "resource" + ], + "properties": { + "conditions": { + "description": "conditions provides details about the node pool update. This is a high-level status of an abstract \"pool of nodes\" concept, and will typically be the controller's interpretation / summarization of the insights it received (that will be placed in .informers[].insights for clients that want to perform further analysis of the data). Known condition types are: * \"Updating\": Whether the pool of nodes is currently updating or not", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Condition" + }, + "x-kubernetes-list-map-keys": [ + "type" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" + }, + "informers": { + "description": "informers is a list of insight producers. An informer is a system, internal or external to the cluster, that produces units of information relevant to the update process, either about its progress or its health. Each informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, relevant to the process of updating this pool of nodes.", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.WorkerPoolInformer" + }, + "x-kubernetes-list-map-keys": [ + "name" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge" + }, + "name": { + "description": "name is the name of the pool, follows the same rules as a Kubernetes resource name (RFC-1123 subdomain)", + "type": "string", + "default": "" + }, + "resource": { + "description": "resource is the resource that represents the pool, either a MachineConfigPool in Standalone OpenShift or a NodePool in Hosted Control Planes.", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.PoolResourceRef" + } + } + }, + "com.github.openshift.api.update.v1alpha1.PoolResourceRef": { + "description": "PoolResourceRef is a reference to a kubernetes resource that represents a node pool", + "type": "object", + "required": [ + "resource", + "name" + ], + "properties": { + "group": { + "description": "group of the object being referenced, if any", + "type": "string" + }, + "name": { + "description": "name of the object being referenced", + "type": "string", + "default": "" + }, + "namespace": { + "description": "namespace of the object being referenced, if any", + "type": "string" + }, + "resource": { + "description": "resource of object being referenced", + "type": "string", + "default": "" + } + } + }, + "com.github.openshift.api.update.v1alpha1.ResourceRef": { + "description": "ResourceRef is a reference to a kubernetes resource, typically involved in an insight", + "type": "object", + "required": [ + "resource", + "name" + ], + "properties": { + "group": { + "description": "group of the object being referenced, if any", + "type": "string" + }, + "name": { + "description": "name of the object being referenced", + "type": "string", + "default": "" + }, + "namespace": { + "description": "namespace of the object being referenced, if any", + "type": "string" + }, + "resource": { + "description": "resource of object being referenced", + "type": "string", + "default": "" + } + } + }, + "com.github.openshift.api.update.v1alpha1.UpdateStatus": { + "description": "UpdateStatus reports status for in-progress cluster version updates\n\nCompatibility level 4: No compatibility is provided, the API can change at any point for any reason. These capabilities should not be used by applications needing long term support.", + "type": "object", + "required": [ + "spec" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "metadata is standard Kubernetes object metadata", + "default": {}, + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" + }, + "spec": { + "description": "spec is empty for now, UpdateStatus is purely status-reporting API. In the future spec may be used to hold configuration to drive what information is surfaced and how", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.UpdateStatusSpec" + }, + "status": { + "description": "status exposes the health and status of the ongoing cluster update", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.UpdateStatusStatus" + } + } + }, + "com.github.openshift.api.update.v1alpha1.UpdateStatusList": { + "description": "UpdateStatusList is a list of UpdateStatus resources\n\nCompatibility level 4: No compatibility is provided, the API can change at any point for any reason. These capabilities should not be used by applications needing long term support.", + "type": "object", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources", + "type": "string" + }, + "items": { + "description": "items is a list of UpdateStatus resources", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.UpdateStatus" + } + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "metadata is standard Kubernetes object metadata", + "default": {}, + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" + } + } + }, + "com.github.openshift.api.update.v1alpha1.UpdateStatusSpec": { + "description": "UpdateStatusSpec is empty for now, UpdateStatus is purely status-reporting API. In the future spec may be used to hold configuration to drive what information is surfaced and how", + "type": "object" + }, + "com.github.openshift.api.update.v1alpha1.UpdateStatusStatus": { + "description": "UpdateStatusStatus is the API about in-progress updates. It aggregates and summarizes UpdateInsights produced by update informers", + "type": "object", + "properties": { + "conditions": { + "description": "conditions provide details about the controller operational matters, exposing whether the controller managing this UpdateStatus is functioning well, receives insights from individual informers, and is able to interpret them and relay them through this UpdateStatus. These condition do not communicate anything about the state of the update itself but may indicate whether the UpdateStatus content is reliable or not.", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Condition" + }, + "x-kubernetes-list-map-keys": [ + "type" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "type", + "x-kubernetes-patch-strategy": "merge" + }, + "controlPlane": { + "description": "controlPlane contains a summary and insights related to the control plane update", + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.ControlPlane" + }, + "workerPools": { + "description": "workerPools contains summaries and insights related to the worker pools update. Each item in the list represents a single worker pool and carries all insights reported for it by informers. It has at most 32 items.\n so hundreds, and hypothetically more empty ones.", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.Pool" + }, + "x-kubernetes-list-map-keys": [ + "name" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "name", + "x-kubernetes-patch-strategy": "merge" + } + } + }, + "com.github.openshift.api.update.v1alpha1.Version": { + "description": "Version describes a version involved in an update, typically on one side of an update edge", + "type": "object", + "required": [ + "version" + ], + "properties": { + "metadata": { + "description": "metadata is a list of metadata associated with the version. It is a list of key-value pairs. The value is optional and when not provided, the metadata item has boolean semantics (presence indicates true). For example, 'Partial' metadata on a previous version indicates that the previous update was never fully completed. Can contain at most 5 items.", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.VersionMetadata" + }, + "x-kubernetes-list-map-keys": [ + "key" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "key", + "x-kubernetes-patch-strategy": "merge" + }, + "version": { + "description": "version is a semantic version string, or a placeholder '' for the special case where this is a \"previous\" version in a new installation, in which case the metadata must contain an item with key 'Installation'", + "type": "string", + "default": "" + } + } + }, + "com.github.openshift.api.update.v1alpha1.VersionMetadata": { + "description": "VersionMetadata is a key:value item assigned to version involved in the update. Value can be empty, then the metadata have boolean semantics (true when present, false when absent)", + "type": "object", + "required": [ + "key" + ], + "properties": { + "key": { + "description": "key is the name of this metadata value. Valid values are: Installation, Partial, Architecture", + "type": "string", + "default": "" + }, + "value": { + "description": "value is the value for the metadata, at most 32 characters long. It is not expected to be provided for Installation and Partial metadata. For Architecture metadata, it is expected to be a string that indicates the architecture of the payload image of the version involved in the upgrade, when relevant.", + "type": "string" + } + } + }, + "com.github.openshift.api.update.v1alpha1.WorkerPoolInformer": { + "description": "WorkerPoolInformer represents a system, internal or external to the cluster, that produces units of information relevant to the update process, either about its progress or its health. Each informer is identified by a name, and contains a list of insights it contributed to the Update Status API, relevant to a specific worker pool.", + "type": "object", + "required": [ + "name" + ], + "properties": { + "insights": { + "description": "insights is a list of insights produced by this producer. Insights are units of information relevant to an update progress or health information. There are two types of update insights: status insights and health insights. The first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not.\n\nStatus Insights expose the state of a single resource that is directly involved in the update process, usually a resource that either has a notion of \"being updated,\" (such as a Node or ClusterOperator) or represents a higher-level abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents a pool of nodes).\n\nHealth Insights report a state or condition in the cluster that is abnormal or negative and either affects or is affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate a condition that warrants attention by the cluster administrator.", + "type": "array", + "items": { + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.WorkerPoolInsight" + }, + "x-kubernetes-list-map-keys": [ + "uid" + ], + "x-kubernetes-list-type": "map", + "x-kubernetes-patch-merge-key": "uid", + "x-kubernetes-patch-strategy": "merge" + }, + "name": { + "description": "name is the name of the insight producer", + "type": "string", + "default": "" + } + } + }, + "com.github.openshift.api.update.v1alpha1.WorkerPoolInsight": { + "description": "WorkerPoolInsight is a unique piece of either status/progress or update health information produced by update informer", + "type": "object", + "required": [ + "uid", + "acquiredAt", + "insight" + ], + "properties": { + "acquiredAt": { + "description": "acquiredAt is the time when the data was acquired by the producer", + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Time" + }, + "insight": { + "description": "insight is a discriminated union of all insights types that can be reported for a worker pool", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.WorkerPoolInsightUnion" + }, + "uid": { + "description": "uid identifies the insight over time", + "type": "string", + "default": "" + } + } + }, + "com.github.openshift.api.update.v1alpha1.WorkerPoolInsightUnion": { + "description": "WorkerPoolInsightUnion is the discriminated union of insights types that can be reported for a worker pool, identified by type field", + "type": "object", + "required": [ + "type" + ], + "properties": { + "health": { + "description": "health is a generic health insight about the update. It does not represent a status of any specific resource but surfaces actionable information about the health of the cluster or an update", + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.HealthInsight" + }, + "machineConfigPool": { + "description": "machineConfigPool is a status insight about the state of a worker pool update, where the worker pool is represented by a MachineConfigPool resource", + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.MachineConfigPoolStatusInsight" + }, + "node": { + "description": "node is a status insight about the state of a worker node update, where the worker node is represented by a Node resource", + "$ref": "#/definitions/com.github.openshift.api.update.v1alpha1.NodeStatusInsight" + }, + "type": { + "description": "type identifies the type of the update insight, one of: MachineConfigPool, Node, Health MachineConfigPool, Node types are progress insights about a resource directly involved in the update process Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is affected by the update.", + "type": "string", + "default": "" + } + }, + "x-kubernetes-unions": [ + { + "discriminator": "type", + "fields-to-discriminateBy": { + "health": "HealthInsight", + "machineConfigPool": "MachineConfigPoolStatusInsight", + "node": "NodeStatusInsight" + } + } + ] + }, "com.github.openshift.api.user.v1.Group": { "description": "Group represents a referenceable set of Users\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).", "type": "object", diff --git a/update/.codegen.yaml b/update/.codegen.yaml new file mode 100644 index 00000000000..7f4c27472fc --- /dev/null +++ b/update/.codegen.yaml @@ -0,0 +1,2 @@ +swaggerdocs: + commentPolicy: Enforce diff --git a/update/install.go b/update/install.go new file mode 100644 index 00000000000..0be9a22e20d --- /dev/null +++ b/update/install.go @@ -0,0 +1,26 @@ +package config + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + + updatev1alpha1 "github.com/openshift/api/update/v1alpha1" +) + +const ( + GroupName = "update.openshift.io" +) + +var ( + schemeBuilder = runtime.NewSchemeBuilder(updatev1alpha1.Install) + // Install is a function which adds every version of this group to a scheme + Install = schemeBuilder.AddToScheme +) + +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +func Kind(kind string) schema.GroupKind { + return schema.GroupKind{Group: GroupName, Kind: kind} +} diff --git a/update/v1alpha1/Makefile b/update/v1alpha1/Makefile new file mode 100644 index 00000000000..071ce9bdcaa --- /dev/null +++ b/update/v1alpha1/Makefile @@ -0,0 +1,3 @@ +.PHONY: test +test: + make -C ../../tests test GINKGO_EXTRA_ARGS=--focus="update.openshift.io/v1alpha1" diff --git a/update/v1alpha1/doc.go b/update/v1alpha1/doc.go new file mode 100644 index 00000000000..636c807aad7 --- /dev/null +++ b/update/v1alpha1/doc.go @@ -0,0 +1,7 @@ +// +k8s:deepcopy-gen=package,register +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// +groupName=update.openshift.io +// Package v1alpha1 is the v1alpha1 version of the API. +package v1alpha1 diff --git a/update/v1alpha1/register.go b/update/v1alpha1/register.go new file mode 100644 index 00000000000..562ec59e19a --- /dev/null +++ b/update/v1alpha1/register.go @@ -0,0 +1,38 @@ +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "update.openshift.io" + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion generated code relies on this name + // Deprecated + SchemeGroupVersion = GroupVersion + // AddToScheme exists solely to keep the old generators creating valid code + // DEPRECATED + AddToScheme = schemeBuilder.AddToScheme +) + +// Resource generated code relies on this being here, but it logically belongs to the group +// DEPRECATED +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &UpdateStatus{}, + &UpdateStatusList{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} diff --git a/update/v1alpha1/tests/updatestatuses.update.openshift.io/UpgradeStatus.yaml b/update/v1alpha1/tests/updatestatuses.update.openshift.io/UpgradeStatus.yaml new file mode 100644 index 00000000000..9520c481ebe --- /dev/null +++ b/update/v1alpha1/tests/updatestatuses.update.openshift.io/UpgradeStatus.yaml @@ -0,0 +1,973 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "UpdateStatus" +crdName: updatestatuses.update.openshift.io +featureGate: UpgradeStatus +tests: + onCreate: + - name: Should be able to create a minimal UpdateStatus + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} # No spec is required for a UpdateStatus + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + onUpdate: + - name: UpdateStatus can contain a ClusterVersion insight for installation + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + poolResource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: master + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: ClusterVersion + clusterVersion: + resource: + group: config.openshift.io + resource: clusterversions + name: version + assessment: Progressing + versions: + previous: + version: "" + metadata: + - key: Installation + target: + version: 4.18.0 + completion: 42 + startedAt: "2021-01-01T00:00:00Z" + estimatedCompletedAt: "2021-01-01T02:00:00Z" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + poolResource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: master + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: ClusterVersion + clusterVersion: + resource: + group: config.openshift.io + resource: clusterversions + name: version + assessment: Progressing + versions: + previous: + version: "" + metadata: + - key: Installation + target: + version: 4.18.0 + completion: 42 + startedAt: "2021-01-01T00:00:00Z" + estimatedCompletedAt: "2021-01-01T02:00:00Z" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + + - name: UpdateStatus can contain a ClusterVersion insight for update + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + poolResource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: master + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: ClusterVersion + clusterVersion: + resource: + group: config.openshift.io + resource: clusterversions + name: version + assessment: Progressing + versions: + previous: + version: 4.17.0 + metadata: + - key: Partial + target: + version: 4.18.0 + completion: 42 + startedAt: "2021-01-01T00:00:00Z" + estimatedCompletedAt: "2021-01-01T02:00:00Z" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + poolResource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: master + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: ClusterVersion + clusterVersion: + resource: + group: config.openshift.io + resource: clusterversions + name: version + assessment: Progressing + versions: + previous: + version: 4.17.0 + metadata: + - key: Partial + target: + version: 4.18.0 + completion: 42 + startedAt: "2021-01-01T00:00:00Z" + estimatedCompletedAt: "2021-01-01T02:00:00Z" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + + - name: UpdateStatus refuses invalid installation-like versions in ClusterVersion insights 1 + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + poolResource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: master + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: ClusterVersion + clusterVersion: + resource: + group: config.openshift.io + resource: clusterversions + name: version + assessment: Progressing + versions: + previous: + version: + target: + version: 4.18.0 + completion: 42 + startedAt: "2021-01-01T00:00:00Z" + estimatedCompletedAt: "2021-01-01T02:00:00Z" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + expectedStatusError: "Invalid value: \"object\": previous version must be '' iff marked with Installation metadata" + - name: UpdateStatus refuses invalid installation-like versions in ClusterVersion insights 2 + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + poolResource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: master + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: ClusterVersion + clusterVersion: + resource: + group: config.openshift.io + resource: clusterversions + name: version + assessment: Progressing + versions: + previous: + version: 4.17.0 + metadata: + - key: Installation + target: + version: 4.18.0 + completion: 42 + startedAt: "2021-01-01T00:00:00Z" + estimatedCompletedAt: "2021-01-01T02:00:00Z" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + expectedStatusError: "Invalid value: \"object\": previous version must be '' iff marked with Installation metadata" + - name: UpdateStatus refuses invalid installation-like versions in ClusterVersion insights 3 + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + poolResource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: master + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: ClusterVersion + clusterVersion: + resource: + group: config.openshift.io + resource: clusterversions + name: version + assessment: Progressing + versions: + previous: + version: 4.17.0 + target: + version: + metadata: + - key: Installation + completion: 42 + startedAt: "2021-01-01T00:00:00Z" + estimatedCompletedAt: "2021-01-01T02:00:00Z" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + expectedStatusError: "Invalid value: \"object\": target version must not be '' or have Installation metadata" + - name: UpdateStatus refuses invalid installation-like versions in ClusterVersion insights 4 + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + poolResource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: master + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: ClusterVersion + clusterVersion: + resource: + group: config.openshift.io + resource: clusterversions + name: version + assessment: Progressing + versions: + previous: + version: 4.17.0 + target: + version: 4.18.0 + metadata: + - key: Installation + completion: 42 + startedAt: "2021-01-01T00:00:00Z" + estimatedCompletedAt: "2021-01-01T02:00:00Z" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + expectedStatusError: "Invalid value: \"object\": target version must not be '' or have Installation metadata" + + - name: UpdateStatus refuses controlPlane not represented by a ClusterVersion or HostedCluster + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusteroperators + name: authentication + poolResource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: master + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + expectedStatusError: "Invalid value: \"object\": controlPlane.resource must be either a clusterversions.config.openshift.io or a hostedclusters.hypershift.openshift.io resource" + + - name: UpdateStatus refuses controlPlane pool that is not a MCP + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + poolResource: + group: config.openshift.io + resource: clusteroperators + name: authentication + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: ClusterVersionProgressing + message: "Installing version 4.18.0" + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + expectedStatusError: "Invalid value: \"object\": controlPlane.poolResource must be a machineconfigpools.machineconfiguration.openshift.io resource" + + - name: UpdateStatus can contain a workerPools item represented by MCP + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + workerPools: + - name: worker + resource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: worker + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + workerPools: + - name: worker + resource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: worker + + - name: UpdateStatus can contain a workerPools item represented by NodePool + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + workerPools: + - name: worker + resource: + group: hypershift.openshift.io + resource: nodepools + name: worker + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + workerPools: + - name: worker + resource: + group: hypershift.openshift.io + resource: nodepools + name: worker + + - name: UpdateStatus refuses workerPools item that is not represented by MCP or NodePool + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + workerPools: + - name: worker + resource: + group: config.openshift.io + resource: clusteroperators + name: worker + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + expectedStatusError: "Invalid value: \"object\": workerPools[].poolResource must be a machineconfigpools.machineconfiguration.openshift.io or hostedclusters.hypershift.openshift.io resource" + + - name: UpdateStatus refuses workerPools item where name does not match the resource + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + workerPools: + - name: worker + resource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: not-worker + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + expectedStatusError: "Invalid value: \"object\": workerPools .name must match .resource.name" + + - name: UpdateStatus can contain a ClusterOperator insight + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: ClusterOperator + clusterOperator: + name: image-registry + resource: + group: config.openshift.io + resource: clusteroperators + name: image-registry + conditions: + - type: Updating + status: "False" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: Pending + message: Waiting to be updated + - type: Healthy + status: "False" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: Degraded + message: Image registry is degraded + conditions: [] + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: ClusterOperator + clusterOperator: + name: image-registry + resource: + group: config.openshift.io + resource: clusteroperators + name: image-registry + conditions: + - type: Updating + status: "False" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: Pending + message: Waiting to be updated + - type: Healthy + status: "False" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: Degraded + message: Image registry is degraded + conditions: [] + + - name: UpdateStatus can contain a MachineConfigPool insight + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + informers: [] + conditions: [] + workerPools: + - name: worker + resource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: worker + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: MachineConfigPool + machineConfigPool: + name: image-registry + resource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: worker + scopeType: WorkerPool + assessment: Completed + completion: 100 + summaries: + - type: Total + count: 8 + - type: Outdated + count: 0 + conditions: [] + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + informers: [] + conditions: [] + workerPools: + - name: worker + resource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: worker + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: MachineConfigPool + machineConfigPool: + name: image-registry + resource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: worker + scopeType: WorkerPool + assessment: Completed + completion: 100 + summaries: + - type: Total + count: 8 + - type: Outdated + count: 0 + conditions: [] + - name: UpdateStatus can contain a Node insight + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + informers: [] + conditions: [] + workerPools: + - name: worker + resource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: worker + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: Node + node: + name: node-42 + resource: + resource: nodes + name: node-42 + poolResource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: worker + scopeType: WorkerPool + version: 4.18.0 + estToComplete: 42m + message: "Unschedulable | Disk Pressure" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: Draining + message: "Node is draining" + - type: Degraded + status: "False" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: AsExpected + message: "All is well" + - type: Available + status: "False" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: MultipleReasons + message: "Unschedulable | Disk Pressure" + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + informers: [] + conditions: [] + workerPools: + - name: worker + resource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: worker + informers: + - name: update-status-controller + insights: + - uid: "1234" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: Node + node: + name: node-42 + resource: + resource: nodes + name: node-42 + poolResource: + group: machineconfiguration.openshift.io + resource: machineconfigpools + name: worker + scopeType: WorkerPool + version: 4.18.0 + estToComplete: 42m + message: "Unschedulable | Disk Pressure" + conditions: + - type: Updating + status: "True" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: Draining + message: "Node is draining" + - type: Degraded + status: "False" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: AsExpected + message: "All is well" + - type: Available + status: "False" + lastTransitionTime: "2021-01-01T00:00:00Z" + reason: MultipleReasons + message: "Unschedulable | Disk Pressure" + + - name: UpdateStatus can contain a Health insight + initial: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + updated: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + informers: + - name: update-status-controller + insights: + - uid: "4331" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: Health + health: + startedAt: "2021-01-01T00:00:00Z" + scope: + type: ControlPlane + resources: + - group: config.openshift.io + resource: clusterversions + name: version + - resource: nodes + name: node-42 + impact: + level: Error + type: Cluster Capacity + summary: Something that involves a CV and node-42 and affects capacity + description: Potentially longer description of the issue + remediation: + reference: https://access.redhat.com/solutions/1234 + estimatedFinish: "2021-01-01T02:00:00Z" + conditions: [] + expected: | + apiVersion: update.openshift.io/v1alpha1 + kind: UpdateStatus + spec: {} + status: + controlPlane: + resource: + group: config.openshift.io + resource: clusterversions + name: version + informers: + - name: update-status-controller + insights: + - uid: "4331" + acquiredAt: "2021-01-01T00:00:00Z" + insight: + type: Health + health: + startedAt: "2021-01-01T00:00:00Z" + scope: + type: ControlPlane + resources: + - group: config.openshift.io + resource: clusterversions + name: version + - resource: nodes + name: node-42 + impact: + level: Error + type: Cluster Capacity + summary: Something that involves a CV and node-42 and affects capacity + description: Potentially longer description of the issue + remediation: + reference: https://access.redhat.com/solutions/1234 + estimatedFinish: "2021-01-01T02:00:00Z" + conditions: [] diff --git a/update/v1alpha1/types_update_status.go b/update/v1alpha1/types_update_status.go new file mode 100644 index 00000000000..6f57a56702b --- /dev/null +++ b/update/v1alpha1/types_update_status.go @@ -0,0 +1,470 @@ +package v1alpha1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// UpdateStatus reports status for in-progress cluster version updates +// +// Compatibility level 4: No compatibility is provided, the API can change at any point for any reason. These capabilities should not be used by applications needing long term support. +// +openshift:compatibility-gen:level=4 +// +kubebuilder:object:root=true +// +kubebuilder:subresource:status +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:path=updatestatuses,scope=Cluster +// +openshift:api-approved.openshift.io=https://github.com/openshift/api/pull/2012 +// +openshift:file-pattern=cvoRunLevel=0000_00,operatorName=cluster-version-operator,operatorOrdering=02 +// +openshift:enable:FeatureGate=UpgradeStatus +// +kubebuilder:metadata:annotations="description=Provides health and status information about OpenShift cluster updates." +// +kubebuilder:metadata:annotations="displayName=UpdateStatuses" +type UpdateStatus struct { + metav1.TypeMeta `json:",inline"` + + // metadata is standard Kubernetes object metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec is empty for now, UpdateStatus is purely status-reporting API. In the future spec may be used to hold + // configuration to drive what information is surfaced and how + // +required + Spec UpdateStatusSpec `json:"spec"` + // status exposes the health and status of the ongoing cluster update + // +optional + Status UpdateStatusStatus `json:"status"` +} + +// UpdateStatusSpec is empty for now, UpdateStatus is purely status-reporting API. In the future spec may be used +// to hold configuration to drive what information is surfaced and how +type UpdateStatusSpec struct { +} + +// +k8s:deepcopy-gen=true + +// UpdateStatusStatus is the API about in-progress updates. It aggregates and summarizes UpdateInsights produced by +// update informers +type UpdateStatusStatus struct { + // conditions provide details about the controller operational matters, exposing whether the controller managing this + // UpdateStatus is functioning well, receives insights from individual informers, and is able to interpret them and + // relay them through this UpdateStatus. These condition do not communicate anything about the state of the update + // itself but may indicate whether the UpdateStatus content is reliable or not. + // +TODO(UpdateStatus API GA): Update the list of conditions expected to be present + // +listType=map + // +listMapKey=type + // +patchStrategy=merge + // +patchMergeKey=type + // +optional + // +kubebuilder:validation:MaxItems=10 + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"` + + // controlPlane contains a summary and insights related to the control plane update + // +optional + ControlPlane *ControlPlane `json:"controlPlane,omitempty"` + + // workerPools contains summaries and insights related to the worker pools update. Each item in the list represents + // a single worker pool and carries all insights reported for it by informers. It has at most 32 items. + // +TODO(UpdateStatus API GA): Determine a proper limit for MCPs / NodePool + // +TODO(UpdateStatus): How to handle degenerate clusters with many pools? Worst case clusters can have per-node pools + // so hundreds, and hypothetically more empty ones. + // +listType=map + // +listMapKey=name + // +patchStrategy=merge + // +patchMergeKey=name + // +optional + // +kubebuilder:validation:MaxItems=32 + WorkerPools []Pool `json:"workerPools,omitempty" patchStrategy:"merge" patchMergeKey:"name"` +} + +// ControlPlane contains a summary and insights related to the control plane update. +type ControlPlane struct { + // conditions provides details about the control plane update. This is a high-level status of an abstract control plane + // concept, and will typically be the controller's interpretation / summarization of the insights it received (that + // will be placed in .informers[].insights for clients that want to perform further analysis of the data). + // Known condition types are: + // * "Updating": Whether the cluster control plane is currently updating or not + // + // +listType=map + // +listMapKey=type + // +patchStrategy=merge + // +patchMergeKey=type + // +optional + // +kubebuilder:validation:MaxItems=10 + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"` + + // resource is the resource that represents the control plane. It will typically be a ClusterVersion resource + // in standalone OpenShift and HostedCluster in Hosted Control Planes. This field is optional because the information + // may be unknown temporarily. + // + // +Note: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows + // +only the "correct" resource types to be referenced (here, ClusterVersion and HostedCluster). However, because we + // +use resource references in many places and this API is intended to be consumed by clients, not produced, consistency + // +seems to be more valuable than type safety for producers. + // +optional + // +kubebuilder:validation:XValidation:rule="(self.group == 'config.openshift.io' && self.resource == 'clusterversions') || (self.group == 'hypershift.openshift.io' && self.resource == 'hostedclusters')",message="controlPlane.resource must be either a clusterversions.config.openshift.io or a hostedclusters.hypershift.openshift.io resource" + Resource *ResourceRef `json:"resource"` + + // poolResource is the resource that represents control plane node pool, typically a MachineConfigPool. This field + // is optional because some form factors (like Hosted Control Planes) do not have dedicated control plane node pools, + // and also because the information may be unknown temporarily. + // + // +Note: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows + // +only the "correct" resource types to be referenced (here, MachineConfigPool). However, because we use resource + // +references in many places and this API is intended to be consumed by clients, not produced, consistency seems to be + // +more valuable than type safety for producers. + // +optional + // +kubebuilder:validation:XValidation:rule="(self.group == 'machineconfiguration.openshift.io' && self.resource == 'machineconfigpools')",message="controlPlane.poolResource must be a machineconfigpools.machineconfiguration.openshift.io resource" + PoolResource *PoolResourceRef `json:"poolResource,omitempty"` + + // informers is a list of insight producers. An informer is a system, internal or external to the cluster, that + // produces units of information relevant to the update process, either about its progress or its health. Each + // informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, + // relevant to the control plane update. Contains at most 16 items. + // + // +listType=map + // +listMapKey=name + // +patchStrategy=merge + // +patchMergeKey=name + // +optional + // +kubebuilder:validation:MaxItems=16 + Informers []ControlPlaneInformer `json:"informers,omitempty" patchStrategy:"merge" patchMergeKey:"name"` +} + +// ControlPlaneConditionType are types of conditions that can be reported on control plane level +type ControlPlaneConditionType string + +const ( + // Updating is the condition type that communicate whether the whole control plane is updating or not + ControlPlaneUpdating ControlPlaneConditionType = "Updating" +) + +// ControlPlaneUpdatingReason are well-known reasons for the Updating condition +// +kubebuilder:validation:Enum=ClusterVersionProgressing;ClusterVersionNotProgressing;CannotDetermineUpdating +type ControlPlaneUpdatingReason string + +const ( + // ClusterVersionProgressing is used for Updating=True set because we observed a ClusterVersion resource to + // have Progressing=True condition + ControlPlaneClusterVersionProgressing ControlPlaneUpdatingReason = "ClusterVersionProgressing" + // ClusterVersionNotProgressing is used for Updating=False set because we observed a ClusterVersion resource to + // have Progressing=False condition + ControlPlaneClusterVersionNotProgressing ControlPlaneUpdatingReason = "ClusterVersionNotProgressing" + // CannotDetermineUpdating is used with Updating=Unknown. This covers many different actual reasons such as + // missing or Unknown Progressing condition on ClusterVersion, but it does not seem useful to track the individual + // reasons to that granularity for Updating=Unknown + ControlPlaneCannotDetermineUpdating ControlPlaneUpdatingReason = "CannotDetermineUpdating" +) + +// Pool contains a summary and insights related to a node pool update +// +kubebuilder:validation:XValidation:rule="self.name == self.resource.name",message="workerPools .name must match .resource.name" +type Pool struct { + // conditions provides details about the node pool update. This is a high-level status of an abstract "pool of nodes" + // concept, and will typically be the controller's interpretation / summarization of the insights it received (that + // will be placed in .informers[].insights for clients that want to perform further analysis of the data). + // Known condition types are: + // * "Updating": Whether the pool of nodes is currently updating or not + // +listType=map + // +listMapKey=type + // +patchStrategy=merge + // +patchMergeKey=type + // +optional + // +kubebuilder:validation:MaxItems=10 + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"` + + // name is the name of the pool, follows the same rules as a Kubernetes resource name (RFC-1123 subdomain) + // +required + // +kubebuilder:validation:XValidation:rule="!format.dns1123Subdomain().validate(self).hasValue()",message="a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character." + // +kubebuilder:validation:MaxLength:=253 + Name string `json:"name"` + + // resource is the resource that represents the pool, either a MachineConfigPool in Standalone OpenShift or a NodePool + // in Hosted Control Planes. + // + // +Note: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows + // +only the "correct" resource types to be referenced (here, MachineConfigPool or NodePool). However, because we use + // +resource references in many places and this API is intended to be consumed by clients, not produced, consistency + // +seems to be more valuable than type safety for producers. + // +required + // +kubebuilder:validation:XValidation:rule="(self.group == 'machineconfiguration.openshift.io' && self.resource == 'machineconfigpools') || (self.group == 'hypershift.openshift.io' && self.resource == 'nodepools')",message="workerPools[].poolResource must be a machineconfigpools.machineconfiguration.openshift.io or hostedclusters.hypershift.openshift.io resource" + Resource PoolResourceRef `json:"resource"` + + // informers is a list of insight producers. An informer is a system, internal or external to the cluster, that + // produces units of information relevant to the update process, either about its progress or its health. Each + // informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, + // relevant to the process of updating this pool of nodes. + // +listType=map + // +listMapKey=name + // +patchStrategy=merge + // +patchMergeKey=name + // +optional + // +kubebuilder:validation:MaxItems=16 + Informers []WorkerPoolInformer `json:"informers,omitempty" patchStrategy:"merge" patchMergeKey:"name"` +} + +// ControlPlaneInformer represents a system, internal or external to the cluster, that produces units of information +// relevant to the update process, either about its progress or its health. Each informer is identified by a name, and +// contains a list of insights it contributed to the Update Status API, relevant to the control plane update. +type ControlPlaneInformer struct { + // name is the name of the insight producer + // +required + // +kubebuilder:validation:XValidation:rule="!format.dns1123Subdomain().validate(self).hasValue()",message="a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character." + // +kubebuilder:validation:MaxLength:=253 + Name string `json:"name"` + + // insights is a list of insights produced by this producer. Insights are units of information relevant to an update + // progress or health information. There are two types of update insights: status insights and health insights. The + // first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not. + // + // Status Insights expose the state of a single resource that is directly involved in the update process, usually a resource + // that either has a notion of "being updated," (such as a Node or ClusterOperator) or represents a higher-level + // abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents + // a pool of nodes). + // + // Health Insights report a state or condition in the cluster that is abnormal or negative and either affects or is + // affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate + // a condition that warrants attention by the cluster administrator. + // +listType=map + // +listMapKey=uid + // +patchStrategy=merge + // +patchMergeKey=uid + // +optional + // +kubebuilder:validation:MaxItems=128 + Insights []ControlPlaneInsight `json:"insights,omitempty" patchStrategy:"merge" patchMergeKey:"uid"` +} + +// WorkerPoolInformer represents a system, internal or external to the cluster, that produces units of information +// relevant to the update process, either about its progress or its health. Each informer is identified by a name, and +// contains a list of insights it contributed to the Update Status API, relevant to a specific worker pool. +type WorkerPoolInformer struct { + // name is the name of the insight producer + // +required + // +kubebuilder:validation:XValidation:rule="!format.dns1123Subdomain().validate(self).hasValue()",message="a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character." + // +kubebuilder:validation:MaxLength:=253 + Name string `json:"name"` + + // insights is a list of insights produced by this producer. Insights are units of information relevant to an update + // progress or health information. There are two types of update insights: status insights and health insights. The + // first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not. + // + // Status Insights expose the state of a single resource that is directly involved in the update process, usually a resource + // that either has a notion of "being updated," (such as a Node or ClusterOperator) or represents a higher-level + // abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents + // a pool of nodes). + // + // Health Insights report a state or condition in the cluster that is abnormal or negative and either affects or is + // affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate + // a condition that warrants attention by the cluster administrator. + // +listType=map + // +listMapKey=uid + // +patchStrategy=merge + // +patchMergeKey=uid + // +optional + // +kubebuilder:validation:MaxItems=1024 + Insights []WorkerPoolInsight `json:"insights,omitempty" patchStrategy:"merge" patchMergeKey:"uid"` +} + +// ControlPlaneInsight is a unique piece of either status/progress or update health information produced by update informer +type ControlPlaneInsight struct { + // uid identifies the insight over time + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:MaxLength=63 + // +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$` + UID string `json:"uid"` + + // acquiredAt is the time when the data was acquired by the producer + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:Format=date-time + AcquiredAt metav1.Time `json:"acquiredAt"` + + // insight is a discriminated union of all insights types that can be reported for the control plane + // +required + Insight ControlPlaneInsightUnion `json:"insight"` +} + +// WorkerPoolInsight is a unique piece of either status/progress or update health information produced by update informer +type WorkerPoolInsight struct { + // uid identifies the insight over time + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:MaxLength=63 + // +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$` + UID string `json:"uid"` + + // acquiredAt is the time when the data was acquired by the producer + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:Format=date-time + AcquiredAt metav1.Time `json:"acquiredAt"` + + // insight is a discriminated union of all insights types that can be reported for a worker pool + // +required + Insight WorkerPoolInsightUnion `json:"insight"` +} + +// ControlPlaneInsightUnion is the discriminated union of all insights types that can be reported for the control plane, +// identified by type field +// +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'ClusterVersion' ? has(self.clusterVersion) : !has(self.clusterVersion)",message="clusterVersion is required when type is ClusterVersion, and forbidden otherwise" +// +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'ClusterOperator' ? has(self.clusterOperator) : !has(self.clusterOperator)",message="clusterOperator is required when type is ClusterOperator, and forbidden otherwise" +// +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'MachineConfigPool' ? has(self.machineConfigPool) : !has(self.machineConfigPool)",message="machineConfigPool is required when type is MachineConfigPool, and forbidden otherwise" +// +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'Node' ? has(self.node) : !has(self.node)",message="node is required when type is Node, and forbidden otherwise" +// +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'Health' ? has(self.health) : !has(self.health)",message="health is required when type is Health, and forbidden otherwise" +// +union +type ControlPlaneInsightUnion struct { + // type identifies the type of the update insight, one of: ClusterVersion, ClusterOperator, MachineConfigPool, Node, Health + // ClusterVersion, ClusterOperator, MachineConfigPool, Node types are progress insights about a resource directly + // involved in the update process + // Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is + // affected by the update. + // +unionDiscriminator + // +required + // +kubebuilder:validation:Enum=ClusterVersion;ClusterOperator;MachineConfigPool;Node;Health + Type InsightType `json:"type"` + + // clusterVersion is a status insight about the state of a control plane update, where + // the control plane is represented by a ClusterVersion resource usually managed by CVO + // +optional + // +unionMember + ClusterVersionStatusInsight *ClusterVersionStatusInsight `json:"clusterVersion,omitempty"` + + // clusterOperator is a status insight about the state of a control plane cluster operator update + // represented by a ClusterOperator resource + // +optional + // +unionMember + ClusterOperatorStatusInsight *ClusterOperatorStatusInsight `json:"clusterOperator,omitempty"` + + // machineConfigPool is a status insight about the state of a worker pool update, where the worker pool + // is represented by a MachineConfigPool resource + // +optional + // +unionMember + MachineConfigPoolStatusInsight *MachineConfigPoolStatusInsight `json:"machineConfigPool,omitempty"` + + // node is a status insight about the state of a worker node update, where the worker node is represented + // by a Node resource + // +optional + // +unionMember + NodeStatusInsight *NodeStatusInsight `json:"node,omitempty"` + + // health is a generic health insight about the update. It does not represent a status of any specific + // resource but surfaces actionable information about the health of the cluster or an update + // +optional + // +unionMember + HealthInsight *HealthInsight `json:"health,omitempty"` +} + +// WorkerPoolInsightUnion is the discriminated union of insights types that can be reported for a worker pool, +// identified by type field +// +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'MachineConfigPool' ? has(self.machineConfigPool) : !has(self.machineConfigPool)",message="machineConfigPool is required when type is MachineConfigPool, and forbidden otherwise" +// +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'Node' ? has(self.node) : !has(self.node)",message="node is required when type is Node, and forbidden otherwise" +// +kubebuilder:validation:XValidation:rule="has(self.type) && self.type == 'Health' ? has(self.health) : !has(self.health)",message="health is required when type is Health, and forbidden otherwise" +// +union +type WorkerPoolInsightUnion struct { + // type identifies the type of the update insight, one of: MachineConfigPool, Node, Health + // MachineConfigPool, Node types are progress insights about a resource directly involved in the update process + // Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is + // affected by the update. + // +unionDiscriminator + // +required + // +kubebuilder:validation:Enum=MachineConfigPool;Node;Health + Type InsightType `json:"type"` + + // machineConfigPool is a status insight about the state of a worker pool update, where the worker pool + // is represented by a MachineConfigPool resource + // +optional + // +unionMember + MachineConfigPoolStatusInsight *MachineConfigPoolStatusInsight `json:"machineConfigPool,omitempty"` + + // node is a status insight about the state of a worker node update, where the worker node is represented + // by a Node resource + // +optional + // +unionMember + NodeStatusInsight *NodeStatusInsight `json:"node,omitempty"` + + // health is a generic health insight about the update. It does not represent a status of any specific + // resource but surfaces actionable information about the health of the cluster or an update + // +optional + // +unionMember + HealthInsight *HealthInsight `json:"health,omitempty"` +} + +// InsightType identifies the type of the update insight as either one of the resource-specific status insight, +// or a generic health insight +type InsightType string + +const ( + // Resource-specific status insights should be reported continuously during the update process and mostly communicate + // progress and high-level state + + // ClusterVersion status insight reports progress and high-level state of a ClusterVersion resource, representing + // control plane in standalone clusters + ClusterVersionStatusInsightType InsightType = "ClusterVersion" + // ClusterOperator status insight reports progress and high-level state of a ClusterOperator, representing a control + // plane component + ClusterOperatorStatusInsightType InsightType = "ClusterOperator" + // MachineConfigPool status insight reports progress and high-level state of a MachineConfigPool resource, representing + // a pool of nodes in clusters using Machine API + MachineConfigPoolStatusInsightType InsightType = "MachineConfigPool" + // Node status insight reports progress and high-level state of a Node resource, representing a node (both control + // plane and worker) in a cluster + NodeStatusInsightType InsightType = "Node" + + // Health insights are reported only when an informer observes a condition that requires admin attention + HealthInsightType InsightType = "Health" +) + +// ResourceRef is a reference to a kubernetes resource, typically involved in an insight +type ResourceRef struct { + // group of the object being referenced, if any + // +optional + // +kubebuilder:validation:MaxLength=253 + // +kubebuilder:validation:XValidation:rule="!format.dns1123Subdomain().validate(self).hasValue()",message="a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character." + Group string `json:"group,omitempty"` + + // resource of object being referenced + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MaxLength=253 + // +kubebuilder:validation:XValidation:rule="!format.dns1123Subdomain().validate(self).hasValue()",message="a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character." + Resource string `json:"resource"` + + // name of the object being referenced + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MaxLength=253 + // +kubebuilder:validation:XValidation:rule="!format.dns1123Subdomain().validate(self).hasValue()",message="a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character." + Name string `json:"name"` + + // namespace of the object being referenced, if any + // +optional + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MaxLength=253 + // +kubebuilder:validation:Pattern=`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$` + Namespace string `json:"namespace,omitempty"` +} + +// PoolResourceRef is a reference to a kubernetes resource that represents a node pool +// +kubebuilder:validation:XValidation:rule="has(self.resource) && (self.resource == 'machineconfigpools' && self.group == 'machineconfiguration.openshift.io'",message="a poolResource must be a machineconfigpools.machineconfiguration.openshift.io resource" +type PoolResourceRef struct { + ResourceRef `json:",inline"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// UpdateStatusList is a list of UpdateStatus resources +// +// Compatibility level 4: No compatibility is provided, the API can change at any point for any reason. These capabilities should not be used by applications needing long term support. +// +openshift:compatibility-gen:level=4 +type UpdateStatusList struct { + metav1.TypeMeta `json:",inline"` + // metadata is standard Kubernetes object metadata + // +optional + metav1.ListMeta `json:"metadata"` + + // items is a list of UpdateStatus resources + // +optional + // +kubebuilder:validation:MaxItems=1024 + Items []UpdateStatus `json:"items"` +} diff --git a/update/v1alpha1/types_update_status_health.go b/update/v1alpha1/types_update_status_health.go new file mode 100644 index 00000000000..f1a54940c85 --- /dev/null +++ b/update/v1alpha1/types_update_status_health.go @@ -0,0 +1,131 @@ +package v1alpha1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// HealthInsight is a piece of actionable information produced by an insight producer about the health +// of the cluster or an update +type HealthInsight struct { + // startedAt is the time when the condition reported by the insight started + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:Format=date-time + StartedAt metav1.Time `json:"startedAt"` + + // scope is list of objects involved in the insight + // +required + Scope InsightScope `json:"scope"` + + // impact describes the impact the reported condition has on the cluster or update + // +required + Impact InsightImpact `json:"impact"` + + // remediation contains information about how to resolve or prevent the reported condition + // +required + Remediation InsightRemediation `json:"remediation"` +} + +// InsightScope is a list of resources involved in the insight +type InsightScope struct { + // type is either ControlPlane or WorkerPool + // +required + Type ScopeType `json:"type"` + + // resources is a list of resources involved in the insight, of any group/kind. Maximum 16 resources can be listed. + // +optional + // +listType=atomic + // +kubebuilder:validation:MaxItems=16 + Resources []ResourceRef `json:"resources,omitempty"` +} + +// ScopeType is one of ControlPlane or WorkerPool +// +kubebuilder:validation:Enum=ControlPlane;WorkerPool +type ScopeType string + +const ( + // ControlPlane is used for insights that are related to the control plane (including control plane pool or nodes) + ControlPlaneScope ScopeType = "ControlPlane" + // WorkerPool is used for insights that are related to a worker pools and nodes (excluding control plane) + WorkerPoolScope ScopeType = "WorkerPool" +) + +// InsightImpact describes the impact the reported condition has on the cluster or update +type InsightImpact struct { + // level is the severity of the impact. Valid values are Unknown, Info, Warning, Error, Critical. + // +required + Level InsightImpactLevel `json:"level"` + + // type is the type of the impact. Valid values are None, Unknown, API Availability, Cluster Capacity, + // Application Availability, Application Outage, Data Loss, Update Speed, Update Stalled. + // +required + Type InsightImpactType `json:"type"` + + // summary is a short summary of the impact. It must not be empty and must be shorter than 256 characters. + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MaxLength=256 + // +kubebuilder:validation:MinLength=1 + Summary string `json:"summary"` + + // description is a human-oriented, possibly longer-form description of the condition reported by the insight It must + // be shorter than 4096 characters. + // +optional + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MaxLength=4096 + Description string `json:"description,omitempty"` +} + +// InsightImpactLevel describes the severity of the impact the reported condition has on the cluster or update +// +kubebuilder:validation:Enum=Unknown;Info;Warning;Error;Critical +type InsightImpactLevel string + +const ( + // UnknownImpactLevel is used when the impact level is not known + UnknownImpactLevel InsightImpactLevel = "Unknown" + // info should be used for insights that are strictly informational or even positive (things go well or + // something recently healed) + InfoImpactLevel InsightImpactLevel = "Info" + // warning should be used for insights that explain a minor or transient problem. Anything that requires + // admin attention or manual action should not be a warning but at least an error. + WarningImpactLevel InsightImpactLevel = "Warning" + // error should be used for insights that inform about a problem that requires admin attention. Insights of + // level error and higher should be as actionable as possible, and should be accompanied by links to documentation, + // KB articles or other resources that help the admin to resolve the problem. + ErrorImpactLevel InsightImpactLevel = "Error" + // critical should be used rarely, for insights that inform about a severe problem, threatening with data + // loss, destroyed cluster or other catastrophic consequences. Insights of this level should be accompanied by + // links to documentation, KB articles or other resources that help the admin to resolve the problem, or at least + // prevent the severe consequences from happening. + CriticalInfoLevel InsightImpactLevel = "Critical" +) + +// InsightImpactType describes the type of the impact the reported condition has on the cluster or update +// +kubebuilder:validation:Enum=None;Unknown;API Availability;Cluster Capacity;Application Availability;Application Outage;Data Loss;Update Speed;Update Stalled +type InsightImpactType string + +const ( + NoneImpactType InsightImpactType = "None" + UnknownImpactType InsightImpactType = "Unknown" + ApiAvailabilityImpactType InsightImpactType = "API Availability" + ClusterCapacityImpactType InsightImpactType = "Cluster Capacity" + ApplicationAvailabilityImpactType InsightImpactType = "Application Availability" + ApplicationOutageImpactType InsightImpactType = "Application Outage" + DataLossImpactType InsightImpactType = "Data Loss" + UpdateSpeedImpactType InsightImpactType = "Update Speed" + UpdateStalledImpactType InsightImpactType = "Update Stalled" +) + +// InsightRemediation contains information about how to resolve or prevent the reported condition +type InsightRemediation struct { + // reference is a URL where administrators can find information to resolve or prevent the reported condition + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MaxLength=512 + // +kubebuilder:validation:XValidation:rule="isURL(self)",message="reference must a valid URL" + Reference string `json:"reference"` + + // estimatedFinish is the estimated time when the informer expects the condition to be resolved, if applicable. + // +optional + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:Format=date-time + EstimatedFinish *metav1.Time `json:"estimatedFinish,omitempty"` +} diff --git a/update/v1alpha1/types_update_status_progress.go b/update/v1alpha1/types_update_status_progress.go new file mode 100644 index 00000000000..83977256410 --- /dev/null +++ b/update/v1alpha1/types_update_status_progress.go @@ -0,0 +1,443 @@ +package v1alpha1 + +import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +// ClusterVersionStatusInsight reports the state of a ClusterVersion resource (which represents a control plane +// update in standalone clusters), during the update. +type ClusterVersionStatusInsight struct { + // conditions provides detailed observed conditions about ClusterVersion. It contains at most 10 items. + // Known conditions are: + // - Updating: whether the control plane (represented by this ClusterVersion) is updating + // +listType=map + // +listMapKey=type + // +patchStrategy=merge + // +patchMergeKey=type + // +optional + // +kubebuilder:validation:MaxItems=10 + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"` + + // resource is the ClusterVersion resource that represents the control plane + // + // +Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + // +resource name (because the rest is implied by status insight type). However, because we use resource references in + // +many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + // +than type safety for producers. + // +required + // +kubebuilder:validation:XValidation:rule="self.group == 'config.openshift.io' && self.resource == 'clusterversions'",message="resource must be a clusterversions.config.openshift.io resource" + Resource ResourceRef `json:"resource"` + + // assessment is the assessment of the control plane update process. Valid values are: Unknown, Progressing, Completed, Degraded + // +required + Assessment ControlPlaneAssessment `json:"assessment"` + + // versions contains the original and target versions of the upgrade + // +required + Versions ControlPlaneUpdateVersions `json:"versions"` + + // completion is a percentage of the update completion (0-100) + // +required + // +kubebuilder:validation:Minimum=0 + // +kubebuilder:validation:Maximum=100 + Completion int32 `json:"completion"` + + // startedAt is the time when the update started + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:Format=date-time + StartedAt metav1.Time `json:"startedAt"` + + // completedAt is the time when the update completed + // +optional + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:Format=date-time + CompletedAt *metav1.Time `json:"completedAt,omitempty"` + + // estimatedCompletedAt is the estimated time when the update will complete + // +optional + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:Format=date-time + EstimatedCompletedAt *metav1.Time `json:"estimatedCompletedAt,omitempty"` +} + +// ControlPlaneAssessment is the assessment of the control plane update process +// +kubebuilder:validation:Enum=Unknown;Progressing;Completed;Degraded +type ControlPlaneAssessment string + +const ( + // Unknown means the update status and health cannot be determined + ControlPlaneAssessmentUnknown ControlPlaneAssessment = "Unknown" + // Progressing means the control plane is updating and no problems or slowness are detected + ControlPlaneAssessmentProgressing ControlPlaneAssessment = "Progressing" + // Completed means the control plane successfully completed updating and no problems are detected + ControlPlaneAssessmentCompleted ControlPlaneAssessment = "Completed" + // Degraded means the process of updating the control plane suffers from an observed problem + ControlPlaneAssessmentDegraded ControlPlaneAssessment = "Degraded" +) + +// ControlPlaneUpdateVersions contains the original and target versions of the upgrade +type ControlPlaneUpdateVersions struct { + // previous is the version of the control plane before the update. When the cluster is being installed + // for the first time, the version will have a placeholder value '' and carry 'Installation' metadata + // +required + // +kubebuilder:validation:XValidation:rule="self.version == '' ? (has(self.metadata) && self.metadata.exists(m, m.key == 'Installation')) : !(has(self.metadata) && self.metadata.exists(m, m.key == 'Installation'))",message="previous version must be '' iff marked with Installation metadata" + Previous Version `json:"previous"` + + // target is the version of the control plane after the update. It may never be '' or have `Installation` metadata + // +required + // +kubebuilder:validation:XValidation:rule="self.version != '' && !(has(self.metadata) && self.metadata.exists(m, m.key == 'Installation'))",message="target version must not be '' or have Installation metadata" + Target Version `json:"target"` +} + +// Version describes a version involved in an update, typically on one side of an update edge +type Version struct { + // version is a semantic version string, or a placeholder '' for the special case where this + // is a "previous" version in a new installation, in which case the metadata must contain an item + // with key 'Installation' + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MaxLength=64 + // +kubebuilder:validation:Pattern=`^()|((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$` + // +kubebuilder:validation:XValidation:rule="self.version == '' ? (has(self.metadata) && self.metadata.exists(m, m.key == 'Installation')) : !(has(self.metadata) && self.metadata.exists(m, m.key == 'Installation'))",message="previous version must be '' iff marked with Installation metadata" + Version string `json:"version"` + + // metadata is a list of metadata associated with the version. It is a list of key-value pairs. The value is optional + // and when not provided, the metadata item has boolean semantics (presence indicates true). For example, 'Partial' + // metadata on a previous version indicates that the previous update was never fully completed. Can contain at most 5 items. + // +listType=map + // +listMapKey=key + // +patchStrategy=merge + // +patchMergeKey=key + // +optional + // +kubebuilder:validation:MaxItems=5 + Metadata []VersionMetadata `json:"metadata,omitempty" patchStrategy:"merge" patchMergeKey:"key"` +} + +// VersionMetadata is a key:value item assigned to version involved in the update. Value can be empty, then the metadata +// have boolean semantics (true when present, false when absent) +type VersionMetadata struct { + // key is the name of this metadata value. Valid values are: Installation, Partial, Architecture + // +required + Key VersionMetadataKey `json:"key"` + + // value is the value for the metadata, at most 32 characters long. It is not expected to be provided for Installation + // and Partial metadata. For Architecture metadata, it is expected to be a string that indicates the architecture of the + // payload image of the version involved in the upgrade, when relevant. + // +optional + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MaxLength=32 + Value string `json:"value,omitempty"` +} + +// VersionMetadataKey is a key for a metadata value associated with a version +// +kubebuilder:validation:Enum=Installation;Partial;Architecture +type VersionMetadataKey string + +const ( + // Installation denotes a boolean that indicates the update was initiated as an installation + InstallationMetadata VersionMetadataKey = "Installation" + // Partial denotes a boolean that indicates the update was initiated in a state where the previous upgrade + // (to the original version) was not fully completed + PartialMetadata VersionMetadataKey = "Partial" + // Architecture denotes a string that indicates the architecture of the payload image of the version, + // when relevant + ArchitectureMetadata VersionMetadataKey = "Architecture" +) + +// ClusterVersionStatusInsightConditionType are types of conditions that can be reported on ClusterVersion status insight +type ClusterVersionStatusInsightConditionType string + +const ( + // Updating condition communicates whether the ClusterVersion is updating + ClusterVersionStatusInsightUpdating ClusterVersionStatusInsightConditionType = "Updating" +) + +// ClusterVersionStatusInsightUpdatingReason are well-known reasons for the Updating condition on ClusterVersion status insights +type ClusterVersionStatusInsightUpdatingReason string + +const ( + // CannotDetermineUpdating is used with Updating=Unknown + ClusterVersionCannotDetermineUpdating ClusterVersionStatusInsightUpdatingReason = "CannotDetermineUpdating" + // ClusterVersionProgressing means that ClusterVersion is considered to be Updating=True because it has a Progressing=True condition + ClusterVersionProgressing ClusterVersionStatusInsightUpdatingReason = "ClusterVersionProgressing" + // ClusterVersionNotProgressing means that ClusterVersion is considered to be Updating=False because it has a Progressing=False condition + ClusterVersionNotProgressing ClusterVersionStatusInsightUpdatingReason = "ClusterVersionNotProgressing" +) + +// ClusterOperatorStatusInsight reports the state of a ClusterOperator resource (which represents a control plane +// component update in standalone clusters), during the update +type ClusterOperatorStatusInsight struct { + // conditions provide details about the operator. It contains at most 10 items. Known conditions are: + // - Updating: whether the operator is updating; When Updating=False, the reason field can be Pending or Updated + // - Healthy: whether the operator is considered healthy; When Healthy=False, the reason field can be Unavailable or Degraded, and Unavailable is "stronger" than Degraded + // +listType=map + // +listMapKey=type + // +patchStrategy=merge + // +patchMergeKey=type + // +optional + // +kubebuilder:validation:MaxItems=10 + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"` + + // name is the name of the operator + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:MaxLength=64 + // +kubebuilder:validation:Pattern=`^[a-z0-9-]+$` + Name string `json:"name"` + + // resource is the ClusterOperator resource that represents the operator + // + // +Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + // +resource name (because the rest is implied by status insight type). However, because we use resource references in + // +many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + // +than type safety for producers. + // +required + // +kubebuilder:validation:XValidation:rule="self.group == 'config.openshift.io' && self.resource == 'clusteroperators'",message="resource must be a clusteroperators.config.openshift.io resource" + Resource ResourceRef `json:"resource"` +} + +// ClusterOperatorStatusInsightConditionType are types of conditions that can be reported on ClusterOperator status insights +type ClusterOperatorStatusInsightConditionType string + +const ( + // Updating condition communicates whether the ClusterOperator is updating + ClusterOperatorStatusInsightUpdating ClusterOperatorStatusInsightConditionType = "Updating" + // Healthy condition communicates whether the ClusterOperator is considered healthy + ClusterOperatorStatusInsightHealthy ClusterOperatorStatusInsightConditionType = "Healthy" +) + +// ClusterOperatorUpdatingReason are well-known reasons for the Updating condition on ClusterOperator status insights +type ClusterOperatorUpdatingReason string + +const ( + // Updated is used with Updating=False when the ClusterOperator finished updating + ClusterOperatorUpdatingReasonUpdated ClusterOperatorUpdatingReason = "Updated" + // Pending is used with Updating=False when the ClusterOperator is not updating and is still running previous version + ClusterOperatorUpdatingReasonPending ClusterOperatorUpdatingReason = "Pending" + // Progressing is used with Updating=True when the ClusterOperator is updating + ClusterOperatorUpdatingReasonProgressing ClusterOperatorUpdatingReason = "Progressing" + // CannotDetermine is used with Updating=Unknown + ClusterOperatorUpdatingCannotDetermine ClusterOperatorUpdatingReason = "CannotDetermine" +) + +// ClusterOperatorHealthyReason are well-known reasons for the Healthy condition on ClusterOperator status insights +type ClusterOperatorHealthyReason string + +const ( + // AsExpected is used with Healthy=True when no issues are observed + ClusterOperatorHealthyReasonAsExpected ClusterOperatorHealthyReason = "AsExpected" + // Unavailable is used with Healthy=False when the ClusterOperator has Available=False condition + ClusterOperatorHealthyReasonUnavailable ClusterOperatorHealthyReason = "Unavailable" + // Degraded is used with Healthy=False when the ClusterOperator has Degraded=True condition + ClusterOperatorHealthyReasonDegraded ClusterOperatorHealthyReason = "Degraded" + // CannotDetermine is used with Healthy=Unknown + ClusterOperatorHealthyReasonCannotDetermine ClusterOperatorHealthyReason = "CannotDetermine" +) + +// MachineConfigPoolStatusInsight reports the state of a MachineConfigPool resource during the update +type MachineConfigPoolStatusInsight struct { + // conditions provide details about the machine config pool update. It contains at most 10 items. Known conditions are: + // - Updating: whether the pool is updating; When Updating=False, the reason field can be Pending, Updated or Excluded + // +listType=map + // +listMapKey=type + // +patchStrategy=merge + // +patchMergeKey=type + // +optional + // +kubebuilder:validation:MaxItems=10 + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"` + + // name is the name of the machine config pool + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:MaxLength=64 + // +kubebuilder:validation:Pattern=`^[a-z0-9-]+$` + Name string `json:"name"` + + // resource is the MachineConfigPool resource that represents the pool + // + // Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + // resource name (because the rest is implied by status insight type). However, because we use resource references in + // many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + // than type safety for producers. + // +required + // +kubebuilder:validation:XValidation:rule="self.group == 'machineconfiguration.openshift.io' && self.resource == 'machineconfigpools'",message="resource must be a machineconfigpools.machineconfiguration.openshift.io resource" + Resource PoolResourceRef `json:"resource"` + + // scopeType describes whether the pool is a control plane or a worker pool + // +required + Scope ScopeType `json:"scopeType"` + + // assessment is the assessment of the machine config pool update process. Valid values are: Pending, Completed, Degraded, Excluded, Progressing + // +required + Assessment PoolAssessment `json:"assessment"` + + // completion is a percentage of the update completion (0-100) + // +required + // +kubebuilder:validation:Minimum=0 + // +kubebuilder:validation:Maximum=100 + Completion int32 `json:"completion"` + + // summaries is a list of counts of nodes matching certain criteria (e.g. updated, degraded, etc.). Maximum 16 items can be listed. + // +listType=map + // +listMapKey=type + // +patchStrategy=merge + // +patchMergeKey=type + // +optional + // +kubebuilder:validation:MaxItems=16 + Summaries []NodeSummary `json:"summaries,omitempty" patchStrategy:"merge" patchMergeKey:"type"` +} + +// PoolAssessment is the assessment of the node pool update process +// +kubebuilder:validation:Enum=Pending;Completed;Degraded;Excluded;Progressing +type PoolAssessment string + +const ( + // Pending means the nodes in the pool will be updated but none have even started yet + PoolPending PoolAssessment = "Pending" + // Completed means all nodes in the pool have been updated + PoolCompleted PoolAssessment = "Completed" + // Degraded means the process of updating the pool suffers from an observed problem + PoolDegraded PoolAssessment = "Degraded" + // Excluded means some (or all) nodes in the pool would be normally updated but a configuration (such as paused MCP) + // prevents that from happening + PoolExcluded PoolAssessment = "Excluded" + // Progressing means the nodes in the pool are being updated and no problems or slowness are detected + PoolProgressing PoolAssessment = "Progressing" +) + +// NodeSummary is a count of nodes matching certain criteria (e.g. updated, degraded, etc.) +type NodeSummary struct { + // type is the type of the summary. Valid values are: Total, Available, Progressing, Outdated, Draining, Excluded, Degraded + // The summaries are not exclusive, a single node may be counted in multiple summaries. + // +required + Type NodeSummaryType `json:"type"` + + // count is the number of nodes matching the criteria + // +required + // +kubebuilder:validation:Minimum=0 + // +kubebuilder:validation:Maximum=4096 + Count int32 `json:"count"` +} + +// NodeSummaryType are types of summaries (how many nodes match certain criteria, such as updated, degraded, etc.) +// reported for a node pool +// +kubebuilder:validation:Enum=Total;Available;Progressing;Outdated;Draining;Excluded;Degraded +type NodeSummaryType string + +const ( + // Total is the total number of nodes in the pool + NodesTotal NodeSummaryType = "Total" + // Available is the number of nodes in the pool that are available (accepting workloads) + NodesAvailable NodeSummaryType = "Available" + // Progressing is the number of nodes in the pool that are updating + NodesProgressing NodeSummaryType = "Progressing" + // Outdated is the number of nodes in the pool that are running an outdated version + NodesOutdated NodeSummaryType = "Outdated" + // Draining is the number of nodes in the pool that are being drained + NodesDraining NodeSummaryType = "Draining" + // Excluded is the number of nodes in the pool that would normally be updated but configuration (such as paused MCP) + // prevents that from happening + NodesExcluded NodeSummaryType = "Excluded" + // Degraded is the number of nodes in the pool that are degraded + NodesDegraded NodeSummaryType = "Degraded" +) + +// NodeStatusInsight reports the state of a Node during the update +type NodeStatusInsight struct { + // conditions provides details about the control plane update. Known conditions are: + // - Updating: whether the Node is updating; When Updating=False, the reason field can be Updated, Pending, or Paused. When Updating=True, the reason field can be Draining, Updating, or Rebooting + // - Available: whether the Node is available (accepting workloads) + // - Degraded: whether the Node is degraded (problem observed) + // +listType=map + // +listMapKey=type + // +patchStrategy=merge + // +patchMergeKey=type + // +optional + // +kubebuilder:validation:MaxItems=10 + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"` + + // name is the name of the node + // +required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MinLength=1 + // +kubebuilder:validation:MaxLength=253 + Name string `json:"name"` + + // resource is the Node resource that represents the node + // + // Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + // resource name (because the rest is implied by status insight type). However, because we use resource references in + // many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + // than type safety for producers. + // +required + // +kubebuilder:validation:XValidation:rule="self.group == '' && self.resource == 'nodes'",message="resource must be a nodes.core.k8s.io resource" + Resource ResourceRef `json:"resource"` + + // poolResource is the resource that represents the pool the node is a member of + // + // Note: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows + // only the "correct" resource types to be referenced (here, MachineConfigPool or NodePool). However, because we use + // resource references in many places and this API is intended to be consumed by clients, not produced, consistency + // seems to be more valuable than type safety for producers. + // +required + // +kubebuilder:validation:XValidation:rule="self.group == 'machineconfiguration.openshift.io' && self.resource == 'machineconfigpools'",message="resource must be a machineconfigpools.machineconfiguration.openshift.io resource" + PoolResource PoolResourceRef `json:"poolResource"` + + // scopeType describes whether the node belongs to control plane or a worker pool + // +required + Scope ScopeType `json:"scopeType"` + + // version is the version of the node, when known + // +optional + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MaxLength=64 + // +kubebuilder:validation:Pattern=`^((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$` + Version string `json:"version,omitempty"` + + // estimatedToComplete is the estimated time to complete the update, when known + // +optional + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:Format=duration + EstimatedToComplete *metav1.Duration `json:"estimatedToComplete,omitempty"` + + // message is a short human-readable message about the node update status. It must be shorter than 100 characters. + // +optional + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:MaxLength=100 + Message string `json:"message,omitempty"` +} + +// NodeStatusInsightConditionType are types of conditions that can be reported on Node status insights +type NodeStatusInsightConditionType string + +const ( + // Updating condition communicates whether the Node is updating + NodeStatusInsightUpdating NodeStatusInsightConditionType = "Updating" + // Degraded condition communicates whether the Node is degraded (problem observed) + NodeStatusInsightDegraded NodeStatusInsightConditionType = "Degraded" + // Available condition communicates whether the Node is available (accepting workloads) + NodeStatusInsightAvailable NodeStatusInsightConditionType = "Available" +) + +// NodeUpdatingReason are well-known reasons for the Updating condition on Node status insights +type NodeUpdatingReason string + +const ( + // Draining is used with Updating=True when the Node is being drained + NodeDraining NodeUpdatingReason = "Draining" + // Updating is used with Updating=True when new node configuration is being applied + NodeUpdating NodeUpdatingReason = "Updating" + // Rebooting is used with Updating=True when the Node is rebooting into the new version + NodeRebooting NodeUpdatingReason = "Rebooting" + + // Updated is used with Updating=False when the Node is prevented by configuration from updating + NodePaused NodeUpdatingReason = "Paused" + // Updated is used with Updating=False when the Node is waiting to be eventually updated + NodeUpdatePending NodeUpdatingReason = "Pending" + // Updated is used with Updating=False when the Node has been updated + NodeCompleted NodeUpdatingReason = "Completed" + + // CannotDetermine is used with Updating=Unknown + NodeCannotDetermine NodeUpdatingReason = "CannotDetermine" +) diff --git a/update/v1alpha1/zz_generated.crd-manifests/0000_00_cluster-version-operator_02_updatestatuses-CustomNoUpgrade.crd.yaml b/update/v1alpha1/zz_generated.crd-manifests/0000_00_cluster-version-operator_02_updatestatuses-CustomNoUpgrade.crd.yaml new file mode 100644 index 00000000000..7dbbb6b6803 --- /dev/null +++ b/update/v1alpha1/zz_generated.crd-manifests/0000_00_cluster-version-operator_02_updatestatuses-CustomNoUpgrade.crd.yaml @@ -0,0 +1,2323 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/2012 + api.openshift.io/merged-by-featuregates: "true" + description: Provides health and status information about OpenShift cluster updates. + displayName: UpdateStatuses + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + release.openshift.io/feature-set: CustomNoUpgrade + name: updatestatuses.update.openshift.io +spec: + group: update.openshift.io + names: + kind: UpdateStatus + listKind: UpdateStatusList + plural: updatestatuses + singular: updatestatus + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + UpdateStatus reports status for in-progress cluster version updates + + Compatibility level 4: No compatibility is provided, the API can change at any point for any reason. These capabilities should not be used by applications needing long term support. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: |- + spec is empty for now, UpdateStatus is purely status-reporting API. In the future spec may be used to hold + configuration to drive what information is surfaced and how + type: object + status: + description: status exposes the health and status of the ongoing cluster + update + properties: + conditions: + description: |- + conditions provide details about the controller operational matters, exposing whether the controller managing this + UpdateStatus is functioning well, receives insights from individual informers, and is able to interpret them and + relay them through this UpdateStatus. These condition do not communicate anything about the state of the update + itself but may indicate whether the UpdateStatus content is reliable or not. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + controlPlane: + description: controlPlane contains a summary and insights related + to the control plane update + properties: + conditions: + description: |- + conditions provides details about the control plane update. This is a high-level status of an abstract control plane + concept, and will typically be the controller's interpretation / summarization of the insights it received (that + will be placed in .informers[].insights for clients that want to perform further analysis of the data). + Known condition types are: + * "Updating": Whether the cluster control plane is currently updating or not + items: + description: Condition contains details for one aspect of the + current state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, + Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + informers: + description: |- + informers is a list of insight producers. An informer is a system, internal or external to the cluster, that + produces units of information relevant to the update process, either about its progress or its health. Each + informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, + relevant to the control plane update. Contains at most 16 items. + items: + description: |- + ControlPlaneInformer represents a system, internal or external to the cluster, that produces units of information + relevant to the update process, either about its progress or its health. Each informer is identified by a name, and + contains a list of insights it contributed to the Update Status API, relevant to the control plane update. + properties: + insights: + description: |- + insights is a list of insights produced by this producer. Insights are units of information relevant to an update + progress or health information. There are two types of update insights: status insights and health insights. The + first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not. + + Status Insights expose the state of a single resource that is directly involved in the update process, usually a resource + that either has a notion of "being updated," (such as a Node or ClusterOperator) or represents a higher-level + abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents + a pool of nodes). + + Health Insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate + a condition that warrants attention by the cluster administrator. + items: + description: ControlPlaneInsight is a unique piece of + either status/progress or update health information + produced by update informer + properties: + acquiredAt: + description: acquiredAt is the time when the data + was acquired by the producer + format: date-time + type: string + insight: + description: insight is a discriminated union of all + insights types that can be reported for the control + plane + properties: + clusterOperator: + description: |- + clusterOperator is a status insight about the state of a control plane cluster operator update + represented by a ClusterOperator resource + properties: + conditions: + description: |- + conditions provide details about the operator. It contains at most 10 items. Known conditions are: + - Updating: whether the operator is updating; When Updating=False, the reason field can be Pending or Updated + - Healthy: whether the operator is considered healthy; When Healthy=False, the reason field can be Unavailable or Degraded, and Unavailable is "stronger" than Degraded + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + name: + description: name is the name of the operator + maxLength: 64 + minLength: 1 + pattern: ^[a-z0-9-]+$ + type: string + resource: + description: resource is the ClusterOperator + resource that represents the operator + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a clusteroperators.config.openshift.io + resource + rule: self.group == 'config.openshift.io' + && self.resource == 'clusteroperators' + required: + - name + - resource + type: object + clusterVersion: + description: |- + clusterVersion is a status insight about the state of a control plane update, where + the control plane is represented by a ClusterVersion resource usually managed by CVO + properties: + assessment: + description: 'assessment is the assessment + of the control plane update process. Valid + values are: Unknown, Progressing, Completed, + Degraded' + enum: + - Unknown + - Progressing + - Completed + - Degraded + type: string + completedAt: + description: completedAt is the time when + the update completed + format: date-time + type: string + completion: + description: completion is a percentage of + the update completion (0-100) + format: int32 + maximum: 100 + minimum: 0 + type: integer + conditions: + description: |- + conditions provides detailed observed conditions about ClusterVersion. It contains at most 10 items. + Known conditions are: + - Updating: whether the control plane (represented by this ClusterVersion) is updating + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + estimatedCompletedAt: + description: estimatedCompletedAt is the estimated + time when the update will complete + format: date-time + type: string + resource: + description: resource is the ClusterVersion + resource that represents the control plane + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a clusterversions.config.openshift.io + resource + rule: self.group == 'config.openshift.io' + && self.resource == 'clusterversions' + startedAt: + description: startedAt is the time when the + update started + format: date-time + type: string + versions: + description: versions contains the original + and target versions of the upgrade + properties: + previous: + description: |- + previous is the version of the control plane before the update. When the cluster is being installed + for the first time, the version will have a placeholder value '' and carry 'Installation' metadata + properties: + metadata: + description: |- + metadata is a list of metadata associated with the version. It is a list of key-value pairs. The value is optional + and when not provided, the metadata item has boolean semantics (presence indicates true). For example, 'Partial' + metadata on a previous version indicates that the previous update was never fully completed. Can contain at most 5 items. + items: + description: |- + VersionMetadata is a key:value item assigned to version involved in the update. Value can be empty, then the metadata + have boolean semantics (true when present, false when absent) + properties: + key: + description: 'key is the name + of this metadata value. Valid + values are: Installation, + Partial, Architecture' + enum: + - Installation + - Partial + - Architecture + type: string + value: + description: |- + value is the value for the metadata, at most 32 characters long. It is not expected to be provided for Installation + and Partial metadata. For Architecture metadata, it is expected to be a string that indicates the architecture of the + payload image of the version involved in the upgrade, when relevant. + maxLength: 32 + type: string + required: + - key + type: object + maxItems: 5 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + version: + description: |- + version is a semantic version string, or a placeholder '' for the special case where this + is a "previous" version in a new installation, in which case the metadata must contain an item + with key 'Installation' + maxLength: 64 + pattern: ^()|((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + x-kubernetes-validations: + - message: previous version must be + '' iff marked with Installation + metadata + rule: 'self.version == '''' + ? (has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation'')) : + !(has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation''))' + required: + - version + type: object + x-kubernetes-validations: + - message: previous version must be '' + iff marked with Installation metadata + rule: 'self.version == '''' ? + (has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation'')) : !(has(self.metadata) + && self.metadata.exists(m, m.key == + ''Installation''))' + target: + description: target is the version of + the control plane after the update. + It may never be '' or have `Installation` + metadata + properties: + metadata: + description: |- + metadata is a list of metadata associated with the version. It is a list of key-value pairs. The value is optional + and when not provided, the metadata item has boolean semantics (presence indicates true). For example, 'Partial' + metadata on a previous version indicates that the previous update was never fully completed. Can contain at most 5 items. + items: + description: |- + VersionMetadata is a key:value item assigned to version involved in the update. Value can be empty, then the metadata + have boolean semantics (true when present, false when absent) + properties: + key: + description: 'key is the name + of this metadata value. Valid + values are: Installation, + Partial, Architecture' + enum: + - Installation + - Partial + - Architecture + type: string + value: + description: |- + value is the value for the metadata, at most 32 characters long. It is not expected to be provided for Installation + and Partial metadata. For Architecture metadata, it is expected to be a string that indicates the architecture of the + payload image of the version involved in the upgrade, when relevant. + maxLength: 32 + type: string + required: + - key + type: object + maxItems: 5 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + version: + description: |- + version is a semantic version string, or a placeholder '' for the special case where this + is a "previous" version in a new installation, in which case the metadata must contain an item + with key 'Installation' + maxLength: 64 + pattern: ^()|((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + x-kubernetes-validations: + - message: previous version must be + '' iff marked with Installation + metadata + rule: 'self.version == '''' + ? (has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation'')) : + !(has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation''))' + required: + - version + type: object + x-kubernetes-validations: + - message: target version must not be + '' or have Installation metadata + rule: self.version != '' && !(has(self.metadata) + && self.metadata.exists(m, m.key == + 'Installation')) + required: + - previous + - target + type: object + required: + - assessment + - completion + - resource + - startedAt + - versions + type: object + health: + description: |- + health is a generic health insight about the update. It does not represent a status of any specific + resource but surfaces actionable information about the health of the cluster or an update + properties: + impact: + description: impact describes the impact the + reported condition has on the cluster or + update + properties: + description: + description: |- + description is a human-oriented, possibly longer-form description of the condition reported by the insight It must + be shorter than 4096 characters. + maxLength: 4096 + type: string + level: + description: level is the severity of + the impact. Valid values are Unknown, + Info, Warning, Error, Critical. + enum: + - Unknown + - Info + - Warning + - Error + - Critical + type: string + summary: + description: summary is a short summary + of the impact. It must not be empty + and must be shorter than 256 characters. + maxLength: 256 + minLength: 1 + type: string + type: + description: |- + type is the type of the impact. Valid values are None, Unknown, API Availability, Cluster Capacity, + Application Availability, Application Outage, Data Loss, Update Speed, Update Stalled. + enum: + - None + - Unknown + - API Availability + - Cluster Capacity + - Application Availability + - Application Outage + - Data Loss + - Update Speed + - Update Stalled + type: string + required: + - level + - summary + - type + type: object + remediation: + description: remediation contains information + about how to resolve or prevent the reported + condition + properties: + estimatedFinish: + description: estimatedFinish is the estimated + time when the informer expects the condition + to be resolved, if applicable. + format: date-time + type: string + reference: + description: reference is a URL where + administrators can find information + to resolve or prevent the reported condition + maxLength: 512 + type: string + x-kubernetes-validations: + - message: reference must a valid URL + rule: isURL(self) + required: + - reference + type: object + scope: + description: scope is list of objects involved + in the insight + properties: + resources: + description: resources is a list of resources + involved in the insight, of any group/kind. + Maximum 16 resources can be listed. + items: + description: ResourceRef is a reference + to a kubernetes resource, typically + involved in an insight + properties: + group: + description: group of the object + being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of lower + case alphanumeric characters, + '-' or '.', and must start and + end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of lower + case alphanumeric characters, + '-' or '.', and must start and + end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of lower + case alphanumeric characters, + '-' or '.', and must start and + end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + maxItems: 16 + type: array + x-kubernetes-list-type: atomic + type: + description: type is either ControlPlane + or WorkerPool + enum: + - ControlPlane + - WorkerPool + type: string + required: + - type + type: object + startedAt: + description: startedAt is the time when the + condition reported by the insight started + format: date-time + type: string + required: + - impact + - remediation + - scope + - startedAt + type: object + machineConfigPool: + description: |- + machineConfigPool is a status insight about the state of a worker pool update, where the worker pool + is represented by a MachineConfigPool resource + properties: + assessment: + description: 'assessment is the assessment + of the machine config pool update process. + Valid values are: Pending, Completed, Degraded, + Excluded, Progressing' + enum: + - Pending + - Completed + - Degraded + - Excluded + - Progressing + type: string + completion: + description: completion is a percentage of + the update completion (0-100) + format: int32 + maximum: 100 + minimum: 0 + type: integer + conditions: + description: |- + conditions provide details about the machine config pool update. It contains at most 10 items. Known conditions are: + - Updating: whether the pool is updating; When Updating=False, the reason field can be Pending, Updated or Excluded + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + name: + description: name is the name of the machine + config pool + maxLength: 64 + minLength: 1 + pattern: ^[a-z0-9-]+$ + type: string + resource: + description: |- + resource is the MachineConfigPool resource that represents the pool + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + scopeType: + description: scopeType describes whether the + pool is a control plane or a worker pool + enum: + - ControlPlane + - WorkerPool + type: string + summaries: + description: summaries is a list of counts + of nodes matching certain criteria (e.g. + updated, degraded, etc.). Maximum 16 items + can be listed. + items: + description: NodeSummary is a count of nodes + matching certain criteria (e.g. updated, + degraded, etc.) + properties: + count: + description: count is the number of + nodes matching the criteria + format: int32 + maximum: 4096 + minimum: 0 + type: integer + type: + description: |- + type is the type of the summary. Valid values are: Total, Available, Progressing, Outdated, Draining, Excluded, Degraded + The summaries are not exclusive, a single node may be counted in multiple summaries. + enum: + - Total + - Available + - Progressing + - Outdated + - Draining + - Excluded + - Degraded + type: string + required: + - count + - type + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + required: + - assessment + - completion + - name + - resource + - scopeType + type: object + node: + description: |- + node is a status insight about the state of a worker node update, where the worker node is represented + by a Node resource + properties: + conditions: + description: |- + conditions provides details about the control plane update. Known conditions are: + - Updating: whether the Node is updating; When Updating=False, the reason field can be Updated, Pending, or Paused. When Updating=True, the reason field can be Draining, Updating, or Rebooting + - Available: whether the Node is available (accepting workloads) + - Degraded: whether the Node is degraded (problem observed) + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + estimatedToComplete: + description: estimatedToComplete is the estimated + time to complete the update, when known + format: duration + type: string + message: + description: message is a short human-readable + message about the node update status. It + must be shorter than 100 characters. + maxLength: 100 + type: string + name: + description: name is the name of the node + maxLength: 253 + minLength: 1 + type: string + poolResource: + description: |- + poolResource is the resource that represents the pool the node is a member of + + Note: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows + only the "correct" resource types to be referenced (here, MachineConfigPool or NodePool). However, because we use + resource references in many places and this API is intended to be consumed by clients, not produced, consistency + seems to be more valuable than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + resource: + description: |- + resource is the Node resource that represents the node + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a nodes.core.k8s.io + resource + rule: self.group == '' && self.resource + == 'nodes' + scopeType: + description: scopeType describes whether the + node belongs to control plane or a worker + pool + enum: + - ControlPlane + - WorkerPool + type: string + version: + description: version is the version of the + node, when known + maxLength: 64 + pattern: ^((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + required: + - name + - poolResource + - resource + - scopeType + type: object + type: + description: |- + type identifies the type of the update insight, one of: ClusterVersion, ClusterOperator, MachineConfigPool, Node, Health + ClusterVersion, ClusterOperator, MachineConfigPool, Node types are progress insights about a resource directly + involved in the update process + Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. + enum: + - ClusterVersion + - ClusterOperator + - MachineConfigPool + - Node + - Health + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: clusterVersion is required when type is + ClusterVersion, and forbidden otherwise + rule: 'has(self.type) && self.type == ''ClusterVersion'' + ? has(self.clusterVersion) : !has(self.clusterVersion)' + - message: clusterOperator is required when type is + ClusterOperator, and forbidden otherwise + rule: 'has(self.type) && self.type == ''ClusterOperator'' + ? has(self.clusterOperator) : !has(self.clusterOperator)' + - message: machineConfigPool is required when type + is MachineConfigPool, and forbidden otherwise + rule: 'has(self.type) && self.type == ''MachineConfigPool'' + ? has(self.machineConfigPool) : !has(self.machineConfigPool)' + - message: node is required when type is Node, and + forbidden otherwise + rule: 'has(self.type) && self.type == ''Node'' ? has(self.node) + : !has(self.node)' + - message: health is required when type is Health, + and forbidden otherwise + rule: 'has(self.type) && self.type == ''Health'' + ? has(self.health) : !has(self.health)' + uid: + description: uid identifies the insight over time + maxLength: 63 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + required: + - acquiredAt + - insight + - uid + type: object + maxItems: 128 + type: array + x-kubernetes-list-map-keys: + - uid + x-kubernetes-list-type: map + name: + description: name is the name of the insight producer + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + poolResource: + description: |- + poolResource is the resource that represents control plane node pool, typically a MachineConfigPool. This field + is optional because some form factors (like Hosted Control Planes) do not have dedicated control plane node pools, + and also because the information may be unknown temporarily. + properties: + group: + description: group of the object being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: controlPlane.poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: (self.group == 'machineconfiguration.openshift.io' && + self.resource == 'machineconfigpools') + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource == 'machineconfigpools' + && self.group == 'machineconfiguration.openshift.io' + resource: + description: |- + resource is the resource that represents the control plane. It will typically be a ClusterVersion resource + in standalone OpenShift and HostedCluster in Hosted Control Planes. This field is optional because the information + may be unknown temporarily. + properties: + group: + description: group of the object being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: controlPlane.resource must be either a clusterversions.config.openshift.io + or a hostedclusters.hypershift.openshift.io resource + rule: (self.group == 'config.openshift.io' && self.resource + == 'clusterversions') || (self.group == 'hypershift.openshift.io' + && self.resource == 'hostedclusters') + type: object + workerPools: + description: |- + workerPools contains summaries and insights related to the worker pools update. Each item in the list represents + a single worker pool and carries all insights reported for it by informers. It has at most 32 items. + so hundreds, and hypothetically more empty ones. + items: + description: Pool contains a summary and insights related to a node + pool update + properties: + conditions: + description: |- + conditions provides details about the node pool update. This is a high-level status of an abstract "pool of nodes" + concept, and will typically be the controller's interpretation / summarization of the insights it received (that + will be placed in .informers[].insights for clients that want to perform further analysis of the data). + Known condition types are: + * "Updating": Whether the pool of nodes is currently updating or not + items: + description: Condition contains details for one aspect of + the current state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, + Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + informers: + description: |- + informers is a list of insight producers. An informer is a system, internal or external to the cluster, that + produces units of information relevant to the update process, either about its progress or its health. Each + informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, + relevant to the process of updating this pool of nodes. + items: + description: |- + WorkerPoolInformer represents a system, internal or external to the cluster, that produces units of information + relevant to the update process, either about its progress or its health. Each informer is identified by a name, and + contains a list of insights it contributed to the Update Status API, relevant to a specific worker pool. + properties: + insights: + description: |- + insights is a list of insights produced by this producer. Insights are units of information relevant to an update + progress or health information. There are two types of update insights: status insights and health insights. The + first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not. + + Status Insights expose the state of a single resource that is directly involved in the update process, usually a resource + that either has a notion of "being updated," (such as a Node or ClusterOperator) or represents a higher-level + abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents + a pool of nodes). + + Health Insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate + a condition that warrants attention by the cluster administrator. + items: + description: WorkerPoolInsight is a unique piece of + either status/progress or update health information + produced by update informer + properties: + acquiredAt: + description: acquiredAt is the time when the data + was acquired by the producer + format: date-time + type: string + insight: + description: insight is a discriminated union of + all insights types that can be reported for a + worker pool + properties: + health: + description: |- + health is a generic health insight about the update. It does not represent a status of any specific + resource but surfaces actionable information about the health of the cluster or an update + properties: + impact: + description: impact describes the impact + the reported condition has on the cluster + or update + properties: + description: + description: |- + description is a human-oriented, possibly longer-form description of the condition reported by the insight It must + be shorter than 4096 characters. + maxLength: 4096 + type: string + level: + description: level is the severity of + the impact. Valid values are Unknown, + Info, Warning, Error, Critical. + enum: + - Unknown + - Info + - Warning + - Error + - Critical + type: string + summary: + description: summary is a short summary + of the impact. It must not be empty + and must be shorter than 256 characters. + maxLength: 256 + minLength: 1 + type: string + type: + description: |- + type is the type of the impact. Valid values are None, Unknown, API Availability, Cluster Capacity, + Application Availability, Application Outage, Data Loss, Update Speed, Update Stalled. + enum: + - None + - Unknown + - API Availability + - Cluster Capacity + - Application Availability + - Application Outage + - Data Loss + - Update Speed + - Update Stalled + type: string + required: + - level + - summary + - type + type: object + remediation: + description: remediation contains information + about how to resolve or prevent the reported + condition + properties: + estimatedFinish: + description: estimatedFinish is the + estimated time when the informer expects + the condition to be resolved, if applicable. + format: date-time + type: string + reference: + description: reference is a URL where + administrators can find information + to resolve or prevent the reported + condition + maxLength: 512 + type: string + x-kubernetes-validations: + - message: reference must a valid URL + rule: isURL(self) + required: + - reference + type: object + scope: + description: scope is list of objects involved + in the insight + properties: + resources: + description: resources is a list of + resources involved in the insight, + of any group/kind. Maximum 16 resources + can be listed. + items: + description: ResourceRef is a reference + to a kubernetes resource, typically + involved in an insight + properties: + group: + description: group of the object + being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of + lower case alphanumeric characters, + '-' or '.', and must start + and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of + lower case alphanumeric characters, + '-' or '.', and must start + and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the + object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of + lower case alphanumeric characters, + '-' or '.', and must start + and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + maxItems: 16 + type: array + x-kubernetes-list-type: atomic + type: + description: type is either ControlPlane + or WorkerPool + enum: + - ControlPlane + - WorkerPool + type: string + required: + - type + type: object + startedAt: + description: startedAt is the time when + the condition reported by the insight + started + format: date-time + type: string + required: + - impact + - remediation + - scope + - startedAt + type: object + machineConfigPool: + description: |- + machineConfigPool is a status insight about the state of a worker pool update, where the worker pool + is represented by a MachineConfigPool resource + properties: + assessment: + description: 'assessment is the assessment + of the machine config pool update process. + Valid values are: Pending, Completed, + Degraded, Excluded, Progressing' + enum: + - Pending + - Completed + - Degraded + - Excluded + - Progressing + type: string + completion: + description: completion is a percentage + of the update completion (0-100) + format: int32 + maximum: 100 + minimum: 0 + type: integer + conditions: + description: |- + conditions provide details about the machine config pool update. It contains at most 10 items. Known conditions are: + - Updating: whether the pool is updating; When Updating=False, the reason field can be Pending, Updated or Excluded + items: + description: Condition contains details + for one aspect of the current state + of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in + CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + name: + description: name is the name of the machine + config pool + maxLength: 64 + minLength: 1 + pattern: ^[a-z0-9-]+$ + type: string + resource: + description: |- + resource is the MachineConfigPool resource that represents the pool + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + scopeType: + description: scopeType describes whether + the pool is a control plane or a worker + pool + enum: + - ControlPlane + - WorkerPool + type: string + summaries: + description: summaries is a list of counts + of nodes matching certain criteria (e.g. + updated, degraded, etc.). Maximum 16 items + can be listed. + items: + description: NodeSummary is a count of + nodes matching certain criteria (e.g. + updated, degraded, etc.) + properties: + count: + description: count is the number of + nodes matching the criteria + format: int32 + maximum: 4096 + minimum: 0 + type: integer + type: + description: |- + type is the type of the summary. Valid values are: Total, Available, Progressing, Outdated, Draining, Excluded, Degraded + The summaries are not exclusive, a single node may be counted in multiple summaries. + enum: + - Total + - Available + - Progressing + - Outdated + - Draining + - Excluded + - Degraded + type: string + required: + - count + - type + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + required: + - assessment + - completion + - name + - resource + - scopeType + type: object + node: + description: |- + node is a status insight about the state of a worker node update, where the worker node is represented + by a Node resource + properties: + conditions: + description: |- + conditions provides details about the control plane update. Known conditions are: + - Updating: whether the Node is updating; When Updating=False, the reason field can be Updated, Pending, or Paused. When Updating=True, the reason field can be Draining, Updating, or Rebooting + - Available: whether the Node is available (accepting workloads) + - Degraded: whether the Node is degraded (problem observed) + items: + description: Condition contains details + for one aspect of the current state + of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in + CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + estimatedToComplete: + description: estimatedToComplete is the + estimated time to complete the update, + when known + format: duration + type: string + message: + description: message is a short human-readable + message about the node update status. + It must be shorter than 100 characters. + maxLength: 100 + type: string + name: + description: name is the name of the node + maxLength: 253 + minLength: 1 + type: string + poolResource: + description: |- + poolResource is the resource that represents the pool the node is a member of + + Note: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows + only the "correct" resource types to be referenced (here, MachineConfigPool or NodePool). However, because we use + resource references in many places and this API is intended to be consumed by clients, not produced, consistency + seems to be more valuable than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + resource: + description: |- + resource is the Node resource that represents the node + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a nodes.core.k8s.io + resource + rule: self.group == '' && self.resource + == 'nodes' + scopeType: + description: scopeType describes whether + the node belongs to control plane or a + worker pool + enum: + - ControlPlane + - WorkerPool + type: string + version: + description: version is the version of the + node, when known + maxLength: 64 + pattern: ^((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + required: + - name + - poolResource + - resource + - scopeType + type: object + type: + description: |- + type identifies the type of the update insight, one of: MachineConfigPool, Node, Health + MachineConfigPool, Node types are progress insights about a resource directly involved in the update process + Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. + enum: + - MachineConfigPool + - Node + - Health + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: machineConfigPool is required when type + is MachineConfigPool, and forbidden otherwise + rule: 'has(self.type) && self.type == ''MachineConfigPool'' + ? has(self.machineConfigPool) : !has(self.machineConfigPool)' + - message: node is required when type is Node, and + forbidden otherwise + rule: 'has(self.type) && self.type == ''Node'' + ? has(self.node) : !has(self.node)' + - message: health is required when type is Health, + and forbidden otherwise + rule: 'has(self.type) && self.type == ''Health'' + ? has(self.health) : !has(self.health)' + uid: + description: uid identifies the insight over time + maxLength: 63 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + required: + - acquiredAt + - insight + - uid + type: object + maxItems: 1024 + type: array + x-kubernetes-list-map-keys: + - uid + x-kubernetes-list-type: map + name: + description: name is the name of the insight producer + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist + of lower case alphanumeric characters, '-' or '.', + and must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + name: + description: name is the name of the pool, follows the same + rules as a Kubernetes resource name (RFC-1123 subdomain) + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of lower + case alphanumeric characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + resource: + description: |- + resource is the resource that represents the pool, either a MachineConfigPool in Standalone OpenShift or a NodePool + in Hosted Control Planes. + properties: + group: + description: group of the object being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: workerPools[].poolResource must be a machineconfigpools.machineconfiguration.openshift.io + or hostedclusters.hypershift.openshift.io resource + rule: (self.group == 'machineconfiguration.openshift.io' && + self.resource == 'machineconfigpools') || (self.group == + 'hypershift.openshift.io' && self.resource == 'nodepools') + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource == 'machineconfigpools' + && self.group == 'machineconfiguration.openshift.io' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: workerPools .name must match .resource.name + rule: self.name == self.resource.name + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/update/v1alpha1/zz_generated.crd-manifests/0000_00_cluster-version-operator_02_updatestatuses-DevPreviewNoUpgrade.crd.yaml b/update/v1alpha1/zz_generated.crd-manifests/0000_00_cluster-version-operator_02_updatestatuses-DevPreviewNoUpgrade.crd.yaml new file mode 100644 index 00000000000..5ddb61c2b9b --- /dev/null +++ b/update/v1alpha1/zz_generated.crd-manifests/0000_00_cluster-version-operator_02_updatestatuses-DevPreviewNoUpgrade.crd.yaml @@ -0,0 +1,2323 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/2012 + api.openshift.io/merged-by-featuregates: "true" + description: Provides health and status information about OpenShift cluster updates. + displayName: UpdateStatuses + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + release.openshift.io/feature-set: DevPreviewNoUpgrade + name: updatestatuses.update.openshift.io +spec: + group: update.openshift.io + names: + kind: UpdateStatus + listKind: UpdateStatusList + plural: updatestatuses + singular: updatestatus + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + UpdateStatus reports status for in-progress cluster version updates + + Compatibility level 4: No compatibility is provided, the API can change at any point for any reason. These capabilities should not be used by applications needing long term support. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: |- + spec is empty for now, UpdateStatus is purely status-reporting API. In the future spec may be used to hold + configuration to drive what information is surfaced and how + type: object + status: + description: status exposes the health and status of the ongoing cluster + update + properties: + conditions: + description: |- + conditions provide details about the controller operational matters, exposing whether the controller managing this + UpdateStatus is functioning well, receives insights from individual informers, and is able to interpret them and + relay them through this UpdateStatus. These condition do not communicate anything about the state of the update + itself but may indicate whether the UpdateStatus content is reliable or not. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + controlPlane: + description: controlPlane contains a summary and insights related + to the control plane update + properties: + conditions: + description: |- + conditions provides details about the control plane update. This is a high-level status of an abstract control plane + concept, and will typically be the controller's interpretation / summarization of the insights it received (that + will be placed in .informers[].insights for clients that want to perform further analysis of the data). + Known condition types are: + * "Updating": Whether the cluster control plane is currently updating or not + items: + description: Condition contains details for one aspect of the + current state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, + Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + informers: + description: |- + informers is a list of insight producers. An informer is a system, internal or external to the cluster, that + produces units of information relevant to the update process, either about its progress or its health. Each + informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, + relevant to the control plane update. Contains at most 16 items. + items: + description: |- + ControlPlaneInformer represents a system, internal or external to the cluster, that produces units of information + relevant to the update process, either about its progress or its health. Each informer is identified by a name, and + contains a list of insights it contributed to the Update Status API, relevant to the control plane update. + properties: + insights: + description: |- + insights is a list of insights produced by this producer. Insights are units of information relevant to an update + progress or health information. There are two types of update insights: status insights and health insights. The + first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not. + + Status Insights expose the state of a single resource that is directly involved in the update process, usually a resource + that either has a notion of "being updated," (such as a Node or ClusterOperator) or represents a higher-level + abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents + a pool of nodes). + + Health Insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate + a condition that warrants attention by the cluster administrator. + items: + description: ControlPlaneInsight is a unique piece of + either status/progress or update health information + produced by update informer + properties: + acquiredAt: + description: acquiredAt is the time when the data + was acquired by the producer + format: date-time + type: string + insight: + description: insight is a discriminated union of all + insights types that can be reported for the control + plane + properties: + clusterOperator: + description: |- + clusterOperator is a status insight about the state of a control plane cluster operator update + represented by a ClusterOperator resource + properties: + conditions: + description: |- + conditions provide details about the operator. It contains at most 10 items. Known conditions are: + - Updating: whether the operator is updating; When Updating=False, the reason field can be Pending or Updated + - Healthy: whether the operator is considered healthy; When Healthy=False, the reason field can be Unavailable or Degraded, and Unavailable is "stronger" than Degraded + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + name: + description: name is the name of the operator + maxLength: 64 + minLength: 1 + pattern: ^[a-z0-9-]+$ + type: string + resource: + description: resource is the ClusterOperator + resource that represents the operator + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a clusteroperators.config.openshift.io + resource + rule: self.group == 'config.openshift.io' + && self.resource == 'clusteroperators' + required: + - name + - resource + type: object + clusterVersion: + description: |- + clusterVersion is a status insight about the state of a control plane update, where + the control plane is represented by a ClusterVersion resource usually managed by CVO + properties: + assessment: + description: 'assessment is the assessment + of the control plane update process. Valid + values are: Unknown, Progressing, Completed, + Degraded' + enum: + - Unknown + - Progressing + - Completed + - Degraded + type: string + completedAt: + description: completedAt is the time when + the update completed + format: date-time + type: string + completion: + description: completion is a percentage of + the update completion (0-100) + format: int32 + maximum: 100 + minimum: 0 + type: integer + conditions: + description: |- + conditions provides detailed observed conditions about ClusterVersion. It contains at most 10 items. + Known conditions are: + - Updating: whether the control plane (represented by this ClusterVersion) is updating + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + estimatedCompletedAt: + description: estimatedCompletedAt is the estimated + time when the update will complete + format: date-time + type: string + resource: + description: resource is the ClusterVersion + resource that represents the control plane + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a clusterversions.config.openshift.io + resource + rule: self.group == 'config.openshift.io' + && self.resource == 'clusterversions' + startedAt: + description: startedAt is the time when the + update started + format: date-time + type: string + versions: + description: versions contains the original + and target versions of the upgrade + properties: + previous: + description: |- + previous is the version of the control plane before the update. When the cluster is being installed + for the first time, the version will have a placeholder value '' and carry 'Installation' metadata + properties: + metadata: + description: |- + metadata is a list of metadata associated with the version. It is a list of key-value pairs. The value is optional + and when not provided, the metadata item has boolean semantics (presence indicates true). For example, 'Partial' + metadata on a previous version indicates that the previous update was never fully completed. Can contain at most 5 items. + items: + description: |- + VersionMetadata is a key:value item assigned to version involved in the update. Value can be empty, then the metadata + have boolean semantics (true when present, false when absent) + properties: + key: + description: 'key is the name + of this metadata value. Valid + values are: Installation, + Partial, Architecture' + enum: + - Installation + - Partial + - Architecture + type: string + value: + description: |- + value is the value for the metadata, at most 32 characters long. It is not expected to be provided for Installation + and Partial metadata. For Architecture metadata, it is expected to be a string that indicates the architecture of the + payload image of the version involved in the upgrade, when relevant. + maxLength: 32 + type: string + required: + - key + type: object + maxItems: 5 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + version: + description: |- + version is a semantic version string, or a placeholder '' for the special case where this + is a "previous" version in a new installation, in which case the metadata must contain an item + with key 'Installation' + maxLength: 64 + pattern: ^()|((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + x-kubernetes-validations: + - message: previous version must be + '' iff marked with Installation + metadata + rule: 'self.version == '''' + ? (has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation'')) : + !(has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation''))' + required: + - version + type: object + x-kubernetes-validations: + - message: previous version must be '' + iff marked with Installation metadata + rule: 'self.version == '''' ? + (has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation'')) : !(has(self.metadata) + && self.metadata.exists(m, m.key == + ''Installation''))' + target: + description: target is the version of + the control plane after the update. + It may never be '' or have `Installation` + metadata + properties: + metadata: + description: |- + metadata is a list of metadata associated with the version. It is a list of key-value pairs. The value is optional + and when not provided, the metadata item has boolean semantics (presence indicates true). For example, 'Partial' + metadata on a previous version indicates that the previous update was never fully completed. Can contain at most 5 items. + items: + description: |- + VersionMetadata is a key:value item assigned to version involved in the update. Value can be empty, then the metadata + have boolean semantics (true when present, false when absent) + properties: + key: + description: 'key is the name + of this metadata value. Valid + values are: Installation, + Partial, Architecture' + enum: + - Installation + - Partial + - Architecture + type: string + value: + description: |- + value is the value for the metadata, at most 32 characters long. It is not expected to be provided for Installation + and Partial metadata. For Architecture metadata, it is expected to be a string that indicates the architecture of the + payload image of the version involved in the upgrade, when relevant. + maxLength: 32 + type: string + required: + - key + type: object + maxItems: 5 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + version: + description: |- + version is a semantic version string, or a placeholder '' for the special case where this + is a "previous" version in a new installation, in which case the metadata must contain an item + with key 'Installation' + maxLength: 64 + pattern: ^()|((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + x-kubernetes-validations: + - message: previous version must be + '' iff marked with Installation + metadata + rule: 'self.version == '''' + ? (has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation'')) : + !(has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation''))' + required: + - version + type: object + x-kubernetes-validations: + - message: target version must not be + '' or have Installation metadata + rule: self.version != '' && !(has(self.metadata) + && self.metadata.exists(m, m.key == + 'Installation')) + required: + - previous + - target + type: object + required: + - assessment + - completion + - resource + - startedAt + - versions + type: object + health: + description: |- + health is a generic health insight about the update. It does not represent a status of any specific + resource but surfaces actionable information about the health of the cluster or an update + properties: + impact: + description: impact describes the impact the + reported condition has on the cluster or + update + properties: + description: + description: |- + description is a human-oriented, possibly longer-form description of the condition reported by the insight It must + be shorter than 4096 characters. + maxLength: 4096 + type: string + level: + description: level is the severity of + the impact. Valid values are Unknown, + Info, Warning, Error, Critical. + enum: + - Unknown + - Info + - Warning + - Error + - Critical + type: string + summary: + description: summary is a short summary + of the impact. It must not be empty + and must be shorter than 256 characters. + maxLength: 256 + minLength: 1 + type: string + type: + description: |- + type is the type of the impact. Valid values are None, Unknown, API Availability, Cluster Capacity, + Application Availability, Application Outage, Data Loss, Update Speed, Update Stalled. + enum: + - None + - Unknown + - API Availability + - Cluster Capacity + - Application Availability + - Application Outage + - Data Loss + - Update Speed + - Update Stalled + type: string + required: + - level + - summary + - type + type: object + remediation: + description: remediation contains information + about how to resolve or prevent the reported + condition + properties: + estimatedFinish: + description: estimatedFinish is the estimated + time when the informer expects the condition + to be resolved, if applicable. + format: date-time + type: string + reference: + description: reference is a URL where + administrators can find information + to resolve or prevent the reported condition + maxLength: 512 + type: string + x-kubernetes-validations: + - message: reference must a valid URL + rule: isURL(self) + required: + - reference + type: object + scope: + description: scope is list of objects involved + in the insight + properties: + resources: + description: resources is a list of resources + involved in the insight, of any group/kind. + Maximum 16 resources can be listed. + items: + description: ResourceRef is a reference + to a kubernetes resource, typically + involved in an insight + properties: + group: + description: group of the object + being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of lower + case alphanumeric characters, + '-' or '.', and must start and + end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of lower + case alphanumeric characters, + '-' or '.', and must start and + end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of lower + case alphanumeric characters, + '-' or '.', and must start and + end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + maxItems: 16 + type: array + x-kubernetes-list-type: atomic + type: + description: type is either ControlPlane + or WorkerPool + enum: + - ControlPlane + - WorkerPool + type: string + required: + - type + type: object + startedAt: + description: startedAt is the time when the + condition reported by the insight started + format: date-time + type: string + required: + - impact + - remediation + - scope + - startedAt + type: object + machineConfigPool: + description: |- + machineConfigPool is a status insight about the state of a worker pool update, where the worker pool + is represented by a MachineConfigPool resource + properties: + assessment: + description: 'assessment is the assessment + of the machine config pool update process. + Valid values are: Pending, Completed, Degraded, + Excluded, Progressing' + enum: + - Pending + - Completed + - Degraded + - Excluded + - Progressing + type: string + completion: + description: completion is a percentage of + the update completion (0-100) + format: int32 + maximum: 100 + minimum: 0 + type: integer + conditions: + description: |- + conditions provide details about the machine config pool update. It contains at most 10 items. Known conditions are: + - Updating: whether the pool is updating; When Updating=False, the reason field can be Pending, Updated or Excluded + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + name: + description: name is the name of the machine + config pool + maxLength: 64 + minLength: 1 + pattern: ^[a-z0-9-]+$ + type: string + resource: + description: |- + resource is the MachineConfigPool resource that represents the pool + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + scopeType: + description: scopeType describes whether the + pool is a control plane or a worker pool + enum: + - ControlPlane + - WorkerPool + type: string + summaries: + description: summaries is a list of counts + of nodes matching certain criteria (e.g. + updated, degraded, etc.). Maximum 16 items + can be listed. + items: + description: NodeSummary is a count of nodes + matching certain criteria (e.g. updated, + degraded, etc.) + properties: + count: + description: count is the number of + nodes matching the criteria + format: int32 + maximum: 4096 + minimum: 0 + type: integer + type: + description: |- + type is the type of the summary. Valid values are: Total, Available, Progressing, Outdated, Draining, Excluded, Degraded + The summaries are not exclusive, a single node may be counted in multiple summaries. + enum: + - Total + - Available + - Progressing + - Outdated + - Draining + - Excluded + - Degraded + type: string + required: + - count + - type + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + required: + - assessment + - completion + - name + - resource + - scopeType + type: object + node: + description: |- + node is a status insight about the state of a worker node update, where the worker node is represented + by a Node resource + properties: + conditions: + description: |- + conditions provides details about the control plane update. Known conditions are: + - Updating: whether the Node is updating; When Updating=False, the reason field can be Updated, Pending, or Paused. When Updating=True, the reason field can be Draining, Updating, or Rebooting + - Available: whether the Node is available (accepting workloads) + - Degraded: whether the Node is degraded (problem observed) + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + estimatedToComplete: + description: estimatedToComplete is the estimated + time to complete the update, when known + format: duration + type: string + message: + description: message is a short human-readable + message about the node update status. It + must be shorter than 100 characters. + maxLength: 100 + type: string + name: + description: name is the name of the node + maxLength: 253 + minLength: 1 + type: string + poolResource: + description: |- + poolResource is the resource that represents the pool the node is a member of + + Note: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows + only the "correct" resource types to be referenced (here, MachineConfigPool or NodePool). However, because we use + resource references in many places and this API is intended to be consumed by clients, not produced, consistency + seems to be more valuable than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + resource: + description: |- + resource is the Node resource that represents the node + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a nodes.core.k8s.io + resource + rule: self.group == '' && self.resource + == 'nodes' + scopeType: + description: scopeType describes whether the + node belongs to control plane or a worker + pool + enum: + - ControlPlane + - WorkerPool + type: string + version: + description: version is the version of the + node, when known + maxLength: 64 + pattern: ^((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + required: + - name + - poolResource + - resource + - scopeType + type: object + type: + description: |- + type identifies the type of the update insight, one of: ClusterVersion, ClusterOperator, MachineConfigPool, Node, Health + ClusterVersion, ClusterOperator, MachineConfigPool, Node types are progress insights about a resource directly + involved in the update process + Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. + enum: + - ClusterVersion + - ClusterOperator + - MachineConfigPool + - Node + - Health + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: clusterVersion is required when type is + ClusterVersion, and forbidden otherwise + rule: 'has(self.type) && self.type == ''ClusterVersion'' + ? has(self.clusterVersion) : !has(self.clusterVersion)' + - message: clusterOperator is required when type is + ClusterOperator, and forbidden otherwise + rule: 'has(self.type) && self.type == ''ClusterOperator'' + ? has(self.clusterOperator) : !has(self.clusterOperator)' + - message: machineConfigPool is required when type + is MachineConfigPool, and forbidden otherwise + rule: 'has(self.type) && self.type == ''MachineConfigPool'' + ? has(self.machineConfigPool) : !has(self.machineConfigPool)' + - message: node is required when type is Node, and + forbidden otherwise + rule: 'has(self.type) && self.type == ''Node'' ? has(self.node) + : !has(self.node)' + - message: health is required when type is Health, + and forbidden otherwise + rule: 'has(self.type) && self.type == ''Health'' + ? has(self.health) : !has(self.health)' + uid: + description: uid identifies the insight over time + maxLength: 63 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + required: + - acquiredAt + - insight + - uid + type: object + maxItems: 128 + type: array + x-kubernetes-list-map-keys: + - uid + x-kubernetes-list-type: map + name: + description: name is the name of the insight producer + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + poolResource: + description: |- + poolResource is the resource that represents control plane node pool, typically a MachineConfigPool. This field + is optional because some form factors (like Hosted Control Planes) do not have dedicated control plane node pools, + and also because the information may be unknown temporarily. + properties: + group: + description: group of the object being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: controlPlane.poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: (self.group == 'machineconfiguration.openshift.io' && + self.resource == 'machineconfigpools') + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource == 'machineconfigpools' + && self.group == 'machineconfiguration.openshift.io' + resource: + description: |- + resource is the resource that represents the control plane. It will typically be a ClusterVersion resource + in standalone OpenShift and HostedCluster in Hosted Control Planes. This field is optional because the information + may be unknown temporarily. + properties: + group: + description: group of the object being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: controlPlane.resource must be either a clusterversions.config.openshift.io + or a hostedclusters.hypershift.openshift.io resource + rule: (self.group == 'config.openshift.io' && self.resource + == 'clusterversions') || (self.group == 'hypershift.openshift.io' + && self.resource == 'hostedclusters') + type: object + workerPools: + description: |- + workerPools contains summaries and insights related to the worker pools update. Each item in the list represents + a single worker pool and carries all insights reported for it by informers. It has at most 32 items. + so hundreds, and hypothetically more empty ones. + items: + description: Pool contains a summary and insights related to a node + pool update + properties: + conditions: + description: |- + conditions provides details about the node pool update. This is a high-level status of an abstract "pool of nodes" + concept, and will typically be the controller's interpretation / summarization of the insights it received (that + will be placed in .informers[].insights for clients that want to perform further analysis of the data). + Known condition types are: + * "Updating": Whether the pool of nodes is currently updating or not + items: + description: Condition contains details for one aspect of + the current state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, + Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + informers: + description: |- + informers is a list of insight producers. An informer is a system, internal or external to the cluster, that + produces units of information relevant to the update process, either about its progress or its health. Each + informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, + relevant to the process of updating this pool of nodes. + items: + description: |- + WorkerPoolInformer represents a system, internal or external to the cluster, that produces units of information + relevant to the update process, either about its progress or its health. Each informer is identified by a name, and + contains a list of insights it contributed to the Update Status API, relevant to a specific worker pool. + properties: + insights: + description: |- + insights is a list of insights produced by this producer. Insights are units of information relevant to an update + progress or health information. There are two types of update insights: status insights and health insights. The + first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not. + + Status Insights expose the state of a single resource that is directly involved in the update process, usually a resource + that either has a notion of "being updated," (such as a Node or ClusterOperator) or represents a higher-level + abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents + a pool of nodes). + + Health Insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate + a condition that warrants attention by the cluster administrator. + items: + description: WorkerPoolInsight is a unique piece of + either status/progress or update health information + produced by update informer + properties: + acquiredAt: + description: acquiredAt is the time when the data + was acquired by the producer + format: date-time + type: string + insight: + description: insight is a discriminated union of + all insights types that can be reported for a + worker pool + properties: + health: + description: |- + health is a generic health insight about the update. It does not represent a status of any specific + resource but surfaces actionable information about the health of the cluster or an update + properties: + impact: + description: impact describes the impact + the reported condition has on the cluster + or update + properties: + description: + description: |- + description is a human-oriented, possibly longer-form description of the condition reported by the insight It must + be shorter than 4096 characters. + maxLength: 4096 + type: string + level: + description: level is the severity of + the impact. Valid values are Unknown, + Info, Warning, Error, Critical. + enum: + - Unknown + - Info + - Warning + - Error + - Critical + type: string + summary: + description: summary is a short summary + of the impact. It must not be empty + and must be shorter than 256 characters. + maxLength: 256 + minLength: 1 + type: string + type: + description: |- + type is the type of the impact. Valid values are None, Unknown, API Availability, Cluster Capacity, + Application Availability, Application Outage, Data Loss, Update Speed, Update Stalled. + enum: + - None + - Unknown + - API Availability + - Cluster Capacity + - Application Availability + - Application Outage + - Data Loss + - Update Speed + - Update Stalled + type: string + required: + - level + - summary + - type + type: object + remediation: + description: remediation contains information + about how to resolve or prevent the reported + condition + properties: + estimatedFinish: + description: estimatedFinish is the + estimated time when the informer expects + the condition to be resolved, if applicable. + format: date-time + type: string + reference: + description: reference is a URL where + administrators can find information + to resolve or prevent the reported + condition + maxLength: 512 + type: string + x-kubernetes-validations: + - message: reference must a valid URL + rule: isURL(self) + required: + - reference + type: object + scope: + description: scope is list of objects involved + in the insight + properties: + resources: + description: resources is a list of + resources involved in the insight, + of any group/kind. Maximum 16 resources + can be listed. + items: + description: ResourceRef is a reference + to a kubernetes resource, typically + involved in an insight + properties: + group: + description: group of the object + being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of + lower case alphanumeric characters, + '-' or '.', and must start + and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of + lower case alphanumeric characters, + '-' or '.', and must start + and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the + object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of + lower case alphanumeric characters, + '-' or '.', and must start + and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + maxItems: 16 + type: array + x-kubernetes-list-type: atomic + type: + description: type is either ControlPlane + or WorkerPool + enum: + - ControlPlane + - WorkerPool + type: string + required: + - type + type: object + startedAt: + description: startedAt is the time when + the condition reported by the insight + started + format: date-time + type: string + required: + - impact + - remediation + - scope + - startedAt + type: object + machineConfigPool: + description: |- + machineConfigPool is a status insight about the state of a worker pool update, where the worker pool + is represented by a MachineConfigPool resource + properties: + assessment: + description: 'assessment is the assessment + of the machine config pool update process. + Valid values are: Pending, Completed, + Degraded, Excluded, Progressing' + enum: + - Pending + - Completed + - Degraded + - Excluded + - Progressing + type: string + completion: + description: completion is a percentage + of the update completion (0-100) + format: int32 + maximum: 100 + minimum: 0 + type: integer + conditions: + description: |- + conditions provide details about the machine config pool update. It contains at most 10 items. Known conditions are: + - Updating: whether the pool is updating; When Updating=False, the reason field can be Pending, Updated or Excluded + items: + description: Condition contains details + for one aspect of the current state + of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in + CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + name: + description: name is the name of the machine + config pool + maxLength: 64 + minLength: 1 + pattern: ^[a-z0-9-]+$ + type: string + resource: + description: |- + resource is the MachineConfigPool resource that represents the pool + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + scopeType: + description: scopeType describes whether + the pool is a control plane or a worker + pool + enum: + - ControlPlane + - WorkerPool + type: string + summaries: + description: summaries is a list of counts + of nodes matching certain criteria (e.g. + updated, degraded, etc.). Maximum 16 items + can be listed. + items: + description: NodeSummary is a count of + nodes matching certain criteria (e.g. + updated, degraded, etc.) + properties: + count: + description: count is the number of + nodes matching the criteria + format: int32 + maximum: 4096 + minimum: 0 + type: integer + type: + description: |- + type is the type of the summary. Valid values are: Total, Available, Progressing, Outdated, Draining, Excluded, Degraded + The summaries are not exclusive, a single node may be counted in multiple summaries. + enum: + - Total + - Available + - Progressing + - Outdated + - Draining + - Excluded + - Degraded + type: string + required: + - count + - type + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + required: + - assessment + - completion + - name + - resource + - scopeType + type: object + node: + description: |- + node is a status insight about the state of a worker node update, where the worker node is represented + by a Node resource + properties: + conditions: + description: |- + conditions provides details about the control plane update. Known conditions are: + - Updating: whether the Node is updating; When Updating=False, the reason field can be Updated, Pending, or Paused. When Updating=True, the reason field can be Draining, Updating, or Rebooting + - Available: whether the Node is available (accepting workloads) + - Degraded: whether the Node is degraded (problem observed) + items: + description: Condition contains details + for one aspect of the current state + of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in + CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + estimatedToComplete: + description: estimatedToComplete is the + estimated time to complete the update, + when known + format: duration + type: string + message: + description: message is a short human-readable + message about the node update status. + It must be shorter than 100 characters. + maxLength: 100 + type: string + name: + description: name is the name of the node + maxLength: 253 + minLength: 1 + type: string + poolResource: + description: |- + poolResource is the resource that represents the pool the node is a member of + + Note: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows + only the "correct" resource types to be referenced (here, MachineConfigPool or NodePool). However, because we use + resource references in many places and this API is intended to be consumed by clients, not produced, consistency + seems to be more valuable than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + resource: + description: |- + resource is the Node resource that represents the node + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a nodes.core.k8s.io + resource + rule: self.group == '' && self.resource + == 'nodes' + scopeType: + description: scopeType describes whether + the node belongs to control plane or a + worker pool + enum: + - ControlPlane + - WorkerPool + type: string + version: + description: version is the version of the + node, when known + maxLength: 64 + pattern: ^((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + required: + - name + - poolResource + - resource + - scopeType + type: object + type: + description: |- + type identifies the type of the update insight, one of: MachineConfigPool, Node, Health + MachineConfigPool, Node types are progress insights about a resource directly involved in the update process + Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. + enum: + - MachineConfigPool + - Node + - Health + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: machineConfigPool is required when type + is MachineConfigPool, and forbidden otherwise + rule: 'has(self.type) && self.type == ''MachineConfigPool'' + ? has(self.machineConfigPool) : !has(self.machineConfigPool)' + - message: node is required when type is Node, and + forbidden otherwise + rule: 'has(self.type) && self.type == ''Node'' + ? has(self.node) : !has(self.node)' + - message: health is required when type is Health, + and forbidden otherwise + rule: 'has(self.type) && self.type == ''Health'' + ? has(self.health) : !has(self.health)' + uid: + description: uid identifies the insight over time + maxLength: 63 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + required: + - acquiredAt + - insight + - uid + type: object + maxItems: 1024 + type: array + x-kubernetes-list-map-keys: + - uid + x-kubernetes-list-type: map + name: + description: name is the name of the insight producer + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist + of lower case alphanumeric characters, '-' or '.', + and must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + name: + description: name is the name of the pool, follows the same + rules as a Kubernetes resource name (RFC-1123 subdomain) + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of lower + case alphanumeric characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + resource: + description: |- + resource is the resource that represents the pool, either a MachineConfigPool in Standalone OpenShift or a NodePool + in Hosted Control Planes. + properties: + group: + description: group of the object being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: workerPools[].poolResource must be a machineconfigpools.machineconfiguration.openshift.io + or hostedclusters.hypershift.openshift.io resource + rule: (self.group == 'machineconfiguration.openshift.io' && + self.resource == 'machineconfigpools') || (self.group == + 'hypershift.openshift.io' && self.resource == 'nodepools') + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource == 'machineconfigpools' + && self.group == 'machineconfiguration.openshift.io' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: workerPools .name must match .resource.name + rule: self.name == self.resource.name + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/update/v1alpha1/zz_generated.crd-manifests/0000_00_cluster-version-operator_02_updatestatuses-TechPreviewNoUpgrade.crd.yaml b/update/v1alpha1/zz_generated.crd-manifests/0000_00_cluster-version-operator_02_updatestatuses-TechPreviewNoUpgrade.crd.yaml new file mode 100644 index 00000000000..64ee529728d --- /dev/null +++ b/update/v1alpha1/zz_generated.crd-manifests/0000_00_cluster-version-operator_02_updatestatuses-TechPreviewNoUpgrade.crd.yaml @@ -0,0 +1,2323 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/2012 + api.openshift.io/merged-by-featuregates: "true" + description: Provides health and status information about OpenShift cluster updates. + displayName: UpdateStatuses + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + release.openshift.io/feature-set: TechPreviewNoUpgrade + name: updatestatuses.update.openshift.io +spec: + group: update.openshift.io + names: + kind: UpdateStatus + listKind: UpdateStatusList + plural: updatestatuses + singular: updatestatus + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + UpdateStatus reports status for in-progress cluster version updates + + Compatibility level 4: No compatibility is provided, the API can change at any point for any reason. These capabilities should not be used by applications needing long term support. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: |- + spec is empty for now, UpdateStatus is purely status-reporting API. In the future spec may be used to hold + configuration to drive what information is surfaced and how + type: object + status: + description: status exposes the health and status of the ongoing cluster + update + properties: + conditions: + description: |- + conditions provide details about the controller operational matters, exposing whether the controller managing this + UpdateStatus is functioning well, receives insights from individual informers, and is able to interpret them and + relay them through this UpdateStatus. These condition do not communicate anything about the state of the update + itself but may indicate whether the UpdateStatus content is reliable or not. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + controlPlane: + description: controlPlane contains a summary and insights related + to the control plane update + properties: + conditions: + description: |- + conditions provides details about the control plane update. This is a high-level status of an abstract control plane + concept, and will typically be the controller's interpretation / summarization of the insights it received (that + will be placed in .informers[].insights for clients that want to perform further analysis of the data). + Known condition types are: + * "Updating": Whether the cluster control plane is currently updating or not + items: + description: Condition contains details for one aspect of the + current state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, + Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + informers: + description: |- + informers is a list of insight producers. An informer is a system, internal or external to the cluster, that + produces units of information relevant to the update process, either about its progress or its health. Each + informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, + relevant to the control plane update. Contains at most 16 items. + items: + description: |- + ControlPlaneInformer represents a system, internal or external to the cluster, that produces units of information + relevant to the update process, either about its progress or its health. Each informer is identified by a name, and + contains a list of insights it contributed to the Update Status API, relevant to the control plane update. + properties: + insights: + description: |- + insights is a list of insights produced by this producer. Insights are units of information relevant to an update + progress or health information. There are two types of update insights: status insights and health insights. The + first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not. + + Status Insights expose the state of a single resource that is directly involved in the update process, usually a resource + that either has a notion of "being updated," (such as a Node or ClusterOperator) or represents a higher-level + abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents + a pool of nodes). + + Health Insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate + a condition that warrants attention by the cluster administrator. + items: + description: ControlPlaneInsight is a unique piece of + either status/progress or update health information + produced by update informer + properties: + acquiredAt: + description: acquiredAt is the time when the data + was acquired by the producer + format: date-time + type: string + insight: + description: insight is a discriminated union of all + insights types that can be reported for the control + plane + properties: + clusterOperator: + description: |- + clusterOperator is a status insight about the state of a control plane cluster operator update + represented by a ClusterOperator resource + properties: + conditions: + description: |- + conditions provide details about the operator. It contains at most 10 items. Known conditions are: + - Updating: whether the operator is updating; When Updating=False, the reason field can be Pending or Updated + - Healthy: whether the operator is considered healthy; When Healthy=False, the reason field can be Unavailable or Degraded, and Unavailable is "stronger" than Degraded + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + name: + description: name is the name of the operator + maxLength: 64 + minLength: 1 + pattern: ^[a-z0-9-]+$ + type: string + resource: + description: resource is the ClusterOperator + resource that represents the operator + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a clusteroperators.config.openshift.io + resource + rule: self.group == 'config.openshift.io' + && self.resource == 'clusteroperators' + required: + - name + - resource + type: object + clusterVersion: + description: |- + clusterVersion is a status insight about the state of a control plane update, where + the control plane is represented by a ClusterVersion resource usually managed by CVO + properties: + assessment: + description: 'assessment is the assessment + of the control plane update process. Valid + values are: Unknown, Progressing, Completed, + Degraded' + enum: + - Unknown + - Progressing + - Completed + - Degraded + type: string + completedAt: + description: completedAt is the time when + the update completed + format: date-time + type: string + completion: + description: completion is a percentage of + the update completion (0-100) + format: int32 + maximum: 100 + minimum: 0 + type: integer + conditions: + description: |- + conditions provides detailed observed conditions about ClusterVersion. It contains at most 10 items. + Known conditions are: + - Updating: whether the control plane (represented by this ClusterVersion) is updating + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + estimatedCompletedAt: + description: estimatedCompletedAt is the estimated + time when the update will complete + format: date-time + type: string + resource: + description: resource is the ClusterVersion + resource that represents the control plane + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a clusterversions.config.openshift.io + resource + rule: self.group == 'config.openshift.io' + && self.resource == 'clusterversions' + startedAt: + description: startedAt is the time when the + update started + format: date-time + type: string + versions: + description: versions contains the original + and target versions of the upgrade + properties: + previous: + description: |- + previous is the version of the control plane before the update. When the cluster is being installed + for the first time, the version will have a placeholder value '' and carry 'Installation' metadata + properties: + metadata: + description: |- + metadata is a list of metadata associated with the version. It is a list of key-value pairs. The value is optional + and when not provided, the metadata item has boolean semantics (presence indicates true). For example, 'Partial' + metadata on a previous version indicates that the previous update was never fully completed. Can contain at most 5 items. + items: + description: |- + VersionMetadata is a key:value item assigned to version involved in the update. Value can be empty, then the metadata + have boolean semantics (true when present, false when absent) + properties: + key: + description: 'key is the name + of this metadata value. Valid + values are: Installation, + Partial, Architecture' + enum: + - Installation + - Partial + - Architecture + type: string + value: + description: |- + value is the value for the metadata, at most 32 characters long. It is not expected to be provided for Installation + and Partial metadata. For Architecture metadata, it is expected to be a string that indicates the architecture of the + payload image of the version involved in the upgrade, when relevant. + maxLength: 32 + type: string + required: + - key + type: object + maxItems: 5 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + version: + description: |- + version is a semantic version string, or a placeholder '' for the special case where this + is a "previous" version in a new installation, in which case the metadata must contain an item + with key 'Installation' + maxLength: 64 + pattern: ^()|((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + x-kubernetes-validations: + - message: previous version must be + '' iff marked with Installation + metadata + rule: 'self.version == '''' + ? (has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation'')) : + !(has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation''))' + required: + - version + type: object + x-kubernetes-validations: + - message: previous version must be '' + iff marked with Installation metadata + rule: 'self.version == '''' ? + (has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation'')) : !(has(self.metadata) + && self.metadata.exists(m, m.key == + ''Installation''))' + target: + description: target is the version of + the control plane after the update. + It may never be '' or have `Installation` + metadata + properties: + metadata: + description: |- + metadata is a list of metadata associated with the version. It is a list of key-value pairs. The value is optional + and when not provided, the metadata item has boolean semantics (presence indicates true). For example, 'Partial' + metadata on a previous version indicates that the previous update was never fully completed. Can contain at most 5 items. + items: + description: |- + VersionMetadata is a key:value item assigned to version involved in the update. Value can be empty, then the metadata + have boolean semantics (true when present, false when absent) + properties: + key: + description: 'key is the name + of this metadata value. Valid + values are: Installation, + Partial, Architecture' + enum: + - Installation + - Partial + - Architecture + type: string + value: + description: |- + value is the value for the metadata, at most 32 characters long. It is not expected to be provided for Installation + and Partial metadata. For Architecture metadata, it is expected to be a string that indicates the architecture of the + payload image of the version involved in the upgrade, when relevant. + maxLength: 32 + type: string + required: + - key + type: object + maxItems: 5 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + version: + description: |- + version is a semantic version string, or a placeholder '' for the special case where this + is a "previous" version in a new installation, in which case the metadata must contain an item + with key 'Installation' + maxLength: 64 + pattern: ^()|((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + x-kubernetes-validations: + - message: previous version must be + '' iff marked with Installation + metadata + rule: 'self.version == '''' + ? (has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation'')) : + !(has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation''))' + required: + - version + type: object + x-kubernetes-validations: + - message: target version must not be + '' or have Installation metadata + rule: self.version != '' && !(has(self.metadata) + && self.metadata.exists(m, m.key == + 'Installation')) + required: + - previous + - target + type: object + required: + - assessment + - completion + - resource + - startedAt + - versions + type: object + health: + description: |- + health is a generic health insight about the update. It does not represent a status of any specific + resource but surfaces actionable information about the health of the cluster or an update + properties: + impact: + description: impact describes the impact the + reported condition has on the cluster or + update + properties: + description: + description: |- + description is a human-oriented, possibly longer-form description of the condition reported by the insight It must + be shorter than 4096 characters. + maxLength: 4096 + type: string + level: + description: level is the severity of + the impact. Valid values are Unknown, + Info, Warning, Error, Critical. + enum: + - Unknown + - Info + - Warning + - Error + - Critical + type: string + summary: + description: summary is a short summary + of the impact. It must not be empty + and must be shorter than 256 characters. + maxLength: 256 + minLength: 1 + type: string + type: + description: |- + type is the type of the impact. Valid values are None, Unknown, API Availability, Cluster Capacity, + Application Availability, Application Outage, Data Loss, Update Speed, Update Stalled. + enum: + - None + - Unknown + - API Availability + - Cluster Capacity + - Application Availability + - Application Outage + - Data Loss + - Update Speed + - Update Stalled + type: string + required: + - level + - summary + - type + type: object + remediation: + description: remediation contains information + about how to resolve or prevent the reported + condition + properties: + estimatedFinish: + description: estimatedFinish is the estimated + time when the informer expects the condition + to be resolved, if applicable. + format: date-time + type: string + reference: + description: reference is a URL where + administrators can find information + to resolve or prevent the reported condition + maxLength: 512 + type: string + x-kubernetes-validations: + - message: reference must a valid URL + rule: isURL(self) + required: + - reference + type: object + scope: + description: scope is list of objects involved + in the insight + properties: + resources: + description: resources is a list of resources + involved in the insight, of any group/kind. + Maximum 16 resources can be listed. + items: + description: ResourceRef is a reference + to a kubernetes resource, typically + involved in an insight + properties: + group: + description: group of the object + being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of lower + case alphanumeric characters, + '-' or '.', and must start and + end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of lower + case alphanumeric characters, + '-' or '.', and must start and + end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of lower + case alphanumeric characters, + '-' or '.', and must start and + end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + maxItems: 16 + type: array + x-kubernetes-list-type: atomic + type: + description: type is either ControlPlane + or WorkerPool + enum: + - ControlPlane + - WorkerPool + type: string + required: + - type + type: object + startedAt: + description: startedAt is the time when the + condition reported by the insight started + format: date-time + type: string + required: + - impact + - remediation + - scope + - startedAt + type: object + machineConfigPool: + description: |- + machineConfigPool is a status insight about the state of a worker pool update, where the worker pool + is represented by a MachineConfigPool resource + properties: + assessment: + description: 'assessment is the assessment + of the machine config pool update process. + Valid values are: Pending, Completed, Degraded, + Excluded, Progressing' + enum: + - Pending + - Completed + - Degraded + - Excluded + - Progressing + type: string + completion: + description: completion is a percentage of + the update completion (0-100) + format: int32 + maximum: 100 + minimum: 0 + type: integer + conditions: + description: |- + conditions provide details about the machine config pool update. It contains at most 10 items. Known conditions are: + - Updating: whether the pool is updating; When Updating=False, the reason field can be Pending, Updated or Excluded + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + name: + description: name is the name of the machine + config pool + maxLength: 64 + minLength: 1 + pattern: ^[a-z0-9-]+$ + type: string + resource: + description: |- + resource is the MachineConfigPool resource that represents the pool + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + scopeType: + description: scopeType describes whether the + pool is a control plane or a worker pool + enum: + - ControlPlane + - WorkerPool + type: string + summaries: + description: summaries is a list of counts + of nodes matching certain criteria (e.g. + updated, degraded, etc.). Maximum 16 items + can be listed. + items: + description: NodeSummary is a count of nodes + matching certain criteria (e.g. updated, + degraded, etc.) + properties: + count: + description: count is the number of + nodes matching the criteria + format: int32 + maximum: 4096 + minimum: 0 + type: integer + type: + description: |- + type is the type of the summary. Valid values are: Total, Available, Progressing, Outdated, Draining, Excluded, Degraded + The summaries are not exclusive, a single node may be counted in multiple summaries. + enum: + - Total + - Available + - Progressing + - Outdated + - Draining + - Excluded + - Degraded + type: string + required: + - count + - type + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + required: + - assessment + - completion + - name + - resource + - scopeType + type: object + node: + description: |- + node is a status insight about the state of a worker node update, where the worker node is represented + by a Node resource + properties: + conditions: + description: |- + conditions provides details about the control plane update. Known conditions are: + - Updating: whether the Node is updating; When Updating=False, the reason field can be Updated, Pending, or Paused. When Updating=True, the reason field can be Draining, Updating, or Rebooting + - Available: whether the Node is available (accepting workloads) + - Degraded: whether the Node is degraded (problem observed) + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + estimatedToComplete: + description: estimatedToComplete is the estimated + time to complete the update, when known + format: duration + type: string + message: + description: message is a short human-readable + message about the node update status. It + must be shorter than 100 characters. + maxLength: 100 + type: string + name: + description: name is the name of the node + maxLength: 253 + minLength: 1 + type: string + poolResource: + description: |- + poolResource is the resource that represents the pool the node is a member of + + Note: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows + only the "correct" resource types to be referenced (here, MachineConfigPool or NodePool). However, because we use + resource references in many places and this API is intended to be consumed by clients, not produced, consistency + seems to be more valuable than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + resource: + description: |- + resource is the Node resource that represents the node + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a nodes.core.k8s.io + resource + rule: self.group == '' && self.resource + == 'nodes' + scopeType: + description: scopeType describes whether the + node belongs to control plane or a worker + pool + enum: + - ControlPlane + - WorkerPool + type: string + version: + description: version is the version of the + node, when known + maxLength: 64 + pattern: ^((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + required: + - name + - poolResource + - resource + - scopeType + type: object + type: + description: |- + type identifies the type of the update insight, one of: ClusterVersion, ClusterOperator, MachineConfigPool, Node, Health + ClusterVersion, ClusterOperator, MachineConfigPool, Node types are progress insights about a resource directly + involved in the update process + Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. + enum: + - ClusterVersion + - ClusterOperator + - MachineConfigPool + - Node + - Health + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: clusterVersion is required when type is + ClusterVersion, and forbidden otherwise + rule: 'has(self.type) && self.type == ''ClusterVersion'' + ? has(self.clusterVersion) : !has(self.clusterVersion)' + - message: clusterOperator is required when type is + ClusterOperator, and forbidden otherwise + rule: 'has(self.type) && self.type == ''ClusterOperator'' + ? has(self.clusterOperator) : !has(self.clusterOperator)' + - message: machineConfigPool is required when type + is MachineConfigPool, and forbidden otherwise + rule: 'has(self.type) && self.type == ''MachineConfigPool'' + ? has(self.machineConfigPool) : !has(self.machineConfigPool)' + - message: node is required when type is Node, and + forbidden otherwise + rule: 'has(self.type) && self.type == ''Node'' ? has(self.node) + : !has(self.node)' + - message: health is required when type is Health, + and forbidden otherwise + rule: 'has(self.type) && self.type == ''Health'' + ? has(self.health) : !has(self.health)' + uid: + description: uid identifies the insight over time + maxLength: 63 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + required: + - acquiredAt + - insight + - uid + type: object + maxItems: 128 + type: array + x-kubernetes-list-map-keys: + - uid + x-kubernetes-list-type: map + name: + description: name is the name of the insight producer + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + poolResource: + description: |- + poolResource is the resource that represents control plane node pool, typically a MachineConfigPool. This field + is optional because some form factors (like Hosted Control Planes) do not have dedicated control plane node pools, + and also because the information may be unknown temporarily. + properties: + group: + description: group of the object being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: controlPlane.poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: (self.group == 'machineconfiguration.openshift.io' && + self.resource == 'machineconfigpools') + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource == 'machineconfigpools' + && self.group == 'machineconfiguration.openshift.io' + resource: + description: |- + resource is the resource that represents the control plane. It will typically be a ClusterVersion resource + in standalone OpenShift and HostedCluster in Hosted Control Planes. This field is optional because the information + may be unknown temporarily. + properties: + group: + description: group of the object being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: controlPlane.resource must be either a clusterversions.config.openshift.io + or a hostedclusters.hypershift.openshift.io resource + rule: (self.group == 'config.openshift.io' && self.resource + == 'clusterversions') || (self.group == 'hypershift.openshift.io' + && self.resource == 'hostedclusters') + type: object + workerPools: + description: |- + workerPools contains summaries and insights related to the worker pools update. Each item in the list represents + a single worker pool and carries all insights reported for it by informers. It has at most 32 items. + so hundreds, and hypothetically more empty ones. + items: + description: Pool contains a summary and insights related to a node + pool update + properties: + conditions: + description: |- + conditions provides details about the node pool update. This is a high-level status of an abstract "pool of nodes" + concept, and will typically be the controller's interpretation / summarization of the insights it received (that + will be placed in .informers[].insights for clients that want to perform further analysis of the data). + Known condition types are: + * "Updating": Whether the pool of nodes is currently updating or not + items: + description: Condition contains details for one aspect of + the current state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, + Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + informers: + description: |- + informers is a list of insight producers. An informer is a system, internal or external to the cluster, that + produces units of information relevant to the update process, either about its progress or its health. Each + informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, + relevant to the process of updating this pool of nodes. + items: + description: |- + WorkerPoolInformer represents a system, internal or external to the cluster, that produces units of information + relevant to the update process, either about its progress or its health. Each informer is identified by a name, and + contains a list of insights it contributed to the Update Status API, relevant to a specific worker pool. + properties: + insights: + description: |- + insights is a list of insights produced by this producer. Insights are units of information relevant to an update + progress or health information. There are two types of update insights: status insights and health insights. The + first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not. + + Status Insights expose the state of a single resource that is directly involved in the update process, usually a resource + that either has a notion of "being updated," (such as a Node or ClusterOperator) or represents a higher-level + abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents + a pool of nodes). + + Health Insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate + a condition that warrants attention by the cluster administrator. + items: + description: WorkerPoolInsight is a unique piece of + either status/progress or update health information + produced by update informer + properties: + acquiredAt: + description: acquiredAt is the time when the data + was acquired by the producer + format: date-time + type: string + insight: + description: insight is a discriminated union of + all insights types that can be reported for a + worker pool + properties: + health: + description: |- + health is a generic health insight about the update. It does not represent a status of any specific + resource but surfaces actionable information about the health of the cluster or an update + properties: + impact: + description: impact describes the impact + the reported condition has on the cluster + or update + properties: + description: + description: |- + description is a human-oriented, possibly longer-form description of the condition reported by the insight It must + be shorter than 4096 characters. + maxLength: 4096 + type: string + level: + description: level is the severity of + the impact. Valid values are Unknown, + Info, Warning, Error, Critical. + enum: + - Unknown + - Info + - Warning + - Error + - Critical + type: string + summary: + description: summary is a short summary + of the impact. It must not be empty + and must be shorter than 256 characters. + maxLength: 256 + minLength: 1 + type: string + type: + description: |- + type is the type of the impact. Valid values are None, Unknown, API Availability, Cluster Capacity, + Application Availability, Application Outage, Data Loss, Update Speed, Update Stalled. + enum: + - None + - Unknown + - API Availability + - Cluster Capacity + - Application Availability + - Application Outage + - Data Loss + - Update Speed + - Update Stalled + type: string + required: + - level + - summary + - type + type: object + remediation: + description: remediation contains information + about how to resolve or prevent the reported + condition + properties: + estimatedFinish: + description: estimatedFinish is the + estimated time when the informer expects + the condition to be resolved, if applicable. + format: date-time + type: string + reference: + description: reference is a URL where + administrators can find information + to resolve or prevent the reported + condition + maxLength: 512 + type: string + x-kubernetes-validations: + - message: reference must a valid URL + rule: isURL(self) + required: + - reference + type: object + scope: + description: scope is list of objects involved + in the insight + properties: + resources: + description: resources is a list of + resources involved in the insight, + of any group/kind. Maximum 16 resources + can be listed. + items: + description: ResourceRef is a reference + to a kubernetes resource, typically + involved in an insight + properties: + group: + description: group of the object + being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of + lower case alphanumeric characters, + '-' or '.', and must start + and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of + lower case alphanumeric characters, + '-' or '.', and must start + and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the + object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of + lower case alphanumeric characters, + '-' or '.', and must start + and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + maxItems: 16 + type: array + x-kubernetes-list-type: atomic + type: + description: type is either ControlPlane + or WorkerPool + enum: + - ControlPlane + - WorkerPool + type: string + required: + - type + type: object + startedAt: + description: startedAt is the time when + the condition reported by the insight + started + format: date-time + type: string + required: + - impact + - remediation + - scope + - startedAt + type: object + machineConfigPool: + description: |- + machineConfigPool is a status insight about the state of a worker pool update, where the worker pool + is represented by a MachineConfigPool resource + properties: + assessment: + description: 'assessment is the assessment + of the machine config pool update process. + Valid values are: Pending, Completed, + Degraded, Excluded, Progressing' + enum: + - Pending + - Completed + - Degraded + - Excluded + - Progressing + type: string + completion: + description: completion is a percentage + of the update completion (0-100) + format: int32 + maximum: 100 + minimum: 0 + type: integer + conditions: + description: |- + conditions provide details about the machine config pool update. It contains at most 10 items. Known conditions are: + - Updating: whether the pool is updating; When Updating=False, the reason field can be Pending, Updated or Excluded + items: + description: Condition contains details + for one aspect of the current state + of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in + CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + name: + description: name is the name of the machine + config pool + maxLength: 64 + minLength: 1 + pattern: ^[a-z0-9-]+$ + type: string + resource: + description: |- + resource is the MachineConfigPool resource that represents the pool + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + scopeType: + description: scopeType describes whether + the pool is a control plane or a worker + pool + enum: + - ControlPlane + - WorkerPool + type: string + summaries: + description: summaries is a list of counts + of nodes matching certain criteria (e.g. + updated, degraded, etc.). Maximum 16 items + can be listed. + items: + description: NodeSummary is a count of + nodes matching certain criteria (e.g. + updated, degraded, etc.) + properties: + count: + description: count is the number of + nodes matching the criteria + format: int32 + maximum: 4096 + minimum: 0 + type: integer + type: + description: |- + type is the type of the summary. Valid values are: Total, Available, Progressing, Outdated, Draining, Excluded, Degraded + The summaries are not exclusive, a single node may be counted in multiple summaries. + enum: + - Total + - Available + - Progressing + - Outdated + - Draining + - Excluded + - Degraded + type: string + required: + - count + - type + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + required: + - assessment + - completion + - name + - resource + - scopeType + type: object + node: + description: |- + node is a status insight about the state of a worker node update, where the worker node is represented + by a Node resource + properties: + conditions: + description: |- + conditions provides details about the control plane update. Known conditions are: + - Updating: whether the Node is updating; When Updating=False, the reason field can be Updated, Pending, or Paused. When Updating=True, the reason field can be Draining, Updating, or Rebooting + - Available: whether the Node is available (accepting workloads) + - Degraded: whether the Node is degraded (problem observed) + items: + description: Condition contains details + for one aspect of the current state + of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in + CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + estimatedToComplete: + description: estimatedToComplete is the + estimated time to complete the update, + when known + format: duration + type: string + message: + description: message is a short human-readable + message about the node update status. + It must be shorter than 100 characters. + maxLength: 100 + type: string + name: + description: name is the name of the node + maxLength: 253 + minLength: 1 + type: string + poolResource: + description: |- + poolResource is the resource that represents the pool the node is a member of + + Note: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows + only the "correct" resource types to be referenced (here, MachineConfigPool or NodePool). However, because we use + resource references in many places and this API is intended to be consumed by clients, not produced, consistency + seems to be more valuable than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + resource: + description: |- + resource is the Node resource that represents the node + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a nodes.core.k8s.io + resource + rule: self.group == '' && self.resource + == 'nodes' + scopeType: + description: scopeType describes whether + the node belongs to control plane or a + worker pool + enum: + - ControlPlane + - WorkerPool + type: string + version: + description: version is the version of the + node, when known + maxLength: 64 + pattern: ^((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + required: + - name + - poolResource + - resource + - scopeType + type: object + type: + description: |- + type identifies the type of the update insight, one of: MachineConfigPool, Node, Health + MachineConfigPool, Node types are progress insights about a resource directly involved in the update process + Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. + enum: + - MachineConfigPool + - Node + - Health + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: machineConfigPool is required when type + is MachineConfigPool, and forbidden otherwise + rule: 'has(self.type) && self.type == ''MachineConfigPool'' + ? has(self.machineConfigPool) : !has(self.machineConfigPool)' + - message: node is required when type is Node, and + forbidden otherwise + rule: 'has(self.type) && self.type == ''Node'' + ? has(self.node) : !has(self.node)' + - message: health is required when type is Health, + and forbidden otherwise + rule: 'has(self.type) && self.type == ''Health'' + ? has(self.health) : !has(self.health)' + uid: + description: uid identifies the insight over time + maxLength: 63 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + required: + - acquiredAt + - insight + - uid + type: object + maxItems: 1024 + type: array + x-kubernetes-list-map-keys: + - uid + x-kubernetes-list-type: map + name: + description: name is the name of the insight producer + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist + of lower case alphanumeric characters, '-' or '.', + and must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + name: + description: name is the name of the pool, follows the same + rules as a Kubernetes resource name (RFC-1123 subdomain) + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of lower + case alphanumeric characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + resource: + description: |- + resource is the resource that represents the pool, either a MachineConfigPool in Standalone OpenShift or a NodePool + in Hosted Control Planes. + properties: + group: + description: group of the object being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: workerPools[].poolResource must be a machineconfigpools.machineconfiguration.openshift.io + or hostedclusters.hypershift.openshift.io resource + rule: (self.group == 'machineconfiguration.openshift.io' && + self.resource == 'machineconfigpools') || (self.group == + 'hypershift.openshift.io' && self.resource == 'nodepools') + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource == 'machineconfigpools' + && self.group == 'machineconfiguration.openshift.io' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: workerPools .name must match .resource.name + rule: self.name == self.resource.name + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/update/v1alpha1/zz_generated.crd-manifests/doc.go b/update/v1alpha1/zz_generated.crd-manifests/doc.go new file mode 100644 index 00000000000..0125d82de7e --- /dev/null +++ b/update/v1alpha1/zz_generated.crd-manifests/doc.go @@ -0,0 +1 @@ +package update_v1alpha1_crdmanifests diff --git a/update/v1alpha1/zz_generated.deepcopy.go b/update/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 00000000000..c6472ad07fb --- /dev/null +++ b/update/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,646 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterOperatorStatusInsight) DeepCopyInto(out *ClusterOperatorStatusInsight) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + out.Resource = in.Resource + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterOperatorStatusInsight. +func (in *ClusterOperatorStatusInsight) DeepCopy() *ClusterOperatorStatusInsight { + if in == nil { + return nil + } + out := new(ClusterOperatorStatusInsight) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ClusterVersionStatusInsight) DeepCopyInto(out *ClusterVersionStatusInsight) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + out.Resource = in.Resource + in.Versions.DeepCopyInto(&out.Versions) + in.StartedAt.DeepCopyInto(&out.StartedAt) + if in.CompletedAt != nil { + in, out := &in.CompletedAt, &out.CompletedAt + *out = (*in).DeepCopy() + } + if in.EstimatedCompletedAt != nil { + in, out := &in.EstimatedCompletedAt, &out.EstimatedCompletedAt + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClusterVersionStatusInsight. +func (in *ClusterVersionStatusInsight) DeepCopy() *ClusterVersionStatusInsight { + if in == nil { + return nil + } + out := new(ClusterVersionStatusInsight) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControlPlane) DeepCopyInto(out *ControlPlane) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Resource != nil { + in, out := &in.Resource, &out.Resource + *out = new(ResourceRef) + **out = **in + } + if in.PoolResource != nil { + in, out := &in.PoolResource, &out.PoolResource + *out = new(PoolResourceRef) + **out = **in + } + if in.Informers != nil { + in, out := &in.Informers, &out.Informers + *out = make([]ControlPlaneInformer, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControlPlane. +func (in *ControlPlane) DeepCopy() *ControlPlane { + if in == nil { + return nil + } + out := new(ControlPlane) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControlPlaneInformer) DeepCopyInto(out *ControlPlaneInformer) { + *out = *in + if in.Insights != nil { + in, out := &in.Insights, &out.Insights + *out = make([]ControlPlaneInsight, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControlPlaneInformer. +func (in *ControlPlaneInformer) DeepCopy() *ControlPlaneInformer { + if in == nil { + return nil + } + out := new(ControlPlaneInformer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControlPlaneInsight) DeepCopyInto(out *ControlPlaneInsight) { + *out = *in + in.AcquiredAt.DeepCopyInto(&out.AcquiredAt) + in.Insight.DeepCopyInto(&out.Insight) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControlPlaneInsight. +func (in *ControlPlaneInsight) DeepCopy() *ControlPlaneInsight { + if in == nil { + return nil + } + out := new(ControlPlaneInsight) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControlPlaneInsightUnion) DeepCopyInto(out *ControlPlaneInsightUnion) { + *out = *in + if in.ClusterVersionStatusInsight != nil { + in, out := &in.ClusterVersionStatusInsight, &out.ClusterVersionStatusInsight + *out = new(ClusterVersionStatusInsight) + (*in).DeepCopyInto(*out) + } + if in.ClusterOperatorStatusInsight != nil { + in, out := &in.ClusterOperatorStatusInsight, &out.ClusterOperatorStatusInsight + *out = new(ClusterOperatorStatusInsight) + (*in).DeepCopyInto(*out) + } + if in.MachineConfigPoolStatusInsight != nil { + in, out := &in.MachineConfigPoolStatusInsight, &out.MachineConfigPoolStatusInsight + *out = new(MachineConfigPoolStatusInsight) + (*in).DeepCopyInto(*out) + } + if in.NodeStatusInsight != nil { + in, out := &in.NodeStatusInsight, &out.NodeStatusInsight + *out = new(NodeStatusInsight) + (*in).DeepCopyInto(*out) + } + if in.HealthInsight != nil { + in, out := &in.HealthInsight, &out.HealthInsight + *out = new(HealthInsight) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControlPlaneInsightUnion. +func (in *ControlPlaneInsightUnion) DeepCopy() *ControlPlaneInsightUnion { + if in == nil { + return nil + } + out := new(ControlPlaneInsightUnion) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControlPlaneUpdateVersions) DeepCopyInto(out *ControlPlaneUpdateVersions) { + *out = *in + in.Previous.DeepCopyInto(&out.Previous) + in.Target.DeepCopyInto(&out.Target) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControlPlaneUpdateVersions. +func (in *ControlPlaneUpdateVersions) DeepCopy() *ControlPlaneUpdateVersions { + if in == nil { + return nil + } + out := new(ControlPlaneUpdateVersions) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *HealthInsight) DeepCopyInto(out *HealthInsight) { + *out = *in + in.StartedAt.DeepCopyInto(&out.StartedAt) + in.Scope.DeepCopyInto(&out.Scope) + out.Impact = in.Impact + in.Remediation.DeepCopyInto(&out.Remediation) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HealthInsight. +func (in *HealthInsight) DeepCopy() *HealthInsight { + if in == nil { + return nil + } + out := new(HealthInsight) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InsightImpact) DeepCopyInto(out *InsightImpact) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InsightImpact. +func (in *InsightImpact) DeepCopy() *InsightImpact { + if in == nil { + return nil + } + out := new(InsightImpact) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InsightRemediation) DeepCopyInto(out *InsightRemediation) { + *out = *in + if in.EstimatedFinish != nil { + in, out := &in.EstimatedFinish, &out.EstimatedFinish + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InsightRemediation. +func (in *InsightRemediation) DeepCopy() *InsightRemediation { + if in == nil { + return nil + } + out := new(InsightRemediation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InsightScope) DeepCopyInto(out *InsightScope) { + *out = *in + if in.Resources != nil { + in, out := &in.Resources, &out.Resources + *out = make([]ResourceRef, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InsightScope. +func (in *InsightScope) DeepCopy() *InsightScope { + if in == nil { + return nil + } + out := new(InsightScope) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineConfigPoolStatusInsight) DeepCopyInto(out *MachineConfigPoolStatusInsight) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + out.Resource = in.Resource + if in.Summaries != nil { + in, out := &in.Summaries, &out.Summaries + *out = make([]NodeSummary, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigPoolStatusInsight. +func (in *MachineConfigPoolStatusInsight) DeepCopy() *MachineConfigPoolStatusInsight { + if in == nil { + return nil + } + out := new(MachineConfigPoolStatusInsight) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodeStatusInsight) DeepCopyInto(out *NodeStatusInsight) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + out.Resource = in.Resource + out.PoolResource = in.PoolResource + if in.EstimatedToComplete != nil { + in, out := &in.EstimatedToComplete, &out.EstimatedToComplete + *out = new(v1.Duration) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeStatusInsight. +func (in *NodeStatusInsight) DeepCopy() *NodeStatusInsight { + if in == nil { + return nil + } + out := new(NodeStatusInsight) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NodeSummary) DeepCopyInto(out *NodeSummary) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeSummary. +func (in *NodeSummary) DeepCopy() *NodeSummary { + if in == nil { + return nil + } + out := new(NodeSummary) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Pool) DeepCopyInto(out *Pool) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + out.Resource = in.Resource + if in.Informers != nil { + in, out := &in.Informers, &out.Informers + *out = make([]WorkerPoolInformer, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Pool. +func (in *Pool) DeepCopy() *Pool { + if in == nil { + return nil + } + out := new(Pool) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *PoolResourceRef) DeepCopyInto(out *PoolResourceRef) { + *out = *in + out.ResourceRef = in.ResourceRef + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PoolResourceRef. +func (in *PoolResourceRef) DeepCopy() *PoolResourceRef { + if in == nil { + return nil + } + out := new(PoolResourceRef) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ResourceRef) DeepCopyInto(out *ResourceRef) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceRef. +func (in *ResourceRef) DeepCopy() *ResourceRef { + if in == nil { + return nil + } + out := new(ResourceRef) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UpdateStatus) DeepCopyInto(out *UpdateStatus) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + out.Spec = in.Spec + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UpdateStatus. +func (in *UpdateStatus) DeepCopy() *UpdateStatus { + if in == nil { + return nil + } + out := new(UpdateStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *UpdateStatus) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UpdateStatusList) DeepCopyInto(out *UpdateStatusList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]UpdateStatus, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UpdateStatusList. +func (in *UpdateStatusList) DeepCopy() *UpdateStatusList { + if in == nil { + return nil + } + out := new(UpdateStatusList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *UpdateStatusList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UpdateStatusSpec) DeepCopyInto(out *UpdateStatusSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UpdateStatusSpec. +func (in *UpdateStatusSpec) DeepCopy() *UpdateStatusSpec { + if in == nil { + return nil + } + out := new(UpdateStatusSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *UpdateStatusStatus) DeepCopyInto(out *UpdateStatusStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ControlPlane != nil { + in, out := &in.ControlPlane, &out.ControlPlane + *out = new(ControlPlane) + (*in).DeepCopyInto(*out) + } + if in.WorkerPools != nil { + in, out := &in.WorkerPools, &out.WorkerPools + *out = make([]Pool, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UpdateStatusStatus. +func (in *UpdateStatusStatus) DeepCopy() *UpdateStatusStatus { + if in == nil { + return nil + } + out := new(UpdateStatusStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Version) DeepCopyInto(out *Version) { + *out = *in + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = make([]VersionMetadata, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Version. +func (in *Version) DeepCopy() *Version { + if in == nil { + return nil + } + out := new(Version) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VersionMetadata) DeepCopyInto(out *VersionMetadata) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VersionMetadata. +func (in *VersionMetadata) DeepCopy() *VersionMetadata { + if in == nil { + return nil + } + out := new(VersionMetadata) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WorkerPoolInformer) DeepCopyInto(out *WorkerPoolInformer) { + *out = *in + if in.Insights != nil { + in, out := &in.Insights, &out.Insights + *out = make([]WorkerPoolInsight, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkerPoolInformer. +func (in *WorkerPoolInformer) DeepCopy() *WorkerPoolInformer { + if in == nil { + return nil + } + out := new(WorkerPoolInformer) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WorkerPoolInsight) DeepCopyInto(out *WorkerPoolInsight) { + *out = *in + in.AcquiredAt.DeepCopyInto(&out.AcquiredAt) + in.Insight.DeepCopyInto(&out.Insight) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkerPoolInsight. +func (in *WorkerPoolInsight) DeepCopy() *WorkerPoolInsight { + if in == nil { + return nil + } + out := new(WorkerPoolInsight) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *WorkerPoolInsightUnion) DeepCopyInto(out *WorkerPoolInsightUnion) { + *out = *in + if in.MachineConfigPoolStatusInsight != nil { + in, out := &in.MachineConfigPoolStatusInsight, &out.MachineConfigPoolStatusInsight + *out = new(MachineConfigPoolStatusInsight) + (*in).DeepCopyInto(*out) + } + if in.NodeStatusInsight != nil { + in, out := &in.NodeStatusInsight, &out.NodeStatusInsight + *out = new(NodeStatusInsight) + (*in).DeepCopyInto(*out) + } + if in.HealthInsight != nil { + in, out := &in.HealthInsight, &out.HealthInsight + *out = new(HealthInsight) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WorkerPoolInsightUnion. +func (in *WorkerPoolInsightUnion) DeepCopy() *WorkerPoolInsightUnion { + if in == nil { + return nil + } + out := new(WorkerPoolInsightUnion) + in.DeepCopyInto(out) + return out +} diff --git a/update/v1alpha1/zz_generated.featuregated-crd-manifests.yaml b/update/v1alpha1/zz_generated.featuregated-crd-manifests.yaml new file mode 100644 index 00000000000..e9b8212246c --- /dev/null +++ b/update/v1alpha1/zz_generated.featuregated-crd-manifests.yaml @@ -0,0 +1,25 @@ +updatestatuses.update.openshift.io: + Annotations: + description: Provides health and status information about OpenShift cluster updates. + displayName: UpdateStatuses + ApprovedPRNumber: https://github.com/openshift/api/pull/2012 + CRDName: updatestatuses.update.openshift.io + Capability: "" + Category: "" + FeatureGates: + - UpgradeStatus + FilenameOperatorName: cluster-version-operator + FilenameOperatorOrdering: "02" + FilenameRunLevel: "0000_00" + GroupName: update.openshift.io + HasStatus: true + KindName: UpdateStatus + Labels: {} + PluralName: updatestatuses + PrinterColumns: [] + Scope: Cluster + ShortNames: null + TopLevelFeatureGates: + - UpgradeStatus + Version: v1alpha1 + diff --git a/update/v1alpha1/zz_generated.featuregated-crd-manifests/updatestatuses.update.openshift.io/UpgradeStatus.yaml b/update/v1alpha1/zz_generated.featuregated-crd-manifests/updatestatuses.update.openshift.io/UpgradeStatus.yaml new file mode 100644 index 00000000000..31d9babe191 --- /dev/null +++ b/update/v1alpha1/zz_generated.featuregated-crd-manifests/updatestatuses.update.openshift.io/UpgradeStatus.yaml @@ -0,0 +1,2323 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/2012 + api.openshift.io/filename-cvo-runlevel: "0000_00" + api.openshift.io/filename-operator: cluster-version-operator + api.openshift.io/filename-ordering: "02" + description: Provides health and status information about OpenShift cluster updates. + displayName: UpdateStatuses + feature-gate.release.openshift.io/UpgradeStatus: "true" + name: updatestatuses.update.openshift.io +spec: + group: update.openshift.io + names: + kind: UpdateStatus + listKind: UpdateStatusList + plural: updatestatuses + singular: updatestatus + scope: Cluster + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: |- + UpdateStatus reports status for in-progress cluster version updates + + Compatibility level 4: No compatibility is provided, the API can change at any point for any reason. These capabilities should not be used by applications needing long term support. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: |- + spec is empty for now, UpdateStatus is purely status-reporting API. In the future spec may be used to hold + configuration to drive what information is surfaced and how + type: object + status: + description: status exposes the health and status of the ongoing cluster + update + properties: + conditions: + description: |- + conditions provide details about the controller operational matters, exposing whether the controller managing this + UpdateStatus is functioning well, receives insights from individual informers, and is able to interpret them and + relay them through this UpdateStatus. These condition do not communicate anything about the state of the update + itself but may indicate whether the UpdateStatus content is reliable or not. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + controlPlane: + description: controlPlane contains a summary and insights related + to the control plane update + properties: + conditions: + description: |- + conditions provides details about the control plane update. This is a high-level status of an abstract control plane + concept, and will typically be the controller's interpretation / summarization of the insights it received (that + will be placed in .informers[].insights for clients that want to perform further analysis of the data). + Known condition types are: + * "Updating": Whether the cluster control plane is currently updating or not + items: + description: Condition contains details for one aspect of the + current state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, + Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + informers: + description: |- + informers is a list of insight producers. An informer is a system, internal or external to the cluster, that + produces units of information relevant to the update process, either about its progress or its health. Each + informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, + relevant to the control plane update. Contains at most 16 items. + items: + description: |- + ControlPlaneInformer represents a system, internal or external to the cluster, that produces units of information + relevant to the update process, either about its progress or its health. Each informer is identified by a name, and + contains a list of insights it contributed to the Update Status API, relevant to the control plane update. + properties: + insights: + description: |- + insights is a list of insights produced by this producer. Insights are units of information relevant to an update + progress or health information. There are two types of update insights: status insights and health insights. The + first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not. + + Status Insights expose the state of a single resource that is directly involved in the update process, usually a resource + that either has a notion of "being updated," (such as a Node or ClusterOperator) or represents a higher-level + abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents + a pool of nodes). + + Health Insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate + a condition that warrants attention by the cluster administrator. + items: + description: ControlPlaneInsight is a unique piece of + either status/progress or update health information + produced by update informer + properties: + acquiredAt: + description: acquiredAt is the time when the data + was acquired by the producer + format: date-time + type: string + insight: + description: insight is a discriminated union of all + insights types that can be reported for the control + plane + properties: + clusterOperator: + description: |- + clusterOperator is a status insight about the state of a control plane cluster operator update + represented by a ClusterOperator resource + properties: + conditions: + description: |- + conditions provide details about the operator. It contains at most 10 items. Known conditions are: + - Updating: whether the operator is updating; When Updating=False, the reason field can be Pending or Updated + - Healthy: whether the operator is considered healthy; When Healthy=False, the reason field can be Unavailable or Degraded, and Unavailable is "stronger" than Degraded + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + name: + description: name is the name of the operator + maxLength: 64 + minLength: 1 + pattern: ^[a-z0-9-]+$ + type: string + resource: + description: resource is the ClusterOperator + resource that represents the operator + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a clusteroperators.config.openshift.io + resource + rule: self.group == 'config.openshift.io' + && self.resource == 'clusteroperators' + required: + - name + - resource + type: object + clusterVersion: + description: |- + clusterVersion is a status insight about the state of a control plane update, where + the control plane is represented by a ClusterVersion resource usually managed by CVO + properties: + assessment: + description: 'assessment is the assessment + of the control plane update process. Valid + values are: Unknown, Progressing, Completed, + Degraded' + enum: + - Unknown + - Progressing + - Completed + - Degraded + type: string + completedAt: + description: completedAt is the time when + the update completed + format: date-time + type: string + completion: + description: completion is a percentage of + the update completion (0-100) + format: int32 + maximum: 100 + minimum: 0 + type: integer + conditions: + description: |- + conditions provides detailed observed conditions about ClusterVersion. It contains at most 10 items. + Known conditions are: + - Updating: whether the control plane (represented by this ClusterVersion) is updating + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + estimatedCompletedAt: + description: estimatedCompletedAt is the estimated + time when the update will complete + format: date-time + type: string + resource: + description: resource is the ClusterVersion + resource that represents the control plane + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a clusterversions.config.openshift.io + resource + rule: self.group == 'config.openshift.io' + && self.resource == 'clusterversions' + startedAt: + description: startedAt is the time when the + update started + format: date-time + type: string + versions: + description: versions contains the original + and target versions of the upgrade + properties: + previous: + description: |- + previous is the version of the control plane before the update. When the cluster is being installed + for the first time, the version will have a placeholder value '' and carry 'Installation' metadata + properties: + metadata: + description: |- + metadata is a list of metadata associated with the version. It is a list of key-value pairs. The value is optional + and when not provided, the metadata item has boolean semantics (presence indicates true). For example, 'Partial' + metadata on a previous version indicates that the previous update was never fully completed. Can contain at most 5 items. + items: + description: |- + VersionMetadata is a key:value item assigned to version involved in the update. Value can be empty, then the metadata + have boolean semantics (true when present, false when absent) + properties: + key: + description: 'key is the name + of this metadata value. Valid + values are: Installation, + Partial, Architecture' + enum: + - Installation + - Partial + - Architecture + type: string + value: + description: |- + value is the value for the metadata, at most 32 characters long. It is not expected to be provided for Installation + and Partial metadata. For Architecture metadata, it is expected to be a string that indicates the architecture of the + payload image of the version involved in the upgrade, when relevant. + maxLength: 32 + type: string + required: + - key + type: object + maxItems: 5 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + version: + description: |- + version is a semantic version string, or a placeholder '' for the special case where this + is a "previous" version in a new installation, in which case the metadata must contain an item + with key 'Installation' + maxLength: 64 + pattern: ^()|((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + x-kubernetes-validations: + - message: previous version must be + '' iff marked with Installation + metadata + rule: 'self.version == '''' + ? (has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation'')) : + !(has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation''))' + required: + - version + type: object + x-kubernetes-validations: + - message: previous version must be '' + iff marked with Installation metadata + rule: 'self.version == '''' ? + (has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation'')) : !(has(self.metadata) + && self.metadata.exists(m, m.key == + ''Installation''))' + target: + description: target is the version of + the control plane after the update. + It may never be '' or have `Installation` + metadata + properties: + metadata: + description: |- + metadata is a list of metadata associated with the version. It is a list of key-value pairs. The value is optional + and when not provided, the metadata item has boolean semantics (presence indicates true). For example, 'Partial' + metadata on a previous version indicates that the previous update was never fully completed. Can contain at most 5 items. + items: + description: |- + VersionMetadata is a key:value item assigned to version involved in the update. Value can be empty, then the metadata + have boolean semantics (true when present, false when absent) + properties: + key: + description: 'key is the name + of this metadata value. Valid + values are: Installation, + Partial, Architecture' + enum: + - Installation + - Partial + - Architecture + type: string + value: + description: |- + value is the value for the metadata, at most 32 characters long. It is not expected to be provided for Installation + and Partial metadata. For Architecture metadata, it is expected to be a string that indicates the architecture of the + payload image of the version involved in the upgrade, when relevant. + maxLength: 32 + type: string + required: + - key + type: object + maxItems: 5 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + version: + description: |- + version is a semantic version string, or a placeholder '' for the special case where this + is a "previous" version in a new installation, in which case the metadata must contain an item + with key 'Installation' + maxLength: 64 + pattern: ^()|((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + x-kubernetes-validations: + - message: previous version must be + '' iff marked with Installation + metadata + rule: 'self.version == '''' + ? (has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation'')) : + !(has(self.metadata) && self.metadata.exists(m, + m.key == ''Installation''))' + required: + - version + type: object + x-kubernetes-validations: + - message: target version must not be + '' or have Installation metadata + rule: self.version != '' && !(has(self.metadata) + && self.metadata.exists(m, m.key == + 'Installation')) + required: + - previous + - target + type: object + required: + - assessment + - completion + - resource + - startedAt + - versions + type: object + health: + description: |- + health is a generic health insight about the update. It does not represent a status of any specific + resource but surfaces actionable information about the health of the cluster or an update + properties: + impact: + description: impact describes the impact the + reported condition has on the cluster or + update + properties: + description: + description: |- + description is a human-oriented, possibly longer-form description of the condition reported by the insight It must + be shorter than 4096 characters. + maxLength: 4096 + type: string + level: + description: level is the severity of + the impact. Valid values are Unknown, + Info, Warning, Error, Critical. + enum: + - Unknown + - Info + - Warning + - Error + - Critical + type: string + summary: + description: summary is a short summary + of the impact. It must not be empty + and must be shorter than 256 characters. + maxLength: 256 + minLength: 1 + type: string + type: + description: |- + type is the type of the impact. Valid values are None, Unknown, API Availability, Cluster Capacity, + Application Availability, Application Outage, Data Loss, Update Speed, Update Stalled. + enum: + - None + - Unknown + - API Availability + - Cluster Capacity + - Application Availability + - Application Outage + - Data Loss + - Update Speed + - Update Stalled + type: string + required: + - level + - summary + - type + type: object + remediation: + description: remediation contains information + about how to resolve or prevent the reported + condition + properties: + estimatedFinish: + description: estimatedFinish is the estimated + time when the informer expects the condition + to be resolved, if applicable. + format: date-time + type: string + reference: + description: reference is a URL where + administrators can find information + to resolve or prevent the reported condition + maxLength: 512 + type: string + x-kubernetes-validations: + - message: reference must a valid URL + rule: isURL(self) + required: + - reference + type: object + scope: + description: scope is list of objects involved + in the insight + properties: + resources: + description: resources is a list of resources + involved in the insight, of any group/kind. + Maximum 16 resources can be listed. + items: + description: ResourceRef is a reference + to a kubernetes resource, typically + involved in an insight + properties: + group: + description: group of the object + being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of lower + case alphanumeric characters, + '-' or '.', and must start and + end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of lower + case alphanumeric characters, + '-' or '.', and must start and + end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of lower + case alphanumeric characters, + '-' or '.', and must start and + end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + maxItems: 16 + type: array + x-kubernetes-list-type: atomic + type: + description: type is either ControlPlane + or WorkerPool + enum: + - ControlPlane + - WorkerPool + type: string + required: + - type + type: object + startedAt: + description: startedAt is the time when the + condition reported by the insight started + format: date-time + type: string + required: + - impact + - remediation + - scope + - startedAt + type: object + machineConfigPool: + description: |- + machineConfigPool is a status insight about the state of a worker pool update, where the worker pool + is represented by a MachineConfigPool resource + properties: + assessment: + description: 'assessment is the assessment + of the machine config pool update process. + Valid values are: Pending, Completed, Degraded, + Excluded, Progressing' + enum: + - Pending + - Completed + - Degraded + - Excluded + - Progressing + type: string + completion: + description: completion is a percentage of + the update completion (0-100) + format: int32 + maximum: 100 + minimum: 0 + type: integer + conditions: + description: |- + conditions provide details about the machine config pool update. It contains at most 10 items. Known conditions are: + - Updating: whether the pool is updating; When Updating=False, the reason field can be Pending, Updated or Excluded + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + name: + description: name is the name of the machine + config pool + maxLength: 64 + minLength: 1 + pattern: ^[a-z0-9-]+$ + type: string + resource: + description: |- + resource is the MachineConfigPool resource that represents the pool + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + scopeType: + description: scopeType describes whether the + pool is a control plane or a worker pool + enum: + - ControlPlane + - WorkerPool + type: string + summaries: + description: summaries is a list of counts + of nodes matching certain criteria (e.g. + updated, degraded, etc.). Maximum 16 items + can be listed. + items: + description: NodeSummary is a count of nodes + matching certain criteria (e.g. updated, + degraded, etc.) + properties: + count: + description: count is the number of + nodes matching the criteria + format: int32 + maximum: 4096 + minimum: 0 + type: integer + type: + description: |- + type is the type of the summary. Valid values are: Total, Available, Progressing, Outdated, Draining, Excluded, Degraded + The summaries are not exclusive, a single node may be counted in multiple summaries. + enum: + - Total + - Available + - Progressing + - Outdated + - Draining + - Excluded + - Degraded + type: string + required: + - count + - type + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + required: + - assessment + - completion + - name + - resource + - scopeType + type: object + node: + description: |- + node is a status insight about the state of a worker node update, where the worker node is represented + by a Node resource + properties: + conditions: + description: |- + conditions provides details about the control plane update. Known conditions are: + - Updating: whether the Node is updating; When Updating=False, the reason field can be Updated, Pending, or Paused. When Updating=True, the reason field can be Draining, Updating, or Rebooting + - Available: whether the Node is available (accepting workloads) + - Degraded: whether the Node is degraded (problem observed) + items: + description: Condition contains details + for one aspect of the current state of + this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase + or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + estimatedToComplete: + description: estimatedToComplete is the estimated + time to complete the update, when known + format: duration + type: string + message: + description: message is a short human-readable + message about the node update status. It + must be shorter than 100 characters. + maxLength: 100 + type: string + name: + description: name is the name of the node + maxLength: 253 + minLength: 1 + type: string + poolResource: + description: |- + poolResource is the resource that represents the pool the node is a member of + + Note: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows + only the "correct" resource types to be referenced (here, MachineConfigPool or NodePool). However, because we use + resource references in many places and this API is intended to be consumed by clients, not produced, consistency + seems to be more valuable than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + resource: + description: |- + resource is the Node resource that represents the node + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being + referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a nodes.core.k8s.io + resource + rule: self.group == '' && self.resource + == 'nodes' + scopeType: + description: scopeType describes whether the + node belongs to control plane or a worker + pool + enum: + - ControlPlane + - WorkerPool + type: string + version: + description: version is the version of the + node, when known + maxLength: 64 + pattern: ^((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + required: + - name + - poolResource + - resource + - scopeType + type: object + type: + description: |- + type identifies the type of the update insight, one of: ClusterVersion, ClusterOperator, MachineConfigPool, Node, Health + ClusterVersion, ClusterOperator, MachineConfigPool, Node types are progress insights about a resource directly + involved in the update process + Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. + enum: + - ClusterVersion + - ClusterOperator + - MachineConfigPool + - Node + - Health + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: clusterVersion is required when type is + ClusterVersion, and forbidden otherwise + rule: 'has(self.type) && self.type == ''ClusterVersion'' + ? has(self.clusterVersion) : !has(self.clusterVersion)' + - message: clusterOperator is required when type is + ClusterOperator, and forbidden otherwise + rule: 'has(self.type) && self.type == ''ClusterOperator'' + ? has(self.clusterOperator) : !has(self.clusterOperator)' + - message: machineConfigPool is required when type + is MachineConfigPool, and forbidden otherwise + rule: 'has(self.type) && self.type == ''MachineConfigPool'' + ? has(self.machineConfigPool) : !has(self.machineConfigPool)' + - message: node is required when type is Node, and + forbidden otherwise + rule: 'has(self.type) && self.type == ''Node'' ? has(self.node) + : !has(self.node)' + - message: health is required when type is Health, + and forbidden otherwise + rule: 'has(self.type) && self.type == ''Health'' + ? has(self.health) : !has(self.health)' + uid: + description: uid identifies the insight over time + maxLength: 63 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + required: + - acquiredAt + - insight + - uid + type: object + maxItems: 128 + type: array + x-kubernetes-list-map-keys: + - uid + x-kubernetes-list-type: map + name: + description: name is the name of the insight producer + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + poolResource: + description: |- + poolResource is the resource that represents control plane node pool, typically a MachineConfigPool. This field + is optional because some form factors (like Hosted Control Planes) do not have dedicated control plane node pools, + and also because the information may be unknown temporarily. + properties: + group: + description: group of the object being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: controlPlane.poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: (self.group == 'machineconfiguration.openshift.io' && + self.resource == 'machineconfigpools') + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource == 'machineconfigpools' + && self.group == 'machineconfiguration.openshift.io' + resource: + description: |- + resource is the resource that represents the control plane. It will typically be a ClusterVersion resource + in standalone OpenShift and HostedCluster in Hosted Control Planes. This field is optional because the information + may be unknown temporarily. + properties: + group: + description: group of the object being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and must + start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: controlPlane.resource must be either a clusterversions.config.openshift.io + or a hostedclusters.hypershift.openshift.io resource + rule: (self.group == 'config.openshift.io' && self.resource + == 'clusterversions') || (self.group == 'hypershift.openshift.io' + && self.resource == 'hostedclusters') + type: object + workerPools: + description: |- + workerPools contains summaries and insights related to the worker pools update. Each item in the list represents + a single worker pool and carries all insights reported for it by informers. It has at most 32 items. + so hundreds, and hypothetically more empty ones. + items: + description: Pool contains a summary and insights related to a node + pool update + properties: + conditions: + description: |- + conditions provides details about the node pool update. This is a high-level status of an abstract "pool of nodes" + concept, and will typically be the controller's interpretation / summarization of the insights it received (that + will be placed in .informers[].insights for clients that want to perform further analysis of the data). + Known condition types are: + * "Updating": Whether the pool of nodes is currently updating or not + items: + description: Condition contains details for one aspect of + the current state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, + Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + informers: + description: |- + informers is a list of insight producers. An informer is a system, internal or external to the cluster, that + produces units of information relevant to the update process, either about its progress or its health. Each + informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, + relevant to the process of updating this pool of nodes. + items: + description: |- + WorkerPoolInformer represents a system, internal or external to the cluster, that produces units of information + relevant to the update process, either about its progress or its health. Each informer is identified by a name, and + contains a list of insights it contributed to the Update Status API, relevant to a specific worker pool. + properties: + insights: + description: |- + insights is a list of insights produced by this producer. Insights are units of information relevant to an update + progress or health information. There are two types of update insights: status insights and health insights. The + first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not. + + Status Insights expose the state of a single resource that is directly involved in the update process, usually a resource + that either has a notion of "being updated," (such as a Node or ClusterOperator) or represents a higher-level + abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents + a pool of nodes). + + Health Insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate + a condition that warrants attention by the cluster administrator. + items: + description: WorkerPoolInsight is a unique piece of + either status/progress or update health information + produced by update informer + properties: + acquiredAt: + description: acquiredAt is the time when the data + was acquired by the producer + format: date-time + type: string + insight: + description: insight is a discriminated union of + all insights types that can be reported for a + worker pool + properties: + health: + description: |- + health is a generic health insight about the update. It does not represent a status of any specific + resource but surfaces actionable information about the health of the cluster or an update + properties: + impact: + description: impact describes the impact + the reported condition has on the cluster + or update + properties: + description: + description: |- + description is a human-oriented, possibly longer-form description of the condition reported by the insight It must + be shorter than 4096 characters. + maxLength: 4096 + type: string + level: + description: level is the severity of + the impact. Valid values are Unknown, + Info, Warning, Error, Critical. + enum: + - Unknown + - Info + - Warning + - Error + - Critical + type: string + summary: + description: summary is a short summary + of the impact. It must not be empty + and must be shorter than 256 characters. + maxLength: 256 + minLength: 1 + type: string + type: + description: |- + type is the type of the impact. Valid values are None, Unknown, API Availability, Cluster Capacity, + Application Availability, Application Outage, Data Loss, Update Speed, Update Stalled. + enum: + - None + - Unknown + - API Availability + - Cluster Capacity + - Application Availability + - Application Outage + - Data Loss + - Update Speed + - Update Stalled + type: string + required: + - level + - summary + - type + type: object + remediation: + description: remediation contains information + about how to resolve or prevent the reported + condition + properties: + estimatedFinish: + description: estimatedFinish is the + estimated time when the informer expects + the condition to be resolved, if applicable. + format: date-time + type: string + reference: + description: reference is a URL where + administrators can find information + to resolve or prevent the reported + condition + maxLength: 512 + type: string + x-kubernetes-validations: + - message: reference must a valid URL + rule: isURL(self) + required: + - reference + type: object + scope: + description: scope is list of objects involved + in the insight + properties: + resources: + description: resources is a list of + resources involved in the insight, + of any group/kind. Maximum 16 resources + can be listed. + items: + description: ResourceRef is a reference + to a kubernetes resource, typically + involved in an insight + properties: + group: + description: group of the object + being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of + lower case alphanumeric characters, + '-' or '.', and must start + and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of + lower case alphanumeric characters, + '-' or '.', and must start + and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the + object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object + being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 + subdomain must consist of + lower case alphanumeric characters, + '-' or '.', and must start + and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + maxItems: 16 + type: array + x-kubernetes-list-type: atomic + type: + description: type is either ControlPlane + or WorkerPool + enum: + - ControlPlane + - WorkerPool + type: string + required: + - type + type: object + startedAt: + description: startedAt is the time when + the condition reported by the insight + started + format: date-time + type: string + required: + - impact + - remediation + - scope + - startedAt + type: object + machineConfigPool: + description: |- + machineConfigPool is a status insight about the state of a worker pool update, where the worker pool + is represented by a MachineConfigPool resource + properties: + assessment: + description: 'assessment is the assessment + of the machine config pool update process. + Valid values are: Pending, Completed, + Degraded, Excluded, Progressing' + enum: + - Pending + - Completed + - Degraded + - Excluded + - Progressing + type: string + completion: + description: completion is a percentage + of the update completion (0-100) + format: int32 + maximum: 100 + minimum: 0 + type: integer + conditions: + description: |- + conditions provide details about the machine config pool update. It contains at most 10 items. Known conditions are: + - Updating: whether the pool is updating; When Updating=False, the reason field can be Pending, Updated or Excluded + items: + description: Condition contains details + for one aspect of the current state + of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in + CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + name: + description: name is the name of the machine + config pool + maxLength: 64 + minLength: 1 + pattern: ^[a-z0-9-]+$ + type: string + resource: + description: |- + resource is the MachineConfigPool resource that represents the pool + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + scopeType: + description: scopeType describes whether + the pool is a control plane or a worker + pool + enum: + - ControlPlane + - WorkerPool + type: string + summaries: + description: summaries is a list of counts + of nodes matching certain criteria (e.g. + updated, degraded, etc.). Maximum 16 items + can be listed. + items: + description: NodeSummary is a count of + nodes matching certain criteria (e.g. + updated, degraded, etc.) + properties: + count: + description: count is the number of + nodes matching the criteria + format: int32 + maximum: 4096 + minimum: 0 + type: integer + type: + description: |- + type is the type of the summary. Valid values are: Total, Available, Progressing, Outdated, Draining, Excluded, Degraded + The summaries are not exclusive, a single node may be counted in multiple summaries. + enum: + - Total + - Available + - Progressing + - Outdated + - Draining + - Excluded + - Degraded + type: string + required: + - count + - type + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + required: + - assessment + - completion + - name + - resource + - scopeType + type: object + node: + description: |- + node is a status insight about the state of a worker node update, where the worker node is represented + by a Node resource + properties: + conditions: + description: |- + conditions provides details about the control plane update. Known conditions are: + - Updating: whether the Node is updating; When Updating=False, the reason field can be Updated, Pending, or Paused. When Updating=True, the reason field can be Draining, Updating, or Rebooting + - Available: whether the Node is available (accepting workloads) + - Degraded: whether the Node is degraded (problem observed) + items: + description: Condition contains details + for one aspect of the current state + of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, + one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in + CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + estimatedToComplete: + description: estimatedToComplete is the + estimated time to complete the update, + when known + format: duration + type: string + message: + description: message is a short human-readable + message about the node update status. + It must be shorter than 100 characters. + maxLength: 100 + type: string + name: + description: name is the name of the node + maxLength: 253 + minLength: 1 + type: string + poolResource: + description: |- + poolResource is the resource that represents the pool the node is a member of + + Note: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows + only the "correct" resource types to be referenced (here, MachineConfigPool or NodePool). However, because we use + resource references in many places and this API is intended to be consumed by clients, not produced, consistency + seems to be more valuable than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: self.group == 'machineconfiguration.openshift.io' + && self.resource == 'machineconfigpools' + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource + == 'machineconfigpools' && self.group + == 'machineconfiguration.openshift.io' + resource: + description: |- + resource is the Node resource that represents the node + + Note: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to + resource name (because the rest is implied by status insight type). However, because we use resource references in + many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable + than type safety for producers. + properties: + group: + description: group of the object being + referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object + being referenced, if any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being + referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain + must consist of lower case alphanumeric + characters, '-' or '.', and must + start and end with an alphanumeric + character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: resource must be a nodes.core.k8s.io + resource + rule: self.group == '' && self.resource + == 'nodes' + scopeType: + description: scopeType describes whether + the node belongs to control plane or a + worker pool + enum: + - ControlPlane + - WorkerPool + type: string + version: + description: version is the version of the + node, when known + maxLength: 64 + pattern: ^((?:0|[1-9]\d*)[.](?:0|[1-9]\d*)[.](?:0|[1-9]\d*)(?:-(?:(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:[.](?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?)?$ + type: string + required: + - name + - poolResource + - resource + - scopeType + type: object + type: + description: |- + type identifies the type of the update insight, one of: MachineConfigPool, Node, Health + MachineConfigPool, Node types are progress insights about a resource directly involved in the update process + Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is + affected by the update. + enum: + - MachineConfigPool + - Node + - Health + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: machineConfigPool is required when type + is MachineConfigPool, and forbidden otherwise + rule: 'has(self.type) && self.type == ''MachineConfigPool'' + ? has(self.machineConfigPool) : !has(self.machineConfigPool)' + - message: node is required when type is Node, and + forbidden otherwise + rule: 'has(self.type) && self.type == ''Node'' + ? has(self.node) : !has(self.node)' + - message: health is required when type is Health, + and forbidden otherwise + rule: 'has(self.type) && self.type == ''Health'' + ? has(self.health) : !has(self.health)' + uid: + description: uid identifies the insight over time + maxLength: 63 + minLength: 1 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + required: + - acquiredAt + - insight + - uid + type: object + maxItems: 1024 + type: array + x-kubernetes-list-map-keys: + - uid + x-kubernetes-list-type: map + name: + description: name is the name of the insight producer + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist + of lower case alphanumeric characters, '-' or '.', + and must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + type: object + maxItems: 16 + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + name: + description: name is the name of the pool, follows the same + rules as a Kubernetes resource name (RFC-1123 subdomain) + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of lower + case alphanumeric characters, '-' or '.', and must start + and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + resource: + description: |- + resource is the resource that represents the pool, either a MachineConfigPool in Standalone OpenShift or a NodePool + in Hosted Control Planes. + properties: + group: + description: group of the object being referenced, if any + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + name: + description: name of the object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + namespace: + description: namespace of the object being referenced, if + any + maxLength: 253 + pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ + type: string + resource: + description: resource of object being referenced + maxLength: 253 + type: string + x-kubernetes-validations: + - message: a lowercase RFC 1123 subdomain must consist of + lower case alphanumeric characters, '-' or '.', and + must start and end with an alphanumeric character. + rule: '!format.dns1123Subdomain().validate(self).hasValue()' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: workerPools[].poolResource must be a machineconfigpools.machineconfiguration.openshift.io + or hostedclusters.hypershift.openshift.io resource + rule: (self.group == 'machineconfiguration.openshift.io' && + self.resource == 'machineconfigpools') || (self.group == + 'hypershift.openshift.io' && self.resource == 'nodepools') + - message: a poolResource must be a machineconfigpools.machineconfiguration.openshift.io + resource + rule: has(self.resource) && (self.resource == 'machineconfigpools' + && self.group == 'machineconfiguration.openshift.io' + required: + - name + - resource + type: object + x-kubernetes-validations: + - message: workerPools .name must match .resource.name + rule: self.name == self.resource.name + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: object + required: + - spec + type: object + served: true + storage: true + subresources: + status: {} diff --git a/update/v1alpha1/zz_generated.swagger_doc_generated.go b/update/v1alpha1/zz_generated.swagger_doc_generated.go new file mode 100644 index 00000000000..641531d0ceb --- /dev/null +++ b/update/v1alpha1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,308 @@ +package v1alpha1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_ControlPlane = map[string]string{ + "": "ControlPlane contains a summary and insights related to the control plane update.", + "conditions": "conditions provides details about the control plane update. This is a high-level status of an abstract control plane concept, and will typically be the controller's interpretation / summarization of the insights it received (that will be placed in .informers[].insights for clients that want to perform further analysis of the data). Known condition types are: * \"Updating\": Whether the cluster control plane is currently updating or not", + "resource": "resource is the resource that represents the control plane. It will typically be a ClusterVersion resource in standalone OpenShift and HostedCluster in Hosted Control Planes. This field is optional because the information may be unknown temporarily.", + "poolResource": "poolResource is the resource that represents control plane node pool, typically a MachineConfigPool. This field is optional because some form factors (like Hosted Control Planes) do not have dedicated control plane node pools, and also because the information may be unknown temporarily.", + "informers": "informers is a list of insight producers. An informer is a system, internal or external to the cluster, that produces units of information relevant to the update process, either about its progress or its health. Each informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, relevant to the control plane update. Contains at most 16 items.", +} + +func (ControlPlane) SwaggerDoc() map[string]string { + return map_ControlPlane +} + +var map_ControlPlaneInformer = map[string]string{ + "": "ControlPlaneInformer represents a system, internal or external to the cluster, that produces units of information relevant to the update process, either about its progress or its health. Each informer is identified by a name, and contains a list of insights it contributed to the Update Status API, relevant to the control plane update.", + "name": "name is the name of the insight producer", + "insights": "insights is a list of insights produced by this producer. Insights are units of information relevant to an update progress or health information. There are two types of update insights: status insights and health insights. The first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not.\n\nStatus Insights expose the state of a single resource that is directly involved in the update process, usually a resource that either has a notion of \"being updated,\" (such as a Node or ClusterOperator) or represents a higher-level abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents a pool of nodes).\n\nHealth Insights report a state or condition in the cluster that is abnormal or negative and either affects or is affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate a condition that warrants attention by the cluster administrator.", +} + +func (ControlPlaneInformer) SwaggerDoc() map[string]string { + return map_ControlPlaneInformer +} + +var map_ControlPlaneInsight = map[string]string{ + "": "ControlPlaneInsight is a unique piece of either status/progress or update health information produced by update informer", + "uid": "uid identifies the insight over time", + "acquiredAt": "acquiredAt is the time when the data was acquired by the producer", + "insight": "insight is a discriminated union of all insights types that can be reported for the control plane", +} + +func (ControlPlaneInsight) SwaggerDoc() map[string]string { + return map_ControlPlaneInsight +} + +var map_ControlPlaneInsightUnion = map[string]string{ + "": "ControlPlaneInsightUnion is the discriminated union of all insights types that can be reported for the control plane, identified by type field", + "type": "type identifies the type of the update insight, one of: ClusterVersion, ClusterOperator, MachineConfigPool, Node, Health ClusterVersion, ClusterOperator, MachineConfigPool, Node types are progress insights about a resource directly involved in the update process Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is affected by the update.", + "clusterVersion": "clusterVersion is a status insight about the state of a control plane update, where the control plane is represented by a ClusterVersion resource usually managed by CVO", + "clusterOperator": "clusterOperator is a status insight about the state of a control plane cluster operator update represented by a ClusterOperator resource", + "machineConfigPool": "machineConfigPool is a status insight about the state of a worker pool update, where the worker pool is represented by a MachineConfigPool resource", + "node": "node is a status insight about the state of a worker node update, where the worker node is represented by a Node resource", + "health": "health is a generic health insight about the update. It does not represent a status of any specific resource but surfaces actionable information about the health of the cluster or an update", +} + +func (ControlPlaneInsightUnion) SwaggerDoc() map[string]string { + return map_ControlPlaneInsightUnion +} + +var map_Pool = map[string]string{ + "": "Pool contains a summary and insights related to a node pool update", + "conditions": "conditions provides details about the node pool update. This is a high-level status of an abstract \"pool of nodes\" concept, and will typically be the controller's interpretation / summarization of the insights it received (that will be placed in .informers[].insights for clients that want to perform further analysis of the data). Known condition types are: * \"Updating\": Whether the pool of nodes is currently updating or not", + "name": "name is the name of the pool, follows the same rules as a Kubernetes resource name (RFC-1123 subdomain)", + "resource": "resource is the resource that represents the pool, either a MachineConfigPool in Standalone OpenShift or a NodePool in Hosted Control Planes.", + "informers": "informers is a list of insight producers. An informer is a system, internal or external to the cluster, that produces units of information relevant to the update process, either about its progress or its health. Each informer in the list is identified by a name, and contains a list of insights it contributed to the Update Status API, relevant to the process of updating this pool of nodes.", +} + +func (Pool) SwaggerDoc() map[string]string { + return map_Pool +} + +var map_PoolResourceRef = map[string]string{ + "": "PoolResourceRef is a reference to a kubernetes resource that represents a node pool", +} + +func (PoolResourceRef) SwaggerDoc() map[string]string { + return map_PoolResourceRef +} + +var map_ResourceRef = map[string]string{ + "": "ResourceRef is a reference to a kubernetes resource, typically involved in an insight", + "group": "group of the object being referenced, if any", + "resource": "resource of object being referenced", + "name": "name of the object being referenced", + "namespace": "namespace of the object being referenced, if any", +} + +func (ResourceRef) SwaggerDoc() map[string]string { + return map_ResourceRef +} + +var map_UpdateStatus = map[string]string{ + "": "UpdateStatus reports status for in-progress cluster version updates\n\nCompatibility level 4: No compatibility is provided, the API can change at any point for any reason. These capabilities should not be used by applications needing long term support.", + "metadata": "metadata is standard Kubernetes object metadata", + "spec": "spec is empty for now, UpdateStatus is purely status-reporting API. In the future spec may be used to hold configuration to drive what information is surfaced and how", + "status": "status exposes the health and status of the ongoing cluster update", +} + +func (UpdateStatus) SwaggerDoc() map[string]string { + return map_UpdateStatus +} + +var map_UpdateStatusList = map[string]string{ + "": "UpdateStatusList is a list of UpdateStatus resources\n\nCompatibility level 4: No compatibility is provided, the API can change at any point for any reason. These capabilities should not be used by applications needing long term support.", + "metadata": "metadata is standard Kubernetes object metadata", + "items": "items is a list of UpdateStatus resources", +} + +func (UpdateStatusList) SwaggerDoc() map[string]string { + return map_UpdateStatusList +} + +var map_UpdateStatusSpec = map[string]string{ + "": "UpdateStatusSpec is empty for now, UpdateStatus is purely status-reporting API. In the future spec may be used to hold configuration to drive what information is surfaced and how", +} + +func (UpdateStatusSpec) SwaggerDoc() map[string]string { + return map_UpdateStatusSpec +} + +var map_UpdateStatusStatus = map[string]string{ + "": "UpdateStatusStatus is the API about in-progress updates. It aggregates and summarizes UpdateInsights produced by update informers", + "conditions": "conditions provide details about the controller operational matters, exposing whether the controller managing this UpdateStatus is functioning well, receives insights from individual informers, and is able to interpret them and relay them through this UpdateStatus. These condition do not communicate anything about the state of the update itself but may indicate whether the UpdateStatus content is reliable or not.", + "controlPlane": "controlPlane contains a summary and insights related to the control plane update", + "workerPools": "workerPools contains summaries and insights related to the worker pools update. Each item in the list represents a single worker pool and carries all insights reported for it by informers. It has at most 32 items.\n so hundreds, and hypothetically more empty ones.", +} + +func (UpdateStatusStatus) SwaggerDoc() map[string]string { + return map_UpdateStatusStatus +} + +var map_WorkerPoolInformer = map[string]string{ + "": "WorkerPoolInformer represents a system, internal or external to the cluster, that produces units of information relevant to the update process, either about its progress or its health. Each informer is identified by a name, and contains a list of insights it contributed to the Update Status API, relevant to a specific worker pool.", + "name": "name is the name of the insight producer", + "insights": "insights is a list of insights produced by this producer. Insights are units of information relevant to an update progress or health information. There are two types of update insights: status insights and health insights. The first type are directly tied to the update process, regardless of whether it is proceeding smoothly or not.\n\nStatus Insights expose the state of a single resource that is directly involved in the update process, usually a resource that either has a notion of \"being updated,\" (such as a Node or ClusterOperator) or represents a higher-level abstraction (such as a ClusterVersion resource tahat represents the control plane or MachineConfigPool that represents a pool of nodes).\n\nHealth Insights report a state or condition in the cluster that is abnormal or negative and either affects or is affected by the update. Ideally, none would be generated in a standard healthy update. Health insights communicate a condition that warrants attention by the cluster administrator.", +} + +func (WorkerPoolInformer) SwaggerDoc() map[string]string { + return map_WorkerPoolInformer +} + +var map_WorkerPoolInsight = map[string]string{ + "": "WorkerPoolInsight is a unique piece of either status/progress or update health information produced by update informer", + "uid": "uid identifies the insight over time", + "acquiredAt": "acquiredAt is the time when the data was acquired by the producer", + "insight": "insight is a discriminated union of all insights types that can be reported for a worker pool", +} + +func (WorkerPoolInsight) SwaggerDoc() map[string]string { + return map_WorkerPoolInsight +} + +var map_WorkerPoolInsightUnion = map[string]string{ + "": "WorkerPoolInsightUnion is the discriminated union of insights types that can be reported for a worker pool, identified by type field", + "type": "type identifies the type of the update insight, one of: MachineConfigPool, Node, Health MachineConfigPool, Node types are progress insights about a resource directly involved in the update process Health insights report a state or condition in the cluster that is abnormal or negative and either affects or is affected by the update.", + "machineConfigPool": "machineConfigPool is a status insight about the state of a worker pool update, where the worker pool is represented by a MachineConfigPool resource", + "node": "node is a status insight about the state of a worker node update, where the worker node is represented by a Node resource", + "health": "health is a generic health insight about the update. It does not represent a status of any specific resource but surfaces actionable information about the health of the cluster or an update", +} + +func (WorkerPoolInsightUnion) SwaggerDoc() map[string]string { + return map_WorkerPoolInsightUnion +} + +var map_HealthInsight = map[string]string{ + "": "HealthInsight is a piece of actionable information produced by an insight producer about the health of the cluster or an update", + "startedAt": "startedAt is the time when the condition reported by the insight started", + "scope": "scope is list of objects involved in the insight", + "impact": "impact describes the impact the reported condition has on the cluster or update", + "remediation": "remediation contains information about how to resolve or prevent the reported condition", +} + +func (HealthInsight) SwaggerDoc() map[string]string { + return map_HealthInsight +} + +var map_InsightImpact = map[string]string{ + "": "InsightImpact describes the impact the reported condition has on the cluster or update", + "level": "level is the severity of the impact. Valid values are Unknown, Info, Warning, Error, Critical.", + "type": "type is the type of the impact. Valid values are None, Unknown, API Availability, Cluster Capacity, Application Availability, Application Outage, Data Loss, Update Speed, Update Stalled.", + "summary": "summary is a short summary of the impact. It must not be empty and must be shorter than 256 characters.", + "description": "description is a human-oriented, possibly longer-form description of the condition reported by the insight It must be shorter than 4096 characters.", +} + +func (InsightImpact) SwaggerDoc() map[string]string { + return map_InsightImpact +} + +var map_InsightRemediation = map[string]string{ + "": "InsightRemediation contains information about how to resolve or prevent the reported condition", + "reference": "reference is a URL where administrators can find information to resolve or prevent the reported condition", + "estimatedFinish": "estimatedFinish is the estimated time when the informer expects the condition to be resolved, if applicable.", +} + +func (InsightRemediation) SwaggerDoc() map[string]string { + return map_InsightRemediation +} + +var map_InsightScope = map[string]string{ + "": "InsightScope is a list of resources involved in the insight", + "type": "type is either ControlPlane or WorkerPool", + "resources": "resources is a list of resources involved in the insight, of any group/kind. Maximum 16 resources can be listed.", +} + +func (InsightScope) SwaggerDoc() map[string]string { + return map_InsightScope +} + +var map_ClusterOperatorStatusInsight = map[string]string{ + "": "ClusterOperatorStatusInsight reports the state of a ClusterOperator resource (which represents a control plane component update in standalone clusters), during the update", + "conditions": "conditions provide details about the operator. It contains at most 10 items. Known conditions are: - Updating: whether the operator is updating; When Updating=False, the reason field can be Pending or Updated - Healthy: whether the operator is considered healthy; When Healthy=False, the reason field can be Unavailable or Degraded, and Unavailable is \"stronger\" than Degraded", + "name": "name is the name of the operator", + "resource": "resource is the ClusterOperator resource that represents the operator", +} + +func (ClusterOperatorStatusInsight) SwaggerDoc() map[string]string { + return map_ClusterOperatorStatusInsight +} + +var map_ClusterVersionStatusInsight = map[string]string{ + "": "ClusterVersionStatusInsight reports the state of a ClusterVersion resource (which represents a control plane update in standalone clusters), during the update.", + "conditions": "conditions provides detailed observed conditions about ClusterVersion. It contains at most 10 items. Known conditions are: - Updating: whether the control plane (represented by this ClusterVersion) is updating", + "resource": "resource is the ClusterVersion resource that represents the control plane", + "assessment": "assessment is the assessment of the control plane update process. Valid values are: Unknown, Progressing, Completed, Degraded", + "versions": "versions contains the original and target versions of the upgrade", + "completion": "completion is a percentage of the update completion (0-100)", + "startedAt": "startedAt is the time when the update started", + "completedAt": "completedAt is the time when the update completed", + "estimatedCompletedAt": "estimatedCompletedAt is the estimated time when the update will complete", +} + +func (ClusterVersionStatusInsight) SwaggerDoc() map[string]string { + return map_ClusterVersionStatusInsight +} + +var map_ControlPlaneUpdateVersions = map[string]string{ + "": "ControlPlaneUpdateVersions contains the original and target versions of the upgrade", + "previous": "previous is the version of the control plane before the update. When the cluster is being installed for the first time, the version will have a placeholder value '' and carry 'Installation' metadata", + "target": "target is the version of the control plane after the update. It may never be '' or have `Installation` metadata", +} + +func (ControlPlaneUpdateVersions) SwaggerDoc() map[string]string { + return map_ControlPlaneUpdateVersions +} + +var map_MachineConfigPoolStatusInsight = map[string]string{ + "": "MachineConfigPoolStatusInsight reports the state of a MachineConfigPool resource during the update", + "conditions": "conditions provide details about the machine config pool update. It contains at most 10 items. Known conditions are: - Updating: whether the pool is updating; When Updating=False, the reason field can be Pending, Updated or Excluded", + "name": "name is the name of the machine config pool", + "resource": "resource is the MachineConfigPool resource that represents the pool\n\nNote: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to resource name (because the rest is implied by status insight type). However, because we use resource references in many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable than type safety for producers.", + "scopeType": "scopeType describes whether the pool is a control plane or a worker pool", + "assessment": "assessment is the assessment of the machine config pool update process. Valid values are: Pending, Completed, Degraded, Excluded, Progressing", + "completion": "completion is a percentage of the update completion (0-100)", + "summaries": "summaries is a list of counts of nodes matching certain criteria (e.g. updated, degraded, etc.). Maximum 16 items can be listed.", +} + +func (MachineConfigPoolStatusInsight) SwaggerDoc() map[string]string { + return map_MachineConfigPoolStatusInsight +} + +var map_NodeStatusInsight = map[string]string{ + "": "NodeStatusInsight reports the state of a Node during the update", + "conditions": "conditions provides details about the control plane update. Known conditions are: - Updating: whether the Node is updating; When Updating=False, the reason field can be Updated, Pending, or Paused. When Updating=True, the reason field can be Draining, Updating, or Rebooting - Available: whether the Node is available (accepting workloads) - Degraded: whether the Node is degraded (problem observed)", + "name": "name is the name of the node", + "resource": "resource is the Node resource that represents the node\n\nNote: By OpenShift API conventions, in isolation this should be a specialized reference that refers just to resource name (because the rest is implied by status insight type). However, because we use resource references in many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable than type safety for producers.", + "poolResource": "poolResource is the resource that represents the pool the node is a member of\n\nNote: By OpenShift API conventions, in isolation this should probably be a specialized reference type that allows only the \"correct\" resource types to be referenced (here, MachineConfigPool or NodePool). However, because we use resource references in many places and this API is intended to be consumed by clients, not produced, consistency seems to be more valuable than type safety for producers.", + "scopeType": "scopeType describes whether the node belongs to control plane or a worker pool", + "version": "version is the version of the node, when known", + "estimatedToComplete": "estimatedToComplete is the estimated time to complete the update, when known", + "message": "message is a short human-readable message about the node update status. It must be shorter than 100 characters.", +} + +func (NodeStatusInsight) SwaggerDoc() map[string]string { + return map_NodeStatusInsight +} + +var map_NodeSummary = map[string]string{ + "": "NodeSummary is a count of nodes matching certain criteria (e.g. updated, degraded, etc.)", + "type": "type is the type of the summary. Valid values are: Total, Available, Progressing, Outdated, Draining, Excluded, Degraded The summaries are not exclusive, a single node may be counted in multiple summaries.", + "count": "count is the number of nodes matching the criteria", +} + +func (NodeSummary) SwaggerDoc() map[string]string { + return map_NodeSummary +} + +var map_Version = map[string]string{ + "": "Version describes a version involved in an update, typically on one side of an update edge", + "version": "version is a semantic version string, or a placeholder '' for the special case where this is a \"previous\" version in a new installation, in which case the metadata must contain an item with key 'Installation'", + "metadata": "metadata is a list of metadata associated with the version. It is a list of key-value pairs. The value is optional and when not provided, the metadata item has boolean semantics (presence indicates true). For example, 'Partial' metadata on a previous version indicates that the previous update was never fully completed. Can contain at most 5 items.", +} + +func (Version) SwaggerDoc() map[string]string { + return map_Version +} + +var map_VersionMetadata = map[string]string{ + "": "VersionMetadata is a key:value item assigned to version involved in the update. Value can be empty, then the metadata have boolean semantics (true when present, false when absent)", + "key": "key is the name of this metadata value. Valid values are: Installation, Partial, Architecture", + "value": "value is the value for the metadata, at most 32 characters long. It is not expected to be provided for Installation and Partial metadata. For Architecture metadata, it is expected to be a string that indicates the architecture of the payload image of the version involved in the upgrade, when relevant.", +} + +func (VersionMetadata) SwaggerDoc() map[string]string { + return map_VersionMetadata +} + +// AUTO-GENERATED FUNCTIONS END HERE