diff --git a/pkg/cli/admin/upgrade/status/controlplane.go b/pkg/cli/admin/upgrade/status/controlplane.go index a62fad04f5..3ef4e7b994 100644 --- a/pkg/cli/admin/upgrade/status/controlplane.go +++ b/pkg/cli/admin/upgrade/status/controlplane.go @@ -15,6 +15,9 @@ type assessmentState string const ( assessmentStateProgressing assessmentState = "Progressing" assessmentStateCompleted assessmentState = "Completed" + assessmentStatePending assessmentState = "Pending" + assessmentStateExcluded assessmentState = "Excluded" + assessmentStateDegraded assessmentState = "Degraded" ) type operators struct { @@ -43,7 +46,7 @@ func coInsights(name string, available v1.ClusterOperatorStatusCondition, degrad if available.Status == v1.ConditionFalse && evaluated.After(available.LastTransitionTime.Time.Add(unavailableWarningThreshold)) { insight := updateInsight{ startedAt: available.LastTransitionTime.Time, - scope: updateInsightScope{scopeType: scopeControlPlane, resources: []scopeResource{{kind: clusterOperator, name: name}}}, + scope: updateInsightScope{scopeType: scopeTypeControlPlane, resources: []scopeResource{{kind: scopeKindClusterOperator, name: name}}}, impact: updateInsightImpact{ level: warningImpactLevel, impactType: apiAvailabilityImpactType, @@ -58,7 +61,7 @@ func coInsights(name string, available v1.ClusterOperatorStatusCondition, degrad if degraded.Status == v1.ConditionTrue && evaluated.After(degraded.LastTransitionTime.Time.Add(degradedWarningThreshold)) { insight := updateInsight{ startedAt: degraded.LastTransitionTime.Time, - scope: updateInsightScope{scopeType: scopeControlPlane, resources: []scopeResource{{kind: clusterOperator, name: name}}}, + scope: updateInsightScope{scopeType: scopeTypeControlPlane, resources: []scopeResource{{kind: scopeKindClusterOperator, name: name}}}, impact: updateInsightImpact{ level: warningImpactLevel, impactType: apiAvailabilityImpactType, diff --git a/pkg/cli/admin/upgrade/status/controlplane_test.go b/pkg/cli/admin/upgrade/status/controlplane_test.go index 56655e5cdc..9e4eb40044 100644 --- a/pkg/cli/admin/upgrade/status/controlplane_test.go +++ b/pkg/cli/admin/upgrade/status/controlplane_test.go @@ -402,7 +402,7 @@ func TestCoInsights(t *testing.T) { expected: []updateInsight{ { startedAt: anchorTime.Add(-unavailableWarningThreshold).Add(-time.Second), - scope: updateInsightScope{scopeType: scopeControlPlane, resources: []scopeResource{{kind: clusterOperator, name: "testOperator"}}}, + scope: updateInsightScope{scopeType: scopeTypeControlPlane, resources: []scopeResource{{kind: scopeKindClusterOperator, name: "testOperator"}}}, impact: updateInsightImpact{ level: warningImpactLevel, impactType: apiAvailabilityImpactType, @@ -411,7 +411,7 @@ func TestCoInsights(t *testing.T) { }, { startedAt: anchorTime.Add(-degradedWarningThreshold).Add(-time.Second), - scope: updateInsightScope{scopeType: scopeControlPlane, resources: []scopeResource{{kind: clusterOperator, name: "testOperator"}}}, + scope: updateInsightScope{scopeType: scopeTypeControlPlane, resources: []scopeResource{{kind: scopeKindClusterOperator, name: "testOperator"}}}, impact: updateInsightImpact{ level: warningImpactLevel, impactType: apiAvailabilityImpactType, @@ -439,7 +439,7 @@ func TestCoInsights(t *testing.T) { expected: []updateInsight{ { startedAt: anchorTime.Add(-unavailableErrorThreshold).Add(-time.Second), - scope: updateInsightScope{scopeType: scopeControlPlane, resources: []scopeResource{{kind: clusterOperator, name: "testOperator"}}}, + scope: updateInsightScope{scopeType: scopeTypeControlPlane, resources: []scopeResource{{kind: scopeKindClusterOperator, name: "testOperator"}}}, impact: updateInsightImpact{ level: errorImpactLevel, impactType: apiAvailabilityImpactType, @@ -448,7 +448,7 @@ func TestCoInsights(t *testing.T) { }, { startedAt: anchorTime.Add(-degradedErrorThreshold).Add(-time.Second), - scope: updateInsightScope{scopeType: scopeControlPlane, resources: []scopeResource{{kind: clusterOperator, name: "testOperator"}}}, + scope: updateInsightScope{scopeType: scopeTypeControlPlane, resources: []scopeResource{{kind: scopeKindClusterOperator, name: "testOperator"}}}, impact: updateInsightImpact{ level: errorImpactLevel, impactType: apiAvailabilityImpactType, @@ -473,7 +473,7 @@ func TestCoInsights(t *testing.T) { expected: []updateInsight{ { startedAt: anchorTime.Add(-unavailableErrorThreshold).Add(-time.Second), - scope: updateInsightScope{scopeType: scopeControlPlane, resources: []scopeResource{{kind: clusterOperator, name: "testOperator"}}}, + scope: updateInsightScope{scopeType: scopeTypeControlPlane, resources: []scopeResource{{kind: scopeKindClusterOperator, name: "testOperator"}}}, impact: updateInsightImpact{ level: errorImpactLevel, impactType: apiAvailabilityImpactType, diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-degraded-mc.yaml b/pkg/cli/admin/upgrade/status/examples/4.14.1-degraded-mc.yaml new file mode 100644 index 0000000000..3c5daf15c6 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-degraded-mc.yaml @@ -0,0 +1,293 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: master + name: 00-master + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "24839" + uid: b08f1a9c-7481-4b49-8aa9-2444051576fb + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: worker + name: 00-worker + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "24840" + uid: a7addc79-0ce7-4a4a-a195-b17a21533396 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8834" + uid: de9332ff-2a1d-4d31-be98-226f26fb870c + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8835" + uid: 2a6a1cdb-5b79-49d3-983a-cfcced78b29e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8838" + uid: 68ae0e75-b66a-45e8-9c00-85d0dbbac77d + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8846" + uid: ae1a342c-4feb-4f38-89af-cfe8c235d49b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 97-master-generated-kubelet + resourceVersion: "8840" + uid: 316f2737-0397-49fe-85e5-df4e37944b1b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:29Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 97-worker-generated-kubelet + resourceVersion: "8855" + uid: b2480713-fc2b-440a-9dd4-d5bf8cd15d14 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 98-master-generated-kubelet + resourceVersion: "8837" + uid: e11eb47e-ce7f-48b8-9bdd-d125359b43d4 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 98-worker-generated-kubelet + resourceVersion: "8847" + uid: 901f3569-042f-445c-99cc-b34eb2bfc9f0 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8839" + uid: 50011095-9bde-4b05-84b5-c826eab55cdc + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:15Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-ssh + resourceVersion: "1626" + uid: 9d3e5253-fa32-471d-872f-9b3c9fc54014 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8843" + uid: b5101ea4-7deb-4501-89f6-b25d6a8e5c4e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:16Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-ssh + resourceVersion: "1650" + uid: 3152721d-116e-41a5-b9ee-f978fffc80ab + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0-rc.3 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "25018" + uid: f24cdff8-23e0-4247-bc10-2806c65cac85 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0-rc.3 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-master-5386b830f950f01bb6bb51c80fb3c072 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "8910" + uid: 811b316d-b1aa-43ba-8a7b-daf14ed7ca5f + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0-rc.3 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "25021" + uid: 16b2d6db-d799-4646-b156-8354630e422a + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0-rc.3 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-worker-9afa40a716fbeaa9be7388d0061948d3 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "8909" + uid: 41a76c2c-9c02-443a-8191-e18a316714be +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-degraded-mcp.yaml b/pkg/cli/admin/upgrade/status/examples/4.14.1-degraded-mcp.yaml new file mode 100644 index 0000000000..58204b37a1 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-degraded-mcp.yaml @@ -0,0 +1,162 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 3 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + operator.machineconfiguration.openshift.io/required-for-upgrade: "" + pools.operator.machineconfiguration.openshift.io/master: "" + name: master + resourceVersion: "26226" + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + spec: + configuration: + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-master + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: master + nodeSelector: + matchLabels: + node-role.kubernetes.io/master: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:48Z" + message: All nodes are updated with MachineConfig rendered-master-354cc9845ab33037fa7121a44dafecfd + reason: "" + status: "True" + type: Updated + - lastTransitionTime: "2024-02-07T16:12:48Z" + message: "" + reason: "" + status: "False" + type: Updating + configuration: + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 3 + readyMachineCount: 3 + unavailableMachineCount: 0 + updatedMachineCount: 3 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 5 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + pools.operator.machineconfiguration.openshift.io/worker: "" + name: worker + resourceVersion: "34145" + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + spec: + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-worker + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: worker + nodeSelector: + matchLabels: + node-role.kubernetes.io/worker: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:42Z" + message: All nodes are updated with MachineConfig rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + reason: "" + status: "True" + type: Updated + - lastTransitionTime: "2024-02-07T16:12:42Z" + message: "" + reason: "" + status: "False" + type: Updating + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 5 + readyMachineCount: 3 + unavailableMachineCount: 0 + updatedMachineCount: 3 +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-degraded-node.yaml b/pkg/cli/admin/upgrade/status/examples/4.14.1-degraded-node.yaml new file mode 100644 index 0000000000..c1909b9cc8 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-degraded-node.yaml @@ -0,0 +1,277 @@ +apiVersion: v1 +items: + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:53Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-20-162.us-east-2.compute.internal + resourceVersion: "33523" + uid: 88626d63-b4f4-44a5-b0bc-4de955567fbe + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:47Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-30-217.us-east-2.compute.internal + resourceVersion: "34150" + uid: fd848867-b28e-4c3f-acc1-5ff79558c60a + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:03:00Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:07:08Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-4-159.us-east-2.compute.internal + resourceVersion: "34229" + uid: 10554f1b-6f2b-4781-8ce0-6abbfb948645 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:08:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:48Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-53-40.us-east-2.compute.internal + resourceVersion: "33799" + uid: fa21423d-2616-4381-8889-35cffcaf0772 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:02:24Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:50Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-92-180.us-east-2.compute.internal + resourceVersion: "33817" + uid: 4be70dad-dfe6-410d-ae91-d1f16388ac58 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:03:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:46Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-99-40.us-east-2.compute.internal + resourceVersion: "33934" + uid: 5e5831bc-5eff-4ea7-9db6-c3f5719d51d5 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-degraded.output b/pkg/cli/admin/upgrade/status/examples/4.14.1-degraded.output index 5431c1fb46..caa91e2052 100644 --- a/pkg/cli/admin/upgrade/status/examples/4.14.1-degraded.output +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-degraded.output @@ -12,6 +12,20 @@ Completion: 97% Duration: 1h58m50s Operator Status: 33 Total, 32 Available, 1 Progressing, 4 Degraded += Worker Upgrade = + += Worker Pool = +Worker Pool: worker +Assessment: Pending +Completion: 0% +Worker Status: 3 Total, 3 Available, 0 Progressing, 3 Outdated, 0 Draining, 0 Excluded, 0 Degraded + +Worker Pool Node(s) +NAME ASSESSMENT PHASE VERSION EST MESSAGE +ip-10-0-20-162.us-east-2.compute.internal Outdated Pending 4.14.0-rc.3 ? +ip-10-0-4-159.us-east-2.compute.internal Outdated Pending 4.14.0-rc.3 ? +ip-10-0-99-40.us-east-2.compute.internal Outdated Pending 4.14.0-rc.3 ? + = Update Health = SINCE LEVEL IMPACT MESSAGE 58m18s Error API Availability Cluster Operator kube-apiserver is degraded | NodeController_MasterNodesReady: NodeControllerDegraded: The master nodes not ready: node "ip-10-0-12-74.ec2.internal" not ready since 2023-11-03 16:28:43 +0000 UTC because KubeletNotReady (container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: No CNI configuration file in /etc/kubernetes/cni/net.d/. Has your network provider started?) diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-co.yaml b/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-co.yaml new file mode 100644 index 0000000000..d460ba7da3 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-co.yaml @@ -0,0 +1,2836 @@ +apiVersion: v1 +items: +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: authentication + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "28924" + uid: a8fc2e96-14ff-492c-bdde-8b266b9dff08 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:17:37Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:18:27Z" + message: 'AuthenticatorCertKeyProgressing: All is well' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:18:27Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:38Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: authentications + - group: config.openshift.io + name: cluster + resource: authentications + - group: config.openshift.io + name: cluster + resource: infrastructures + - group: config.openshift.io + name: cluster + resource: oauths + - group: route.openshift.io + name: oauth-openshift + namespace: openshift-authentication + resource: routes + - group: "" + name: oauth-openshift + namespace: openshift-authentication + resource: services + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-authentication + resource: namespaces + - group: "" + name: openshift-authentication-operator + resource: namespaces + - group: "" + name: openshift-ingress + resource: namespaces + - group: "" + name: openshift-oauth-apiserver + resource: namespaces + versions: + - name: operator + version: 4.14.0 + - name: oauth-apiserver + version: 4.14.0 + - name: oauth-openshift + version: 4.14.0_openshift +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: baremetal + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: baremetal + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "8372" + uid: c511802d-6900-4e1d-aa9a-bea451744f2c + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:20Z" + reason: WaitingForProvisioningCR + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:20Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:20Z" + message: Waiting for Provisioning CR + reason: WaitingForProvisioningCR + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:03:20Z" + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:03:20Z" + status: "False" + type: Disabled + extension: null + relatedObjects: + - group: "" + name: openshift-machine-api + resource: namespaces + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: baremetalhosts + - group: metal3.io + name: "" + resource: provisioning + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: hostfirmwaresettings + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: firmwareschemas + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: preprovisioningimages + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: bmceventsubscriptions + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: cloud-controller-manager + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "3114" + uid: 0f3dbcaf-dff4-4bda-805d-38e65a254d85 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:01:12Z" + message: Trusted CA Bundle Controller works as expected + reason: AsExpected + status: "True" + type: TrustedCABundleControllerControllerAvailable + - lastTransitionTime: "2024-02-07T16:01:12Z" + message: Trusted CA Bundle Controller works as expected + reason: AsExpected + status: "False" + type: TrustedCABundleControllerControllerDegraded + - lastTransitionTime: "2024-02-07T16:01:13Z" + message: Cloud Config Controller works as expected + reason: AsExpected + status: "True" + type: CloudConfigControllerAvailable + - lastTransitionTime: "2024-02-07T16:01:13Z" + message: Cloud Config Controller works as expected + reason: AsExpected + status: "False" + type: CloudConfigControllerDegraded + - lastTransitionTime: "2024-02-07T16:01:13Z" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:01:13Z" + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:01:13Z" + message: Cluster Cloud Controller Manager Operator is available at 4.14.0 + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:01:13Z" + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:01:13Z" + message: Cluster Cloud Controller Manager Operator owns cloud controllers at + 4.14.0 + reason: AsExpected + status: "True" + type: CloudControllerOwner + extension: null + relatedObjects: + - group: "" + name: openshift-cloud-controller-manager-operator + resource: namespaces + - group: config.openshift.io + name: cloud-controller-manager + resource: clusteroperators + - group: "" + name: openshift-cloud-controller-manager + resource: namespaces + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: cloud-credential + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "16240" + uid: acdbf57d-8e57-412f-9651-39232d575bfc + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:00:48Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:00:48Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:08:26Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:00:48Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: cloudcredential.openshift.io + name: alibaba-disk-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: aws-ebs-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: azure-disk-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: azure-file-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: cloud-credential-operator-gcp-ro-creds + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: cloud-credential-operator-iam-ro + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: operator.openshift.io + name: cluster + resource: cloudcredentials + - group: cloudcredential.openshift.io + name: ibm-powervs-block-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: ibm-vpc-block-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: manila-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-azure-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: "" + name: openshift-cloud-credential-operator + resource: namespaces + - group: cloudcredential.openshift.io + name: openshift-cloud-network-config-controller-aws + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cloud-network-config-controller-azure + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cloud-network-config-controller-gcp + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cloud-network-config-controller-openstack + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cluster-csi-drivers + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-gcp-ccm + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-gcp-pd-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-ibm-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-alibaba + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-azure + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-gcs + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-ibmcos + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-ibmcos-powervs + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-openstack + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-ingress + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-ingress-azure + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-ingress-gcp + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-aws + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-azure + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-gcp + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-ibmcloud + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-nutanix + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-openstack + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-ovirt + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-powervs + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-vsphere + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-network + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-nutanix-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-openstack-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-powervs-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-vmware-vsphere-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-vsphere-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-vsphere-problem-detector + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: ovirt-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: "" + name: pod-identity-webhook + namespace: openshift-cloud-credential-operator + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: pod-identity-webhook + resource: clusterroles + - group: rbac.authorization.k8s.io + name: pod-identity-webhook + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: pod-identity-webhook + namespace: openshift-cloud-credential-operator + resource: roles + - group: rbac.authorization.k8s.io + name: pod-identity-webhook + namespace: openshift-cloud-credential-operator + resource: rolebindings + - group: "" + name: pod-identity-webhook + namespace: openshift-cloud-credential-operator + resource: services + - group: apps + name: pod-identity-webhook + namespace: openshift-cloud-credential-operator + resource: deployments + - group: admissionregistration.k8s.io + name: pod-identity-webhook + resource: mutatingwebhookconfigurations + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: MachineAPI + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: cluster-autoscaler + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "21694" + uid: 0eeca0ac-aa07-4a57-a586-06709250307a + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:18Z" + message: at version 4.14.0 + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:10:32Z" + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:10:32Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:18Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: autoscaling.openshift.io + name: "" + namespace: openshift-machine-api + resource: machineautoscalers + - group: autoscaling.openshift.io + name: "" + namespace: openshift-machine-api + resource: clusterautoscalers + - group: "" + name: openshift-machine-api + resource: namespaces + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: config-operator + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "33345" + uid: 2f4811c0-dccb-4af2-b5f2-2df03d84d3bf + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: configs + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-operator + resource: namespaces + versions: + - name: feature-gates + version: 4.14.1 + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: Console + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: console + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "27548" + uid: f4b08c97-51c3-4ac3-a87c-ee176c0d296e + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:10:04Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:15:28Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:15:33Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:10:04Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: console.openshift.io + name: monitoring-plugin + resource: consoleplugins + - group: operator.openshift.io + name: cluster + resource: consoles + - group: config.openshift.io + name: cluster + resource: consoles + - group: config.openshift.io + name: cluster + resource: infrastructures + - group: config.openshift.io + name: cluster + resource: proxies + - group: config.openshift.io + name: cluster + resource: oauths + - group: oauth.openshift.io + name: console + resource: oauthclients + - group: "" + name: openshift-console-operator + resource: namespaces + - group: "" + name: openshift-console + resource: namespaces + - group: "" + name: console-public + namespace: openshift-config-managed + resource: configmaps + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: MachineAPI + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: control-plane-machine-set + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "13798" + uid: 20ed9952-b37e-414c-ac97-a4d249a6c101 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:06:28Z" + message: cluster operator is upgradable + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:06:28Z" + reason: AllReplicasAvailable + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:06:28Z" + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:18Z" + reason: AllReplicasUpdated + status: "False" + type: Progressing + extension: null + relatedObjects: + - group: "" + name: openshift-machine-api + resource: namespaces + - group: machine.openshift.io + name: "" + resource: controlplanemachinesets + - group: machine.openshift.io + name: "" + resource: machines + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: CSISnapshot + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: csi-snapshot-controller + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "9134" + uid: 4195133e-ae3d-4a19-9735-5655ac2bf58b + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:49Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:37Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:36Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:51Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-cluster-storage-operator + resource: namespaces + - group: operator.openshift.io + name: cluster + resource: csisnapshotcontrollers + versions: + - name: operator + version: 4.14.0 + - name: csi-snapshot-controller + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: dns + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "23290" + uid: 885c019a-c117-498b-a569-b8536acc91df + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:34Z" + message: DNS "default" is available. + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:10:28Z" + message: Desired and current number of DNSes are equal + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:10:51Z" + reason: DNSNotDegraded + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:18Z" + message: 'DNS default is upgradeable: DNS Operator can be upgraded' + reason: DNSUpgradeable + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-dns-operator + resource: namespaces + - group: operator.openshift.io + name: default + resource: dnses + - group: "" + name: openshift-dns + resource: namespaces + versions: + - name: operator + version: 4.14.0 + - name: coredns + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:a70e2c9c546d02844a54c1fa811b22e866ec0f426ea53eba4946c8729701c38e + - name: openshift-cli + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:392a225cf7a152e99cb478708a39de580779597f2b5c528bc85b15fbacf89b0f + - name: kube-rbac-proxy + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:8db8a3708497fb6a8ef42faaa1bcc131af33347bc5960d368d401b77d5d9ba74 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: etcd + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "33553" + uid: c2a73efd-daad-49c5-8ab5-a2953072791d + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:11:07Z" + message: |- + NodeControllerDegraded: All master nodes are ready + EtcdMembersDegraded: No unhealthy members found + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:23:13Z" + message: |- + NodeInstallerProgressing: 3 nodes are at revision 7 + EtcdMembersProgressing: No unstarted etcd members found + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:04:34Z" + message: |- + StaticPodsAvailable: 3 nodes are active; 3 nodes are at revision 7 + EtcdMembersAvailable: 3 members are available + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:31:09Z" + message: UpgradeBackup for 4.14.0 is located at path /etc/kubernetes/cluster-backup/upgrade-backup-4.14.0-2024-02-07_163103 + on node "ip-10-0-53-40.us-east-2.compute.internal" + reason: UpgradeBackupSuccessful + status: "True" + type: RecentBackup + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: etcds + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-etcd-operator + resource: namespaces + - group: "" + name: openshift-etcd + resource: namespaces + versions: + - name: raw-internal + version: 4.14.1 + - name: etcd + version: 4.14.1 + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: ImageRegistry + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: image-registry + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "23756" + uid: 8a885172-d8bf-4145-9f94-d6ddc17fc83a + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:10:38Z" + message: |- + Available: The registry is ready + NodeCADaemonAvailable: The daemon set node-ca has available replicas + ImagePrunerAvailable: Pruner CronJob has been created + reason: Ready + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:11:00Z" + message: |- + Progressing: The registry is ready + NodeCADaemonProgressing: The daemon set node-ca is deployed + reason: Ready + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:10:24Z" + reason: AsExpected + status: "False" + type: Degraded + extension: null + relatedObjects: + - group: imageregistry.operator.openshift.io + name: cluster + resource: configs + - group: imageregistry.operator.openshift.io + name: cluster + resource: imagepruners + - group: rbac.authorization.k8s.io + name: system:registry + resource: clusterroles + - group: rbac.authorization.k8s.io + name: registry-registry-role + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: openshift-image-registry-pruner + resource: clusterrolebindings + - group: "" + name: openshift-image-registry + resource: namespaces + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: ingress + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "24229" + uid: 51b7cd4e-0975-4000-ac03-8ed63be5f398 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:10:36Z" + message: The "default" ingress controller reports Available=True. + reason: IngressAvailable + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:11:15Z" + message: desired and current number of IngressControllers are equal + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:11:05Z" + message: The "default" ingress controller reports Degraded=False. + reason: IngressNotDegraded + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:20Z" + reason: IngressControllersUpgradeable + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:03:20Z" + reason: AsExpected + status: "False" + type: EvaluationConditionsDetected + extension: null + relatedObjects: + - group: "" + name: openshift-ingress-operator + resource: namespaces + - group: operator.openshift.io + name: "" + namespace: openshift-ingress-operator + resource: ingresscontrollers + - group: ingress.operator.openshift.io + name: "" + namespace: openshift-ingress-operator + resource: dnsrecords + - group: "" + name: openshift-ingress + resource: namespaces + - group: "" + name: openshift-ingress-canary + resource: namespaces + versions: + - name: operator + version: 4.14.0 + - name: ingress-controller + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:ea192e5c22d4a603ee94c63e4d4598ca4ab1cb3eae952d42f866b65f212be77e + - name: canary-server + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:844f396c2340ebac5ad891479c4abb4987309bae93b89a37a75ce1809c135dec +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: Insights + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: insights + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "32430" + uid: a6d21093-559f-44d7-b0c0-00d0194658b1 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:14:47Z" + message: Insights works as expected + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:18:47Z" + message: no available cluster transfer + reason: NoClusterTransfer + status: "False" + type: ClusterTransferAvailable + - lastTransitionTime: "2024-02-07T16:14:47Z" + message: Insights works as expected + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:14:47Z" + reason: AsExpected + status: "False" + type: Disabled + - lastTransitionTime: "2024-02-07T16:14:47Z" + message: Monitoring the cluster + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:18:47Z" + message: 'Failed to pull SCA certs from https://api.openshift.com/api/accounts_mgmt/v1/certificates: + OCM API https://api.openshift.com/api/accounts_mgmt/v1/certificates returned + HTTP 403: {"code":"ACCT-MGMT-11","href":"/api/accounts_mgmt/v1/errors/11","id":"11","kind":"Error","operation_id":"b49ff9ea-ef28-457f-b82b-27eaec08f83b","reason":"Account + with ID 2DUeKzzTD9ngfsQ6YgkzdJn1jA4 denied access to perform create on Certificate + with HTTP call POST /api/accounts_mgmt/v1/certificates"}' + reason: Forbidden + status: "False" + type: SCAAvailable + - lastTransitionTime: "2024-02-07T16:14:47Z" + message: Insights operator can be upgraded + reason: InsightsUpgradeable + status: "True" + type: Upgradeable + extension: + lastReportTime: "2024-02-07T16:28:35Z" + relatedObjects: + - group: "" + name: openshift-insights + resource: namespaces + - group: apps + name: insights-operator + namespace: openshift-insights + resource: deployments + - group: "" + name: pull-secret + namespace: openshift-config + resource: secrets + - group: "" + name: support + namespace: openshift-config + resource: secrets + - group: "" + name: gather + namespace: openshift-insights + resource: serviceaccounts + - group: "" + name: operator + namespace: openshift-insights + resource: serviceaccounts + - group: "" + name: metrics + namespace: openshift-insights + resource: services + - group: "" + name: service-ca-bundle + namespace: openshift-insights + resource: configmaps + - group: operator.openshift.io + name: cluster + resource: insightsoperators + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: kube-apiserver + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "33652" + uid: b2e4f855-7803-4e88-9135-a5afe4a6220e + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:17:44Z" + message: 'NodeControllerDegraded: All master nodes are ready' + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:18:22Z" + message: 'NodeInstallerProgressing: 3 nodes are at revision 7' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:15:03Z" + message: 'StaticPodsAvailable: 3 nodes are active; 3 nodes are at revision 7' + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:39Z" + message: 'KubeletMinorVersionUpgradeable: Kubelet and API server minor versions + are synced.' + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: kubeapiservers + - group: apiextensions.k8s.io + name: "" + resource: customresourcedefinitions + - group: security.openshift.io + name: "" + resource: securitycontextconstraints + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-kube-apiserver-operator + resource: namespaces + - group: "" + name: openshift-kube-apiserver + resource: namespaces + - group: admissionregistration.k8s.io + name: "" + resource: mutatingwebhookconfigurations + - group: admissionregistration.k8s.io + name: "" + resource: validatingwebhookconfigurations + - group: controlplane.operator.openshift.io + name: "" + namespace: openshift-kube-apiserver + resource: podnetworkconnectivitychecks + - group: apiserver.openshift.io + name: "" + resource: apirequestcounts + - group: config.openshift.io + name: cluster + resource: nodes + versions: + - name: raw-internal + version: 4.14.1 + - name: operator + version: 4.14.1 + - name: kube-apiserver + version: 1.27.6 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: kube-controller-manager + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "33779" + uid: e3b7d5ee-a583-4d0b-a733-d28eb8cb32a9 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:11:05Z" + message: 'NodeControllerDegraded: All master nodes are ready' + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:18:55Z" + message: 'NodeInstallerProgressing: 3 nodes are at revision 6' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:06:50Z" + message: 'StaticPodsAvailable: 3 nodes are active; 3 nodes are at revision 6' + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:38Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: kubecontrollermanagers + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-kube-controller-manager + resource: namespaces + - group: "" + name: openshift-kube-controller-manager-operator + resource: namespaces + - group: "" + name: kube-system + resource: namespaces + - group: certificates.k8s.io + name: "" + resource: certificatesigningrequests + - group: "" + name: "" + resource: nodes + - group: config.openshift.io + name: cluster + resource: nodes + versions: + - name: raw-internal + version: 4.14.1 + - name: kube-controller-manager + version: 1.27.6 + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: kube-scheduler + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "26640" + uid: 81338e7b-7de0-48b9-858b-95f1264a826f + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:11:06Z" + message: 'NodeControllerDegraded: All master nodes are ready' + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:13:32Z" + message: 'NodeInstallerProgressing: 3 nodes are at revision 6' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:06:57Z" + message: 'StaticPodsAvailable: 3 nodes are active; 3 nodes are at revision 6' + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:49Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: kubeschedulers + - group: config.openshift.io + name: "" + resource: schedulers + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-kube-scheduler + resource: namespaces + - group: "" + name: openshift-kube-scheduler-operator + resource: namespaces + - group: controlplane.operator.openshift.io + name: "" + namespace: openshift-kube-apiserver + resource: podnetworkconnectivitychecks + versions: + - name: raw-internal + version: 4.14.0 + - name: kube-scheduler + version: 1.27.6 + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: kube-storage-version-migrator + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "5363" + uid: adb18b8b-89be-4540-b8c3-823050b947ff + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:02:40Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:02:40Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: kubestorageversionmigrators + - group: migration.k8s.io + name: "" + resource: storageversionmigrations + - group: "" + name: openshift-kube-storage-version-migrator + resource: namespaces + - group: "" + name: openshift-kube-storage-version-migrator-operator + resource: namespaces + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: MachineAPI + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: machine-api + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "21693" + uid: 5ee317fc-9796-42dc-8ad9-3e3856bac3a9 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:10:32Z" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:10:32Z" + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:10:32Z" + message: 'Cluster Machine API Operator is available at operator: 4.14.0' + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:03:20Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-machine-api + resource: namespaces + - group: machine.openshift.io + name: "" + namespace: openshift-machine-api + resource: machines + - group: machine.openshift.io + name: "" + namespace: openshift-machine-api + resource: machinesets + - group: machine.openshift.io + name: "" + namespace: openshift-machine-api + resource: machinehealthchecks + - group: rbac.authorization.k8s.io + name: "" + namespace: openshift-machine-api + resource: roles + - group: rbac.authorization.k8s.io + name: machine-api-operator + resource: clusterroles + - group: rbac.authorization.k8s.io + name: machine-api-controllers + resource: clusterroles + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: baremetalhosts + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: machine-approver + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "8120" + uid: 4f18a970-7e6d-4732-a990-b1f9b4134152 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:19Z" + message: Cluster Machine Approver is available at 4.14.0 + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:03:19Z" + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:19Z" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:19Z" + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-cluster-machine-approver + resource: namespaces + - group: certificates.k8s.io + name: "" + resource: certificatesigningrequests + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: machine-config + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "26230" + uid: 69e8a41b-a2a7-4dda-af8f-eebb081d8428 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:04:47Z" + message: Cluster version is 4.14.0 + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:12:48Z" + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:04:46Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:04:46Z" + message: Cluster has deployed [{operator 4.14.0}] + reason: AsExpected + status: "True" + type: Available + extension: + master: all 3 nodes are at latest configuration rendered-master-354cc9845ab33037fa7121a44dafecfd + worker: all 3 nodes are at latest configuration rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + relatedObjects: + - group: "" + name: openshift-machine-config-operator + resource: namespaces + - group: machineconfiguration.openshift.io + name: "" + resource: machineconfigpools + - group: machineconfiguration.openshift.io + name: "" + resource: controllerconfigs + - group: machineconfiguration.openshift.io + name: "" + resource: kubeletconfigs + - group: machineconfiguration.openshift.io + name: "" + resource: containerruntimeconfigs + - group: machineconfiguration.openshift.io + name: "" + resource: machineconfigs + - group: "" + name: "" + resource: nodes + - group: "" + name: openshift-kni-infra + resource: namespaces + - group: "" + name: openshift-openstack-infra + resource: namespaces + - group: "" + name: openshift-ovirt-infra + resource: namespaces + - group: "" + name: openshift-vsphere-infra + resource: namespaces + - group: "" + name: openshift-nutanix-infra + resource: namespaces + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: marketplace + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: marketplace + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "8368" + uid: 0c856453-d72b-4c44-8934-a5c8bea521c9 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:20Z" + message: 'Successfully progressed to release version: 4.14.0' + reason: OperatorAvailable + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:20Z" + message: 'Available release version: 4.14.0' + reason: OperatorAvailable + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:03:20Z" + message: Marketplace is upgradeable + reason: OperatorAvailable + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:03:20Z" + message: 'Available release version: 4.14.0' + reason: OperatorAvailable + status: "False" + type: Degraded + extension: null + relatedObjects: + - group: "" + name: openshift-marketplace + resource: namespaces + - group: operators.coreos.com + name: "" + namespace: openshift-marketplace + resource: catalogsources + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: monitoring + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "24743" + uid: 8de2949a-ab04-428e-ad2d-68760550b95d + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:11:32Z" + message: Successfully rolled out the stack. + reason: RollOutDone + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:11:32Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:11:32Z" + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:11:32Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-monitoring + resource: namespaces + - group: "" + name: openshift-user-workload-monitoring + resource: namespaces + - group: monitoring.coreos.com + name: "" + resource: servicemonitors + - group: monitoring.coreos.com + name: "" + resource: podmonitors + - group: monitoring.coreos.com + name: "" + resource: prometheusrules + - group: monitoring.coreos.com + name: "" + resource: alertmanagers + - group: monitoring.coreos.com + name: "" + resource: prometheuses + - group: monitoring.coreos.com + name: "" + resource: thanosrulers + - group: monitoring.coreos.com + name: "" + resource: alertmanagerconfigs + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + network.operator.openshift.io/last-seen-state: '{"DaemonsetStates":[],"DeploymentStates":[],"StatefulsetStates":[]}' + network.operator.openshift.io/relatedClusterObjects: "" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: network + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "25438" + uid: a9095e19-301e-4cf4-b2e2-bb64bc338e9f + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:09:55Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:01:22Z" + status: "False" + type: ManagementStateDegraded + - lastTransitionTime: "2024-02-07T16:01:22Z" + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:12:03Z" + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:01:32Z" + status: "True" + type: Available + extension: null + relatedObjects: + - group: "" + name: applied-cluster + namespace: openshift-network-operator + resource: configmaps + - group: apiextensions.k8s.io + name: cloudprivateipconfigs.cloud.network.openshift.io + resource: customresourcedefinitions + - group: "" + name: cloud-network-config-controller + namespace: openshift-cloud-network-config-controller + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: cloud-network-config-controller + resource: clusterroles + - group: rbac.authorization.k8s.io + name: cloud-network-config-controller + namespace: openshift-cloud-network-config-controller + resource: roles + - group: rbac.authorization.k8s.io + name: cloud-network-config-controller + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: cloud-network-config-controller-rb + namespace: openshift-cloud-network-config-controller + resource: rolebindings + - group: "" + name: kube-cloud-config + namespace: openshift-cloud-network-config-controller + resource: configmaps + - group: "" + name: trusted-ca + namespace: openshift-cloud-network-config-controller + resource: configmaps + - group: apps + name: cloud-network-config-controller + namespace: openshift-cloud-network-config-controller + resource: deployments + - group: apiextensions.k8s.io + name: network-attachment-definitions.k8s.cni.cncf.io + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: ippools.whereabouts.cni.cncf.io + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: overlappingrangeipreservations.whereabouts.cni.cncf.io + resource: customresourcedefinitions + - group: "" + name: openshift-multus + resource: namespaces + - group: rbac.authorization.k8s.io + name: multus + resource: clusterroles + - group: rbac.authorization.k8s.io + name: multus-ancillary-tools + resource: clusterroles + - group: "" + name: multus + namespace: openshift-multus + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: multus-transient + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: multus-group + resource: clusterrolebindings + - group: "" + name: multus-ancillary-tools + namespace: openshift-multus + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: multus-ancillary-tools + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: multus-cluster-readers + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: multus-whereabouts + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: multus-whereabouts + namespace: openshift-multus + resource: rolebindings + - group: rbac.authorization.k8s.io + name: whereabouts-cni + resource: clusterroles + - group: rbac.authorization.k8s.io + name: whereabouts-cni + namespace: openshift-multus + resource: roles + - group: rbac.authorization.k8s.io + name: net-attach-def-project + resource: clusterroles + - group: "" + name: default-cni-sysctl-allowlist + namespace: openshift-multus + resource: configmaps + - group: "" + name: cni-copy-resources + namespace: openshift-multus + resource: configmaps + - group: "" + name: multus-daemon-config + namespace: openshift-multus + resource: configmaps + - group: apps + name: multus + namespace: openshift-multus + resource: daemonsets + - group: apps + name: multus-additional-cni-plugins + namespace: openshift-multus + resource: daemonsets + - group: "" + name: metrics-daemon-sa + namespace: openshift-multus + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: metrics-daemon-role + resource: clusterroles + - group: rbac.authorization.k8s.io + name: metrics-daemon-sa-rolebinding + resource: clusterrolebindings + - group: apps + name: network-metrics-daemon + namespace: openshift-multus + resource: daemonsets + - group: monitoring.coreos.com + name: monitor-network + namespace: openshift-multus + resource: servicemonitors + - group: "" + name: network-metrics-service + namespace: openshift-multus + resource: services + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-multus + resource: roles + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-multus + resource: rolebindings + - group: "" + name: multus-admission-controller + namespace: openshift-multus + resource: services + - group: "" + name: multus-ac + namespace: openshift-multus + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: multus-admission-controller-webhook + resource: clusterroles + - group: rbac.authorization.k8s.io + name: multus-admission-controller-webhook + resource: clusterrolebindings + - group: admissionregistration.k8s.io + name: multus.openshift.io + resource: validatingwebhookconfigurations + - group: apps + name: multus-admission-controller + namespace: openshift-multus + resource: deployments + - group: monitoring.coreos.com + name: monitor-multus-admission-controller + namespace: openshift-multus + resource: servicemonitors + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-multus + resource: roles + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-multus + resource: rolebindings + - group: monitoring.coreos.com + name: prometheus-k8s-rules + namespace: openshift-multus + resource: prometheusrules + - group: "" + name: openshift-ovn-kubernetes + resource: namespaces + - group: apiextensions.k8s.io + name: egressfirewalls.k8s.ovn.org + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: egressips.k8s.ovn.org + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: egressqoses.k8s.ovn.org + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: adminpolicybasedexternalroutes.k8s.ovn.org + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: egressservices.k8s.ovn.org + resource: customresourcedefinitions + - group: "" + name: ovn-kubernetes-node + namespace: openshift-ovn-kubernetes + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-node-limited + namespace: openshift-ovn-kubernetes + resource: roles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-nodes-identity-limited + namespace: openshift-ovn-kubernetes + resource: rolebindings + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-node-limited + resource: clusterroles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-node-identity-limited + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-kube-rbac-proxy + resource: clusterroles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-node-kube-rbac-proxy + resource: clusterrolebindings + - group: "" + name: ovn-kubernetes-controller + namespace: openshift-ovn-kubernetes + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-controller-limited + resource: clusterroles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-controller-limited + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-sbdb + namespace: openshift-ovn-kubernetes + resource: roles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-sbdb + namespace: openshift-ovn-kubernetes + resource: rolebindings + - group: "" + name: ovnkube-config + namespace: openshift-ovn-kubernetes + resource: configmaps + - group: "" + name: ovn-kubernetes-control-plane + namespace: openshift-ovn-kubernetes + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-control-plane-limited + resource: clusterroles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-control-plane-limited + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-control-plane-limited + namespace: openshift-ovn-kubernetes + resource: roles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-control-plane-limited + namespace: openshift-ovn-kubernetes + resource: rolebindings + - group: network.operator.openshift.io + name: ovn + namespace: openshift-ovn-kubernetes + resource: operatorpkis + - group: network.operator.openshift.io + name: signer + namespace: openshift-ovn-kubernetes + resource: operatorpkis + - group: flowcontrol.apiserver.k8s.io + name: openshift-ovn-kubernetes + resource: flowschemas + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-cluster-reader + resource: clusterroles + - group: monitoring.coreos.com + name: master-rules + namespace: openshift-ovn-kubernetes + resource: prometheusrules + - group: monitoring.coreos.com + name: networking-rules + namespace: openshift-ovn-kubernetes + resource: prometheusrules + - group: "" + name: openshift-network-features + namespace: openshift-config-managed + resource: configmaps + - group: monitoring.coreos.com + name: monitor-ovn-control-plane-metrics + namespace: openshift-ovn-kubernetes + resource: servicemonitors + - group: "" + name: ovn-kubernetes-control-plane + namespace: openshift-ovn-kubernetes + resource: services + - group: monitoring.coreos.com + name: monitor-ovn-node + namespace: openshift-ovn-kubernetes + resource: servicemonitors + - group: "" + name: ovn-kubernetes-node + namespace: openshift-ovn-kubernetes + resource: services + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-ovn-kubernetes + resource: roles + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-ovn-kubernetes + resource: rolebindings + - group: "" + name: openshift-host-network + resource: namespaces + - group: "" + name: host-network-namespace-quotas + namespace: openshift-host-network + resource: resourcequotas + - group: apps + name: ovnkube-control-plane + namespace: openshift-ovn-kubernetes + resource: deployments + - group: apps + name: ovnkube-node + namespace: openshift-ovn-kubernetes + resource: daemonsets + - group: "" + name: openshift-network-diagnostics + resource: namespaces + - group: "" + name: network-diagnostics + namespace: openshift-network-diagnostics + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: network-diagnostics + namespace: openshift-network-diagnostics + resource: roles + - group: rbac.authorization.k8s.io + name: network-diagnostics + namespace: openshift-network-diagnostics + resource: rolebindings + - group: rbac.authorization.k8s.io + name: network-diagnostics + resource: clusterroles + - group: rbac.authorization.k8s.io + name: network-diagnostics + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: network-diagnostics + namespace: kube-system + resource: rolebindings + - group: apps + name: network-check-source + namespace: openshift-network-diagnostics + resource: deployments + - group: "" + name: network-check-source + namespace: openshift-network-diagnostics + resource: services + - group: monitoring.coreos.com + name: network-check-source + namespace: openshift-network-diagnostics + resource: servicemonitors + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-network-diagnostics + resource: roles + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-network-diagnostics + resource: rolebindings + - group: apps + name: network-check-target + namespace: openshift-network-diagnostics + resource: daemonsets + - group: "" + name: network-check-target + namespace: openshift-network-diagnostics + resource: services + - group: rbac.authorization.k8s.io + name: openshift-network-public-role + namespace: openshift-config-managed + resource: roles + - group: rbac.authorization.k8s.io + name: openshift-network-public-role-binding + namespace: openshift-config-managed + resource: rolebindings + - group: "" + name: openshift-network-node-identity + resource: namespaces + - group: "" + name: network-node-identity + namespace: openshift-network-node-identity + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: network-node-identity + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: network-node-identity + resource: clusterroles + - group: rbac.authorization.k8s.io + name: network-node-identity-leases + namespace: openshift-network-node-identity + resource: rolebindings + - group: rbac.authorization.k8s.io + name: network-node-identity-leases + namespace: openshift-network-node-identity + resource: roles + - group: rbac.authorization.k8s.io + name: system:openshift:scc:hostnetwork-v2 + namespace: openshift-network-node-identity + resource: rolebindings + - group: "" + name: ovnkube-identity-cm + namespace: openshift-network-node-identity + resource: configmaps + - group: network.operator.openshift.io + name: network-node-identity + namespace: openshift-network-node-identity + resource: operatorpkis + - group: admissionregistration.k8s.io + name: network-node-identity.openshift.io + resource: validatingwebhookconfigurations + - group: apps + name: network-node-identity + namespace: openshift-network-node-identity + resource: daemonsets + - group: "" + name: openshift-network-operator + resource: namespaces + - group: operator.openshift.io + name: cluster + resource: networks + - group: "" + name: openshift-cloud-network-config-controller + resource: namespaces + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: NodeTuning + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: node-tuning + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "23450" + uid: 2b192c2f-2507-46cd-b8ca-7b25a960df05 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:24Z" + message: Cluster has deployed "4.14.0" + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:10:54Z" + message: Cluster version is "4.14.0" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:20Z" + message: DaemonSet "tuned" available + reason: AsExpected + status: "False" + type: Degraded + extension: null + relatedObjects: + - group: "" + name: openshift-cluster-node-tuning-operator + resource: namespaces + - group: tuned.openshift.io + name: "" + namespace: openshift-cluster-node-tuning-operator + resource: profiles + - group: tuned.openshift.io + name: "" + namespace: openshift-cluster-node-tuning-operator + resource: tuneds + - group: apps + name: tuned + namespace: openshift-cluster-node-tuning-operator + resource: daemonsets + - group: performance.openshift.io + name: "" + resource: performanceprofiles + versions: + - name: operator + version: 4.14.0 + - name: openshift-tuned + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: openshift-apiserver + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "27079" + uid: a7fa0042-9ddc-4b33-8d25-9f75d1213306 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:38Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:51Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:14:51Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:38Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: openshiftapiservers + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-apiserver-operator + resource: namespaces + - group: "" + name: openshift-apiserver + resource: namespaces + - group: "" + name: openshift-etcd-operator + resource: namespaces + - group: "" + name: host-etcd-2 + namespace: openshift-etcd + resource: endpoints + - group: controlplane.operator.openshift.io + name: "" + namespace: openshift-apiserver + resource: podnetworkconnectivitychecks + - group: apiregistration.k8s.io + name: v1.apps.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.authorization.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.build.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.image.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.project.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.quota.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.route.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.security.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.template.openshift.io + resource: apiservices + versions: + - name: operator + version: 4.14.0 + - name: openshift-apiserver + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: openshift-controller-manager + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "24978" + uid: 1e9e4f5e-471c-4434-8c51-851fed0f5297 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:38Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:11:39Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:10:08Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:42Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: openshiftcontrollermanagers + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-controller-manager-operator + resource: namespaces + - group: "" + name: openshift-controller-manager + resource: namespaces + - group: "" + name: openshift-route-controller-manager + resource: namespaces + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: openshift-samples + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: openshift-samples + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "22547" + uid: 99d30713-1af5-4067-885c-2295b3aa81e7 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:10:33Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:10:43Z" + message: Samples installation successful at 4.14.0 + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:10:43Z" + message: Samples installation successful at 4.14.0 + status: "False" + type: Progressing + extension: null + relatedObjects: + - group: samples.operator.openshift.io + name: cluster + resource: configs + - group: "" + name: openshift-cluster-samples-operator + resource: namespaces + - group: template.openshift.io + name: "" + namespace: openshift + resource: templates + - group: image.openshift.io + name: "" + namespace: openshift + resource: imagestreams + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: operator-lifecycle-manager + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "9246" + uid: a9a9a4ee-aadd-48e6-9a9c-41c406ad66c2 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:37Z" + message: Deployed 4.14.0-202310201027.p0.gf515d1c.assembly.stream-f515d1c + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:37Z" + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:03:37Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:37Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operators.coreos.com + name: packageserver + namespace: openshift-operator-lifecycle-manager + resource: clusterserviceversions + versions: + - name: operator + version: 4.14.0 + - name: operator-lifecycle-manager + version: 4.14.0-202310201027.p0.gf515d1c.assembly.stream-f515d1c +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:58Z" + generation: 1 + name: operator-lifecycle-manager-catalog + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "15918" + uid: 3c491ea1-ff09-4648-bc23-eebaf20828f9 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:58Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:08:03Z" + message: Deployed 4.14.0-202310201027.p0.gf515d1c.assembly.stream-f515d1c + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:02:58Z" + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:58Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-operator-lifecycle-manager + resource: namespaces + versions: + - name: operator + version: 4.14.0 + - name: operator-lifecycle-manager + version: 4.14.0-202310201027.p0.gf515d1c.assembly.stream-f515d1c +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:58Z" + generation: 1 + name: operator-lifecycle-manager-packageserver + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "20274" + uid: 8bbb5902-19f7-4762-8ddf-66e7d933e7ec + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:37Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:10:08Z" + message: ClusterServiceVersion openshift-operator-lifecycle-manager/packageserver + observed in phase Succeeded + reason: ClusterServiceVersionSucceeded + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:10:08Z" + message: Deployed version 0.0.1-snapshot + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:37Z" + message: Safe to upgrade + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-operator-lifecycle-manager + resource: namespaces + - group: operators.coreos.com + name: packageserver + namespace: openshift-operator-lifecycle-manager + resource: clusterserviceversions + versions: + - name: operator + version: 4.14.0 + - name: packageserver + version: 0.0.1-snapshot +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: service-ca + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "5606" + uid: 0fc6016b-1cea-4fee-a2b5-95353870ced3 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:38Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:02:42Z" + message: 'Progressing: All service-ca-operator deployments updated' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:02:40Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:40Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: servicecas + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-service-ca-operator + resource: namespaces + - group: "" + name: openshift-service-ca + resource: namespaces + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: Storage + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: storage + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "21691" + uid: 9aec2c87-25d2-4375-bc82-93bbf94a3c75 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: 'AWSEBSCSIDriverOperatorCRDegraded: All is well' + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:10:32Z" + message: 'AWSEBSCSIDriverOperatorCRProgressing: All is well' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:46Z" + message: |- + DefaultStorageClassControllerAvailable: StorageClass provided by supplied CSI Driver instead of the cluster-storage-operator + AWSEBSCSIDriverOperatorCRAvailable: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:40Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: aws-ebs-csi-driver-operator + namespace: openshift-cluster-csi-drivers + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: aws-ebs-csi-driver-operator-role + namespace: openshift-cluster-csi-drivers + resource: roles + - group: rbac.authorization.k8s.io + name: aws-ebs-csi-driver-operator-rolebinding + namespace: openshift-cluster-csi-drivers + resource: rolebindings + - group: rbac.authorization.k8s.io + name: aws-ebs-csi-driver-operator-clusterrole + resource: clusterroles + - group: rbac.authorization.k8s.io + name: aws-ebs-csi-driver-operator-clusterrolebinding + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: aws-ebs-csi-driver-operator-aws-config-role + namespace: openshift-config-managed + resource: roles + - group: rbac.authorization.k8s.io + name: aws-ebs-csi-driver-operator-aws-config-clusterrolebinding + namespace: openshift-config-managed + resource: rolebindings + - group: operator.openshift.io + name: ebs.csi.aws.com + resource: clustercsidrivers + - group: "" + name: openshift-cluster-storage-operator + resource: namespaces + - group: "" + name: openshift-cluster-csi-drivers + resource: namespaces + - group: operator.openshift.io + name: cluster + resource: storages + - group: rbac.authorization.k8s.io + name: cluster-storage-operator-role + resource: clusterrolebindings + - group: sharedresource.openshift.io + name: "" + resource: sharedconfigmaps + - group: sharedresource.openshift.io + name: "" + resource: sharedsecrets + versions: + - name: operator + version: 4.14.0 +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-cv.yaml b/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-cv.yaml new file mode 100644 index 0000000000..63d51bef0e --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-cv.yaml @@ -0,0 +1,430 @@ +apiVersion: v1 +items: +- apiVersion: config.openshift.io/v1 + kind: ClusterVersion + metadata: + creationTimestamp: "2024-02-07T15:59:55Z" + generation: 3 + name: version + resourceVersion: "33786" + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + spec: + channel: candidate-4.14 + clusterID: 4acee7ef-728d-43bd-ab41-401873c444ea + desiredUpdate: + image: quay.io/openshift-release-dev/ocp-release@sha256:05ba8e63f8a76e568afe87f182334504a01d47342b6ad5b4c3ff83a2463018bd + version: 4.14.1 + upstream: https://api.integration.openshift.com/api/upgrades_info/graph + status: + availableUpdates: + - channels: + - candidate-4.14 + - candidate-4.15 + image: quay.io/openshift-release-dev/ocp-release@sha256:36783a8b066c96dd6258e818ce51b5a763438adbf56221ea5c4b62ae4f345886 + url: https://access.redhat.com/errata/RHSA-2024:0642 + version: 4.14.11 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:03cc63c0c48b2416889e9ee53f2efc2c940323c15f08384b439c00de8e66e8aa + url: https://access.redhat.com/errata/RHSA-2024:0290 + version: 4.14.10 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:f5eaf0248779a0478cfd83f055d56dc7d755937800a68ad55f6047c503977c44 + url: https://access.redhat.com/errata/RHSA-2024:0204 + version: 4.14.9 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:073a4e46289be25e2a05f5264c8f1d697410db66b960c9ceeddebd1c61e58717 + url: https://access.redhat.com/errata/RHSA-2024:0050 + version: 4.14.8 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:a346fc0c84644e64c726013a98bef0f75e58f246fce1faa83fb6bbbc6d4050aa + url: https://access.redhat.com/errata/RHSA-2023:7831 + version: 4.14.7 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:e5128c3b0ab225e0abf9344dae504e08b82dda4885bbd047e2dbc13cc3d9879b + url: https://access.redhat.com/errata/RHSA-2023:7682 + version: 4.14.6 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:0ec9d715c717b2a592d07dd83860013613529fae69bc9eecb4b2d4ace679f6f3 + url: https://access.redhat.com/errata/RHSA-2023:7599 + version: 4.14.5 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:e6e1d90b492d50438034e6edb46bdafa6c86ae3b80ef3328685912d89681fdee + url: https://access.redhat.com/errata/RHSA-2023:7470 + version: 4.14.4 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:e73ab4b33a9c3ff00c9f800a38d69853ca0c4dfa5a88e3df331f66df8f18ec55 + url: https://access.redhat.com/errata/RHSA-2023:7315 + version: 4.14.3 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:45a396b169974dcbd8aae481c647bf55bcf9f0f8f6222483d407d7cec450928d + url: https://access.redhat.com/errata/RHSA-2023:6837 + version: 4.14.2 + capabilities: + enabledCapabilities: + - Build + - CSISnapshot + - Console + - DeploymentConfig + - ImageRegistry + - Insights + - MachineAPI + - NodeTuning + - Storage + - baremetal + - marketplace + - openshift-samples + knownCapabilities: + - Build + - CSISnapshot + - Console + - DeploymentConfig + - ImageRegistry + - Insights + - MachineAPI + - NodeTuning + - Storage + - baremetal + - marketplace + - openshift-samples + conditionalUpdates: + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:f5eaf0248779a0478cfd83f055d56dc7d755937800a68ad55f6047c503977c44 + url: https://access.redhat.com/errata/RHSA-2024:0204 + version: 4.14.9 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO. + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:073a4e46289be25e2a05f5264c8f1d697410db66b960c9ceeddebd1c61e58717 + url: https://access.redhat.com/errata/RHSA-2024:0050 + version: 4.14.8 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO. + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:a346fc0c84644e64c726013a98bef0f75e58f246fce1faa83fb6bbbc6d4050aa + url: https://access.redhat.com/errata/RHSA-2023:7831 + version: 4.14.7 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO. + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:e5128c3b0ab225e0abf9344dae504e08b82dda4885bbd047e2dbc13cc3d9879b + url: https://access.redhat.com/errata/RHSA-2023:7682 + version: 4.14.6 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO. + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:0ec9d715c717b2a592d07dd83860013613529fae69bc9eecb4b2d4ace679f6f3 + url: https://access.redhat.com/errata/RHSA-2023:7599 + version: 4.14.5 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO. + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:e6e1d90b492d50438034e6edb46bdafa6c86ae3b80ef3328685912d89681fdee + url: https://access.redhat.com/errata/RHSA-2023:7470 + version: 4.14.4 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO. + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:e73ab4b33a9c3ff00c9f800a38d69853ca0c4dfa5a88e3df331f66df8f18ec55 + url: https://access.redhat.com/errata/RHSA-2023:7315 + version: 4.14.3 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:45a396b169974dcbd8aae481c647bf55bcf9f0f8f6222483d407d7cec450928d + url: https://access.redhat.com/errata/RHSA-2023:6837 + version: 4.14.2 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + conditions: + - lastTransitionTime: "2024-02-07T15:59:57Z" + status: "True" + type: RetrievedUpdates + - lastTransitionTime: "2024-02-07T15:59:57Z" + message: Capabilities match configured spec + reason: AsExpected + status: "False" + type: ImplicitlyEnabledCapabilities + - lastTransitionTime: "2024-02-07T15:59:57Z" + message: Payload loaded version="4.14.1" image="quay.io/openshift-release-dev/ocp-release@sha256:05ba8e63f8a76e568afe87f182334504a01d47342b6ad5b4c3ff83a2463018bd" + architecture="amd64" + reason: PayloadLoaded + status: "True" + type: ReleaseAccepted + - lastTransitionTime: "2024-02-07T16:17:57Z" + message: Done applying 4.14.0 + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:17:57Z" + status: "False" + type: Failing + - lastTransitionTime: "2024-02-07T16:31:03Z" + message: 'Working towards 4.14.1: 139 of 859 done (16% complete), waiting on + kube-scheduler' + reason: ClusterOperatorUpdating + status: "True" + type: Progressing + desired: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:05ba8e63f8a76e568afe87f182334504a01d47342b6ad5b4c3ff83a2463018bd + url: https://access.redhat.com/errata/RHBA-2023:6153 + version: 4.14.1 + history: + - completionTime: null + image: quay.io/openshift-release-dev/ocp-release@sha256:05ba8e63f8a76e568afe87f182334504a01d47342b6ad5b4c3ff83a2463018bd + startedTime: "2024-02-07T16:31:03Z" + state: Partial + verified: true + version: 4.14.1 + - completionTime: "2024-02-07T16:17:57Z" + image: registry.build05.ci.openshift.org/ci-ln-lyxhrwb/release@sha256:e2c70fca183e380c6121a1c847806f11e839482123277235a8579db472b9ccf2 + startedTime: "2024-02-07T15:59:57Z" + state: Completed + verified: false + version: 4.14.0 + observedGeneration: 3 + versionHash: I3skQa0FyxU= +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-mc.yaml b/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-mc.yaml new file mode 100644 index 0000000000..b85a5da869 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-mc.yaml @@ -0,0 +1,293 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: master + name: 00-master + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "24839" + uid: b08f1a9c-7481-4b49-8aa9-2444051576fb + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: worker + name: 00-worker + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "24840" + uid: a7addc79-0ce7-4a4a-a195-b17a21533396 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8834" + uid: de9332ff-2a1d-4d31-be98-226f26fb870c + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8835" + uid: 2a6a1cdb-5b79-49d3-983a-cfcced78b29e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8838" + uid: 68ae0e75-b66a-45e8-9c00-85d0dbbac77d + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8846" + uid: ae1a342c-4feb-4f38-89af-cfe8c235d49b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 97-master-generated-kubelet + resourceVersion: "8840" + uid: 316f2737-0397-49fe-85e5-df4e37944b1b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:29Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 97-worker-generated-kubelet + resourceVersion: "8855" + uid: b2480713-fc2b-440a-9dd4-d5bf8cd15d14 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 98-master-generated-kubelet + resourceVersion: "8837" + uid: e11eb47e-ce7f-48b8-9bdd-d125359b43d4 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 98-worker-generated-kubelet + resourceVersion: "8847" + uid: 901f3569-042f-445c-99cc-b34eb2bfc9f0 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8839" + uid: 50011095-9bde-4b05-84b5-c826eab55cdc + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:15Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-ssh + resourceVersion: "1626" + uid: 9d3e5253-fa32-471d-872f-9b3c9fc54014 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8843" + uid: b5101ea4-7deb-4501-89f6-b25d6a8e5c4e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:16Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-ssh + resourceVersion: "1650" + uid: 3152721d-116e-41a5-b9ee-f978fffc80ab + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "25018" + uid: f24cdff8-23e0-4247-bc10-2806c65cac85 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-master-5386b830f950f01bb6bb51c80fb3c072 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "8910" + uid: 811b316d-b1aa-43ba-8a7b-daf14ed7ca5f + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "25021" + uid: 16b2d6db-d799-4646-b156-8354630e422a + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-worker-9afa40a716fbeaa9be7388d0061948d3 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "8909" + uid: 41a76c2c-9c02-443a-8191-e18a316714be +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-mcp.yaml b/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-mcp.yaml new file mode 100644 index 0000000000..a701ba106e --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-mcp.yaml @@ -0,0 +1,162 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 3 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + operator.machineconfiguration.openshift.io/required-for-upgrade: "" + pools.operator.machineconfiguration.openshift.io/master: "" + name: master + resourceVersion: "26226" + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + spec: + configuration: + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-master + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: master + nodeSelector: + matchLabels: + node-role.kubernetes.io/master: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:48Z" + message: All nodes are updated with MachineConfig rendered-master-354cc9845ab33037fa7121a44dafecfd + reason: "" + status: "True" + type: Updated + - lastTransitionTime: "2024-02-07T16:12:48Z" + message: "" + reason: "" + status: "False" + type: Updating + configuration: + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 3 + readyMachineCount: 3 + unavailableMachineCount: 0 + updatedMachineCount: 3 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 4 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + pools.operator.machineconfiguration.openshift.io/worker: "" + name: worker + resourceVersion: "33121" + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + spec: + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-worker + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: worker + nodeSelector: + matchLabels: + node-role.kubernetes.io/worker: "" + paused: true + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:42Z" + message: All nodes are updated with MachineConfig rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + reason: "" + status: "True" + type: Updated + - lastTransitionTime: "2024-02-07T16:12:42Z" + message: "" + reason: "" + status: "False" + type: Updating + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 4 + readyMachineCount: 3 + unavailableMachineCount: 0 + updatedMachineCount: 3 +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-node.yaml b/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-node.yaml new file mode 100644 index 0000000000..9025fa6707 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool-node.yaml @@ -0,0 +1,283 @@ +apiVersion: v1 +items: + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:53Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-20-162.us-east-2.compute.internal + resourceVersion: "33523" + uid: 88626d63-b4f4-44a5-b0bc-4de955567fbe + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:47Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-30-217.us-east-2.compute.internal + resourceVersion: "33379" + uid: fd848867-b28e-4c3f-acc1-5ff79558c60a + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:15Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:15Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:15Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:15Z" + lastTransitionTime: "2024-02-07T16:03:00Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:07:08Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-4-159.us-east-2.compute.internal + resourceVersion: "32167" + uid: 10554f1b-6f2b-4781-8ce0-6abbfb948645 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:27:45Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:27:45Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:27:45Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:27:45Z" + lastTransitionTime: "2024-02-07T16:08:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:48Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-53-40.us-east-2.compute.internal + resourceVersion: "33278" + uid: fa21423d-2616-4381-8889-35cffcaf0772 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:26:34Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:26:34Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:26:34Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:26:34Z" + lastTransitionTime: "2024-02-07T16:02:24Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:50Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-92-180.us-east-2.compute.internal + resourceVersion: "33268" + uid: 4be70dad-dfe6-410d-ae91-d1f16388ac58 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:26:37Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:26:37Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:26:37Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:26:37Z" + lastTransitionTime: "2024-02-07T16:03:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:46Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-99-40.us-east-2.compute.internal + resourceVersion: "31904" + uid: 5e5831bc-5eff-4ea7-9db6-c3f5719d51d5 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:26:57Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:26:57Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:26:57Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:26:57Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool.output b/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool.output new file mode 100644 index 0000000000..6169d7d89e --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-paused-worker-pool.output @@ -0,0 +1,25 @@ +An update is in progress for 6s: Working towards 4.14.1: 139 of 859 done (16% complete), waiting on kube-scheduler + += Control Plane = +Assessment: Progressing +Completion: 12% +Duration: 6s +Operator Status: 33 Total, 33 Available, 0 Progressing, 0 Degraded + += Worker Upgrade = + += Worker Pool = +Worker Pool: worker +Assessment: Excluded +Completion: 0% +Worker Status: 3 Total, 3 Available, 0 Progressing, 3 Outdated, 0 Draining, 3 Excluded, 0 Degraded + +Worker Pool Node(s) +NAME ASSESSMENT PHASE VERSION EST MESSAGE +ip-10-0-20-162.us-east-2.compute.internal Excluded Paused 4.14.0 - +ip-10-0-4-159.us-east-2.compute.internal Excluded Paused 4.14.0 - +ip-10-0-99-40.us-east-2.compute.internal Excluded Paused 4.14.0 - + += Update Health = +SINCE LEVEL IMPACT MESSAGE +- Warning Update Stalled Worker pool worker is paused | Outdated nodes in a paused pool will not be updated. diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-co.yaml b/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-co.yaml new file mode 100644 index 0000000000..61517c9e9e --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-co.yaml @@ -0,0 +1,2847 @@ +apiVersion: v1 +items: +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: authentication + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "41442" + uid: a8fc2e96-14ff-492c-bdde-8b266b9dff08 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:17:37Z" + message: 'OAuthServerDeploymentDegraded: 1 of 3 requested instances are unavailable + for oauth-openshift.openshift-authentication ()' + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:18:27Z" + message: 'AuthenticatorCertKeyProgressing: All is well' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:18:27Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:38Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: authentications + - group: config.openshift.io + name: cluster + resource: authentications + - group: config.openshift.io + name: cluster + resource: infrastructures + - group: config.openshift.io + name: cluster + resource: oauths + - group: route.openshift.io + name: oauth-openshift + namespace: openshift-authentication + resource: routes + - group: "" + name: oauth-openshift + namespace: openshift-authentication + resource: services + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-authentication + resource: namespaces + - group: "" + name: openshift-authentication-operator + resource: namespaces + - group: "" + name: openshift-ingress + resource: namespaces + - group: "" + name: openshift-oauth-apiserver + resource: namespaces + versions: + - name: operator + version: 4.14.1 + - name: oauth-apiserver + version: 4.14.1 + - name: oauth-openshift + version: 4.14.1_openshift +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: baremetal + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: baremetal + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "36038" + uid: c511802d-6900-4e1d-aa9a-bea451744f2c + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:20Z" + reason: WaitingForProvisioningCR + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:20Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:20Z" + message: Waiting for Provisioning CR + reason: WaitingForProvisioningCR + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:03:20Z" + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:03:20Z" + status: "False" + type: Disabled + extension: null + relatedObjects: + - group: "" + name: openshift-machine-api + resource: namespaces + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: baremetalhosts + - group: metal3.io + name: "" + resource: provisioning + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: hostfirmwaresettings + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: firmwareschemas + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: preprovisioningimages + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: bmceventsubscriptions + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: cloud-controller-manager + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "34970" + uid: 0f3dbcaf-dff4-4bda-805d-38e65a254d85 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:01:12Z" + message: Trusted CA Bundle Controller works as expected + reason: AsExpected + status: "True" + type: TrustedCABundleControllerControllerAvailable + - lastTransitionTime: "2024-02-07T16:01:12Z" + message: Trusted CA Bundle Controller works as expected + reason: AsExpected + status: "False" + type: TrustedCABundleControllerControllerDegraded + - lastTransitionTime: "2024-02-07T16:01:13Z" + message: Cloud Config Controller works as expected + reason: AsExpected + status: "True" + type: CloudConfigControllerAvailable + - lastTransitionTime: "2024-02-07T16:01:13Z" + message: Cloud Config Controller works as expected + reason: AsExpected + status: "False" + type: CloudConfigControllerDegraded + - lastTransitionTime: "2024-02-07T16:01:13Z" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:01:13Z" + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:01:13Z" + message: Cluster Cloud Controller Manager Operator is available at 4.14.1 + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:01:13Z" + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:01:13Z" + message: Cluster Cloud Controller Manager Operator owns cloud controllers at + 4.14.1 + reason: AsExpected + status: "True" + type: CloudControllerOwner + extension: null + relatedObjects: + - group: "" + name: openshift-cloud-controller-manager-operator + resource: namespaces + - group: config.openshift.io + name: cloud-controller-manager + resource: clusteroperators + - group: "" + name: openshift-cloud-controller-manager + resource: namespaces + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: cloud-credential + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "37510" + uid: acdbf57d-8e57-412f-9651-39232d575bfc + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:00:48Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:00:48Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:38:45Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:00:48Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: cloudcredential.openshift.io + name: alibaba-disk-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: aws-ebs-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: azure-disk-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: azure-file-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: cloud-credential-operator-gcp-ro-creds + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: cloud-credential-operator-iam-ro + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: operator.openshift.io + name: cluster + resource: cloudcredentials + - group: cloudcredential.openshift.io + name: ibm-powervs-block-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: ibm-vpc-block-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: manila-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-azure-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: "" + name: openshift-cloud-credential-operator + resource: namespaces + - group: cloudcredential.openshift.io + name: openshift-cloud-network-config-controller-aws + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cloud-network-config-controller-azure + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cloud-network-config-controller-gcp + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cloud-network-config-controller-openstack + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cluster-csi-drivers + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-gcp-ccm + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-gcp-pd-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-ibm-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-alibaba + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-azure + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-gcs + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-ibmcos + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-ibmcos-powervs + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-openstack + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-ingress + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-ingress-azure + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-ingress-gcp + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-aws + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-azure + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-gcp + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-ibmcloud + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-nutanix + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-openstack + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-ovirt + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-powervs + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-vsphere + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-network + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-nutanix-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-openstack-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-powervs-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-vmware-vsphere-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-vsphere-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-vsphere-problem-detector + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: ovirt-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: "" + name: pod-identity-webhook + namespace: openshift-cloud-credential-operator + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: pod-identity-webhook + resource: clusterroles + - group: rbac.authorization.k8s.io + name: pod-identity-webhook + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: pod-identity-webhook + namespace: openshift-cloud-credential-operator + resource: roles + - group: rbac.authorization.k8s.io + name: pod-identity-webhook + namespace: openshift-cloud-credential-operator + resource: rolebindings + - group: "" + name: pod-identity-webhook + namespace: openshift-cloud-credential-operator + resource: services + - group: apps + name: pod-identity-webhook + namespace: openshift-cloud-credential-operator + resource: deployments + - group: admissionregistration.k8s.io + name: pod-identity-webhook + resource: mutatingwebhookconfigurations + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: MachineAPI + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: cluster-autoscaler + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "37870" + uid: 0eeca0ac-aa07-4a57-a586-06709250307a + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:18Z" + message: at version 4.14.1 + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:39:30Z" + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:10:32Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:18Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: autoscaling.openshift.io + name: "" + namespace: openshift-machine-api + resource: machineautoscalers + - group: autoscaling.openshift.io + name: "" + namespace: openshift-machine-api + resource: clusterautoscalers + - group: "" + name: openshift-machine-api + resource: namespaces + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: config-operator + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "33345" + uid: 2f4811c0-dccb-4af2-b5f2-2df03d84d3bf + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: configs + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-operator + resource: namespaces + versions: + - name: feature-gates + version: 4.14.1 + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: Console + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: console + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "38512" + uid: f4b08c97-51c3-4ac3-a87c-ee176c0d296e + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:10:04Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:41:24Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:15:33Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:10:04Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: console.openshift.io + name: monitoring-plugin + resource: consoleplugins + - group: operator.openshift.io + name: cluster + resource: consoles + - group: config.openshift.io + name: cluster + resource: consoles + - group: config.openshift.io + name: cluster + resource: infrastructures + - group: config.openshift.io + name: cluster + resource: proxies + - group: config.openshift.io + name: cluster + resource: oauths + - group: oauth.openshift.io + name: console + resource: oauthclients + - group: "" + name: openshift-console-operator + resource: namespaces + - group: "" + name: openshift-console + resource: namespaces + - group: "" + name: console-public + namespace: openshift-config-managed + resource: configmaps + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: MachineAPI + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: control-plane-machine-set + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "35085" + uid: 20ed9952-b37e-414c-ac97-a4d249a6c101 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:06:28Z" + message: cluster operator is upgradable + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:06:28Z" + reason: AllReplicasAvailable + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:06:28Z" + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:18Z" + reason: AllReplicasUpdated + status: "False" + type: Progressing + extension: null + relatedObjects: + - group: "" + name: openshift-machine-api + resource: namespaces + - group: machine.openshift.io + name: "" + resource: controlplanemachinesets + - group: machine.openshift.io + name: "" + resource: machines + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: CSISnapshot + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: csi-snapshot-controller + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "38345" + uid: 4195133e-ae3d-4a19-9735-5655ac2bf58b + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:49Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:37Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:36Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:51Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-cluster-storage-operator + resource: namespaces + - group: operator.openshift.io + name: cluster + resource: csisnapshotcontrollers + versions: + - name: operator + version: 4.14.1 + - name: csi-snapshot-controller + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: dns + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "39623" + uid: 885c019a-c117-498b-a569-b8536acc91df + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:34Z" + message: DNS "default" is available. + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:10:28Z" + message: Desired and current number of DNSes are equal + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:10:51Z" + reason: DNSNotDegraded + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:18Z" + message: 'DNS default is upgradeable: DNS Operator can be upgraded' + reason: DNSUpgradeable + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-dns-operator + resource: namespaces + - group: operator.openshift.io + name: default + resource: dnses + - group: "" + name: openshift-dns + resource: namespaces + versions: + - name: operator + version: 4.14.1 + - name: coredns + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:a70e2c9c546d02844a54c1fa811b22e866ec0f426ea53eba4946c8729701c38e + - name: openshift-cli + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:392a225cf7a152e99cb478708a39de580779597f2b5c528bc85b15fbacf89b0f + - name: kube-rbac-proxy + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:8db8a3708497fb6a8ef42faaa1bcc131af33347bc5960d368d401b77d5d9ba74 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: etcd + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "33553" + uid: c2a73efd-daad-49c5-8ab5-a2953072791d + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:11:07Z" + message: |- + NodeControllerDegraded: All master nodes are ready + EtcdMembersDegraded: No unhealthy members found + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:23:13Z" + message: |- + NodeInstallerProgressing: 3 nodes are at revision 7 + EtcdMembersProgressing: No unstarted etcd members found + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:04:34Z" + message: |- + StaticPodsAvailable: 3 nodes are active; 3 nodes are at revision 7 + EtcdMembersAvailable: 3 members are available + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:31:09Z" + message: UpgradeBackup for 4.14.0 is located at path /etc/kubernetes/cluster-backup/upgrade-backup-4.14.0-2024-02-07_163103 + on node "ip-10-0-53-40.us-east-2.compute.internal" + reason: UpgradeBackupSuccessful + status: "True" + type: RecentBackup + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: etcds + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-etcd-operator + resource: namespaces + - group: "" + name: openshift-etcd + resource: namespaces + versions: + - name: raw-internal + version: 4.14.1 + - name: etcd + version: 4.14.1 + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: ImageRegistry + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: image-registry + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "37739" + uid: 8a885172-d8bf-4145-9f94-d6ddc17fc83a + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:10:38Z" + message: |- + Available: The registry is ready + NodeCADaemonAvailable: The daemon set node-ca has available replicas + ImagePrunerAvailable: Pruner CronJob has been created + reason: Ready + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:39:07Z" + message: |- + Progressing: The registry is ready + NodeCADaemonProgressing: The daemon set node-ca is deployed + reason: Ready + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:10:24Z" + reason: AsExpected + status: "False" + type: Degraded + extension: null + relatedObjects: + - group: imageregistry.operator.openshift.io + name: cluster + resource: configs + - group: imageregistry.operator.openshift.io + name: cluster + resource: imagepruners + - group: rbac.authorization.k8s.io + name: system:registry + resource: clusterroles + - group: rbac.authorization.k8s.io + name: registry-registry-role + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: openshift-image-registry-pruner + resource: clusterrolebindings + - group: "" + name: openshift-image-registry + resource: namespaces + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: ingress + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "40981" + uid: 51b7cd4e-0975-4000-ac03-8ed63be5f398 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:10:36Z" + message: The "default" ingress controller reports Available=True. + reason: IngressAvailable + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:45:02Z" + message: |- + ingresscontroller "default" is progressing: IngressControllerProgressing: One or more status conditions indicate progressing: DeploymentRollingOut=True (DeploymentRollingOut: Waiting for router deployment rollout to finish: 1 of 2 updated replica(s) are available... + ). + reason: Reconciling + status: "True" + type: Progressing + - lastTransitionTime: "2024-02-07T16:11:05Z" + message: The "default" ingress controller reports Degraded=False. + reason: IngressNotDegraded + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:20Z" + reason: IngressControllersUpgradeable + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:03:20Z" + reason: AsExpected + status: "False" + type: EvaluationConditionsDetected + extension: null + relatedObjects: + - group: "" + name: openshift-ingress-operator + resource: namespaces + - group: operator.openshift.io + name: "" + namespace: openshift-ingress-operator + resource: ingresscontrollers + - group: ingress.operator.openshift.io + name: "" + namespace: openshift-ingress-operator + resource: dnsrecords + - group: "" + name: openshift-ingress + resource: namespaces + - group: "" + name: openshift-ingress-canary + resource: namespaces + versions: + - name: operator + version: 4.14.1 + - name: ingress-controller + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:ea192e5c22d4a603ee94c63e4d4598ca4ab1cb3eae952d42f866b65f212be77e + - name: canary-server + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:844f396c2340ebac5ad891479c4abb4987309bae93b89a37a75ce1809c135dec +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: Insights + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: insights + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "37744" + uid: a6d21093-559f-44d7-b0c0-00d0194658b1 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:14:47Z" + message: Insights works as expected + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:18:47Z" + message: no available cluster transfer + reason: NoClusterTransfer + status: "False" + type: ClusterTransferAvailable + - lastTransitionTime: "2024-02-07T16:14:47Z" + message: Insights works as expected + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:14:47Z" + reason: AsExpected + status: "False" + type: Disabled + - lastTransitionTime: "2024-02-07T16:14:47Z" + message: Monitoring the cluster + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:18:47Z" + message: 'Failed to pull SCA certs from https://api.openshift.com/api/accounts_mgmt/v1/certificates: + OCM API https://api.openshift.com/api/accounts_mgmt/v1/certificates returned + HTTP 403: {"code":"ACCT-MGMT-11","href":"/api/accounts_mgmt/v1/errors/11","id":"11","kind":"Error","operation_id":"12c6f888-630f-4e98-b22d-c4b153ec7751","reason":"Account + with ID 2DUeKzzTD9ngfsQ6YgkzdJn1jA4 denied access to perform create on Certificate + with HTTP call POST /api/accounts_mgmt/v1/certificates"}' + reason: Forbidden + status: "False" + type: SCAAvailable + - lastTransitionTime: "2024-02-07T16:14:47Z" + message: Insights operator can be upgraded + reason: InsightsUpgradeable + status: "True" + type: Upgradeable + extension: + lastReportTime: "2024-02-07T16:39:07Z" + relatedObjects: + - group: "" + name: openshift-insights + resource: namespaces + - group: apps + name: insights-operator + namespace: openshift-insights + resource: deployments + - group: "" + name: pull-secret + namespace: openshift-config + resource: secrets + - group: "" + name: support + namespace: openshift-config + resource: secrets + - group: "" + name: gather + namespace: openshift-insights + resource: serviceaccounts + - group: "" + name: operator + namespace: openshift-insights + resource: serviceaccounts + - group: "" + name: metrics + namespace: openshift-insights + resource: services + - group: "" + name: service-ca-bundle + namespace: openshift-insights + resource: configmaps + - group: operator.openshift.io + name: cluster + resource: insightsoperators + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: kube-apiserver + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "33652" + uid: b2e4f855-7803-4e88-9135-a5afe4a6220e + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:17:44Z" + message: 'NodeControllerDegraded: All master nodes are ready' + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:18:22Z" + message: 'NodeInstallerProgressing: 3 nodes are at revision 7' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:15:03Z" + message: 'StaticPodsAvailable: 3 nodes are active; 3 nodes are at revision 7' + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:39Z" + message: 'KubeletMinorVersionUpgradeable: Kubelet and API server minor versions + are synced.' + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: kubeapiservers + - group: apiextensions.k8s.io + name: "" + resource: customresourcedefinitions + - group: security.openshift.io + name: "" + resource: securitycontextconstraints + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-kube-apiserver-operator + resource: namespaces + - group: "" + name: openshift-kube-apiserver + resource: namespaces + - group: admissionregistration.k8s.io + name: "" + resource: mutatingwebhookconfigurations + - group: admissionregistration.k8s.io + name: "" + resource: validatingwebhookconfigurations + - group: controlplane.operator.openshift.io + name: "" + namespace: openshift-kube-apiserver + resource: podnetworkconnectivitychecks + - group: apiserver.openshift.io + name: "" + resource: apirequestcounts + - group: config.openshift.io + name: cluster + resource: nodes + versions: + - name: raw-internal + version: 4.14.1 + - name: operator + version: 4.14.1 + - name: kube-apiserver + version: 1.27.6 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: kube-controller-manager + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "33779" + uid: e3b7d5ee-a583-4d0b-a733-d28eb8cb32a9 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:11:05Z" + message: 'NodeControllerDegraded: All master nodes are ready' + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:18:55Z" + message: 'NodeInstallerProgressing: 3 nodes are at revision 6' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:06:50Z" + message: 'StaticPodsAvailable: 3 nodes are active; 3 nodes are at revision 6' + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:38Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: kubecontrollermanagers + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-kube-controller-manager + resource: namespaces + - group: "" + name: openshift-kube-controller-manager-operator + resource: namespaces + - group: "" + name: kube-system + resource: namespaces + - group: certificates.k8s.io + name: "" + resource: certificatesigningrequests + - group: "" + name: "" + resource: nodes + - group: config.openshift.io + name: cluster + resource: nodes + versions: + - name: raw-internal + version: 4.14.1 + - name: kube-controller-manager + version: 1.27.6 + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: kube-scheduler + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "33942" + uid: 81338e7b-7de0-48b9-858b-95f1264a826f + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:11:06Z" + message: 'NodeControllerDegraded: All master nodes are ready' + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:13:32Z" + message: 'NodeInstallerProgressing: 3 nodes are at revision 6' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:06:57Z" + message: 'StaticPodsAvailable: 3 nodes are active; 3 nodes are at revision 6' + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:49Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: kubeschedulers + - group: config.openshift.io + name: "" + resource: schedulers + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-kube-scheduler + resource: namespaces + - group: "" + name: openshift-kube-scheduler-operator + resource: namespaces + - group: controlplane.operator.openshift.io + name: "" + namespace: openshift-kube-apiserver + resource: podnetworkconnectivitychecks + versions: + - name: raw-internal + version: 4.14.1 + - name: kube-scheduler + version: 1.27.6 + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: kube-storage-version-migrator + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "41403" + uid: adb18b8b-89be-4540-b8c3-823050b947ff + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:45:06Z" + message: 'KubeStorageVersionMigratorProgressing: Waiting for Deployment to deploy + pods' + reason: KubeStorageVersionMigrator_Deploying + status: "True" + type: Progressing + - lastTransitionTime: "2024-02-07T16:45:06Z" + message: 'KubeStorageVersionMigratorAvailable: Waiting for Deployment' + reason: KubeStorageVersionMigrator_Deploying + status: "False" + type: Available + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: kubestorageversionmigrators + - group: migration.k8s.io + name: "" + resource: storageversionmigrations + - group: "" + name: openshift-kube-storage-version-migrator + resource: namespaces + - group: "" + name: openshift-kube-storage-version-migrator-operator + resource: namespaces + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: MachineAPI + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: machine-api + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "35863" + uid: 5ee317fc-9796-42dc-8ad9-3e3856bac3a9 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:37:46Z" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:10:32Z" + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:10:32Z" + message: 'Cluster Machine API Operator is available at operator: 4.14.1' + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:03:20Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-machine-api + resource: namespaces + - group: machine.openshift.io + name: "" + namespace: openshift-machine-api + resource: machines + - group: machine.openshift.io + name: "" + namespace: openshift-machine-api + resource: machinesets + - group: machine.openshift.io + name: "" + namespace: openshift-machine-api + resource: machinehealthchecks + - group: rbac.authorization.k8s.io + name: "" + namespace: openshift-machine-api + resource: roles + - group: rbac.authorization.k8s.io + name: machine-api-operator + resource: clusterroles + - group: rbac.authorization.k8s.io + name: machine-api-controllers + resource: clusterroles + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: baremetalhosts + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: machine-approver + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "36432" + uid: 4f18a970-7e6d-4732-a990-b1f9b4134152 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:19Z" + message: Cluster Machine Approver is available at 4.14.1 + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:03:19Z" + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:19Z" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:19Z" + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-cluster-machine-approver + resource: namespaces + - group: certificates.k8s.io + name: "" + resource: certificatesigningrequests + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: machine-config + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "41556" + uid: 69e8a41b-a2a7-4dda-af8f-eebb081d8428 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:43:57Z" + message: Working towards 4.14.1 + status: "True" + type: Progressing + - lastTransitionTime: "2024-02-07T16:44:53Z" + message: One or more machine config pools are updating, please see `oc get mcp` + for further details + reason: PoolUpdating + status: "False" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:04:46Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:04:46Z" + message: Cluster has deployed [{operator 4.14.0}] + reason: AsExpected + status: "True" + type: Available + extension: + master: 0 (ready 0) out of 3 nodes are updating to latest configuration rendered-master-525f869154e60488dd73d26a2b1dc5e1 + worker: 0 (ready 0) out of 3 nodes are updating to latest configuration rendered-worker-a20a4a460943e95eba3eb28473e45349 + relatedObjects: + - group: "" + name: openshift-machine-config-operator + resource: namespaces + - group: machineconfiguration.openshift.io + name: "" + resource: machineconfigpools + - group: machineconfiguration.openshift.io + name: "" + resource: controllerconfigs + - group: machineconfiguration.openshift.io + name: "" + resource: kubeletconfigs + - group: machineconfiguration.openshift.io + name: "" + resource: containerruntimeconfigs + - group: machineconfiguration.openshift.io + name: "" + resource: machineconfigs + - group: "" + name: "" + resource: nodes + - group: "" + name: openshift-kni-infra + resource: namespaces + - group: "" + name: openshift-openstack-infra + resource: namespaces + - group: "" + name: openshift-ovirt-infra + resource: namespaces + - group: "" + name: openshift-vsphere-infra + resource: namespaces + - group: "" + name: openshift-nutanix-infra + resource: namespaces + versions: + - name: operator + version: 4.14.0 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: marketplace + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: marketplace + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "37912" + uid: 0c856453-d72b-4c44-8934-a5c8bea521c9 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:20Z" + message: 'Successfully progressed to release version: 4.14.1' + reason: OperatorAvailable + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:20Z" + message: 'Available release version: 4.14.1' + reason: OperatorAvailable + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:03:20Z" + message: Marketplace is upgradeable + reason: OperatorAvailable + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:03:20Z" + message: 'Available release version: 4.14.1' + reason: OperatorAvailable + status: "False" + type: Degraded + extension: null + relatedObjects: + - group: "" + name: openshift-marketplace + resource: namespaces + - group: operators.coreos.com + name: "" + namespace: openshift-marketplace + resource: catalogsources + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: monitoring + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "37550" + uid: 8de2949a-ab04-428e-ad2d-68760550b95d + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:11:32Z" + message: Successfully rolled out the stack. + reason: RollOutDone + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:11:32Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:38:53Z" + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:11:32Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-monitoring + resource: namespaces + - group: "" + name: openshift-user-workload-monitoring + resource: namespaces + - group: monitoring.coreos.com + name: "" + resource: servicemonitors + - group: monitoring.coreos.com + name: "" + resource: podmonitors + - group: monitoring.coreos.com + name: "" + resource: prometheusrules + - group: monitoring.coreos.com + name: "" + resource: alertmanagers + - group: monitoring.coreos.com + name: "" + resource: prometheuses + - group: monitoring.coreos.com + name: "" + resource: thanosrulers + - group: monitoring.coreos.com + name: "" + resource: alertmanagerconfigs + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + network.operator.openshift.io/last-seen-state: '{"DaemonsetStates":[],"DeploymentStates":[],"StatefulsetStates":[]}' + network.operator.openshift.io/relatedClusterObjects: "" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: network + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "41170" + uid: a9095e19-301e-4cf4-b2e2-bb64bc338e9f + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:09:55Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:01:22Z" + status: "False" + type: ManagementStateDegraded + - lastTransitionTime: "2024-02-07T16:01:22Z" + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-07T16:45:00Z" + message: Deployment "/openshift-cloud-network-config-controller/cloud-network-config-controller" + is not available (awaiting 1 nodes) + reason: Deploying + status: "True" + type: Progressing + - lastTransitionTime: "2024-02-07T16:01:32Z" + status: "True" + type: Available + extension: null + relatedObjects: + - group: "" + name: applied-cluster + namespace: openshift-network-operator + resource: configmaps + - group: apiextensions.k8s.io + name: cloudprivateipconfigs.cloud.network.openshift.io + resource: customresourcedefinitions + - group: "" + name: cloud-network-config-controller + namespace: openshift-cloud-network-config-controller + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: cloud-network-config-controller + resource: clusterroles + - group: rbac.authorization.k8s.io + name: cloud-network-config-controller + namespace: openshift-cloud-network-config-controller + resource: roles + - group: rbac.authorization.k8s.io + name: cloud-network-config-controller + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: cloud-network-config-controller-rb + namespace: openshift-cloud-network-config-controller + resource: rolebindings + - group: "" + name: kube-cloud-config + namespace: openshift-cloud-network-config-controller + resource: configmaps + - group: "" + name: trusted-ca + namespace: openshift-cloud-network-config-controller + resource: configmaps + - group: apps + name: cloud-network-config-controller + namespace: openshift-cloud-network-config-controller + resource: deployments + - group: apiextensions.k8s.io + name: network-attachment-definitions.k8s.cni.cncf.io + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: ippools.whereabouts.cni.cncf.io + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: overlappingrangeipreservations.whereabouts.cni.cncf.io + resource: customresourcedefinitions + - group: "" + name: openshift-multus + resource: namespaces + - group: rbac.authorization.k8s.io + name: multus + resource: clusterroles + - group: rbac.authorization.k8s.io + name: multus-ancillary-tools + resource: clusterroles + - group: "" + name: multus + namespace: openshift-multus + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: multus-transient + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: multus-group + resource: clusterrolebindings + - group: "" + name: multus-ancillary-tools + namespace: openshift-multus + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: multus-ancillary-tools + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: multus-cluster-readers + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: multus-whereabouts + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: multus-whereabouts + namespace: openshift-multus + resource: rolebindings + - group: rbac.authorization.k8s.io + name: whereabouts-cni + resource: clusterroles + - group: rbac.authorization.k8s.io + name: whereabouts-cni + namespace: openshift-multus + resource: roles + - group: rbac.authorization.k8s.io + name: net-attach-def-project + resource: clusterroles + - group: "" + name: default-cni-sysctl-allowlist + namespace: openshift-multus + resource: configmaps + - group: "" + name: cni-copy-resources + namespace: openshift-multus + resource: configmaps + - group: "" + name: multus-daemon-config + namespace: openshift-multus + resource: configmaps + - group: apps + name: multus + namespace: openshift-multus + resource: daemonsets + - group: apps + name: multus-additional-cni-plugins + namespace: openshift-multus + resource: daemonsets + - group: "" + name: metrics-daemon-sa + namespace: openshift-multus + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: metrics-daemon-role + resource: clusterroles + - group: rbac.authorization.k8s.io + name: metrics-daemon-sa-rolebinding + resource: clusterrolebindings + - group: apps + name: network-metrics-daemon + namespace: openshift-multus + resource: daemonsets + - group: monitoring.coreos.com + name: monitor-network + namespace: openshift-multus + resource: servicemonitors + - group: "" + name: network-metrics-service + namespace: openshift-multus + resource: services + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-multus + resource: roles + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-multus + resource: rolebindings + - group: "" + name: multus-admission-controller + namespace: openshift-multus + resource: services + - group: "" + name: multus-ac + namespace: openshift-multus + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: multus-admission-controller-webhook + resource: clusterroles + - group: rbac.authorization.k8s.io + name: multus-admission-controller-webhook + resource: clusterrolebindings + - group: admissionregistration.k8s.io + name: multus.openshift.io + resource: validatingwebhookconfigurations + - group: apps + name: multus-admission-controller + namespace: openshift-multus + resource: deployments + - group: monitoring.coreos.com + name: monitor-multus-admission-controller + namespace: openshift-multus + resource: servicemonitors + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-multus + resource: roles + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-multus + resource: rolebindings + - group: monitoring.coreos.com + name: prometheus-k8s-rules + namespace: openshift-multus + resource: prometheusrules + - group: "" + name: openshift-ovn-kubernetes + resource: namespaces + - group: apiextensions.k8s.io + name: egressfirewalls.k8s.ovn.org + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: egressips.k8s.ovn.org + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: egressqoses.k8s.ovn.org + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: adminpolicybasedexternalroutes.k8s.ovn.org + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: egressservices.k8s.ovn.org + resource: customresourcedefinitions + - group: "" + name: ovn-kubernetes-node + namespace: openshift-ovn-kubernetes + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-node-limited + namespace: openshift-ovn-kubernetes + resource: roles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-nodes-identity-limited + namespace: openshift-ovn-kubernetes + resource: rolebindings + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-node-limited + resource: clusterroles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-node-identity-limited + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-kube-rbac-proxy + resource: clusterroles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-node-kube-rbac-proxy + resource: clusterrolebindings + - group: "" + name: ovn-kubernetes-controller + namespace: openshift-ovn-kubernetes + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-controller-limited + resource: clusterroles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-controller-limited + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-sbdb + namespace: openshift-ovn-kubernetes + resource: roles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-sbdb + namespace: openshift-ovn-kubernetes + resource: rolebindings + - group: "" + name: ovnkube-config + namespace: openshift-ovn-kubernetes + resource: configmaps + - group: "" + name: ovn-kubernetes-control-plane + namespace: openshift-ovn-kubernetes + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-control-plane-limited + resource: clusterroles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-control-plane-limited + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-control-plane-limited + namespace: openshift-ovn-kubernetes + resource: roles + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-control-plane-limited + namespace: openshift-ovn-kubernetes + resource: rolebindings + - group: network.operator.openshift.io + name: ovn + namespace: openshift-ovn-kubernetes + resource: operatorpkis + - group: network.operator.openshift.io + name: signer + namespace: openshift-ovn-kubernetes + resource: operatorpkis + - group: flowcontrol.apiserver.k8s.io + name: openshift-ovn-kubernetes + resource: flowschemas + - group: rbac.authorization.k8s.io + name: openshift-ovn-kubernetes-cluster-reader + resource: clusterroles + - group: monitoring.coreos.com + name: master-rules + namespace: openshift-ovn-kubernetes + resource: prometheusrules + - group: monitoring.coreos.com + name: networking-rules + namespace: openshift-ovn-kubernetes + resource: prometheusrules + - group: "" + name: openshift-network-features + namespace: openshift-config-managed + resource: configmaps + - group: monitoring.coreos.com + name: monitor-ovn-control-plane-metrics + namespace: openshift-ovn-kubernetes + resource: servicemonitors + - group: "" + name: ovn-kubernetes-control-plane + namespace: openshift-ovn-kubernetes + resource: services + - group: monitoring.coreos.com + name: monitor-ovn-node + namespace: openshift-ovn-kubernetes + resource: servicemonitors + - group: "" + name: ovn-kubernetes-node + namespace: openshift-ovn-kubernetes + resource: services + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-ovn-kubernetes + resource: roles + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-ovn-kubernetes + resource: rolebindings + - group: "" + name: openshift-host-network + resource: namespaces + - group: "" + name: host-network-namespace-quotas + namespace: openshift-host-network + resource: resourcequotas + - group: apps + name: ovnkube-control-plane + namespace: openshift-ovn-kubernetes + resource: deployments + - group: apps + name: ovnkube-node + namespace: openshift-ovn-kubernetes + resource: daemonsets + - group: "" + name: openshift-network-diagnostics + resource: namespaces + - group: "" + name: network-diagnostics + namespace: openshift-network-diagnostics + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: network-diagnostics + namespace: openshift-network-diagnostics + resource: roles + - group: rbac.authorization.k8s.io + name: network-diagnostics + namespace: openshift-network-diagnostics + resource: rolebindings + - group: rbac.authorization.k8s.io + name: network-diagnostics + resource: clusterroles + - group: rbac.authorization.k8s.io + name: network-diagnostics + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: network-diagnostics + namespace: kube-system + resource: rolebindings + - group: apps + name: network-check-source + namespace: openshift-network-diagnostics + resource: deployments + - group: "" + name: network-check-source + namespace: openshift-network-diagnostics + resource: services + - group: monitoring.coreos.com + name: network-check-source + namespace: openshift-network-diagnostics + resource: servicemonitors + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-network-diagnostics + resource: roles + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-network-diagnostics + resource: rolebindings + - group: apps + name: network-check-target + namespace: openshift-network-diagnostics + resource: daemonsets + - group: "" + name: network-check-target + namespace: openshift-network-diagnostics + resource: services + - group: rbac.authorization.k8s.io + name: openshift-network-public-role + namespace: openshift-config-managed + resource: roles + - group: rbac.authorization.k8s.io + name: openshift-network-public-role-binding + namespace: openshift-config-managed + resource: rolebindings + - group: "" + name: openshift-network-node-identity + resource: namespaces + - group: "" + name: network-node-identity + namespace: openshift-network-node-identity + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: network-node-identity + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: network-node-identity + resource: clusterroles + - group: rbac.authorization.k8s.io + name: network-node-identity-leases + namespace: openshift-network-node-identity + resource: rolebindings + - group: rbac.authorization.k8s.io + name: network-node-identity-leases + namespace: openshift-network-node-identity + resource: roles + - group: rbac.authorization.k8s.io + name: system:openshift:scc:hostnetwork-v2 + namespace: openshift-network-node-identity + resource: rolebindings + - group: "" + name: ovnkube-identity-cm + namespace: openshift-network-node-identity + resource: configmaps + - group: network.operator.openshift.io + name: network-node-identity + namespace: openshift-network-node-identity + resource: operatorpkis + - group: admissionregistration.k8s.io + name: network-node-identity.openshift.io + resource: validatingwebhookconfigurations + - group: apps + name: network-node-identity + namespace: openshift-network-node-identity + resource: daemonsets + - group: "" + name: openshift-network-operator + resource: namespaces + - group: operator.openshift.io + name: cluster + resource: networks + - group: "" + name: openshift-cloud-network-config-controller + resource: namespaces + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: NodeTuning + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: node-tuning + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "37768" + uid: 2b192c2f-2507-46cd-b8ca-7b25a960df05 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:39:02Z" + message: Cluster has deployed "4.14.1" + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:39:08Z" + message: Cluster version is "4.14.1" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:20Z" + message: DaemonSet "tuned" available + reason: AsExpected + status: "False" + type: Degraded + extension: null + relatedObjects: + - group: "" + name: openshift-cluster-node-tuning-operator + resource: namespaces + - group: tuned.openshift.io + name: "" + namespace: openshift-cluster-node-tuning-operator + resource: profiles + - group: tuned.openshift.io + name: "" + namespace: openshift-cluster-node-tuning-operator + resource: tuneds + - group: apps + name: tuned + namespace: openshift-cluster-node-tuning-operator + resource: daemonsets + - group: performance.openshift.io + name: "" + resource: performanceprofiles + versions: + - name: operator + version: 4.14.1 + - name: openshift-tuned + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: openshift-apiserver + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "41349" + uid: a7fa0042-9ddc-4b33-8d25-9f75d1213306 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:38Z" + message: 'APIServerDeploymentDegraded: 1 of 3 requested instances are unavailable + for apiserver.openshift-apiserver (container is not ready in apiserver-8479fc8fc5-rbppb + pod)' + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:51Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:14:51Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:38Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: openshiftapiservers + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-apiserver-operator + resource: namespaces + - group: "" + name: openshift-apiserver + resource: namespaces + - group: "" + name: openshift-etcd-operator + resource: namespaces + - group: "" + name: host-etcd-2 + namespace: openshift-etcd + resource: endpoints + - group: controlplane.operator.openshift.io + name: "" + namespace: openshift-apiserver + resource: podnetworkconnectivitychecks + - group: apiregistration.k8s.io + name: v1.apps.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.authorization.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.build.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.image.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.project.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.quota.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.route.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.security.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.template.openshift.io + resource: apiservices + versions: + - name: operator + version: 4.14.1 + - name: openshift-apiserver + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: openshift-controller-manager + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "38309" + uid: 1e9e4f5e-471c-4434-8c51-851fed0f5297 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:38Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:40:59Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:10:08Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:42Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: openshiftcontrollermanagers + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-controller-manager-operator + resource: namespaces + - group: "" + name: openshift-controller-manager + resource: namespaces + - group: "" + name: openshift-route-controller-manager + resource: namespaces + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: openshift-samples + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: openshift-samples + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "37421" + uid: 99d30713-1af5-4067-885c-2295b3aa81e7 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:10:33Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:38:43Z" + message: Samples installation successful at 4.14.1 + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:38:43Z" + message: Samples installation successful at 4.14.1 + status: "False" + type: Progressing + extension: null + relatedObjects: + - group: samples.operator.openshift.io + name: cluster + resource: configs + - group: "" + name: openshift-cluster-samples-operator + resource: namespaces + - group: template.openshift.io + name: "" + namespace: openshift + resource: templates + - group: image.openshift.io + name: "" + namespace: openshift + resource: imagestreams + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: operator-lifecycle-manager + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "37235" + uid: a9a9a4ee-aadd-48e6-9a9c-41c406ad66c2 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:37Z" + message: Deployed 4.14.0-202310201027.p0.gf515d1c.assembly.stream-f515d1c + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:37Z" + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:03:37Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:03:37Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operators.coreos.com + name: packageserver + namespace: openshift-operator-lifecycle-manager + resource: clusterserviceversions + versions: + - name: operator + version: 4.14.1 + - name: operator-lifecycle-manager + version: 4.14.0-202310201027.p0.gf515d1c.assembly.stream-f515d1c +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:58Z" + generation: 1 + name: operator-lifecycle-manager-catalog + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "39756" + uid: 3c491ea1-ff09-4648-bc23-eebaf20828f9 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:58Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:43:41Z" + message: Deployed 4.14.0-202310201027.p0.gf515d1c.assembly.stream-f515d1c + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:02:58Z" + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:58Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-operator-lifecycle-manager + resource: namespaces + versions: + - name: operator + version: 4.14.1 + - name: operator-lifecycle-manager + version: 4.14.0-202310201027.p0.gf515d1c.assembly.stream-f515d1c +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2024-02-07T15:59:58Z" + generation: 1 + name: operator-lifecycle-manager-packageserver + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "37217" + uid: 8bbb5902-19f7-4762-8ddf-66e7d933e7ec + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:37Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:10:08Z" + message: ClusterServiceVersion openshift-operator-lifecycle-manager/packageserver + observed in phase Succeeded + reason: ClusterServiceVersionSucceeded + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:10:08Z" + message: Deployed version 0.0.1-snapshot + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:37Z" + message: Safe to upgrade + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-operator-lifecycle-manager + resource: namespaces + - group: operators.coreos.com + name: packageserver + namespace: openshift-operator-lifecycle-manager + resource: clusterserviceversions + versions: + - name: operator + version: 4.14.1 + - name: packageserver + version: 0.0.1-snapshot +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: service-ca + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "41132" + uid: 0fc6016b-1cea-4fee-a2b5-95353870ced3 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:38Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:45:03Z" + message: 'Progressing: All service-ca-operator deployments updated' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:02:40Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:40Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: servicecas + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-service-ca-operator + resource: namespaces + - group: "" + name: openshift-service-ca + resource: namespaces + versions: + - name: operator + version: 4.14.1 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: Storage + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2024-02-07T15:59:57Z" + generation: 1 + name: storage + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + resourceVersion: "41521" + uid: 9aec2c87-25d2-4375-bc82-93bbf94a3c75 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-07T16:02:37Z" + message: 'AWSEBSCSIDriverOperatorCRDegraded: All is well' + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:45:07Z" + message: 'AWSEBSCSIDriverOperatorCRProgressing: All is well' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T16:03:46Z" + message: |- + DefaultStorageClassControllerAvailable: StorageClass provided by supplied CSI Driver instead of the cluster-storage-operator + AWSEBSCSIDriverOperatorCRAvailable: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:02:40Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: aws-ebs-csi-driver-operator + namespace: openshift-cluster-csi-drivers + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: aws-ebs-csi-driver-operator-role + namespace: openshift-cluster-csi-drivers + resource: roles + - group: rbac.authorization.k8s.io + name: aws-ebs-csi-driver-operator-rolebinding + namespace: openshift-cluster-csi-drivers + resource: rolebindings + - group: rbac.authorization.k8s.io + name: aws-ebs-csi-driver-operator-clusterrole + resource: clusterroles + - group: rbac.authorization.k8s.io + name: aws-ebs-csi-driver-operator-clusterrolebinding + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: aws-ebs-csi-driver-operator-aws-config-role + namespace: openshift-config-managed + resource: roles + - group: rbac.authorization.k8s.io + name: aws-ebs-csi-driver-operator-aws-config-clusterrolebinding + namespace: openshift-config-managed + resource: rolebindings + - group: operator.openshift.io + name: ebs.csi.aws.com + resource: clustercsidrivers + - group: "" + name: openshift-cluster-storage-operator + resource: namespaces + - group: "" + name: openshift-cluster-csi-drivers + resource: namespaces + - group: operator.openshift.io + name: cluster + resource: storages + - group: rbac.authorization.k8s.io + name: cluster-storage-operator-role + resource: clusterrolebindings + - group: sharedresource.openshift.io + name: "" + resource: sharedconfigmaps + - group: sharedresource.openshift.io + name: "" + resource: sharedsecrets + versions: + - name: operator + version: 4.14.1 +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-cv.yaml b/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-cv.yaml new file mode 100644 index 0000000000..ef89a2f934 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-cv.yaml @@ -0,0 +1,430 @@ +apiVersion: v1 +items: +- apiVersion: config.openshift.io/v1 + kind: ClusterVersion + metadata: + creationTimestamp: "2024-02-07T15:59:55Z" + generation: 3 + name: version + resourceVersion: "40061" + uid: 16ac3a1e-7f9a-414c-83a4-d67f415835a5 + spec: + channel: candidate-4.14 + clusterID: 4acee7ef-728d-43bd-ab41-401873c444ea + desiredUpdate: + image: quay.io/openshift-release-dev/ocp-release@sha256:05ba8e63f8a76e568afe87f182334504a01d47342b6ad5b4c3ff83a2463018bd + version: 4.14.1 + upstream: https://api.integration.openshift.com/api/upgrades_info/graph + status: + availableUpdates: + - channels: + - candidate-4.14 + - candidate-4.15 + image: quay.io/openshift-release-dev/ocp-release@sha256:36783a8b066c96dd6258e818ce51b5a763438adbf56221ea5c4b62ae4f345886 + url: https://access.redhat.com/errata/RHSA-2024:0642 + version: 4.14.11 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:03cc63c0c48b2416889e9ee53f2efc2c940323c15f08384b439c00de8e66e8aa + url: https://access.redhat.com/errata/RHSA-2024:0290 + version: 4.14.10 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:f5eaf0248779a0478cfd83f055d56dc7d755937800a68ad55f6047c503977c44 + url: https://access.redhat.com/errata/RHSA-2024:0204 + version: 4.14.9 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:073a4e46289be25e2a05f5264c8f1d697410db66b960c9ceeddebd1c61e58717 + url: https://access.redhat.com/errata/RHSA-2024:0050 + version: 4.14.8 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:a346fc0c84644e64c726013a98bef0f75e58f246fce1faa83fb6bbbc6d4050aa + url: https://access.redhat.com/errata/RHSA-2023:7831 + version: 4.14.7 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:e5128c3b0ab225e0abf9344dae504e08b82dda4885bbd047e2dbc13cc3d9879b + url: https://access.redhat.com/errata/RHSA-2023:7682 + version: 4.14.6 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:0ec9d715c717b2a592d07dd83860013613529fae69bc9eecb4b2d4ace679f6f3 + url: https://access.redhat.com/errata/RHSA-2023:7599 + version: 4.14.5 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:e6e1d90b492d50438034e6edb46bdafa6c86ae3b80ef3328685912d89681fdee + url: https://access.redhat.com/errata/RHSA-2023:7470 + version: 4.14.4 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:e73ab4b33a9c3ff00c9f800a38d69853ca0c4dfa5a88e3df331f66df8f18ec55 + url: https://access.redhat.com/errata/RHSA-2023:7315 + version: 4.14.3 + - channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:45a396b169974dcbd8aae481c647bf55bcf9f0f8f6222483d407d7cec450928d + url: https://access.redhat.com/errata/RHSA-2023:6837 + version: 4.14.2 + capabilities: + enabledCapabilities: + - Build + - CSISnapshot + - Console + - DeploymentConfig + - ImageRegistry + - Insights + - MachineAPI + - NodeTuning + - Storage + - baremetal + - marketplace + - openshift-samples + knownCapabilities: + - Build + - CSISnapshot + - Console + - DeploymentConfig + - ImageRegistry + - Insights + - MachineAPI + - NodeTuning + - Storage + - baremetal + - marketplace + - openshift-samples + conditionalUpdates: + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:f5eaf0248779a0478cfd83f055d56dc7d755937800a68ad55f6047c503977c44 + url: https://access.redhat.com/errata/RHSA-2024:0204 + version: 4.14.9 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO. + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:073a4e46289be25e2a05f5264c8f1d697410db66b960c9ceeddebd1c61e58717 + url: https://access.redhat.com/errata/RHSA-2024:0050 + version: 4.14.8 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO. + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:a346fc0c84644e64c726013a98bef0f75e58f246fce1faa83fb6bbbc6d4050aa + url: https://access.redhat.com/errata/RHSA-2023:7831 + version: 4.14.7 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO. + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:e5128c3b0ab225e0abf9344dae504e08b82dda4885bbd047e2dbc13cc3d9879b + url: https://access.redhat.com/errata/RHSA-2023:7682 + version: 4.14.6 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO. + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:0ec9d715c717b2a592d07dd83860013613529fae69bc9eecb4b2d4ace679f6f3 + url: https://access.redhat.com/errata/RHSA-2023:7599 + version: 4.14.5 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO. + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:e6e1d90b492d50438034e6edb46bdafa6c86ae3b80ef3328685912d89681fdee + url: https://access.redhat.com/errata/RHSA-2023:7470 + version: 4.14.4 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO. + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:e73ab4b33a9c3ff00c9f800a38d69853ca0c4dfa5a88e3df331f66df8f18ec55 + url: https://access.redhat.com/errata/RHSA-2023:7315 + version: 4.14.3 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + - conditions: + - lastTransitionTime: "2024-02-07T16:31:06Z" + message: The update is recommended, because none of the conditional update + risks apply to this cluster. + reason: AsExpected + status: "True" + type: Recommended + release: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:45a396b169974dcbd8aae481c647bf55bcf9f0f8f6222483d407d7cec450928d + url: https://access.redhat.com/errata/RHSA-2023:6837 + version: 4.14.2 + risks: + - matchingRules: + - promql: + promql: | + ( + group(cluster_operator_conditions{name="aro"}) + or + 0 * group(cluster_operator_conditions) + ) + type: PromQL + message: Adding a new worker node will fail for clusters running on ARO + name: AROBrokenDNSMasq + url: https://issues.redhat.com/browse/MCO-958 + conditions: + - lastTransitionTime: "2024-02-07T15:59:57Z" + status: "True" + type: RetrievedUpdates + - lastTransitionTime: "2024-02-07T15:59:57Z" + message: Capabilities match configured spec + reason: AsExpected + status: "False" + type: ImplicitlyEnabledCapabilities + - lastTransitionTime: "2024-02-07T15:59:57Z" + message: Payload loaded version="4.14.1" image="quay.io/openshift-release-dev/ocp-release@sha256:05ba8e63f8a76e568afe87f182334504a01d47342b6ad5b4c3ff83a2463018bd" + architecture="amd64" + reason: PayloadLoaded + status: "True" + type: ReleaseAccepted + - lastTransitionTime: "2024-02-07T16:17:57Z" + message: Done applying 4.14.0 + status: "True" + type: Available + - lastTransitionTime: "2024-02-07T16:17:57Z" + status: "False" + type: Failing + - lastTransitionTime: "2024-02-07T16:31:03Z" + message: 'Working towards 4.14.1: 734 of 859 done (85% complete), waiting on + machine-config' + reason: ClusterOperatorUpdating + status: "True" + type: Progressing + desired: + channels: + - candidate-4.14 + - candidate-4.15 + - eus-4.14 + - fast-4.14 + - stable-4.14 + image: quay.io/openshift-release-dev/ocp-release@sha256:05ba8e63f8a76e568afe87f182334504a01d47342b6ad5b4c3ff83a2463018bd + url: https://access.redhat.com/errata/RHBA-2023:6153 + version: 4.14.1 + history: + - completionTime: null + image: quay.io/openshift-release-dev/ocp-release@sha256:05ba8e63f8a76e568afe87f182334504a01d47342b6ad5b4c3ff83a2463018bd + startedTime: "2024-02-07T16:31:03Z" + state: Partial + verified: true + version: 4.14.1 + - completionTime: "2024-02-07T16:17:57Z" + image: registry.build05.ci.openshift.org/ci-ln-lyxhrwb/release@sha256:e2c70fca183e380c6121a1c847806f11e839482123277235a8579db472b9ccf2 + startedTime: "2024-02-07T15:59:57Z" + state: Completed + verified: false + version: 4.14.0 + observedGeneration: 3 + versionHash: I3skQa0FyxU= +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-mc.yaml b/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-mc.yaml new file mode 100644 index 0000000000..33e20fd6fb --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-mc.yaml @@ -0,0 +1,329 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 3 + labels: + machineconfiguration.openshift.io/role: master + name: 00-master + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "40366" + uid: b08f1a9c-7481-4b49-8aa9-2444051576fb + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 3 + labels: + machineconfiguration.openshift.io/role: worker + name: 00-worker + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "40367" + uid: a7addc79-0ce7-4a4a-a195-b17a21533396 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "40370" + uid: de9332ff-2a1d-4d31-be98-226f26fb870c + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "40371" + uid: 2a6a1cdb-5b79-49d3-983a-cfcced78b29e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "40372" + uid: 68ae0e75-b66a-45e8-9c00-85d0dbbac77d + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "40374" + uid: ae1a342c-4feb-4f38-89af-cfe8c235d49b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 97-master-generated-kubelet + resourceVersion: "8840" + uid: 316f2737-0397-49fe-85e5-df4e37944b1b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:29Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 97-worker-generated-kubelet + resourceVersion: "8855" + uid: b2480713-fc2b-440a-9dd4-d5bf8cd15d14 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 98-master-generated-kubelet + resourceVersion: "8837" + uid: e11eb47e-ce7f-48b8-9bdd-d125359b43d4 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 98-worker-generated-kubelet + resourceVersion: "8847" + uid: 901f3569-042f-445c-99cc-b34eb2bfc9f0 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8839" + uid: 50011095-9bde-4b05-84b5-c826eab55cdc + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:15Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-ssh + resourceVersion: "1626" + uid: 9d3e5253-fa32-471d-872f-9b3c9fc54014 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8843" + uid: b5101ea4-7deb-4501-89f6-b25d6a8e5c4e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:16Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-ssh + resourceVersion: "1650" + uid: 3152721d-116e-41a5-b9ee-f978fffc80ab + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "25018" + uid: f24cdff8-23e0-4247-bc10-2806c65cac85 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.1 + creationTimestamp: "2024-02-07T16:44:45Z" + generation: 1 + name: rendered-master-525f869154e60488dd73d26a2b1dc5e1 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "40454" + uid: 1139c8d7-3b86-4950-857d-39bebb5dfec2 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-master-5386b830f950f01bb6bb51c80fb3c072 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "8910" + uid: 811b316d-b1aa-43ba-8a7b-daf14ed7ca5f + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "25021" + uid: 16b2d6db-d799-4646-b156-8354630e422a + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-worker-9afa40a716fbeaa9be7388d0061948d3 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "8909" + uid: 41a76c2c-9c02-443a-8191-e18a316714be + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.1 + creationTimestamp: "2024-02-07T16:44:45Z" + generation: 1 + name: rendered-worker-a20a4a460943e95eba3eb28473e45349 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "40455" + uid: bd54025e-8698-43b1-add4-af294f2248e1 +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-mcp.yaml b/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-mcp.yaml new file mode 100644 index 0000000000..bc3e1e65cb --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-mcp.yaml @@ -0,0 +1,240 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 4 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + operator.machineconfiguration.openshift.io/required-for-upgrade: "" + pools.operator.machineconfiguration.openshift.io/master: "" + name: master + resourceVersion: "40526" + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + spec: + configuration: + name: rendered-master-525f869154e60488dd73d26a2b1dc5e1 + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-master + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: master + nodeSelector: + matchLabels: + node-role.kubernetes.io/master: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:44:52Z" + message: "" + reason: "" + status: "False" + type: Updated + - lastTransitionTime: "2024-02-07T16:44:52Z" + message: All nodes are updating to MachineConfig rendered-master-525f869154e60488dd73d26a2b1dc5e1 + reason: "" + status: "True" + type: Updating + configuration: + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 4 + readyMachineCount: 0 + unavailableMachineCount: 1 + updatedMachineCount: 0 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 6 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + pools.operator.machineconfiguration.openshift.io/worker: "" + name: worker + resourceVersion: "40529" + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + spec: + configuration: + name: rendered-worker-a20a4a460943e95eba3eb28473e45349 + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-worker + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: worker + nodeSelector: + matchLabels: + node-role.kubernetes.io/worker: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:44:53Z" + message: "" + reason: "" + status: "False" + type: Updated + - lastTransitionTime: "2024-02-07T16:44:53Z" + message: All nodes are updating to MachineConfig rendered-worker-a20a4a460943e95eba3eb28473e45349 + reason: "" + status: "True" + type: Updating + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 6 + readyMachineCount: 0 + unavailableMachineCount: 1 + updatedMachineCount: 0 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 6 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + pools.operator.machineconfiguration.openshift.io/infra: "" + name: infra + resourceVersion: "40529" + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + spec: + configuration: + name: rendered-worker-a20a4a460943e95eba3eb28473e45349 + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-worker + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: infra + nodeSelector: + matchLabels: + node-role.kubernetes.io/infra: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:44:53Z" + message: "" + reason: "" + status: "False" + type: Updated + - lastTransitionTime: "2024-02-07T16:44:53Z" + message: All nodes are updating to MachineConfig rendered-worker-a20a4a460943e95eba3eb28473e45349 + reason: "" + status: "True" + type: Updating + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 6 + readyMachineCount: 0 + unavailableMachineCount: 1 + updatedMachineCount: 0 +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-node.yaml b/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-node.yaml new file mode 100644 index 0000000000..90b3969504 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools-node.yaml @@ -0,0 +1,381 @@ +apiVersion: v1 +items: + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "40375" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:47Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-30-217.us-east-2.compute.internal + resourceVersion: "40505" + uid: fd848867-b28e-4c3f-acc1-5ff79558c60a + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:43:40Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:43:40Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:43:40Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:43:40Z" + lastTransitionTime: "2024-02-07T16:03:00Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-525f869154e60488dd73d26a2b1dc5e1 + machineconfiguration.openshift.io/desiredDrain: drain-rendered-master-525f869154e60488dd73d26a2b1dc5e1 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "40375" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Working + creationTimestamp: "2024-02-07T16:00:48Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-53-40.us-east-2.compute.internal + resourceVersion: "40564" + uid: fa21423d-2616-4381-8889-35cffcaf0772 + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:41:53Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:41:53Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:41:53Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:41:53Z" + lastTransitionTime: "2024-02-07T16:02:24Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "40375" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:50Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-92-180.us-east-2.compute.internal + resourceVersion: "40514" + uid: 4be70dad-dfe6-410d-ae91-d1f16388ac58 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:41:55Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:41:55Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:41:55Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:41:55Z" + lastTransitionTime: "2024-02-07T16:03:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "40375" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:46Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-99-40.us-east-2.compute.internal + resourceVersion: "40515" + uid: 5e5831bc-5eff-4ea7-9db6-c3f5719d51d5 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:42:15Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:42:15Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:42:15Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:42:15Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-a20a4a460943e95eba3eb28473e45349 + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-a20a4a460943e95eba3eb28473e45349 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "40375" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Working + creationTimestamp: "2024-02-07T16:07:08Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-4-159.us-east-2.compute.internal + resourceVersion: "40565" + uid: 10554f1b-6f2b-4781-8ce0-6abbfb948645 + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:43:04Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:43:04Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:43:04Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:43:04Z" + lastTransitionTime: "2024-02-07T16:08:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "40375" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:53Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-20-162.us-east-2.compute.internal + resourceVersion: "41345" + uid: 88626d63-b4f4-44a5-b0bc-4de955567fbe + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:45:05Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:45:05Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:45:05Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:45:05Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-a20a4a460943e95eba3eb28473e45349 + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-a20a4a460943e95eba3eb28473e45349 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "40375" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Working + creationTimestamp: "2024-02-07T16:07:08Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/infra: "" + name: ip-10-0-4-159-infra.us-east-2.compute.internal + resourceVersion: "40565" + uid: 10554f1b-6f2b-4781-8ce0-6abbfb948645 + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:43:04Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:43:04Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:43:04Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:43:04Z" + lastTransitionTime: "2024-02-07T16:08:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "40375" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:53Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/infra: "" + name: ip-10-0-20-162-infra.us-east-2.compute.internal + resourceVersion: "41345" + uid: 88626d63-b4f4-44a5-b0bc-4de955567fbe + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:45:05Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:45:05Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:45:05Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:45:05Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools.output b/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools.output new file mode 100644 index 0000000000..65401132d1 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.14.1-workers-started-updating-multiple-pools.output @@ -0,0 +1,36 @@ +An update is in progress for 14m4s: Working towards 4.14.1: 734 of 859 done (85% complete), waiting on machine-config + += Control Plane = +Assessment: Progressing +Completion: 97% +Duration: 14m4s +Operator Status: 33 Total, 32 Available, 1 Progressing, 0 Degraded + += Worker Upgrade = + += Worker Pool = +Worker Pool: worker +Assessment: Progressing +Completion: 0% +Worker Status: 3 Total, 2 Available, 1 Progressing, 3 Outdated, 1 Draining, 0 Excluded, 0 Degraded + +Worker Pool Node(s) +NAME ASSESSMENT PHASE VERSION EST MESSAGE +ip-10-0-4-159.us-east-2.compute.internal Progressing Draining 4.14.0 +30m +ip-10-0-20-162.us-east-2.compute.internal Outdated Pending 4.14.0 ? +ip-10-0-99-40.us-east-2.compute.internal Outdated Pending 4.14.0 ? + += Worker Pool = +Worker Pool: infra +Assessment: Progressing +Completion: 0% +Worker Status: 2 Total, 1 Available, 1 Progressing, 2 Outdated, 1 Draining, 0 Excluded, 0 Degraded + +Worker Pool Node(s) +NAME ASSESSMENT PHASE VERSION EST MESSAGE +ip-10-0-4-159-infra.us-east-2.compute.internal Progressing Draining 4.14.0 +30m +ip-10-0-20-162-infra.us-east-2.compute.internal Outdated Pending 4.14.0 ? + += Update Health = +SINCE LEVEL IMPACT MESSAGE +14m4s Info None Upgrade is proceeding well diff --git a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-b02-cos-not-annotated-mc.yaml b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-b02-cos-not-annotated-mc.yaml new file mode 100644 index 0000000000..33ed49e70c --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-b02-cos-not-annotated-mc.yaml @@ -0,0 +1,293 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: master + name: 00-master + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "24839" + uid: b08f1a9c-7481-4b49-8aa9-2444051576fb + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: worker + name: 00-worker + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "24840" + uid: a7addc79-0ce7-4a4a-a195-b17a21533396 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8834" + uid: de9332ff-2a1d-4d31-be98-226f26fb870c + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8835" + uid: 2a6a1cdb-5b79-49d3-983a-cfcced78b29e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8838" + uid: 68ae0e75-b66a-45e8-9c00-85d0dbbac77d + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8846" + uid: ae1a342c-4feb-4f38-89af-cfe8c235d49b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 97-master-generated-kubelet + resourceVersion: "8840" + uid: 316f2737-0397-49fe-85e5-df4e37944b1b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:29Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 97-worker-generated-kubelet + resourceVersion: "8855" + uid: b2480713-fc2b-440a-9dd4-d5bf8cd15d14 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 98-master-generated-kubelet + resourceVersion: "8837" + uid: e11eb47e-ce7f-48b8-9bdd-d125359b43d4 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 98-worker-generated-kubelet + resourceVersion: "8847" + uid: 901f3569-042f-445c-99cc-b34eb2bfc9f0 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8839" + uid: 50011095-9bde-4b05-84b5-c826eab55cdc + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:15Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-ssh + resourceVersion: "1626" + uid: 9d3e5253-fa32-471d-872f-9b3c9fc54014 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8843" + uid: b5101ea4-7deb-4501-89f6-b25d6a8e5c4e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:16Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-ssh + resourceVersion: "1650" + uid: 3152721d-116e-41a5-b9ee-f978fffc80ab + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.15.0-ec.1 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "25018" + uid: f24cdff8-23e0-4247-bc10-2806c65cac85 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.15.0-ec.1 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-master-5386b830f950f01bb6bb51c80fb3c072 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "8910" + uid: 811b316d-b1aa-43ba-8a7b-daf14ed7ca5f + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.15.0-ec.1 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "25021" + uid: 16b2d6db-d799-4646-b156-8354630e422a + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.15.0-ec.1 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-worker-9afa40a716fbeaa9be7388d0061948d3 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "8909" + uid: 41a76c2c-9c02-443a-8191-e18a316714be +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-b02-cos-not-annotated-mcp.yaml b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-b02-cos-not-annotated-mcp.yaml new file mode 100644 index 0000000000..58204b37a1 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-b02-cos-not-annotated-mcp.yaml @@ -0,0 +1,162 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 3 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + operator.machineconfiguration.openshift.io/required-for-upgrade: "" + pools.operator.machineconfiguration.openshift.io/master: "" + name: master + resourceVersion: "26226" + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + spec: + configuration: + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-master + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: master + nodeSelector: + matchLabels: + node-role.kubernetes.io/master: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:48Z" + message: All nodes are updated with MachineConfig rendered-master-354cc9845ab33037fa7121a44dafecfd + reason: "" + status: "True" + type: Updated + - lastTransitionTime: "2024-02-07T16:12:48Z" + message: "" + reason: "" + status: "False" + type: Updating + configuration: + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 3 + readyMachineCount: 3 + unavailableMachineCount: 0 + updatedMachineCount: 3 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 5 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + pools.operator.machineconfiguration.openshift.io/worker: "" + name: worker + resourceVersion: "34145" + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + spec: + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-worker + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: worker + nodeSelector: + matchLabels: + node-role.kubernetes.io/worker: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:42Z" + message: All nodes are updated with MachineConfig rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + reason: "" + status: "True" + type: Updated + - lastTransitionTime: "2024-02-07T16:12:42Z" + message: "" + reason: "" + status: "False" + type: Updating + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 5 + readyMachineCount: 3 + unavailableMachineCount: 0 + updatedMachineCount: 3 +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-b02-cos-not-annotated-node.yaml b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-b02-cos-not-annotated-node.yaml new file mode 100644 index 0000000000..c1909b9cc8 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-b02-cos-not-annotated-node.yaml @@ -0,0 +1,277 @@ +apiVersion: v1 +items: + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:53Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-20-162.us-east-2.compute.internal + resourceVersion: "33523" + uid: 88626d63-b4f4-44a5-b0bc-4de955567fbe + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:47Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-30-217.us-east-2.compute.internal + resourceVersion: "34150" + uid: fd848867-b28e-4c3f-acc1-5ff79558c60a + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:03:00Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:07:08Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-4-159.us-east-2.compute.internal + resourceVersion: "34229" + uid: 10554f1b-6f2b-4781-8ce0-6abbfb948645 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:08:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:48Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-53-40.us-east-2.compute.internal + resourceVersion: "33799" + uid: fa21423d-2616-4381-8889-35cffcaf0772 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:02:24Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:50Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-92-180.us-east-2.compute.internal + resourceVersion: "33817" + uid: 4be70dad-dfe6-410d-ae91-d1f16388ac58 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:03:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:46Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-99-40.us-east-2.compute.internal + resourceVersion: "33934" + uid: 5e5831bc-5eff-4ea7-9db6-c3f5719d51d5 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-b02-cos-not-annotated.output b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-b02-cos-not-annotated.output index ace9353598..a2ff2c3f53 100644 --- a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-b02-cos-not-annotated.output +++ b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-b02-cos-not-annotated.output @@ -6,6 +6,20 @@ Completion: 43% Duration: 52m56s Operator Status: 7 Total, 7 Available, 0 Progressing, 0 Degraded += Worker Upgrade = + += Worker Pool = +Worker Pool: worker +Assessment: Pending +Completion: 0% +Worker Status: 3 Total, 3 Available, 0 Progressing, 3 Outdated, 0 Draining, 0 Excluded, 0 Degraded + +Worker Pool Node(s) +NAME ASSESSMENT PHASE VERSION EST MESSAGE +ip-10-0-20-162.us-east-2.compute.internal Outdated Pending 4.15.0-ec.1 ? +ip-10-0-4-159.us-east-2.compute.internal Outdated Pending 4.15.0-ec.1 ? +ip-10-0-99-40.us-east-2.compute.internal Outdated Pending 4.15.0-ec.1 ? + = Update Health = SINCE LEVEL IMPACT MESSAGE 52m56s Info None Upgrade is proceeding well diff --git a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-early-mc.yaml b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-early-mc.yaml new file mode 100644 index 0000000000..b1549b94fa --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-early-mc.yaml @@ -0,0 +1,293 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: master + name: 00-master + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "24839" + uid: b08f1a9c-7481-4b49-8aa9-2444051576fb + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: worker + name: 00-worker + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "24840" + uid: a7addc79-0ce7-4a4a-a195-b17a21533396 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8834" + uid: de9332ff-2a1d-4d31-be98-226f26fb870c + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8835" + uid: 2a6a1cdb-5b79-49d3-983a-cfcced78b29e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8838" + uid: 68ae0e75-b66a-45e8-9c00-85d0dbbac77d + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8846" + uid: ae1a342c-4feb-4f38-89af-cfe8c235d49b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 97-master-generated-kubelet + resourceVersion: "8840" + uid: 316f2737-0397-49fe-85e5-df4e37944b1b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:29Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 97-worker-generated-kubelet + resourceVersion: "8855" + uid: b2480713-fc2b-440a-9dd4-d5bf8cd15d14 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 98-master-generated-kubelet + resourceVersion: "8837" + uid: e11eb47e-ce7f-48b8-9bdd-d125359b43d4 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 98-worker-generated-kubelet + resourceVersion: "8847" + uid: 901f3569-042f-445c-99cc-b34eb2bfc9f0 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8839" + uid: 50011095-9bde-4b05-84b5-c826eab55cdc + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:15Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-ssh + resourceVersion: "1626" + uid: 9d3e5253-fa32-471d-872f-9b3c9fc54014 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8843" + uid: b5101ea4-7deb-4501-89f6-b25d6a8e5c4e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:16Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-ssh + resourceVersion: "1650" + uid: 3152721d-116e-41a5-b9ee-f978fffc80ab + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.1 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "25018" + uid: f24cdff8-23e0-4247-bc10-2806c65cac85 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.1 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-master-5386b830f950f01bb6bb51c80fb3c072 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "8910" + uid: 811b316d-b1aa-43ba-8a7b-daf14ed7ca5f + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.1 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "25021" + uid: 16b2d6db-d799-4646-b156-8354630e422a + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.1 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-worker-9afa40a716fbeaa9be7388d0061948d3 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "8909" + uid: 41a76c2c-9c02-443a-8191-e18a316714be +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-early-mcp.yaml b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-early-mcp.yaml new file mode 100644 index 0000000000..58204b37a1 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-early-mcp.yaml @@ -0,0 +1,162 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 3 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + operator.machineconfiguration.openshift.io/required-for-upgrade: "" + pools.operator.machineconfiguration.openshift.io/master: "" + name: master + resourceVersion: "26226" + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + spec: + configuration: + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-master + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: master + nodeSelector: + matchLabels: + node-role.kubernetes.io/master: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:48Z" + message: All nodes are updated with MachineConfig rendered-master-354cc9845ab33037fa7121a44dafecfd + reason: "" + status: "True" + type: Updated + - lastTransitionTime: "2024-02-07T16:12:48Z" + message: "" + reason: "" + status: "False" + type: Updating + configuration: + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 3 + readyMachineCount: 3 + unavailableMachineCount: 0 + updatedMachineCount: 3 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 5 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + pools.operator.machineconfiguration.openshift.io/worker: "" + name: worker + resourceVersion: "34145" + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + spec: + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-worker + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: worker + nodeSelector: + matchLabels: + node-role.kubernetes.io/worker: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:42Z" + message: All nodes are updated with MachineConfig rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + reason: "" + status: "True" + type: Updated + - lastTransitionTime: "2024-02-07T16:12:42Z" + message: "" + reason: "" + status: "False" + type: Updating + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 5 + readyMachineCount: 3 + unavailableMachineCount: 0 + updatedMachineCount: 3 +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-early-node.yaml b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-early-node.yaml new file mode 100644 index 0000000000..c1909b9cc8 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-early-node.yaml @@ -0,0 +1,277 @@ +apiVersion: v1 +items: + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:53Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-20-162.us-east-2.compute.internal + resourceVersion: "33523" + uid: 88626d63-b4f4-44a5-b0bc-4de955567fbe + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:47Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-30-217.us-east-2.compute.internal + resourceVersion: "34150" + uid: fd848867-b28e-4c3f-acc1-5ff79558c60a + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:03:00Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:07:08Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-4-159.us-east-2.compute.internal + resourceVersion: "34229" + uid: 10554f1b-6f2b-4781-8ce0-6abbfb948645 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:08:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:48Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-53-40.us-east-2.compute.internal + resourceVersion: "33799" + uid: fa21423d-2616-4381-8889-35cffcaf0772 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:02:24Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:50Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-92-180.us-east-2.compute.internal + resourceVersion: "33817" + uid: 4be70dad-dfe6-410d-ae91-d1f16388ac58 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:03:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:46Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-99-40.us-east-2.compute.internal + resourceVersion: "33934" + uid: 5e5831bc-5eff-4ea7-9db6-c3f5719d51d5 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-early.output b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-early.output index 8aeed4d192..e7bce785b7 100644 --- a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-early.output +++ b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-early.output @@ -6,6 +6,20 @@ Completion: 3% Duration: 1m29s Operator Status: 33 Total, 33 Available, 2 Progressing, 0 Degraded += Worker Upgrade = + += Worker Pool = +Worker Pool: worker +Assessment: Pending +Completion: 0% +Worker Status: 3 Total, 3 Available, 0 Progressing, 3 Outdated, 0 Draining, 0 Excluded, 0 Degraded + +Worker Pool Node(s) +NAME ASSESSMENT PHASE VERSION EST MESSAGE +ip-10-0-20-162.us-east-2.compute.internal Outdated Pending 4.14.1 ? +ip-10-0-4-159.us-east-2.compute.internal Outdated Pending 4.14.1 ? +ip-10-0-99-40.us-east-2.compute.internal Outdated Pending 4.14.1 ? + = Update Health = SINCE LEVEL IMPACT MESSAGE 1m29s Info None Upgrade is proceeding well diff --git a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-unavailable-mco-20m-mc.yaml b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-unavailable-mco-20m-mc.yaml new file mode 100644 index 0000000000..3c5daf15c6 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-unavailable-mco-20m-mc.yaml @@ -0,0 +1,293 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: master + name: 00-master + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "24839" + uid: b08f1a9c-7481-4b49-8aa9-2444051576fb + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: worker + name: 00-worker + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "24840" + uid: a7addc79-0ce7-4a4a-a195-b17a21533396 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8834" + uid: de9332ff-2a1d-4d31-be98-226f26fb870c + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8835" + uid: 2a6a1cdb-5b79-49d3-983a-cfcced78b29e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8838" + uid: 68ae0e75-b66a-45e8-9c00-85d0dbbac77d + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8846" + uid: ae1a342c-4feb-4f38-89af-cfe8c235d49b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 97-master-generated-kubelet + resourceVersion: "8840" + uid: 316f2737-0397-49fe-85e5-df4e37944b1b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:29Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 97-worker-generated-kubelet + resourceVersion: "8855" + uid: b2480713-fc2b-440a-9dd4-d5bf8cd15d14 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 98-master-generated-kubelet + resourceVersion: "8837" + uid: e11eb47e-ce7f-48b8-9bdd-d125359b43d4 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 98-worker-generated-kubelet + resourceVersion: "8847" + uid: 901f3569-042f-445c-99cc-b34eb2bfc9f0 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8839" + uid: 50011095-9bde-4b05-84b5-c826eab55cdc + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:15Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-ssh + resourceVersion: "1626" + uid: 9d3e5253-fa32-471d-872f-9b3c9fc54014 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8843" + uid: b5101ea4-7deb-4501-89f6-b25d6a8e5c4e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:16Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-ssh + resourceVersion: "1650" + uid: 3152721d-116e-41a5-b9ee-f978fffc80ab + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0-rc.3 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "25018" + uid: f24cdff8-23e0-4247-bc10-2806c65cac85 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0-rc.3 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-master-5386b830f950f01bb6bb51c80fb3c072 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "8910" + uid: 811b316d-b1aa-43ba-8a7b-daf14ed7ca5f + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0-rc.3 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "25021" + uid: 16b2d6db-d799-4646-b156-8354630e422a + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.0-rc.3 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-worker-9afa40a716fbeaa9be7388d0061948d3 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "8909" + uid: 41a76c2c-9c02-443a-8191-e18a316714be +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-unavailable-mco-20m-mcp.yaml b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-unavailable-mco-20m-mcp.yaml new file mode 100644 index 0000000000..58204b37a1 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-unavailable-mco-20m-mcp.yaml @@ -0,0 +1,162 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 3 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + operator.machineconfiguration.openshift.io/required-for-upgrade: "" + pools.operator.machineconfiguration.openshift.io/master: "" + name: master + resourceVersion: "26226" + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + spec: + configuration: + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-master + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: master + nodeSelector: + matchLabels: + node-role.kubernetes.io/master: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:48Z" + message: All nodes are updated with MachineConfig rendered-master-354cc9845ab33037fa7121a44dafecfd + reason: "" + status: "True" + type: Updated + - lastTransitionTime: "2024-02-07T16:12:48Z" + message: "" + reason: "" + status: "False" + type: Updating + configuration: + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 3 + readyMachineCount: 3 + unavailableMachineCount: 0 + updatedMachineCount: 3 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 5 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + pools.operator.machineconfiguration.openshift.io/worker: "" + name: worker + resourceVersion: "34145" + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + spec: + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-worker + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: worker + nodeSelector: + matchLabels: + node-role.kubernetes.io/worker: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:42Z" + message: All nodes are updated with MachineConfig rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + reason: "" + status: "True" + type: Updated + - lastTransitionTime: "2024-02-07T16:12:42Z" + message: "" + reason: "" + status: "False" + type: Updating + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 5 + readyMachineCount: 3 + unavailableMachineCount: 0 + updatedMachineCount: 3 +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-unavailable-mco-20m-node.yaml b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-unavailable-mco-20m-node.yaml new file mode 100644 index 0000000000..c1909b9cc8 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-unavailable-mco-20m-node.yaml @@ -0,0 +1,277 @@ +apiVersion: v1 +items: + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:53Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-20-162.us-east-2.compute.internal + resourceVersion: "33523" + uid: 88626d63-b4f4-44a5-b0bc-4de955567fbe + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:20Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:47Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-30-217.us-east-2.compute.internal + resourceVersion: "34150" + uid: fd848867-b28e-4c3f-acc1-5ff79558c60a + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:32:36Z" + lastTransitionTime: "2024-02-07T16:03:00Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:07:08Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-4-159.us-east-2.compute.internal + resourceVersion: "34229" + uid: 10554f1b-6f2b-4781-8ce0-6abbfb948645 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:32:50Z" + lastTransitionTime: "2024-02-07T16:08:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:48Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-53-40.us-east-2.compute.internal + resourceVersion: "33799" + uid: fa21423d-2616-4381-8889-35cffcaf0772 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:41Z" + lastTransitionTime: "2024-02-07T16:02:24Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:50Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-92-180.us-east-2.compute.internal + resourceVersion: "33817" + uid: 4be70dad-dfe6-410d-ae91-d1f16388ac58 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:31:44Z" + lastTransitionTime: "2024-02-07T16:03:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:46Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-99-40.us-east-2.compute.internal + resourceVersion: "33934" + uid: 5e5831bc-5eff-4ea7-9db6-c3f5719d51d5 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:32:02Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-unavailable-mco-20m.output b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-unavailable-mco-20m.output index 526344b82e..6befca0bf6 100644 --- a/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-unavailable-mco-20m.output +++ b/pkg/cli/admin/upgrade/status/examples/4.15.0-ec2-unavailable-mco-20m.output @@ -6,6 +6,20 @@ Completion: 97% Duration: 58m53s Operator Status: 33 Total, 31 Available, 1 Progressing, 1 Degraded += Worker Upgrade = + += Worker Pool = +Worker Pool: worker +Assessment: Pending +Completion: 0% +Worker Status: 3 Total, 3 Available, 0 Progressing, 3 Outdated, 0 Draining, 0 Excluded, 0 Degraded + +Worker Pool Node(s) +NAME ASSESSMENT PHASE VERSION EST MESSAGE +ip-10-0-20-162.us-east-2.compute.internal Outdated Pending 4.14.0-rc.3 ? +ip-10-0-4-159.us-east-2.compute.internal Outdated Pending 4.14.0-rc.3 ? +ip-10-0-99-40.us-east-2.compute.internal Outdated Pending 4.14.0-rc.3 ? + = Update Health = SINCE LEVEL IMPACT MESSAGE 20m24s Error API Availability Cluster Operator machine-config is unavailable | MachineConfigControllerFailed: Cluster not available for [{operator 4.14.0-rc.3}]: ControllerConfig.machineconfiguration.openshift.io "machine-config-controller" is invalid: [status.controllerCertificates[0].notAfter: Required value, status.controllerCertificates[0].notBefore: Required value, status.controllerCertificates[1].notAfter: Required value, status.controllerCertificates[1].notBefore: Required value, status.controllerCertificates[2].notAfter: Required value, status.controllerCertificates[2].notBefore: Required value, status.controllerCertificates[3].notAfter: Required value, status.controllerCertificates[3].notBefore: Required value, status.controllerCertificates[4].notAfter: Required value, status.controllerCertificates[4].notBefore: Required value, status.controllerCertificates[5].notAfter: Required value, status.controllerCertificates[5].notBefore: Required value, status.controllerCertificates[6].notAfter: Required value, status.controllerCertificates[6].notBefore: Required value, status.controllerCertificates[7].notAfter: Required value, status.controllerCertificates[7].notBefore: Required value, status.controllerCertificates[8].notAfter: Required value, status.controllerCertificates[8].notBefore: Required value, status.controllerCertificates[9].notAfter: Required value, status.controllerCertificates[9].notBefore: Required value, : Invalid value: "null": some validation rules were not checked because the object was invalid; correct the existing errors to complete validation] diff --git a/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-co.yaml b/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-co.yaml new file mode 100644 index 0000000000..6ceaceb76d --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-co.yaml @@ -0,0 +1,3246 @@ +apiVersion: v1 +items: +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:35:56Z" + generation: 1 + name: authentication + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865472600" + uid: bf0d1b53-3dcc-477b-ad4e-fe5c828e91ff + spec: {} + status: + conditions: + - lastTransitionTime: "2024-01-22T15:09:00Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T12:38:55Z" + message: 'AuthenticatorCertKeyProgressing: All is well' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-26T19:30:50Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2020-05-21T19:35:57Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: authentications + - group: config.openshift.io + name: cluster + resource: authentications + - group: config.openshift.io + name: cluster + resource: infrastructures + - group: config.openshift.io + name: cluster + resource: oauths + - group: route.openshift.io + name: oauth-openshift + namespace: openshift-authentication + resource: routes + - group: "" + name: oauth-openshift + namespace: openshift-authentication + resource: services + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-authentication + resource: namespaces + - group: "" + name: openshift-authentication-operator + resource: namespaces + - group: "" + name: openshift-ingress + resource: namespaces + - group: "" + name: openshift-oauth-apiserver + resource: namespaces + versions: + - name: oauth-openshift + version: 4.16.0-ec.3_openshift + - name: operator + version: 4.16.0-ec.3 + - name: oauth-apiserver + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: baremetal + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2021-03-05T12:57:52Z" + generation: 1 + name: baremetal + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4864639464" + uid: 81620374-dc03-4c1a-a60f-cb46f423db9b + spec: {} + status: + conditions: + - lastTransitionTime: "2021-03-05T13:32:45Z" + reason: WaitingForProvisioningCR + status: "False" + type: Progressing + - lastTransitionTime: "2021-03-05T13:32:45Z" + status: "False" + type: Degraded + - lastTransitionTime: "2021-03-05T13:32:45Z" + message: Waiting for Provisioning CR + reason: WaitingForProvisioningCR + status: "True" + type: Available + - lastTransitionTime: "2021-03-05T13:32:45Z" + status: "True" + type: Upgradeable + - lastTransitionTime: "2023-02-16T14:02:55Z" + status: "False" + type: Disabled + extension: null + relatedObjects: + - group: "" + name: openshift-machine-api + resource: namespaces + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: baremetalhosts + - group: metal3.io + name: "" + resource: provisioning + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: hostfirmwaresettings + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: firmwareschemas + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: preprovisioningimages + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: bmceventsubscriptions + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2021-11-09T13:26:55Z" + generation: 1 + name: cloud-controller-manager + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4864630738" + uid: 89e2eeca-3849-42e4-bb55-376e9fade560 + spec: {} + status: + conditions: + - lastTransitionTime: "2021-11-09T13:27:05Z" + message: Cluster Cloud Controller Manager Operator is available at 4.16.0-ec.3 + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2022-08-16T17:07:26Z" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2022-08-03T15:08:54Z" + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2022-08-03T15:08:54Z" + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2022-08-03T15:08:54Z" + message: Trusted CA Bundle Controller works as expected + reason: AsExpected + status: "True" + type: TrustedCABundleControllerControllerAvailable + - lastTransitionTime: "2022-08-03T15:08:54Z" + message: Trusted CA Bundle Controller works as expected + reason: AsExpected + status: "False" + type: TrustedCABundleControllerControllerDegraded + - lastTransitionTime: "2022-03-03T08:21:10Z" + message: Cloud Config Controller works as expected + reason: AsExpected + status: "True" + type: CloudConfigControllerAvailable + - lastTransitionTime: "2022-03-03T08:21:10Z" + message: Cloud Config Controller works as expected + reason: AsExpected + status: "False" + type: CloudConfigControllerDegraded + - lastTransitionTime: "2022-08-16T17:07:26Z" + message: Cluster Cloud Controller Manager Operator owns cloud controllers at + 4.16.0-ec.3 + reason: AsExpected + status: "True" + type: CloudControllerOwner + extension: null + relatedObjects: + - group: "" + name: openshift-cloud-controller-manager-operator + resource: namespaces + - group: config.openshift.io + name: cloud-controller-manager + resource: clusteroperators + - group: "" + name: openshift-cloud-controller-manager + resource: namespaces + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: CloudCredential + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2020-05-21T19:31:06Z" + generation: 1 + name: cloud-credential + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4864643836" + uid: 7259c5fc-022e-450d-b5da-618db580c972 + spec: {} + status: + conditions: + - lastTransitionTime: "2020-05-21T19:31:06Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2023-01-09T23:32:37Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T12:36:23Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2020-05-21T19:31:06Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: cloudcredential.openshift.io + name: alibaba-disk-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: aws-ebs-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: azure-disk-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: azure-file-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: "" + name: cloud-credential-operator-config + namespace: openshift-cloud-credential-operator + resource: configmap + - group: cloudcredential.openshift.io + name: cloud-credential-operator-gcp-ro-creds + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: cloud-credential-operator-iam-ro + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: operator.openshift.io + name: cluster + resource: cloudcredentials + - group: cloudcredential.openshift.io + name: ibm-powervs-block-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: ibm-vpc-block-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: manila-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-azure-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: "" + name: openshift-cloud-credential-operator + resource: namespaces + - group: cloudcredential.openshift.io + name: openshift-cloud-network-config-controller-aws + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cloud-network-config-controller-azure + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cloud-network-config-controller-gcp + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cloud-network-config-controller-openstack + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cluster-api-aws + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cluster-api-azure + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cluster-api-gcp + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cluster-api-openstack + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cluster-api-powervs + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-cluster-csi-drivers + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-gcp-ccm + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-gcp-pd-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-ibm-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-alibaba + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-azure + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-gcs + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-ibmcos + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-ibmcos-powervs + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-image-registry-openstack + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-ingress + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-ingress-azure + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-ingress-gcp + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-aws + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-azure + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-gcp + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-ibmcloud + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-kubevirt + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-nutanix + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-openstack + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-ovirt + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-powervs + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-machine-api-vsphere + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-network + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-nutanix-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-openstack-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-powervs-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-vmware-vsphere-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-vsphere-cloud-controller-manager + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: openshift-vsphere-problem-detector + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + - group: cloudcredential.openshift.io + name: ovirt-csi-driver-operator + namespace: openshift-cloud-credential-operator + resource: credentialsrequests + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + release.openshift.io/feature-set: TechPreviewNoUpgrade + creationTimestamp: "2022-08-16T17:08:48Z" + generation: 1 + name: cluster-api + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865579876" + uid: 2ac8b07b-1f77-4c5e-a024-144b1e224826 + spec: {} + status: + conditions: + - lastTransitionTime: "2022-08-16T17:08:48Z" + message: Cluster CAPI Operator is available at 4.16.0-ec.3 + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2022-08-16T17:08:48Z" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-27T16:06:07Z" + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T16:06:07Z" + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2022-08-16T17:08:48Z" + message: User Data Secret Controller works as expected + reason: AsExpected + status: "True" + type: SecretSyncControllerAvailable + - lastTransitionTime: "2022-08-16T17:08:48Z" + message: User Data Secret Controller works as expected + reason: AsExpected + status: "False" + type: SecretSyncControllerDegraded + - lastTransitionTime: "2024-01-18T15:04:57Z" + message: CAPI Installer Controller works as expected + reason: AsExpected + status: "True" + type: CapiInstallerControllerAvailable + - lastTransitionTime: "2024-01-18T15:04:57Z" + message: CAPI Installer Controller works as expected + reason: AsExpected + status: "False" + type: CapiInstallerControllerDegraded + extension: null + relatedObjects: + - group: "" + name: openshift-cluster-api + resource: namespaces + - group: config.openshift.io + name: cluster-api + resource: clusteroperators + - group: "" + name: openshift-cluster-api + resource: namespaces + - group: "" + name: cluster-capi-operator + resource: serviceaccounts + - group: "" + name: cluster-capi-operator-images + resource: configmaps + - group: apps + name: cluster-capi-operator + resource: deployments + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: MachineAPI + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:47:25Z" + generation: 1 + name: cluster-autoscaler + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865414829" + uid: 15cbb334-82e6-4d07-a4c1-de2cbee4300c + spec: {} + status: + conditions: + - lastTransitionTime: "2020-05-21T19:47:25Z" + message: at version 4.16.0-ec.3 + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-27T15:29:53Z" + status: "False" + type: Progressing + - lastTransitionTime: "2023-12-21T10:14:37Z" + status: "False" + type: Degraded + - lastTransitionTime: "2020-05-21T19:47:25Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: autoscaling.openshift.io + name: "" + namespace: openshift-machine-api + resource: machineautoscalers + - group: autoscaling.openshift.io + name: "" + namespace: openshift-machine-api + resource: clusterautoscalers + - group: "" + name: openshift-machine-api + resource: namespaces + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-07-03T17:38:03Z" + generation: 1 + name: config-operator + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4864552596" + uid: d2d8ed76-2316-4bd2-b682-df61654d1ddb + spec: {} + status: + conditions: + - lastTransitionTime: "2020-07-03T17:40:19Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2020-07-03T17:40:19Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2020-07-03T17:40:19Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2023-07-31T16:21:15Z" + message: 'FeatureGatesUpgradeable: "TechPreviewNoUpgrade" does not allow updates' + reason: FeatureGates_RestrictedFeatureGates_TechPreviewNoUpgrade + status: "False" + type: Upgradeable + - lastTransitionTime: "2024-02-08T14:00:00Z" + reason: NoData + status: Unknown + type: EvaluationConditionsDetected + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: configs + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-operator + resource: namespaces + versions: + - name: operator + version: 4.16.0-ec.3 + - name: feature-gates + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: Console + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:46:12Z" + generation: 1 + name: console + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4864659089" + uid: 65413aad-4de6-4896-9c01-dc72e8dc01e9 + spec: {} + status: + conditions: + - lastTransitionTime: "2023-12-11T10:42:06Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T12:39:19Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-07T00:07:01Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2023-12-21T14:20:17Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-08T14:26:39Z" + reason: NoData + status: Unknown + type: EvaluationConditionsDetected + extension: null + relatedObjects: + - group: console.openshift.io + name: monitoring-plugin + resource: consoleplugins + - group: operator.openshift.io + name: cluster + resource: consoles + - group: config.openshift.io + name: cluster + resource: consoles + - group: config.openshift.io + name: cluster + resource: infrastructures + - group: config.openshift.io + name: cluster + resource: proxies + - group: config.openshift.io + name: cluster + resource: oauths + - group: oauth.openshift.io + name: console + resource: oauthclients + - group: "" + name: openshift-console-operator + resource: namespaces + - group: "" + name: openshift-console + resource: namespaces + - group: "" + name: console-public + namespace: openshift-config-managed + resource: configmaps + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: MachineAPI + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2022-09-20T12:51:04Z" + generation: 1 + name: control-plane-machine-set + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4864632332" + uid: 451c9cf8-29b9-4a25-b30b-a1e203ae98e5 + spec: {} + status: + conditions: + - lastTransitionTime: "2022-09-20T12:51:24Z" + message: cluster operator is available + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2022-09-20T12:51:24Z" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2022-09-20T12:51:24Z" + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2022-09-20T12:51:24Z" + message: cluster operator is upgradable + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-machine-api + resource: namespaces + - group: machine.openshift.io + name: cluster + resource: controlplanemachinesets + - group: machine.openshift.io + name: "" + resource: machines + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: CSISnapshot + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:41:43Z" + generation: 1 + name: csi-snapshot-controller + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865420048" + uid: b21e07ec-0fba-4c05-9e7a-014477d7a5e0 + spec: {} + status: + conditions: + - lastTransitionTime: "2023-12-21T10:17:24Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T15:30:43Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2023-02-03T21:33:35Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2020-05-21T19:41:47Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-08T14:23:29Z" + reason: NoData + status: Unknown + type: EvaluationConditionsDetected + extension: null + relatedObjects: + - group: "" + name: openshift-cluster-storage-operator + resource: namespaces + - group: operator.openshift.io + name: cluster + resource: csisnapshotcontrollers + versions: + - name: operator + version: 4.16.0-ec.3 + - name: csi-snapshot-controller + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:36:18Z" + generation: 1 + name: dns + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865623678" + uid: fac7edf0-2f24-42d1-b7f7-3f8ad17289c9 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-27T15:23:24Z" + reason: DNSNotDegraded + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T16:15:26Z" + message: Desired and current number of DNSes are equal + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2023-12-11T10:40:21Z" + message: DNS "default" is available. + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2021-11-09T13:54:13Z" + message: 'DNS default is upgradeable: DNS Operator can be upgraded' + reason: DNSUpgradeable + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-dns-operator + resource: namespaces + - group: operator.openshift.io + name: default + resource: dnses + - group: "" + name: openshift-dns + resource: namespaces + versions: + - name: coredns + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:6cdd2f0b12d1e37cdb3bdd187f3613d721856cf0ed3398f7881756fc41fb76ef + - name: openshift-cli + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:bfbdd1fe66b18998bae63938f13f104eeb8ad4bc1ea1232342cf68263b6719a0 + - name: kube-rbac-proxy + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:c77bd8d1b69fb9ce69fdc9274104f660cbc45b8435c935ef6a83d968ec467bb9 + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:35:55Z" + generation: 1 + name: etcd + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865468793" + uid: 9e9f61ad-8bad-4f83-99a4-a6d0d95f619e + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-27T15:40:35Z" + message: |- + NodeControllerDegraded: All master nodes are ready + EtcdMembersDegraded: No unhealthy members found + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T12:20:21Z" + message: |- + NodeInstallerProgressing: 3 nodes are at revision 75 + EtcdMembersProgressing: No unstarted etcd members found + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2023-12-11T10:42:24Z" + message: |- + StaticPodsAvailable: 3 nodes are active; 3 nodes are at revision 75 + EtcdMembersAvailable: 3 members are available + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2020-05-21T19:35:55Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2023-10-23T13:28:46Z" + message: UpgradeBackup for 4.14.0-rc.6 is located at path /etc/kubernetes/cluster-backup/upgrade-backup-4.14.0-rc.6-2023-10-23_132819 + on node "build0-gstfj-m-0.c.openshift-ci-build-farm.internal" + reason: UpgradeBackupSuccessful + status: "True" + type: RecentBackup + - lastTransitionTime: "2024-02-08T14:00:10Z" + reason: NoData + status: Unknown + type: EvaluationConditionsDetected + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: etcds + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-etcd-operator + resource: namespaces + - group: "" + name: openshift-etcd + resource: namespaces + versions: + - name: raw-internal + version: 4.16.0-ec.3 + - name: operator + version: 4.16.0-ec.3 + - name: etcd + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: ImageRegistry + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:46:10Z" + generation: 1 + name: image-registry + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865621592" + uid: 70978880-cb2b-49f1-a163-abb48ce3961c + spec: {} + status: + conditions: + - lastTransitionTime: "2022-06-30T22:16:35Z" + message: |- + Available: The registry is ready + NodeCADaemonAvailable: The daemon set node-ca has available replicas + ImagePrunerAvailable: Pruner CronJob has been created + reason: Ready + status: "True" + type: Available + - lastTransitionTime: "2024-02-27T16:15:02Z" + message: |- + Progressing: The registry is ready + NodeCADaemonProgressing: The daemon set node-ca is deployed + reason: Ready + status: "False" + type: Progressing + - lastTransitionTime: "2023-12-11T10:41:59Z" + reason: AsExpected + status: "False" + type: Degraded + extension: null + relatedObjects: + - group: imageregistry.operator.openshift.io + name: cluster + resource: configs + - group: imageregistry.operator.openshift.io + name: cluster + resource: imagepruners + - group: rbac.authorization.k8s.io + name: system:registry + resource: clusterroles + - group: rbac.authorization.k8s.io + name: registry-registry-role + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: openshift-image-registry-pruner + resource: clusterrolebindings + - group: "" + name: openshift-image-registry + resource: namespaces + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:46:15Z" + generation: 1 + name: ingress + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865368217" + uid: 26609ab9-fc91-4532-8566-8e363a5fe8c2 + spec: {} + status: + conditions: + - lastTransitionTime: "2023-04-03T15:14:26Z" + message: The "default" ingress controller reports Degraded=False. + reason: IngressNotDegraded + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T15:21:33Z" + message: desired and current number of IngressControllers are equal + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-27T15:17:08Z" + message: The "default" ingress controller reports Available=True. + reason: IngressAvailable + status: "True" + type: Available + - lastTransitionTime: "2022-03-03T08:26:16Z" + reason: IngressControllersUpgradeable + status: "True" + type: Upgradeable + - lastTransitionTime: "2022-11-02T13:15:01Z" + reason: AsExpected + status: "False" + type: EvaluationConditionsDetected + extension: null + relatedObjects: + - group: "" + name: openshift-ingress-operator + resource: namespaces + - group: operator.openshift.io + name: "" + namespace: openshift-ingress-operator + resource: ingresscontrollers + - group: ingress.operator.openshift.io + name: "" + namespace: openshift-ingress-operator + resource: dnsrecords + - group: "" + name: openshift-ingress + resource: namespaces + - group: "" + name: openshift-ingress-canary + resource: namespaces + versions: + - name: operator + version: 4.16.0-ec.3 + - name: ingress-controller + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:e05fac3199868d5c05d36a4682b637b41d360cdd3c3d0b9f62e51e6c57a2361d + - name: canary-server + version: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:9cace9529c535492cff84cdf8dbcf5bbf49fe9cec684ce2f5711c2d9d13f874c +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: Insights + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/hypershift: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:46:13Z" + generation: 1 + name: insights + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865490662" + uid: 210c5781-9837-413e-829f-95b99ce9f7bc + spec: {} + status: + conditions: + - lastTransitionTime: "2023-08-22T02:47:20Z" + message: Insights works as expected + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2022-06-28T14:36:23Z" + message: no available cluster transfer + reason: NoClusterTransfer + status: "False" + type: ClusterTransferAvailable + - lastTransitionTime: "2023-08-22T02:47:20Z" + message: Insights works as expected + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2021-11-08T13:00:52Z" + reason: AsExpected + status: "False" + type: Disabled + - lastTransitionTime: "2022-05-22T18:44:09Z" + message: Monitoring the cluster + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2022-06-28T14:36:17Z" + message: 'Failed to pull SCA certs from https://api.openshift.com/api/accounts_mgmt/v1/certificates: + OCM API https://api.openshift.com/api/accounts_mgmt/v1/certificates returned + HTTP 403: {"code":"ACCT-MGMT-11","href":"/api/accounts_mgmt/v1/errors/11","id":"11","kind":"Error","operation_id":"ea9050f9-45ad-42b4-b82a-3762c8d448e7","reason":"Account + with ID 2DUeKzzTD9ngfsQ6YgkzdJn1jA4 denied access to perform create on Certificate + with HTTP call POST /api/accounts_mgmt/v1/certificates"}' + reason: Forbidden + status: "False" + type: SCAAvailable + - lastTransitionTime: "2022-06-22T21:31:57Z" + message: 'Failed to pull SCA certs from https://api.openshift.com/api/accounts_mgmt/v1/certificates: + OCM API https://api.openshift.com/api/accounts_mgmt/v1/certificates returned + HTTP 403: {"code":"ACCT-MGMT-11","href":"/api/accounts_mgmt/v1/errors/11","id":"11","kind":"Error","operation_id":"441d43ec-d641-49c0-911d-d55965fed6ec","reason":"Account + with ID 26WJQLYVgpldAlWiBlErklzqn5I denied access to perform create on Certificate + with HTTP call POST /api/accounts_mgmt/v1/certificates"}' + reason: Forbidden + status: "True" + type: SCANotAvailable + - lastTransitionTime: "2023-08-22T02:47:20Z" + message: Insights operator can be upgraded + reason: InsightsUpgradeable + status: "True" + type: Upgradeable + extension: + lastReportTime: "2023-07-17T05:30:37Z" + relatedObjects: + - group: "" + name: openshift-insights + resource: namespaces + - group: apps + name: insights-operator + namespace: openshift-insights + resource: deployments + - group: "" + name: pull-secret + namespace: openshift-config + resource: secrets + - group: "" + name: support + namespace: openshift-config + resource: secrets + - group: "" + name: gather + namespace: openshift-insights + resource: serviceaccounts + - group: "" + name: operator + namespace: openshift-insights + resource: serviceaccounts + - group: "" + name: metrics + namespace: openshift-insights + resource: services + - group: "" + name: service-ca-bundle + namespace: openshift-insights + resource: configmaps + - group: operator.openshift.io + name: cluster + resource: insightsoperators + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:35:57Z" + generation: 1 + name: kube-apiserver + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865472314" + uid: 3f89d7e4-4f7f-4553-913d-245091818f48 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-01-22T15:08:47Z" + message: 'NodeControllerDegraded: All master nodes are ready' + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T12:24:33Z" + message: 'NodeInstallerProgressing: 3 nodes are at revision 651' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2020-05-21T19:38:58Z" + message: 'StaticPodsAvailable: 3 nodes are active; 3 nodes are at revision 651' + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-01-19T19:43:16Z" + message: 'KubeletMinorVersionUpgradeable: Kubelet and API server minor versions + are synced.' + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-01-18T14:41:55Z" + message: All is well + reason: AsExpected + status: "False" + type: EvaluationConditionsDetected + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: kubeapiservers + - group: apiextensions.k8s.io + name: "" + resource: customresourcedefinitions + - group: security.openshift.io + name: "" + resource: securitycontextconstraints + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-kube-apiserver-operator + resource: namespaces + - group: "" + name: openshift-kube-apiserver + resource: namespaces + - group: admissionregistration.k8s.io + name: "" + resource: mutatingwebhookconfigurations + - group: admissionregistration.k8s.io + name: "" + resource: validatingwebhookconfigurations + - group: controlplane.operator.openshift.io + name: "" + namespace: openshift-kube-apiserver + resource: podnetworkconnectivitychecks + - group: apiserver.openshift.io + name: "" + resource: apirequestcounts + - group: config.openshift.io + name: cluster + resource: nodes + versions: + - name: raw-internal + version: 4.16.0-ec.3 + - name: kube-apiserver + version: 1.29.1 + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:35:55Z" + generation: 1 + name: kube-controller-manager + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865463937" + uid: 739324e8-1c33-4837-9470-13d49be2f501 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-01-22T14:26:27Z" + message: 'NodeControllerDegraded: All master nodes are ready' + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T12:29:37Z" + message: 'NodeInstallerProgressing: 3 nodes are at revision 210' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2020-05-21T19:38:28Z" + message: 'StaticPodsAvailable: 3 nodes are active; 3 nodes are at revision 210' + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2020-05-21T19:35:55Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-01-18T14:53:37Z" + reason: NoData + status: Unknown + type: EvaluationConditionsDetected + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: kubecontrollermanagers + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-kube-controller-manager + resource: namespaces + - group: "" + name: openshift-kube-controller-manager-operator + resource: namespaces + - group: "" + name: kube-system + resource: namespaces + - group: certificates.k8s.io + name: "" + resource: certificatesigningrequests + - group: "" + name: "" + resource: nodes + - group: config.openshift.io + name: cluster + resource: nodes + versions: + - name: raw-internal + version: 4.16.0-ec.3 + - name: kube-controller-manager + version: 1.29.1 + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:35:57Z" + generation: 1 + name: kube-scheduler + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865463936" + uid: ef8fdcb7-9a11-4761-bb70-2a1e2d9d6054 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-01-22T14:26:27Z" + message: 'NodeControllerDegraded: All master nodes are ready' + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T12:30:05Z" + message: 'NodeInstallerProgressing: 3 nodes are at revision 141' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2020-05-21T19:38:34Z" + message: 'StaticPodsAvailable: 3 nodes are active; 3 nodes are at revision 141' + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2020-05-21T19:35:57Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-01-18T14:54:12Z" + reason: NoData + status: Unknown + type: EvaluationConditionsDetected + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: kubeschedulers + - group: config.openshift.io + name: "" + resource: schedulers + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-kube-scheduler + resource: namespaces + - group: "" + name: openshift-kube-scheduler-operator + resource: namespaces + - group: controlplane.operator.openshift.io + name: "" + namespace: openshift-kube-apiserver + resource: podnetworkconnectivitychecks + versions: + - name: raw-internal + version: 4.16.0-ec.3 + - name: kube-scheduler + version: 1.29.1 + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2020-05-21T19:35:56Z" + generation: 1 + name: kube-storage-version-migrator + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865571293" + uid: 29f6641e-6fcf-40b5-8aa7-77de31f84ad4 + spec: {} + status: + conditions: + - lastTransitionTime: "2022-08-03T15:13:36Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T16:04:30Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-27T16:04:30Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2021-11-09T13:36:34Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: kubestorageversionmigrators + - group: migration.k8s.io + name: "" + resource: storageversionmigrations + - group: "" + name: openshift-kube-storage-version-migrator + resource: namespaces + - group: "" + name: openshift-kube-storage-version-migrator-operator + resource: namespaces + versions: + - name: operator + version: 4.16.0-ec.3 + - name: kube-storage-version-migrator + version: "" +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: MachineAPI + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:36:50Z" + generation: 1 + name: machine-api + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4864638678" + uid: 5b3293e7-5ba0-4aa7-8369-51ae0599e5a1 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-27T12:35:07Z" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2020-05-21T19:36:50Z" + message: 'Cluster Machine API Operator is available at operator: 4.16.0-ec.3' + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2023-12-21T14:20:12Z" + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2020-05-21T19:36:50Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-machine-api + resource: namespaces + - group: machine.openshift.io + name: "" + namespace: openshift-machine-api + resource: machines + - group: machine.openshift.io + name: "" + namespace: openshift-machine-api + resource: machinesets + - group: machine.openshift.io + name: "" + namespace: openshift-machine-api + resource: machinehealthchecks + - group: rbac.authorization.k8s.io + name: "" + namespace: openshift-machine-api + resource: roles + - group: rbac.authorization.k8s.io + name: machine-api-operator + resource: clusterroles + - group: rbac.authorization.k8s.io + name: machine-api-controllers + resource: clusterroles + - group: metal3.io + name: "" + namespace: openshift-machine-api + resource: baremetalhosts + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-07-03T17:38:03Z" + generation: 1 + name: machine-approver + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4864641471" + uid: 60c4af7f-1125-4893-9167-44a66e0f9439 + spec: {} + status: + conditions: + - lastTransitionTime: "2020-07-03T17:45:36Z" + message: Cluster Machine Approver is available at 4.16.0-ec.3 + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2020-07-03T17:45:36Z" + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2020-07-03T17:45:36Z" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2020-07-03T17:45:36Z" + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-cluster-machine-approver + resource: namespaces + - group: certificates.k8s.io + name: "" + resource: certificatesigningrequests + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:35:40Z" + generation: 1 + name: machine-config + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865641224" + uid: 0226d364-a4aa-4259-bbfe-1660bad6628c + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-27T15:42:03Z" + message: Cluster has deployed [{operator 4.16.0-ec.3}] + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2024-02-27T15:42:03Z" + message: Cluster version is 4.16.0-ec.3 + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-27T16:14:16Z" + message: 'Failed to resync 4.16.0-ec.3 because: error during syncRequiredMachineConfigPools: + [context deadline exceeded, failed to update clusteroperator: [client rate + limiter Wait returned an error: context deadline exceeded, error MachineConfigPool + worker is not ready, retrying. Status: (pool degraded: true total: 60, ready + 22, updated: 23, unavailable: 13)]]' + reason: RequiredPoolsFailed + status: "True" + type: Degraded + - lastTransitionTime: "2024-02-27T13:58:28Z" + message: One or more machine config pools are degraded, please see `oc get mcp` + for further details and resolve before upgrading + reason: DegradedPool + status: "False" + type: Upgradeable + extension: + master: all 3 nodes are at latest configuration rendered-master-e3c7b185390e28b7535bc5d0855940ad + worker: 'pool is degraded because nodes fail with "7 nodes are reporting degraded + status on sync": "Node build0-gstfj-ci-tests-worker-c-dcz9p is reporting: + \"failed to drain node: build0-gstfj-ci-tests-worker-c-dcz9p after 1 hour. + Please see machine-config-controller logs for more information\", Node build0-gstfj-ci-prowjobs-worker-b-9lztv + is reporting: \"failed to drain node: build0-gstfj-ci-prowjobs-worker-b-9lztv + after 1 hour. Please see machine-config-controller logs for more information\", + Node build0-gstfj-ci-prowjobs-worker-b-bg9f5 is reporting: \"failed to drain + node: build0-gstfj-ci-prowjobs-worker-b-bg9f5 after 1 hour. Please see machine-config-controller + logs for more information\", Node build0-gstfj-ci-tests-worker-b-4h7pn is + reporting: \"failed to drain node: build0-gstfj-ci-tests-worker-b-4h7pn after + 1 hour. Please see machine-config-controller logs for more information\", + Node build0-gstfj-ci-tests-worker-b-jv5bg is reporting: \"failed to drain + node: build0-gstfj-ci-tests-worker-b-jv5bg after 1 hour. Please see machine-config-controller + logs for more information\", Node build0-gstfj-ci-tests-worker-b-kj6gk is + reporting: \"failed to drain node: build0-gstfj-ci-tests-worker-b-kj6gk after + 1 hour. Please see machine-config-controller logs for more information\", + Node build0-gstfj-ci-prowjobs-worker-b-mrxwn is reporting: \"failed to drain + node: build0-gstfj-ci-prowjobs-worker-b-mrxwn after 1 hour. Please see machine-config-controller + logs for more information\""' + relatedObjects: + - group: "" + name: openshift-machine-config-operator + resource: namespaces + - group: machineconfiguration.openshift.io + name: "" + resource: machineconfigpools + - group: machineconfiguration.openshift.io + name: "" + resource: controllerconfigs + - group: machineconfiguration.openshift.io + name: "" + resource: kubeletconfigs + - group: machineconfiguration.openshift.io + name: "" + resource: containerruntimeconfigs + - group: machineconfiguration.openshift.io + name: "" + resource: machineconfigs + - group: "" + name: "" + resource: nodes + - group: "" + name: openshift-kni-infra + resource: namespaces + - group: "" + name: openshift-openstack-infra + resource: namespaces + - group: "" + name: openshift-ovirt-infra + resource: namespaces + - group: "" + name: openshift-vsphere-infra + resource: namespaces + - group: "" + name: openshift-nutanix-infra + resource: namespaces + - group: "" + name: openshift-cloud-platform-infra + resource: namespaces + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: marketplace + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:46:12Z" + generation: 1 + name: marketplace + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4864647005" + uid: 79eaba44-b1c1-45b2-8299-56c95d443fc1 + spec: {} + status: + conditions: + - lastTransitionTime: "2021-05-08T10:10:30Z" + message: 'Successfully progressed to release version: 4.16.0-ec.3' + reason: OperatorAvailable + status: "False" + type: Progressing + - lastTransitionTime: "2021-05-08T10:10:30Z" + message: 'Available release version: 4.16.0-ec.3' + reason: OperatorAvailable + status: "True" + type: Available + - lastTransitionTime: "2021-05-08T10:10:30Z" + message: Marketplace is upgradeable + reason: OperatorAvailable + status: "True" + type: Upgradeable + - lastTransitionTime: "2020-05-21T19:46:12Z" + message: 'Available release version: 4.16.0-ec.3' + reason: OperatorAvailable + status: "False" + type: Degraded + extension: null + relatedObjects: + - group: "" + name: openshift-marketplace + resource: namespaces + - group: operators.coreos.com + name: "" + namespace: openshift-marketplace + resource: catalogsources + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:46:10Z" + generation: 1 + name: monitoring + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4864654483" + uid: d018b74c-a7be-4a4a-836a-6333b1dd0707 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-24T06:04:41Z" + message: Successfully rolled out the stack. + reason: RollOutDone + status: "True" + type: Available + - lastTransitionTime: "2024-02-24T06:04:41Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T12:38:20Z" + status: "False" + type: Progressing + - lastTransitionTime: "2021-11-09T13:30:16Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-monitoring + resource: namespaces + - group: "" + name: openshift-user-workload-monitoring + resource: namespaces + - group: monitoring.coreos.com + name: "" + resource: servicemonitors + - group: monitoring.coreos.com + name: "" + resource: podmonitors + - group: monitoring.coreos.com + name: "" + resource: prometheusrules + - group: monitoring.coreos.com + name: "" + resource: alertmanagers + - group: monitoring.coreos.com + name: "" + resource: prometheuses + - group: monitoring.coreos.com + name: "" + resource: thanosrulers + - group: monitoring.coreos.com + name: "" + resource: alertmanagerconfigs + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + network.operator.openshift.io/last-seen-state: '{"DaemonsetStates":[],"DeploymentStates":[],"StatefulsetStates":[]}' + network.operator.openshift.io/relatedClusterObjects: "" + creationTimestamp: "2020-05-21T19:30:50Z" + generation: 1 + name: network + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865624680" + uid: aa3b46f1-ad5a-482f-8c77-694a535b0136 + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-27T12:34:24Z" + status: "False" + type: Degraded + - lastTransitionTime: "2020-05-21T19:30:50Z" + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-27T16:10:24Z" + message: Deployment "/openshift-cloud-network-config-controller/cloud-network-config-controller" + is not available (awaiting 1 nodes) + reason: Deploying + status: "True" + type: Progressing + - lastTransitionTime: "2021-03-05T15:45:37Z" + status: "True" + type: Available + - lastTransitionTime: "2021-03-05T13:37:17Z" + status: "False" + type: ManagementStateDegraded + extension: null + relatedObjects: + - group: "" + name: applied-cluster + namespace: openshift-network-operator + resource: configmaps + - group: apiextensions.k8s.io + name: cloudprivateipconfigs.cloud.network.openshift.io + resource: customresourcedefinitions + - group: "" + name: cloud-network-config-controller + namespace: openshift-cloud-network-config-controller + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: cloud-network-config-controller + resource: clusterroles + - group: rbac.authorization.k8s.io + name: cloud-network-config-controller + namespace: openshift-cloud-network-config-controller + resource: roles + - group: rbac.authorization.k8s.io + name: cloud-network-config-controller + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: cloud-network-config-controller-rb + namespace: openshift-cloud-network-config-controller + resource: rolebindings + - group: "" + name: kube-cloud-config + namespace: openshift-cloud-network-config-controller + resource: configmaps + - group: "" + name: trusted-ca + namespace: openshift-cloud-network-config-controller + resource: configmaps + - group: apps + name: cloud-network-config-controller + namespace: openshift-cloud-network-config-controller + resource: deployments + - group: apiextensions.k8s.io + name: network-attachment-definitions.k8s.cni.cncf.io + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: ippools.whereabouts.cni.cncf.io + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: overlappingrangeipreservations.whereabouts.cni.cncf.io + resource: customresourcedefinitions + - group: "" + name: openshift-multus + resource: namespaces + - group: rbac.authorization.k8s.io + name: multus + resource: clusterroles + - group: rbac.authorization.k8s.io + name: multus-ancillary-tools + resource: clusterroles + - group: "" + name: multus + namespace: openshift-multus + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: multus-transient + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: multus-group + resource: clusterrolebindings + - group: "" + name: multus-ancillary-tools + namespace: openshift-multus + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: multus-ancillary-tools + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: multus-cluster-readers + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: multus-whereabouts + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: multus-whereabouts + namespace: openshift-multus + resource: rolebindings + - group: rbac.authorization.k8s.io + name: whereabouts-cni + resource: clusterroles + - group: rbac.authorization.k8s.io + name: whereabouts-cni + namespace: openshift-multus + resource: roles + - group: rbac.authorization.k8s.io + name: net-attach-def-project + resource: clusterroles + - group: "" + name: default-cni-sysctl-allowlist + namespace: openshift-multus + resource: configmaps + - group: "" + name: cni-copy-resources + namespace: openshift-multus + resource: configmaps + - group: "" + name: multus-daemon-config + namespace: openshift-multus + resource: configmaps + - group: apps + name: multus + namespace: openshift-multus + resource: daemonsets + - group: apps + name: multus-additional-cni-plugins + namespace: openshift-multus + resource: daemonsets + - group: "" + name: metrics-daemon-sa + namespace: openshift-multus + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: metrics-daemon-role + resource: clusterroles + - group: rbac.authorization.k8s.io + name: metrics-daemon-sa-rolebinding + resource: clusterrolebindings + - group: apps + name: network-metrics-daemon + namespace: openshift-multus + resource: daemonsets + - group: monitoring.coreos.com + name: monitor-network + namespace: openshift-multus + resource: servicemonitors + - group: "" + name: network-metrics-service + namespace: openshift-multus + resource: services + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-multus + resource: roles + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-multus + resource: rolebindings + - group: "" + name: multus-admission-controller + namespace: openshift-multus + resource: services + - group: "" + name: multus-ac + namespace: openshift-multus + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: multus-admission-controller-webhook + resource: clusterroles + - group: rbac.authorization.k8s.io + name: multus-admission-controller-webhook + resource: clusterrolebindings + - group: admissionregistration.k8s.io + name: multus.openshift.io + resource: validatingwebhookconfigurations + - group: apps + name: multus-admission-controller + namespace: openshift-multus + resource: deployments + - group: monitoring.coreos.com + name: monitor-multus-admission-controller + namespace: openshift-multus + resource: servicemonitors + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-multus + resource: roles + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-multus + resource: rolebindings + - group: monitoring.coreos.com + name: prometheus-k8s-rules + namespace: openshift-multus + resource: prometheusrules + - group: "" + name: openshift-sdn + resource: namespaces + - group: apiextensions.k8s.io + name: clusternetworks.network.openshift.io + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: hostsubnets.network.openshift.io + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: netnamespaces.network.openshift.io + resource: customresourcedefinitions + - group: apiextensions.k8s.io + name: egressnetworkpolicies.network.openshift.io + resource: customresourcedefinitions + - group: rbac.authorization.k8s.io + name: openshift-sdn + resource: clusterroles + - group: "" + name: sdn + namespace: openshift-sdn + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: openshift-sdn + resource: clusterrolebindings + - group: "" + name: sdn-controller + namespace: openshift-sdn + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: openshift-sdn-controller + resource: clusterroles + - group: rbac.authorization.k8s.io + name: openshift-sdn-controller + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: openshift-sdn-controller-leaderelection + namespace: openshift-sdn + resource: roles + - group: rbac.authorization.k8s.io + name: openshift-sdn-controller-leaderelection + namespace: openshift-sdn + resource: rolebindings + - group: network.openshift.io + name: default + resource: clusternetworks + - group: flowcontrol.apiserver.k8s.io + name: openshift-sdn + resource: flowschemas + - group: monitoring.coreos.com + name: networking-rules + namespace: openshift-sdn + resource: prometheusrules + - group: "" + name: openshift-network-features + namespace: openshift-config-managed + resource: configmaps + - group: apps + name: sdn-controller + namespace: openshift-sdn + resource: daemonsets + - group: monitoring.coreos.com + name: monitor-sdn + namespace: openshift-sdn + resource: servicemonitors + - group: "" + name: sdn + namespace: openshift-sdn + resource: services + - group: monitoring.coreos.com + name: monitor-sdn-controller + namespace: openshift-sdn + resource: servicemonitors + - group: "" + name: sdn-controller + namespace: openshift-sdn + resource: services + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-sdn + resource: roles + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-sdn + resource: rolebindings + - group: "" + name: openshift-host-network + resource: namespaces + - group: "" + name: host-network-namespace-quotas + namespace: openshift-host-network + resource: resourcequotas + - group: "" + name: sdn-config + namespace: openshift-sdn + resource: configmaps + - group: apps + name: sdn + namespace: openshift-sdn + resource: daemonsets + - group: "" + name: openshift-network-diagnostics + resource: namespaces + - group: "" + name: network-diagnostics + namespace: openshift-network-diagnostics + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: network-diagnostics + namespace: openshift-network-diagnostics + resource: roles + - group: rbac.authorization.k8s.io + name: network-diagnostics + namespace: openshift-network-diagnostics + resource: rolebindings + - group: rbac.authorization.k8s.io + name: network-diagnostics + resource: clusterroles + - group: rbac.authorization.k8s.io + name: network-diagnostics + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: network-diagnostics + namespace: kube-system + resource: rolebindings + - group: apps + name: network-check-source + namespace: openshift-network-diagnostics + resource: deployments + - group: "" + name: network-check-source + namespace: openshift-network-diagnostics + resource: services + - group: monitoring.coreos.com + name: network-check-source + namespace: openshift-network-diagnostics + resource: servicemonitors + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-network-diagnostics + resource: roles + - group: rbac.authorization.k8s.io + name: prometheus-k8s + namespace: openshift-network-diagnostics + resource: rolebindings + - group: apps + name: network-check-target + namespace: openshift-network-diagnostics + resource: daemonsets + - group: "" + name: network-check-target + namespace: openshift-network-diagnostics + resource: services + - group: rbac.authorization.k8s.io + name: openshift-network-public-role + namespace: openshift-config-managed + resource: roles + - group: rbac.authorization.k8s.io + name: openshift-network-public-role-binding + namespace: openshift-config-managed + resource: rolebindings + - group: "" + name: openshift-network-node-identity + resource: namespaces + - group: "" + name: network-node-identity + namespace: openshift-network-node-identity + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: network-node-identity + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: network-node-identity + resource: clusterroles + - group: rbac.authorization.k8s.io + name: network-node-identity-leases + namespace: openshift-network-node-identity + resource: rolebindings + - group: rbac.authorization.k8s.io + name: network-node-identity-leases + namespace: openshift-network-node-identity + resource: roles + - group: rbac.authorization.k8s.io + name: system:openshift:scc:hostnetwork-v2 + namespace: openshift-network-node-identity + resource: rolebindings + - group: "" + name: ovnkube-identity-cm + namespace: openshift-network-node-identity + resource: configmaps + - group: network.operator.openshift.io + name: network-node-identity + namespace: openshift-network-node-identity + resource: operatorpkis + - group: admissionregistration.k8s.io + name: network-node-identity.openshift.io + resource: validatingwebhookconfigurations + - group: apps + name: network-node-identity + namespace: openshift-network-node-identity + resource: daemonsets + - group: "" + name: openshift-network-operator + resource: namespaces + - group: operator.openshift.io + name: cluster + resource: networks + - group: "" + name: openshift-cloud-network-config-controller + resource: namespaces + - group: k8s.ovn.org + name: "" + resource: EgressFirewall + - group: k8s.ovn.org + name: "" + resource: EgressIP + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: NodeTuning + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:35:53Z" + generation: 1 + name: node-tuning + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865621481" + uid: b32b5288-bdc0-4404-a9de-f6e37da8341d + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-27T16:14:58Z" + message: 45/62 Profiles failed to be applied + reason: ProfileDegraded + status: "True" + type: Available + - lastTransitionTime: "2024-02-27T16:15:00Z" + message: Cluster version is "4.16.0-ec.3" + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2020-05-21T19:35:53Z" + message: DaemonSet "tuned" available + reason: AsExpected + status: "False" + type: Degraded + extension: null + relatedObjects: + - group: "" + name: openshift-cluster-node-tuning-operator + resource: namespaces + - group: tuned.openshift.io + name: "" + namespace: openshift-cluster-node-tuning-operator + resource: profiles + - group: tuned.openshift.io + name: "" + namespace: openshift-cluster-node-tuning-operator + resource: tuneds + - group: apps + name: tuned + namespace: openshift-cluster-node-tuning-operator + resource: daemonsets + - group: performance.openshift.io + name: "" + resource: performanceprofiles + versions: + - name: operator + version: 4.16.0-ec.3 + - name: openshift-tuned + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/self-managed-high-availability: "true" + release.openshift.io/feature-set: TechPreviewNoUpgrade + creationTimestamp: "2023-07-31T21:43:49Z" + generation: 1 + name: olm + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865573343" + uid: bb66ed65-43f0-49fb-a1e7-21ee4ede85df + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-27T14:19:10Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T16:04:48Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-27T16:04:48Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2023-07-31T21:44:10Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-catalogd + resource: namespaces + - group: apiextensions.k8s.io + name: catalogs.catalogd.operatorframework.io + resource: customresourcedefinitions + - group: "" + name: catalogd-controller-manager + namespace: openshift-catalogd + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: catalogd-leader-election-role + namespace: openshift-catalogd + resource: roles + - group: rbac.authorization.k8s.io + name: catalogd-manager-role + namespace: openshift-catalogd + resource: roles + - group: rbac.authorization.k8s.io + name: catalogd-manager-role + resource: clusterroles + - group: rbac.authorization.k8s.io + name: catalogd-metrics-reader + resource: clusterroles + - group: rbac.authorization.k8s.io + name: catalogd-proxy-role + resource: clusterroles + - group: rbac.authorization.k8s.io + name: catalogd-leader-election-rolebinding + namespace: openshift-catalogd + resource: rolebindings + - group: rbac.authorization.k8s.io + name: catalogd-manager-rolebinding + namespace: openshift-catalogd + resource: rolebindings + - group: rbac.authorization.k8s.io + name: catalogd-manager-rolebinding + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: catalogd-proxy-rolebinding + resource: clusterrolebindings + - group: "" + name: catalogd-catalogserver + namespace: openshift-catalogd + resource: services + - group: "" + name: catalogd-controller-manager-metrics-service + namespace: openshift-catalogd + resource: services + - group: apps + name: catalogd-controller-manager + namespace: openshift-catalogd + resource: deployments + - group: "" + name: openshift-operator-controller + resource: namespaces + - group: apiextensions.k8s.io + name: clusterextensions.olm.operatorframework.io + resource: customresourcedefinitions + - group: "" + name: operator-controller-controller-manager + namespace: openshift-operator-controller + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: operator-controller-leader-election-role + namespace: openshift-operator-controller + resource: roles + - group: rbac.authorization.k8s.io + name: operator-controller-manager-role + resource: clusterroles + - group: rbac.authorization.k8s.io + name: operator-controller-metrics-reader + resource: clusterroles + - group: rbac.authorization.k8s.io + name: operator-controller-proxy-role + resource: clusterroles + - group: rbac.authorization.k8s.io + name: operator-controller-leader-election-rolebinding + namespace: openshift-operator-controller + resource: rolebindings + - group: rbac.authorization.k8s.io + name: operator-controller-manager-rolebinding + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: operator-controller-proxy-rolebinding + resource: clusterrolebindings + - group: "" + name: operator-controller-controller-manager-metrics-service + namespace: openshift-operator-controller + resource: services + - group: apps + name: operator-controller-controller-manager + namespace: openshift-operator-controller + resource: deployments + - group: "" + name: openshift-rukpak + resource: namespaces + - group: apiextensions.k8s.io + name: bundledeployments.core.rukpak.io + resource: customresourcedefinitions + - group: "" + name: core-admin + namespace: openshift-rukpak + resource: serviceaccounts + - group: "" + name: helm-provisioner-admin + namespace: openshift-rukpak + resource: serviceaccounts + - group: "" + name: rukpak-webhooks-admin + namespace: openshift-rukpak + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: bundle-reader + resource: clusterroles + - group: rbac.authorization.k8s.io + name: core-admin + resource: clusterroles + - group: rbac.authorization.k8s.io + name: helm-provisioner-admin + resource: clusterroles + - group: rbac.authorization.k8s.io + name: rukpak-webhooks-admin + resource: clusterroles + - group: rbac.authorization.k8s.io + name: core-admin + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: helm-provisioner-admin + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: rukpak-webhooks-admin + resource: clusterrolebindings + - group: "" + name: core + namespace: openshift-rukpak + resource: services + - group: "" + name: helm-provisioner + namespace: openshift-rukpak + resource: services + - group: "" + name: rukpak-webhook-service + namespace: openshift-rukpak + resource: services + - group: apps + name: core + namespace: openshift-rukpak + resource: deployments + - group: apps + name: helm-provisioner + namespace: openshift-rukpak + resource: deployments + - group: apps + name: rukpak-webhooks + namespace: openshift-rukpak + resource: deployments + - group: admissionregistration.k8s.io + name: rukpak-validating-webhook-configuration + resource: validatingwebhookconfigurations + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:35:56Z" + generation: 1 + name: openshift-apiserver + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865471868" + uid: 6852f6aa-e494-4cb7-9be9-48ace2c4ba6e + spec: {} + status: + conditions: + - lastTransitionTime: "2024-01-22T15:09:04Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T12:39:21Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2023-12-21T14:20:11Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2020-05-21T19:35:57Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: openshiftapiservers + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-apiserver-operator + resource: namespaces + - group: "" + name: openshift-apiserver + resource: namespaces + - group: "" + name: openshift-etcd-operator + resource: namespaces + - group: "" + name: host-etcd-2 + namespace: openshift-etcd + resource: endpoints + - group: controlplane.operator.openshift.io + name: "" + namespace: openshift-apiserver + resource: podnetworkconnectivitychecks + - group: apiregistration.k8s.io + name: v1.apps.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.authorization.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.build.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.image.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.project.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.quota.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.route.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.security.openshift.io + resource: apiservices + - group: apiregistration.k8s.io + name: v1.template.openshift.io + resource: apiservices + versions: + - name: operator + version: 4.16.0-ec.3 + - name: openshift-apiserver + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:35:57Z" + generation: 1 + name: openshift-controller-manager + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4864657731" + uid: 2b991056-cbd6-44bb-9e27-c88aaeb9d559 + spec: {} + status: + conditions: + - lastTransitionTime: "2022-08-15T13:16:26Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T12:38:59Z" + message: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2022-11-02T13:17:36Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2021-06-09T12:29:05Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-08T14:26:01Z" + reason: NoData + status: Unknown + type: EvaluationConditionsDetected + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: openshiftcontrollermanagers + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-controller-manager-operator + resource: namespaces + - group: "" + name: openshift-controller-manager + resource: namespaces + - group: "" + name: openshift-route-controller-manager + resource: namespaces + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: openshift-samples + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2020-05-21T19:47:31Z" + generation: 1 + name: openshift-samples + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4864643736" + uid: 41358e28-5bd9-46ba-94b2-c17f107fc8ca + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-27T12:36:22Z" + message: Samples installation successful at 4.16.0-ec.3 + status: "True" + type: Available + - lastTransitionTime: "2024-02-27T12:36:22Z" + message: Samples installation successful at 4.16.0-ec.3 + status: "False" + type: Progressing + - lastTransitionTime: "2020-05-21T19:47:37Z" + status: "False" + type: Degraded + extension: null + relatedObjects: + - group: samples.operator.openshift.io + name: cluster + resource: configs + - group: "" + name: openshift-cluster-samples-operator + resource: namespaces + - group: template.openshift.io + name: "" + namespace: openshift + resource: templates + - group: image.openshift.io + name: "" + namespace: openshift + resource: imagestreams + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: OperatorLifecycleManager + include.release.openshift.io/hypershift: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2020-05-21T19:36:51Z" + generation: 1 + name: operator-lifecycle-manager + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865485203" + uid: 7e145651-08ee-40e5-9632-485d15ac0b8a + spec: {} + status: + conditions: + - lastTransitionTime: "2020-05-21T19:36:51Z" + status: "False" + type: Degraded + - lastTransitionTime: "2020-05-21T19:36:51Z" + status: "True" + type: Available + - lastTransitionTime: "2020-05-21T19:36:51Z" + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-27T12:36:27Z" + message: Deployed 4.16.0-202402160210.p0.g12a2e2f.assembly.stream.el9-12a2e2f + status: "False" + type: Progressing + extension: null + relatedObjects: + - group: operators.coreos.com + name: packageserver + namespace: openshift-operator-lifecycle-manager + resource: clusterserviceversions + versions: + - name: operator + version: 4.16.0-ec.3 + - name: operator-lifecycle-manager + version: 4.16.0-202402160210.p0.g12a2e2f.assembly.stream.el9-12a2e2f +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: OperatorLifecycleManager + include.release.openshift.io/hypershift: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2020-05-21T19:36:51Z" + generation: 1 + name: operator-lifecycle-manager-catalog + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865485209" + uid: f5a15d5d-e860-42ff-9183-cf1791aa3228 + spec: {} + status: + conditions: + - lastTransitionTime: "2020-05-21T19:36:51Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T12:36:58Z" + message: Deployed 4.16.0-202402160210.p0.g12a2e2f.assembly.stream.el9-12a2e2f + status: "False" + type: Progressing + - lastTransitionTime: "2020-05-21T19:36:51Z" + status: "True" + type: Available + - lastTransitionTime: "2020-05-21T19:36:51Z" + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-operator-lifecycle-manager + resource: namespaces + versions: + - name: operator + version: 4.16.0-ec.3 + - name: operator-lifecycle-manager + version: 4.16.0-202402160210.p0.g12a2e2f.assembly.stream.el9-12a2e2f +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: OperatorLifecycleManager + include.release.openshift.io/hypershift: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + creationTimestamp: "2020-05-21T19:36:51Z" + generation: 1 + name: operator-lifecycle-manager-packageserver + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865485219" + uid: 9080a124-e1b1-4b3a-92ba-8fc50e2467fb + spec: {} + status: + conditions: + - lastTransitionTime: "2020-05-21T19:36:51Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-08T15:01:35Z" + message: ClusterServiceVersion openshift-operator-lifecycle-manager/packageserver + observed in phase Succeeded + reason: ClusterServiceVersionSucceeded + status: "True" + type: Available + - lastTransitionTime: "2024-02-27T12:36:34Z" + message: Deployed version 0.0.1-snapshot + status: "False" + type: Progressing + - lastTransitionTime: "2020-05-21T19:36:51Z" + message: Safe to upgrade + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: "" + name: openshift-operator-lifecycle-manager + resource: namespaces + - group: operators.coreos.com + name: packageserver + namespace: openshift-operator-lifecycle-manager + resource: ClusterServiceVersion + - group: operators.coreos.com + name: packageserver + namespace: openshift-operator-lifecycle-manager + resource: clusterserviceversions + versions: + - name: operator + version: 4.16.0-ec.3 + - name: packageserver + version: 0.0.1-snapshot +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + exclude.release.openshift.io/internal-openshift-hosted: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + release.openshift.io/feature-set: TechPreviewNoUpgrade + creationTimestamp: "2022-09-20T12:51:31Z" + generation: 1 + name: platform-operators-aggregated + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865573891" + uid: 07a428f2-bd1d-4057-8607-248405d2f8ab + spec: {} + status: + conditions: + - lastTransitionTime: "2024-02-27T16:04:58Z" + message: No platform operators are present in the cluster + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-27T16:04:58Z" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T16:04:58Z" + message: No platform operators are present in the cluster + reason: AsExpected + status: "True" + type: Available + extension: null + relatedObjects: + - group: "" + name: openshift-platform-operators + resource: namespaces + - group: platform.openshift.io + name: "" + resource: platformoperators + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:35:56Z" + generation: 1 + name: service-ca + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865419809" + uid: 27aab918-48e4-4d3f-9114-3aed0151c99a + spec: {} + status: + conditions: + - lastTransitionTime: "2021-03-11T01:27:15Z" + message: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T15:30:40Z" + message: 'Progressing: All service-ca-operator deployments updated' + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2020-05-21T19:36:02Z" + message: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2021-06-09T12:28:24Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: servicecas + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-service-ca-operator + resource: namespaces + - group: "" + name: openshift-service-ca + resource: namespaces + versions: + - name: operator + version: 4.16.0-ec.3 +- apiVersion: config.openshift.io/v1 + kind: ClusterOperator + metadata: + annotations: + capability.openshift.io/name: Storage + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + creationTimestamp: "2020-05-21T19:46:11Z" + generation: 1 + name: storage + ownerReferences: + - apiVersion: config.openshift.io/v1 + controller: true + kind: ClusterVersion + name: version + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + resourceVersion: "4865621750" + uid: fe8f6477-a4b9-4891-abf3-4a08a92cae7d + spec: {} + status: + conditions: + - lastTransitionTime: "2022-08-16T16:59:24Z" + message: |- + DefaultStorageClassControllerAvailable: StorageClass provided by supplied CSI Driver instead of the cluster-storage-operator + GCPPDCSIDriverOperatorCRAvailable: All is well + SHARESCSIDriverOperatorCRAvailable: All is well + reason: AsExpected + status: "True" + type: Available + - lastTransitionTime: "2023-12-11T10:42:03Z" + message: |- + GCPPDCSIDriverOperatorCRDegraded: All is well + SHARESCSIDriverOperatorCRDegraded: All is well + reason: AsExpected + status: "False" + type: Degraded + - lastTransitionTime: "2020-10-20T18:48:44Z" + message: All is well + reason: AsExpected + status: "True" + type: Upgradeable + - lastTransitionTime: "2024-02-27T16:15:03Z" + message: |- + GCPPDCSIDriverOperatorCRProgressing: All is well + SHARESCSIDriverOperatorCRProgressing: All is well + reason: AsExpected + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-08T14:26:05Z" + reason: NoData + status: Unknown + type: EvaluationConditionsDetected + extension: null + relatedObjects: + - group: "" + name: gcp-pd-csi-driver-operator + namespace: openshift-cluster-csi-drivers + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: gcp-pd-csi-driver-operator-role + namespace: openshift-cluster-csi-drivers + resource: roles + - group: rbac.authorization.k8s.io + name: gcp-pd-csi-driver-operator-rolebinding + namespace: openshift-cluster-csi-drivers + resource: rolebindings + - group: rbac.authorization.k8s.io + name: gcp-pd-csi-driver-operator-clusterrole + resource: clusterroles + - group: rbac.authorization.k8s.io + name: gcp-pd-csi-driver-operator-clusterrolebinding + resource: clusterrolebindings + - group: operator.openshift.io + name: pd.csi.storage.gke.io + resource: clustercsidrivers + - group: "" + name: shared-resource-csi-driver-operator + namespace: openshift-cluster-csi-drivers + resource: serviceaccounts + - group: rbac.authorization.k8s.io + name: shared-resource-csi-driver-operator-role + namespace: openshift-cluster-csi-drivers + resource: roles + - group: rbac.authorization.k8s.io + name: shared-resource-csi-driver-operator-rolebinding + namespace: openshift-cluster-csi-drivers + resource: rolebindings + - group: rbac.authorization.k8s.io + name: shared-resource-csi-driver-operator-clusterrole + resource: clusterroles + - group: rbac.authorization.k8s.io + name: shared-resource-csi-driver-operator-clusterrolebinding + resource: clusterrolebindings + - group: rbac.authorization.k8s.io + name: shared-resource-csi-driver-operator-config-role + namespace: openshift-config-managed + resource: roles + - group: rbac.authorization.k8s.io + name: shared-resource-csi-driver-operator-config-clusterrolebinding + namespace: openshift-config-managed + resource: rolebindings + - group: operator.openshift.io + name: csi.sharedresource.openshift.io + resource: clustercsidrivers + - group: "" + name: openshift-cluster-storage-operator + resource: namespaces + - group: "" + name: openshift-cluster-csi-drivers + resource: namespaces + - group: operator.openshift.io + name: cluster + resource: storages + - group: rbac.authorization.k8s.io + name: cluster-storage-operator-role + resource: clusterrolebindings + - group: sharedresource.openshift.io + name: "" + resource: sharedconfigmaps + - group: sharedresource.openshift.io + name: "" + resource: sharedsecrets + versions: + - name: operator + version: 4.16.0-ec.3 +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-cv.yaml b/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-cv.yaml new file mode 100644 index 0000000000..366788264b --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-cv.yaml @@ -0,0 +1,544 @@ +apiVersion: v1 +items: +- apiVersion: config.openshift.io/v1 + kind: ClusterVersion + metadata: + creationTimestamp: "2020-05-21T19:29:59Z" + generation: 118 + name: version + resourceVersion: "4865636482" + uid: d332da69-93f3-4eb0-b523-4f93d4e724c3 + spec: + channel: candidate-4.16 + clusterID: f56f7197-9910-4e94-ac77-c25c125751f2 + desiredUpdate: + architecture: "" + force: false + image: quay.io/openshift-release-dev/ocp-release@sha256:65b461a8181eb7c08e9cd0bd1e3e591f0c83830fa6bfef0b5c40460cfe5137d0 + version: 4.16.0-ec.3 + status: + availableUpdates: null + capabilities: + enabledCapabilities: + - Build + - CSISnapshot + - CloudCredential + - Console + - DeploymentConfig + - ImageRegistry + - Insights + - MachineAPI + - NodeTuning + - OperatorLifecycleManager + - Storage + - baremetal + - marketplace + - openshift-samples + knownCapabilities: + - Build + - CSISnapshot + - CloudCredential + - Console + - DeploymentConfig + - ImageRegistry + - Insights + - MachineAPI + - NodeTuning + - OperatorLifecycleManager + - Storage + - baremetal + - marketplace + - openshift-samples + conditions: + - lastTransitionTime: "2020-05-21T19:53:42Z" + message: Done applying 4.16.0-ec.3 + status: "True" + type: Available + - lastTransitionTime: "2024-02-27T16:16:13Z" + message: Cluster operator machine-config is degraded + reason: ClusterOperatorDegraded + status: "True" + type: Failing + - lastTransitionTime: "2024-02-27T15:42:58Z" + message: 'Error while reconciling 4.16.0-ec.3: the cluster operator machine-config + is degraded' + reason: ClusterOperatorDegraded + status: "False" + type: Progressing + - lastTransitionTime: "2024-02-08T13:59:48Z" + status: "True" + type: RetrievedUpdates + - lastTransitionTime: "2024-01-18T14:40:50Z" + message: Payload loaded version="4.16.0-ec.3" image="quay.io/openshift-release-dev/ocp-release@sha256:65b461a8181eb7c08e9cd0bd1e3e591f0c83830fa6bfef0b5c40460cfe5137d0" + architecture="Multi" + reason: PayloadLoaded + status: "True" + type: ReleaseAccepted + - lastTransitionTime: "2024-01-18T14:41:07Z" + message: Capabilities match configured spec + reason: AsExpected + status: "False" + type: ImplicitlyEnabledCapabilities + - lastTransitionTime: "2022-11-21T15:01:14Z" + message: |- + Multiple cluster operators should not be upgraded between minor versions: + * Cluster operator config-operator should not be upgraded between minor versions: FeatureGates_RestrictedFeatureGates_TechPreviewNoUpgrade: FeatureGatesUpgradeable: "TechPreviewNoUpgrade" does not allow updates + * Cluster operator machine-config should not be upgraded between minor versions: DegradedPool: One or more machine config pools are degraded, please see `oc get mcp` for further details and resolve before upgrading + reason: ClusterOperatorsNotUpgradeable + status: "False" + type: Upgradeable + desired: + channels: + - candidate-4.16 + image: quay.io/openshift-release-dev/ocp-release@sha256:65b461a8181eb7c08e9cd0bd1e3e591f0c83830fa6bfef0b5c40460cfe5137d0 + version: 4.16.0-ec.3 + history: + - completionTime: "2024-02-27T15:42:58Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:65b461a8181eb7c08e9cd0bd1e3e591f0c83830fa6bfef0b5c40460cfe5137d0 + startedTime: "2024-02-27T12:12:27Z" + state: Completed + verified: true + version: 4.16.0-ec.3 + - completionTime: "2024-02-08T15:31:39Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:730d6ac00601b61758a23aac6d006d07f829412cb060f49ed5ead2e40353c89d + startedTime: "2024-02-08T13:59:40Z" + state: Completed + verified: true + version: 4.16.0-ec.2 + - completionTime: "2024-01-18T15:53:17Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:0cc5bcf7fade5a003172f223ecadf8eaa504ed09b871f70c8c9c925f223cac08 + startedTime: "2024-01-18T14:40:50Z" + state: Completed + verified: true + version: 4.16.0-ec.1 + - completionTime: "2023-12-11T16:31:12Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:27d41f99e0784a2f596e773799983147b794df48d1f7536d51a95a60945b1931 + startedTime: "2023-12-11T14:18:25Z" + state: Completed + verified: true + version: 4.15.0-ec.3 + - completionTime: "2023-11-21T13:46:56Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:2e546e913e1471f3d416c24016b84a2726d2ee0131a6c888d0730187a2aef1d0 + startedTime: "2023-11-20T14:06:46Z" + state: Completed + verified: true + version: 4.15.0-ec.2 + - completionTime: "2023-10-24T09:22:12Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:4cddbb787a8116cf001e8cdc128ec74d4e3c14f147701168122f4bf87eb6a9eb + startedTime: "2023-10-23T13:34:38Z" + state: Completed + verified: true + version: 4.15.0-ec.1 + - completionTime: "2023-10-17T14:35:01Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:a1964c1b51fde65f98d33c95d8f48a403322a161f885080ce30b574e03848872 + startedTime: "2023-10-17T13:05:41Z" + state: Completed + verified: true + version: 4.14.0-rc.6 + - completionTime: "2023-09-11T14:04:28Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:5d52d203dcdb1825d5b442db6cc718aa678ea15ff6b9e6b65b35f7391f71ed58 + startedTime: "2023-09-11T12:27:07Z" + state: Completed + verified: true + version: 4.14.0-rc.0 + - completionTime: "2023-07-31T22:27:38Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:f091b05f4d2afeff7e1ceca11e869c9674f739aa9e85d64aa34ff30cdcd4ab00 + startedTime: "2023-07-31T16:20:40Z" + state: Completed + verified: true + version: 4.14.0-ec.4 + - completionTime: "2023-07-18T15:17:56Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:6f936f2bd9984d453cfc7c1376ce39abdb88ff6a7cd990829f971cae5a888e49 + startedTime: "2023-07-18T13:01:56Z" + state: Completed + verified: true + version: 4.14.0-ec.3 + - completionTime: "2023-06-21T04:55:09Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:f1ae9ef7dc81faa17f2f3c3b1fff8b14d47c40b84e3d9d3294edb0a505256a64 + startedTime: "2023-06-20T13:14:09Z" + state: Completed + verified: true + version: 4.14.0-ec.2 + - completionTime: "2023-05-30T14:27:45Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:87533554483c185d4c228946a982b721ad43c7450e01e407089ccf2023ba565b + startedTime: "2023-05-30T13:06:10Z" + state: Completed + verified: true + version: 4.14.0-ec.1 + - completionTime: "2023-05-08T14:38:45Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:2e31b29e18333dfc7d1934cd20701cf66d22b5b2438b832c17f14e78bec3f4f9 + startedTime: "2023-05-08T13:18:12Z" + state: Completed + verified: true + version: 4.14.0-ec.0 + - completionTime: "2023-04-17T09:42:48Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:c2aba1cfc1433235829fa4166219ecae6033bf146a537e8aafa60559f3bf507e + startedTime: "2023-04-17T08:02:35Z" + state: Completed + verified: true + version: 4.13.0-rc.4 + - completionTime: "2023-04-03T15:22:27Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:feafe0e47cc476efe748bf2fb5cc4ae0960ccec5b8279c6d81f0b37af75fc197 + startedTime: "2023-04-03T13:47:29Z" + state: Completed + verified: true + version: 4.13.0-rc.2 + - completionTime: "2023-03-22T15:18:20Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:6e2797cce17366258aac050b47a1466edaf7a921aeadc5e6cd210f82779dfd6a + startedTime: "2023-03-22T13:47:18Z" + state: Completed + verified: true + version: 4.13.0-rc.0 + - completionTime: "2023-03-07T15:09:07Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:8e5901d193df3491aa98c2c98e5527d6b07e91bd951d4ce1cebcaa01d6ea11ca + startedTime: "2023-03-07T13:38:10Z" + state: Completed + verified: true + version: 4.13.0-ec.4 + - completionTime: "2023-02-16T16:28:21Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:5e8f403a14eed840b01434115300f2e68cd1232aa47f9509433a46341da2f2b8 + startedTime: "2023-02-16T13:40:39Z" + state: Completed + verified: true + version: 4.13.0-ec.3 + - completionTime: "2023-01-23T15:34:44Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:bdc145f7f6347433f8461a1133d6354abf52268925ce7459a4294d44b9beb4ef + startedTime: "2023-01-23T14:14:14Z" + state: Completed + verified: true + version: 4.13.0-ec.2 + - completionTime: "2022-12-12T15:16:20Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:750fe7239f8633662899a68a1204f57b7ea92189ea8024ed18d9948d1fed00b6 + startedTime: "2022-12-12T13:59:34Z" + state: Completed + verified: true + version: 4.13.0-ec.1 + - completionTime: "2022-11-21T15:02:45Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:7ac78aaca993bf307010e8e92642da2bc28e275fbac241b42f24be46153f12d1 + startedTime: "2022-11-21T13:49:31Z" + state: Completed + verified: true + version: 4.12.0-rc.0 + - completionTime: "2022-11-02T14:12:01Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:20e270c3349fe2fcb38fd0da155329babc02d6b53e7e06ff235346c3c1cf11b5 + startedTime: "2022-11-02T12:47:31Z" + state: Completed + verified: true + version: 4.12.0-ec.5 + - completionTime: "2022-10-11T16:35:19Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:b83381ad349bdd535d27a6ae2d78e5a148a9f8930379818ad7a6b6b7303fe2a7 + startedTime: "2022-10-11T13:33:47Z" + state: Completed + verified: true + version: 4.12.0-ec.4 + - completionTime: "2022-09-20T21:30:29Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:8ee4d90e92ed9b0fdc6687d951d81a68fa14cf7cbd3baf211e1101450c36915a + startedTime: "2022-09-20T12:27:46Z" + state: Completed + verified: true + version: 4.12.0-ec.3 + - completionTime: "2022-09-01T17:18:31Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:264011e6f59dd4a33b26b77b24b1b0b62bc572825e8636a5455a041047cc0531 + startedTime: "2022-08-31T14:13:42Z" + state: Completed + verified: true + version: 4.12.0-ec.2 + - completionTime: "2022-08-15T18:57:31Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:c7997bb9f6a971b38c430f24ac960834a2988442a3bfb2d5e7e1e6b0aa23676f + startedTime: "2022-08-15T12:42:59Z" + state: Completed + verified: true + version: 4.12.0-ec.1 + - completionTime: "2022-07-20T02:25:29Z" + image: quay.io/openshift-release-dev/ocp-release-nightly@sha256:e7f48276819b351a005ae69882ddcebf21c35abec633cf935f5a4a245a8c2161 + startedTime: "2022-07-19T17:34:39Z" + state: Completed + verified: true + version: 4.12.0-0.nightly-2022-07-11-054352 + - completionTime: "2022-06-29T04:59:16Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:af2fc44a39aaef937ce2eb895c61f2c40d8ec721c99eb866cc8e6d1a4c1b0401 + startedTime: "2022-06-28T14:12:13Z" + state: Completed + verified: true + version: 4.11.0-fc.3 + - completionTime: "2022-06-17T15:01:31Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:195de2a5ef3af1083620a62a45ea61ac1233ffa27bbce7b30609a69775aeca19 + startedTime: "2022-06-17T14:26:40Z" + state: Completed + verified: true + version: 4.10.18 + - completionTime: "2022-06-06T13:51:27Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:87d800b3f7c657ed6f18c920f7c925df91b000805366bee068de3625807abd33 + startedTime: "2022-06-06T12:43:55Z" + state: Completed + verified: true + version: 4.10.17 + - completionTime: "2022-05-31T10:30:56Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:a546cd80eae8f94ea0779091e978a09ad47ea94f0769b153763881edb2f5056e + startedTime: "2022-05-31T09:54:24Z" + state: Completed + verified: true + version: 4.10.16 + - completionTime: "2022-05-24T17:01:34Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:ddcb70ce04a01ce487c0f4ad769e9e36a10c8c832a34307c1b1eb8e03a5b7ddb + startedTime: "2022-05-24T15:45:10Z" + state: Completed + verified: true + version: 4.10.15 + - completionTime: "2022-05-16T08:44:29Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:e6aa643f494f64eefc8a6ad92b64156290bccd7e5cda56b8809f3a67ee2a53bb + startedTime: "2022-05-16T08:05:29Z" + state: Completed + verified: true + version: 4.10.14 + - completionTime: "2022-05-09T09:34:19Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:4f516616baed3cf84585e753359f7ef2153ae139c2e80e0191902fbd073c4143 + startedTime: "2022-05-09T08:40:07Z" + state: Completed + verified: true + version: 4.10.13 + - completionTime: "2022-05-04T13:36:29Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:f77f4f75c1e1a4ddd0a0355f298a834db3473fd9ca473235013e9419d1df16db + startedTime: "2022-05-04T12:31:54Z" + state: Completed + verified: true + version: 4.10.12 + - completionTime: "2022-04-25T14:15:21Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:0dc1a4b4d9ea7954987f63e506474a4f0dc55e5f1ea5c1f6f1179e2c09eaffda + startedTime: "2022-04-25T13:32:15Z" + state: Completed + verified: true + version: 4.10.11 + - completionTime: "2022-04-20T10:01:47Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:39efe13ef67cb4449f5e6cdd8a26c83c07c6a2ce5d235dfbc3ba58c64418fcf3 + startedTime: "2022-04-20T08:50:56Z" + state: Completed + verified: true + version: 4.10.10 + - completionTime: "2022-04-11T13:18:24Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:39f360002b9b5c730d1167879ad6437352d51e72acc9fe80add3ec2a0d20400d + startedTime: "2022-04-11T12:17:44Z" + state: Completed + verified: true + version: 4.10.9 + - completionTime: "2022-04-05T09:29:00Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:0696e249622b4d07d8f4501504b6c568ed6ba92416176a01a12b7f1882707117 + startedTime: "2022-04-05T08:23:56Z" + state: Completed + verified: true + version: 4.10.8 + - completionTime: "2022-03-28T10:14:57Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:88b394e633e09dc23aa1f1a61ededd8e52478edf34b51a7dbbb21d9abde2511a + startedTime: "2022-03-28T09:22:26Z" + state: Completed + verified: true + version: 4.10.6 + - completionTime: "2022-03-18T12:07:56Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:ee6a9c7a11f883e90489229f6c6dc78b434af12f5646f4f9411d73a98969f02a + startedTime: "2022-03-18T11:03:17Z" + state: Completed + verified: true + version: 4.10.5 + - completionTime: "2022-03-11T10:35:02Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:9f9c3aaca64f62af992bae5de1e984571c8b812f598b74c84dc630b064389fb7 + startedTime: "2022-03-11T09:24:28Z" + state: Completed + verified: true + version: 4.10.4 + - completionTime: "2022-03-04T08:45:28Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:95a31c7227c105311eb9f461972d5db90fa22270f017ac6eef4d1f95d3e1675c + startedTime: "2022-03-04T08:28:09Z" + state: Completed + verified: true + version: 4.10.1 + - completionTime: "2022-03-03T09:02:24Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:65e8dbc576556e0296e29ac1ae7496743e3494ad65a111e134c6e7202a498d11 + startedTime: "2022-03-03T08:03:56Z" + state: Completed + verified: true + version: 4.10.0-rc.8 + - completionTime: "2022-02-28T10:33:41Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:1c13f0926c37c122eb5c86afd754c007f38977c8fc32d7da090490f556945afd + startedTime: "2022-02-28T09:52:59Z" + state: Completed + verified: true + version: 4.9.23 + - completionTime: "2022-02-21T10:43:43Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:912e4b9986f690b894fcb740881e780600e12ab22f128f6f873bc4e1fcda8d13 + startedTime: "2022-02-21T09:39:53Z" + state: Completed + verified: true + version: 4.9.22 + - completionTime: "2022-02-14T15:27:12Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:fd96300600f9585e5847f5855ca14e2b3cafbce12aefe3b3f52c5da10c4476eb + startedTime: "2022-02-14T14:02:42Z" + state: Completed + verified: true + version: 4.9.21 + - completionTime: "2022-02-07T17:32:42Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:b9ede044950f73730f00415a6fe8eb1b5afac34def872292fd0f9392c9b483f1 + startedTime: "2022-02-07T16:25:00Z" + state: Completed + verified: true + version: 4.9.18 + - completionTime: "2022-01-21T14:02:23Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:7b67b0cb5ab016528b8efdb6130c000398efc58f55e2226f3cf4e3be59c78443 + startedTime: "2022-01-21T13:41:30Z" + state: Completed + verified: true + version: 4.9.17 + - completionTime: "2022-01-17T13:10:11Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:bb1987fb718f81fb30bec4e0e1cd5772945269b77006576b02546cf84c77498e + startedTime: "2022-01-17T12:29:42Z" + state: Completed + verified: true + version: 4.9.15 + - completionTime: "2022-01-10T08:52:50Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:0ff5adc1199c77c2814c2030642109b24039087a2621b19e553a2315bcdc4801 + startedTime: "2022-01-10T08:22:32Z" + state: Completed + verified: true + version: 4.9.13 + - completionTime: "2022-01-03T13:50:06Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:dd71b3cd08ce1e859e0e740a585827c9caa1341819d1121d92879873a127f5e2 + startedTime: "2022-01-03T12:39:47Z" + state: Completed + verified: true + version: 4.9.12 + - completionTime: "2021-12-13T16:02:02Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:0f72e150329db15279a1aeda1286c9495258a4892bc5bf1bf5bb89942cd432de + startedTime: "2021-12-13T15:24:48Z" + state: Completed + verified: true + version: 4.9.11 + - completionTime: "2021-12-06T08:52:26Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:e1853d68d8ff093ec353ca7078b6b6df1533729688bb016b8208263ee7423f66 + startedTime: "2021-12-06T08:02:32Z" + state: Completed + verified: true + version: 4.9.10 + - completionTime: "2021-11-30T13:58:42Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:dc6d4d8b2f9264c0037ed0222285f19512f112cc85a355b14a66bd6b910a4940 + startedTime: "2021-11-30T12:49:28Z" + state: Completed + verified: true + version: 4.9.9 + - completionTime: "2021-11-19T13:14:02Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:5c55be02e32e688ec5a404858a08cf533ba15b50b6f0e028089635b47db5866e + startedTime: "2021-11-19T12:12:57Z" + state: Completed + verified: true + version: 4.9.7 + - completionTime: "2021-11-09T14:31:21Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:386f4e08c48d01e0c73d294a88bb64fac3284d1d16a5b8938deb3b8699825a88 + startedTime: "2021-11-09T13:03:23Z" + state: Completed + verified: true + version: 4.9.5 + - completionTime: "2021-10-08T18:31:01Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:bf48faa639523b73131ec7c91637d5c94d33a4afe09ac8bdad672862f5e86ccb + startedTime: "2021-10-08T15:53:21Z" + state: Completed + verified: true + version: 4.8.14 + - completionTime: "2021-08-09T18:17:06Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:841535acc09ca8412cd17e8f7702eceda1cac688ccc281278f108675c30de270 + startedTime: "2021-08-09T16:13:32Z" + state: Completed + verified: true + version: 4.8.4 + - completionTime: "2021-07-28T11:35:09Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:0e82d17ababc79b10c10c5186920232810aeccbccf2a74c691487090a2c98ebc + startedTime: "2021-07-28T10:42:05Z" + state: Completed + verified: true + version: 4.8.2 + - completionTime: "2021-07-08T15:06:51Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:af238ba15d5dcb839e4f0adff5e87d36f4bae096d31f0f7192c726e3a35c203b + startedTime: "2021-07-08T13:53:32Z" + state: Completed + verified: true + version: 4.8.0-rc.3 + - completionTime: "2021-07-07T15:04:41Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:3a63dd437e1576e6ca74a9f60bbfb52488f0a5d7090b6c855e11e1919acd2d3e + startedTime: "2021-07-07T13:01:40Z" + state: Completed + verified: true + version: 4.8.0-rc.1 + - completionTime: "2021-06-15T13:42:55Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:fb8714bf2c9b168f6cd9fd9fc504648c494c19644660994541e51f7632078064 + startedTime: "2021-06-15T12:32:34Z" + state: Completed + verified: true + version: 4.8.0-fc.9 + - completionTime: "2021-06-10T08:06:23Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:cdc9e7d9fbf86acaffdb5cc4fa471be84a15a5a70161cffbc3a17dda865b00b4 + startedTime: "2021-06-09T11:56:55Z" + state: Completed + verified: true + version: 4.8.0-fc.7 + - completionTime: "2021-05-09T22:56:42Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:dd75546170e65d7d17130de10a6ffeb425f960399640632cbc8426b9da338458 + startedTime: "2021-05-07T16:26:40Z" + state: Completed + verified: true + version: 4.7.9 + - completionTime: "2021-03-20T01:02:35Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:edb08aaadf32f0b2e800f7e29e6f7a1b225211514401e92601ba94a971dec838 + startedTime: "2021-03-19T13:53:16Z" + state: Completed + verified: true + version: 4.7.3 + - completionTime: "2021-03-05T18:31:57Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:d74b1cfa81f8c9cc23336aee72d8ae9c9905e62c4874b071317a078c316f8a70 + startedTime: "2021-03-05T12:57:37Z" + state: Completed + verified: false + version: 4.7.0 + - completionTime: "2021-02-15T16:04:46Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:a7b23f38d1e5be975a6b516739689673011bdfa59a7158dc6ca36cefae169c18 + startedTime: "2021-02-15T14:29:24Z" + state: Completed + verified: false + version: 4.6.17 + - completionTime: "2021-01-14T17:32:49Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:c72bcb1a8c735770caedbab5d6142c2c07209fb4fbda5f59eb92fc88db7fe8cc + startedTime: "2021-01-14T15:12:21Z" + state: Completed + verified: false + version: 4.6.10 + - completionTime: "2020-12-04T21:10:45Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:494dd5029f03c7b5c8f4404c9281b5ad435403a6f7a29daecc82381d66cf5d89 + startedTime: "2020-12-04T17:02:50Z" + state: Completed + verified: false + version: 4.6.7 + - completionTime: "2020-11-17T19:04:40Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:6681fc3f83dda0856b43cecd25f2d226c3f90e8a42c7144dbc499f6ee0a086fc + startedTime: "2020-11-17T17:19:57Z" + state: Completed + verified: false + version: 4.6.4 + - completionTime: "2020-10-23T14:31:36Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:d78292e9730dd387ff6198197c8b0598da340be7678e8e1e4810b557a926c2b9 + startedTime: "2020-10-23T14:01:15Z" + state: Completed + verified: false + version: 4.6.1 + - completionTime: "2020-10-21T15:18:00Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:2c22e1c56831935a24efb827d2df572855ccd555c980070f77c39729526037d5 + startedTime: "2020-10-20T18:30:58Z" + state: Completed + verified: true + version: 4.6.0-rc.4 + - completionTime: "2020-08-27T18:21:45Z" + image: quay.io/openshift-release-dev/ocp-release@sha256:0147ab7622969c1cde71e8e5eb8796e8245137fdbf3a5cae63017189a9060f86 + startedTime: "2020-08-27T17:41:55Z" + state: Completed + verified: true + version: 4.5.6 + observedGeneration: 118 + versionHash: UePJ02Pik4g= +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-mc.yaml b/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-mc.yaml new file mode 100644 index 0000000000..e06534f7f9 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-mc.yaml @@ -0,0 +1,59 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 54cf6ad21230d373b6870d7fd5cfebe76f5cd7df + machineconfiguration.openshift.io/release-image-version: 4.16.0-ec.3 + creationTimestamp: "2024-02-27T14:42:22Z" + generation: 1 + name: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 5e1239a2-9fcb-4c9c-b778-20b5ce4d0c7e + resourceVersion: "4865176529" + uid: 07f14f1a-bbc3-4d9e-8072-353e997407ea + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: c5f53e25f337f003a388d9108713a6230f197044 + machineconfiguration.openshift.io/release-image-version: 4.16.0-ec.2 + creationTimestamp: "2024-02-14T15:08:31Z" + generation: 1 + name: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 5e1239a2-9fcb-4c9c-b778-20b5ce4d0c7e + resourceVersion: "4817097035" + uid: a34028b1-2e4a-4773-abc1-ccb170a84f3c + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 54cf6ad21230d373b6870d7fd5cfebe76f5cd7df + machineconfiguration.openshift.io/release-image-version: 4.16.0-ec.3 + creationTimestamp: "2024-02-27T15:01:57Z" + generation: 1 + name: rendered-master-e3c7b185390e28b7535bc5d0855940ad + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: 0542312a-13ce-4a1d-bd20-24528ced2dea + resourceVersion: "4865280056" + uid: fe21e396-b9bb-4733-9112-9b6ac8616f2e +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-mcp.yaml b/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-mcp.yaml new file mode 100644 index 0000000000..3063887b3c --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-mcp.yaml @@ -0,0 +1,184 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2020-05-21T19:35:45Z" + generation: 13166 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + operator.machineconfiguration.openshift.io/required-for-upgrade: "" + pools.operator.machineconfiguration.openshift.io/master: "" + name: master + resourceVersion: "4865472069" + uid: 0542312a-13ce-4a1d-bd20-24528ced2dea + spec: + configuration: + name: rendered-master-e3c7b185390e28b7535bc5d0855940ad + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-master + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-generated-containerruntime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-generated-crio-seccomp-use-default + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: master + nodeSelector: + matchLabels: + node-role.kubernetes.io/master: "" + paused: false + status: + conditions: + - lastTransitionTime: "2020-05-21T19:36:50Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2023-12-11T15:29:58Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-27T14:42:24Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-27T15:42:02Z" + message: All nodes are updated with MachineConfig rendered-master-e3c7b185390e28b7535bc5d0855940ad + reason: "" + status: "True" + type: Updated + - lastTransitionTime: "2024-02-27T15:42:02Z" + message: "" + reason: "" + status: "False" + type: Updating + configuration: + name: rendered-master-e3c7b185390e28b7535bc5d0855940ad + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 13166 + readyMachineCount: 3 + unavailableMachineCount: 0 + updatedMachineCount: 3 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + annotations: + kubectl.kubernetes.io/last-applied-configuration: | + {"apiVersion":"machineconfiguration.openshift.io/v1","kind":"MachineConfigPool","metadata":{"annotations":{},"name":"worker"},"spec":{"maxUnavailable":20}} + creationTimestamp: "2020-05-21T19:35:45Z" + generation: 215374 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + pools.operator.machineconfiguration.openshift.io/worker: "" + name: worker + resourceVersion: "4865640276" + uid: 5e1239a2-9fcb-4c9c-b778-20b5ce4d0c7e + spec: + configuration: + name: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-worker + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-generated-containerruntime-2 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-generated-containerruntime-3 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-generated-crio-seccomp-use-default + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-ssh + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-z-global-worker-kubelet-reserve + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: worker + maxUnavailable: 20 + nodeSelector: + matchLabels: + node-role.kubernetes.io/worker: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-27T13:59:10Z" + message: "" + reason: "" + status: "False" + type: Updated + - lastTransitionTime: "2024-02-27T14:42:25Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-27T13:59:10Z" + message: All nodes are updating to MachineConfig rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + reason: "" + status: "True" + type: Updating + - lastTransitionTime: "2024-02-27T15:43:35Z" + message: "" + reason: "" + status: "True" + type: Degraded + - lastTransitionTime: "2024-02-27T15:43:35Z" + message: 'Node build0-gstfj-ci-tests-worker-c-dcz9p is reporting: "failed to drain node: build0-gstfj-ci-tests-worker-c-dcz9p after 1 hour. Please see machine-config-controller logs for more information", Node build0-gstfj-ci-prowjobs-worker-b-9lztv is reporting: "failed to drain node: build0-gstfj-ci-prowjobs-worker-b-9lztv after 1 hour. Please see machine-config-controller logs for more information", Node build0-gstfj-ci-prowjobs-worker-b-bg9f5 is reporting: "failed to drain node: build0-gstfj-ci-prowjobs-worker-b-bg9f5 after 1 hour. Please see machine-config-controller logs for more information", Node build0-gstfj-ci-tests-worker-b-4h7pn is reporting: "failed to drain node: build0-gstfj-ci-tests-worker-b-4h7pn after 1 hour. Please see machine-config-controller logs for more information", Node build0-gstfj-ci-tests-worker-b-jv5bg is reporting: "failed to drain node: build0-gstfj-ci-tests-worker-b-jv5bg after 1 hour. Please see machine-config-controller logs for more information", Node build0-gstfj-ci-tests-worker-b-kj6gk is reporting: "failed to drain node: build0-gstfj-ci-tests-worker-b-kj6gk after 1 hour. Please see machine-config-controller logs for more information", Node build0-gstfj-ci-prowjobs-worker-b-mrxwn is reporting: "failed to drain node: build0-gstfj-ci-prowjobs-worker-b-mrxwn after 1 hour. Please see machine-config-controller logs for more information"' + reason: 7 nodes are reporting degraded status on sync + status: "True" + type: NodeDegraded + configuration: + name: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + degradedMachineCount: 7 + machineCount: 59 + observedGeneration: 215374 + readyMachineCount: 22 + unavailableMachineCount: 13 + updatedMachineCount: 23 +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-node.yaml b/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-node.yaml new file mode 100644 index 0000000000..df80137ba9 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining-node.yaml @@ -0,0 +1,3379 @@ +apiVersion: v1 +items: + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T15:42:50Z" + labels: + ci-workload: builds + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-builds-worker-b-65df4 + resourceVersion: "4865640760" + uid: 77b9c587-0f86-410d-bb64-e57219a83991 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T15:42:50Z" + lastTransitionTime: "2024-02-27T15:42:50Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:17Z" + lastTransitionTime: "2024-02-27T15:42:50Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:17Z" + lastTransitionTime: "2024-02-27T15:42:50Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:17Z" + lastTransitionTime: "2024-02-27T15:42:50Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:17Z" + lastTransitionTime: "2024-02-27T15:43:40Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T15:59:29Z" + labels: + ci-workload: builds + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-builds-worker-b-dvrd2 + resourceVersion: "4865640697" + uid: df2721c7-bdb2-41e2-af66-8ef2d67d4da3 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T15:59:29Z" + lastTransitionTime: "2024-02-27T15:59:29Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T15:59:29Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T15:59:29Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T15:59:29Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T16:00:19Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T13:54:10Z" + labels: + ci-workload: builds + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-builds-worker-b-f7rlh + resourceVersion: "4865640842" + uid: fae19a5f-9eb5-4258-801d-4c7e40ec11f7 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:54:10Z" + lastTransitionTime: "2024-02-27T13:54:10Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T16:00:24Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T16:00:24Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T16:00:24Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T16:00:30Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T16:02:47Z" + labels: + ci-workload: builds + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-builds-worker-b-m4vgr + resourceVersion: "4865640889" + uid: 7088603e-36c4-4420-96c0-3340661bcfc2 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T16:02:48Z" + lastTransitionTime: "2024-02-27T16:02:48Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T16:02:47Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T16:02:47Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T16:02:47Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T16:03:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T15:22:55Z" + labels: + ci-workload: builds + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-builds-worker-b-mg8bd + resourceVersion: "4865640737" + uid: ca9f63ce-e196-4948-be48-ae3cb2345ae3 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T15:22:55Z" + lastTransitionTime: "2024-02-27T15:22:56Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:22:55Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:22:55Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:22:55Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:23:45Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T15:21:54Z" + labels: + ci-workload: builds + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-builds-worker-c-2hzgm + resourceVersion: "4865640709" + uid: 585f25af-4c59-4b7e-9273-5217805e0a21 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T15:21:54Z" + lastTransitionTime: "2024-02-27T15:21:54Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:21:54Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:21:54Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:21:54Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:22:42Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T15:21:52Z" + labels: + ci-workload: builds + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-builds-worker-c-dmjft + resourceVersion: "4865640707" + uid: 324da999-e772-4786-b5f4-ab5aeff10be6 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T15:21:52Z" + lastTransitionTime: "2024-02-27T15:21:52Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:21:52Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:21:52Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:21:52Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:22:39Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T15:22:08Z" + labels: + ci-workload: builds + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-builds-worker-c-ng8s5 + resourceVersion: "4865640604" + uid: aa6d2b6c-77f7-465e-91e0-bd9da1ea3091 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T15:22:08Z" + lastTransitionTime: "2024-02-27T15:22:09Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T15:22:08Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T15:22:08Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T15:22:08Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T15:22:56Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T15:22:05Z" + labels: + ci-workload: builds + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-builds-worker-c-vmmfj + resourceVersion: "4865641101" + uid: 8ad18d8e-81e6-4e47-9ade-a630023431fb + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T15:22:05Z" + lastTransitionTime: "2024-02-27T15:22:05Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T15:22:05Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T15:22:05Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T15:22:05Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T15:22:57Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T16:00:28Z" + labels: + ci-workload: builds + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-d + name: build0-gstfj-ci-builds-worker-d-4pjlz + resourceVersion: "4865640631" + uid: 34b712af-aaa9-49ad-9a19-85e591ed5005 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T16:00:28Z" + lastTransitionTime: "2024-02-27T16:00:29Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T16:00:28Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T16:00:28Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T16:00:28Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T16:01:16Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T16:00:25Z" + labels: + ci-workload: builds + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-d + name: build0-gstfj-ci-builds-worker-d-z49wm + resourceVersion: "4865640564" + uid: 3fb2537f-1709-4836-b845-99816e389042 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T16:00:26Z" + lastTransitionTime: "2024-02-27T16:00:26Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T16:00:25Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T16:00:25Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T16:00:25Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T16:01:13Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T12:58:35Z" + labels: + ci-workload: longtests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-longtests-worker-c-vspm9 + resourceVersion: "4865641085" + uid: 9177ec01-a44a-410e-bf32-60171a1b77d8 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T12:58:36Z" + lastTransitionTime: "2024-02-27T12:58:36Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T12:58:35Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T12:58:35Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T12:58:35Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T12:59:30Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T12:19:55Z" + labels: + ci-workload: longtests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-d + name: build0-gstfj-ci-longtests-worker-d-hksc9 + resourceVersion: "4865640850" + uid: dd9c678a-9dd0-4c23-8b59-548e7622285a + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T12:19:56Z" + lastTransitionTime: "2024-02-27T12:19:56Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T12:19:55Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T12:19:55Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T12:19:55Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T12:20:40Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-4108bf4a0655b41fdd3ac3a3db3d47ea + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: 'failed to drain node: build0-gstfj-ci-prowjobs-worker-b-9lztv after 1 hour. Please see machine-config-controller logs for more information' + machineconfiguration.openshift.io/state: Degraded + creationTimestamp: "2024-02-22T10:20:00Z" + labels: + ci-workload: prowjobs + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-prowjobs-worker-b-9lztv + resourceVersion: "4865640670" + uid: fe1e1ab1-a304-4194-8e26-d3aec1cec6a5 + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-22T10:20:01Z" + lastTransitionTime: "2024-02-22T10:20:01Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-22T10:20:00Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-22T10:20:00Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-22T10:20:00Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-22T10:20:43Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-4108bf4a0655b41fdd3ac3a3db3d47ea + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: 'failed to drain node: build0-gstfj-ci-prowjobs-worker-b-bg9f5 after 1 hour. Please see machine-config-controller logs for more information' + machineconfiguration.openshift.io/state: Degraded + creationTimestamp: "2024-02-26T14:02:10Z" + labels: + ci-workload: prowjobs + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-prowjobs-worker-b-bg9f5 + resourceVersion: "4865640572" + uid: bf5a649a-2b80-4372-a9a0-0b2504e9d0c0 + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-26T14:02:10Z" + lastTransitionTime: "2024-02-26T14:02:10Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-26T14:02:10Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-26T14:02:10Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-26T14:02:10Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-26T14:02:52Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-4108bf4a0655b41fdd3ac3a3db3d47ea + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: 'failed to drain node: build0-gstfj-ci-prowjobs-worker-b-mrxwn after 1 hour. Please see machine-config-controller logs for more information' + machineconfiguration.openshift.io/state: Degraded + creationTimestamp: "2024-02-27T09:14:05Z" + labels: + ci-workload: prowjobs + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-prowjobs-worker-b-mrxwn + resourceVersion: "4865640619" + uid: 411a56e5-7554-44c5-ac07-533f3910b227 + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-27T09:14:05Z" + lastTransitionTime: "2024-02-27T09:14:05Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T09:14:05Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T09:14:05Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T09:14:05Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T09:14:48Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T12:57:16Z" + labels: + ci-workload: prowjobs + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-prowjobs-worker-c-f6dkk + resourceVersion: "4865640731" + uid: 75d6bf57-2570-4e03-9e11-9a5b0c186b5c + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T12:57:17Z" + lastTransitionTime: "2024-02-27T12:57:17Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T12:57:16Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T12:57:16Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T12:57:16Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T12:58:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T13:41:17Z" + labels: + ci-workload: prowjobs + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-prowjobs-worker-c-kkm72 + resourceVersion: "4865640642" + uid: ccd60553-8326-4151-8ab0-57d6d9908df1 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:41:17Z" + lastTransitionTime: "2024-02-27T13:41:17Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T13:41:17Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T13:41:17Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T13:41:17Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T13:42:11Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T13:41:48Z" + labels: + ci-workload: prowjobs + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-prowjobs-worker-c-p5df7 + resourceVersion: "4865640806" + uid: 7f2bb1f8-b761-4ee5-a0c2-836d0cbbb43c + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:41:49Z" + lastTransitionTime: "2024-02-27T13:41:49Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T13:41:48Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T13:41:48Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T13:41:48Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T13:42:41Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T12:57:13Z" + labels: + ci-workload: prowjobs + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-prowjobs-worker-c-tgrsc + resourceVersion: "4865640906" + uid: e7b120f8-d3f4-4f12-b710-9e9946c0d50b + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T12:57:14Z" + lastTransitionTime: "2024-02-27T12:57:14Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T12:57:13Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T12:57:13Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T12:57:13Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T12:57:58Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-26T22:09:44Z" + labels: + ci-workload: prowjobs + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-d + name: build0-gstfj-ci-prowjobs-worker-d-ddnxd + resourceVersion: "4865641095" + uid: 7a33f90a-02e2-45a7-a235-9505de5af685 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-26T22:09:44Z" + lastTransitionTime: "2024-02-26T22:09:44Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-26T22:09:44Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-26T22:09:44Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-26T22:09:44Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-26T22:10:24Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-4108bf4a0655b41fdd3ac3a3db3d47ea + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: 'failed to drain node: build0-gstfj-ci-tests-worker-b-4h7pn after 1 hour. Please see machine-config-controller logs for more information' + machineconfiguration.openshift.io/state: Degraded + creationTimestamp: "2024-02-26T18:36:06Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-tests-worker-b-4h7pn + resourceVersion: "4865640733" + uid: ad3073ef-7371-49cc-b716-cd83c31b4280 + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-26T18:36:06Z" + lastTransitionTime: "2024-02-26T18:36:06Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-26T18:36:06Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-26T18:36:06Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-26T18:36:06Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-26T18:36:46Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T13:28:38Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-tests-worker-b-d9vz2 + resourceVersion: "4865640672" + uid: 3feb5598-1c68-489e-83a8-7bb65464d87e + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:28:38Z" + lastTransitionTime: "2024-02-27T13:28:38Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T15:53:29Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T15:53:29Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T15:53:29Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T15:53:29Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T09:11:49Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-tests-worker-b-fkn28 + resourceVersion: "4865640757" + uid: 91805eef-452d-4b6c-911c-0c28d9d755da + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T09:11:50Z" + lastTransitionTime: "2024-02-27T09:11:50Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:17Z" + lastTransitionTime: "2024-02-27T15:53:42Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:17Z" + lastTransitionTime: "2024-02-27T15:53:42Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:17Z" + lastTransitionTime: "2024-02-27T15:53:42Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:17Z" + lastTransitionTime: "2024-02-27T15:53:42Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-4108bf4a0655b41fdd3ac3a3db3d47ea + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: 'failed to drain node: build0-gstfj-ci-tests-worker-b-jv5bg after 1 hour. Please see machine-config-controller logs for more information' + machineconfiguration.openshift.io/state: Degraded + creationTimestamp: "2024-02-27T13:29:53Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-tests-worker-b-jv5bg + resourceVersion: "4865640616" + uid: b97e40bd-c0c7-4301-8615-edc0751cb595 + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:29:53Z" + lastTransitionTime: "2024-02-27T13:29:53Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T13:29:53Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T13:29:53Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T13:29:53Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T13:30:44Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-4108bf4a0655b41fdd3ac3a3db3d47ea + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: 'failed to drain node: build0-gstfj-ci-tests-worker-b-kj6gk after 1 hour. Please see machine-config-controller logs for more information' + machineconfiguration.openshift.io/state: Degraded + creationTimestamp: "2024-02-27T13:53:21Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-tests-worker-b-kj6gk + resourceVersion: "4865641084" + uid: 29a897b3-7362-4753-9886-282e9b7cad61 + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:53:21Z" + lastTransitionTime: "2024-02-27T13:53:21Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T13:53:21Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T13:53:21Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T13:53:21Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T13:54:13Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T10:10:48Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-tests-worker-b-mc7fm + resourceVersion: "4865641089" + uid: 327c62b7-8a58-4d50-aa2a-e666e6d8bfe1 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T10:10:48Z" + lastTransitionTime: "2024-02-27T10:10:48Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T15:51:36Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T15:51:36Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T15:51:36Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T15:51:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T10:10:45Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-ci-tests-worker-b-pqz8t + resourceVersion: "4865641024" + uid: 68c245a6-755b-4a39-8654-c0bd1391e2bd + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T10:10:46Z" + lastTransitionTime: "2024-02-27T10:10:46Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:20Z" + lastTransitionTime: "2024-02-27T15:25:22Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:20Z" + lastTransitionTime: "2024-02-27T15:25:22Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:20Z" + lastTransitionTime: "2024-02-27T15:25:22Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:20Z" + lastTransitionTime: "2024-02-27T15:27:18Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T13:57:40Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-2c4vg + resourceVersion: "4865641132" + uid: 1dce7872-d929-41d4-92a0-a383bcc1f50b + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:57:41Z" + lastTransitionTime: "2024-02-27T13:57:41Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:22Z" + lastTransitionTime: "2024-02-27T13:57:40Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:22Z" + lastTransitionTime: "2024-02-27T13:57:40Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:22Z" + lastTransitionTime: "2024-02-27T13:57:40Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:22Z" + lastTransitionTime: "2024-02-27T13:58:34Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Working + creationTimestamp: "2024-02-27T03:02:22Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-2kz4m + resourceVersion: "4865641140" + uid: 9a087ae7-e163-4a9b-bd1f-920040dbc61c + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-27T03:02:23Z" + lastTransitionTime: "2024-02-27T03:02:23Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:22Z" + lastTransitionTime: "2024-02-27T03:02:22Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:22Z" + lastTransitionTime: "2024-02-27T03:02:22Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:22Z" + lastTransitionTime: "2024-02-27T03:02:22Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:22Z" + lastTransitionTime: "2024-02-27T03:03:04Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Working + creationTimestamp: "2024-02-26T16:35:20Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-55hpj + resourceVersion: "4865640812" + uid: d11448cc-2211-496a-85c8-92fdff95e699 + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-26T16:35:20Z" + lastTransitionTime: "2024-02-26T16:35:21Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-26T16:35:20Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-26T16:35:20Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-26T16:35:20Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-26T16:36:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T13:21:54Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-5twk4 + resourceVersion: "4865641090" + uid: ad52811e-4d16-4bd7-8098-68d70ab5231c + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:21:54Z" + lastTransitionTime: "2024-02-27T13:21:54Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T13:21:54Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T13:21:54Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T13:21:54Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T13:22:45Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T13:57:33Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-65n48 + resourceVersion: "4865640787" + uid: 481e52bf-d129-4895-83e3-0cd117d64f24 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:57:33Z" + lastTransitionTime: "2024-02-27T13:57:33Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:17Z" + lastTransitionTime: "2024-02-27T13:57:33Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:17Z" + lastTransitionTime: "2024-02-27T13:57:33Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:17Z" + lastTransitionTime: "2024-02-27T13:57:33Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:17Z" + lastTransitionTime: "2024-02-27T13:58:17Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T13:17:58Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-79nrd + resourceVersion: "4865640568" + uid: 256f07f7-7c36-4c05-947f-cfae542451f7 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:17:58Z" + lastTransitionTime: "2024-02-27T13:17:58Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T13:17:58Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T13:17:58Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T13:17:58Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T13:18:50Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T14:10:13Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-82z85 + resourceVersion: "4865640845" + uid: aae4bbe1-302f-4d68-8872-8579b676ce82 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T14:10:13Z" + lastTransitionTime: "2024-02-27T14:10:13Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T14:10:13Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T14:10:13Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T14:10:13Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T14:11:07Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Working + creationTimestamp: "2024-02-27T03:02:03Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-8tmjv + resourceVersion: "4865640453" + uid: 151f76df-209c-460f-af36-37fc4a6cef07 + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-27T03:02:03Z" + lastTransitionTime: "2024-02-27T03:02:03Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:12Z" + lastTransitionTime: "2024-02-27T03:02:03Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:12Z" + lastTransitionTime: "2024-02-27T03:02:03Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:12Z" + lastTransitionTime: "2024-02-27T03:02:03Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:12Z" + lastTransitionTime: "2024-02-27T03:02:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-4108bf4a0655b41fdd3ac3a3db3d47ea + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: 'failed to drain node: build0-gstfj-ci-tests-worker-c-dcz9p after 1 hour. Please see machine-config-controller logs for more information' + machineconfiguration.openshift.io/state: Degraded + creationTimestamp: "2024-02-26T12:11:50Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-dcz9p + resourceVersion: "4865641122" + uid: abb4803f-048f-431b-bc6a-2c897acfb5df + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-26T12:11:51Z" + lastTransitionTime: "2024-02-26T12:11:51Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:22Z" + lastTransitionTime: "2024-02-26T12:11:50Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:22Z" + lastTransitionTime: "2024-02-26T12:11:50Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:22Z" + lastTransitionTime: "2024-02-26T12:11:50Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:22Z" + lastTransitionTime: "2024-02-26T12:12:23Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T10:47:28Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-glhn7 + resourceVersion: "4865640958" + uid: 92c711c8-025f-4045-91fd-db2ec01ec22b + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T10:47:29Z" + lastTransitionTime: "2024-02-27T10:47:29Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T10:47:28Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T10:47:28Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T10:47:28Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T10:48:09Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T10:47:30Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-hnxl9 + resourceVersion: "4865641094" + uid: 8ddba160-05e2-48fa-800f-391f9193d5cb + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T10:47:30Z" + lastTransitionTime: "2024-02-27T10:47:30Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T10:47:30Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T10:47:30Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T10:47:30Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T10:48:11Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T10:47:33Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-jpzfm + resourceVersion: "4865640541" + uid: fcb80648-4fd2-49c9-9e3b-28218d7f02d9 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T10:47:33Z" + lastTransitionTime: "2024-02-27T10:47:33Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:12Z" + lastTransitionTime: "2024-02-27T10:47:33Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:12Z" + lastTransitionTime: "2024-02-27T10:47:33Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:12Z" + lastTransitionTime: "2024-02-27T10:47:33Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:12Z" + lastTransitionTime: "2024-02-27T10:48:15Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-26T16:41:44Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-jq5rk + resourceVersion: "4865639791" + uid: a2fa0db1-3966-4b53-97d2-2042ef511418 + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-26T16:41:44Z" + lastTransitionTime: "2024-02-26T16:41:44Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:03Z" + lastTransitionTime: "2024-02-27T16:14:57Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:03Z" + lastTransitionTime: "2024-02-27T16:14:57Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:03Z" + lastTransitionTime: "2024-02-27T16:14:57Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:03Z" + lastTransitionTime: "2024-02-27T16:14:57Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Working + creationTimestamp: "2024-02-26T16:17:24Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-lfz8m + resourceVersion: "4865640562" + uid: e666578e-40ed-453b-9b19-2b9cd53af2b0 + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-26T16:17:24Z" + lastTransitionTime: "2024-02-26T16:17:24Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-26T16:17:24Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-26T16:17:24Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-26T16:17:24Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-26T16:18:05Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T14:08:44Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-lxqgs + resourceVersion: "4865640934" + uid: bd011090-fc93-49de-a0f2-7a56fc899432 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T14:08:44Z" + lastTransitionTime: "2024-02-27T14:08:44Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T14:08:44Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T14:08:44Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T14:08:44Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T14:09:37Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: drain-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Working + creationTimestamp: "2024-02-27T10:08:41Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-r55wv + resourceVersion: "4865640602" + uid: b8268723-944c-4676-a365-fbd872129fcb + spec: + unschedulable: true + status: + conditions: + - lastHeartbeatTime: "2024-02-27T10:08:41Z" + lastTransitionTime: "2024-02-27T10:08:41Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T10:08:41Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T10:08:41Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T10:08:41Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T10:09:22Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T14:03:36Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-rqch4 + resourceVersion: "4865641077" + uid: 936f5d0e-fac5-4b0b-a634-02a3df1cba02 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T14:03:36Z" + lastTransitionTime: "2024-02-27T14:03:36Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T14:03:36Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T14:03:36Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T14:03:36Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T14:04:34Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T13:47:17Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-ci-tests-worker-c-zd9c7 + resourceVersion: "4865641097" + uid: 2843b4f9-c3ca-4288-b94b-36aec64ea45f + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:47:17Z" + lastTransitionTime: "2024-02-27T13:47:17Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T13:47:17Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T13:47:17Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T13:47:17Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T13:48:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T13:58:52Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-d + name: build0-gstfj-ci-tests-worker-d-6hddk + resourceVersion: "4865640745" + uid: e9bad2ea-c736-4434-82e9-05b82678b206 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:58:52Z" + lastTransitionTime: "2024-02-27T13:58:52Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T13:58:52Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T13:58:52Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T13:58:52Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T13:59:47Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T13:46:17Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-d + name: build0-gstfj-ci-tests-worker-d-kc6xt + resourceVersion: "4865640917" + uid: 28a80658-74ef-4e52-9bb6-38db2704c476 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:46:17Z" + lastTransitionTime: "2024-02-27T13:46:17Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T13:46:17Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T13:46:17Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T13:46:17Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:19Z" + lastTransitionTime: "2024-02-27T13:47:10Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-26T08:45:46Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-d + name: build0-gstfj-ci-tests-worker-d-r2k42 + resourceVersion: "4865640841" + uid: 2830de4b-74ef-436e-a328-33b2d359803b + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-26T08:45:46Z" + lastTransitionTime: "2024-02-26T08:45:46Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-26T08:45:46Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-26T08:45:46Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-26T08:45:46Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-26T08:46:29Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-26T19:44:01Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-d + name: build0-gstfj-ci-tests-worker-d-r9zqc + resourceVersion: "4865640590" + uid: f8299511-d078-435c-a32d-12329f3bee64 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-26T19:44:02Z" + lastTransitionTime: "2024-02-26T19:44:02Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-26T19:44:01Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-26T19:44:01Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-26T19:44:01Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-26T19:44:44Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + cluster-autoscaler.kubernetes.io/scale-down-disabled: "true" + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T13:31:12Z" + labels: + ci-workload: tests + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-d + name: build0-gstfj-ci-tests-worker-d-w2bgd + resourceVersion: "4865640690" + uid: 78f5dd25-3268-430f-be23-b07d1a6bc4b9 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T13:31:13Z" + lastTransitionTime: "2024-02-27T13:31:13Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T13:31:12Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T13:31:12Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T13:31:12Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T13:32:05Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-e3c7b185390e28b7535bc5d0855940ad + machineconfiguration.openshift.io/desiredConfig: rendered-master-e3c7b185390e28b7535bc5d0855940ad + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-e3c7b185390e28b7535bc5d0855940ad + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-e3c7b185390e28b7535bc5d0855940ad + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/ssh: accessed + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2020-05-21T19:30:38Z" + labels: + node-role.kubernetes.io/master: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-m-0.c.openshift-ci-build-farm.internal + resourceVersion: "4865640679" + uid: 7d4aa28d-b049-4277-a54d-6f7938fe823f + spec: + podCIDR: 10.128.0.0/24 + podCIDRs: + - 10.128.0.0/24 + status: + conditions: + - lastHeartbeatTime: null + lastTransitionTime: "2020-05-21T19:32:15Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T15:22:52Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T15:22:52Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T15:22:52Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T15:23:40Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-e3c7b185390e28b7535bc5d0855940ad + machineconfiguration.openshift.io/desiredConfig: rendered-master-e3c7b185390e28b7535bc5d0855940ad + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-e3c7b185390e28b7535bc5d0855940ad + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-e3c7b185390e28b7535bc5d0855940ad + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/ssh: accessed + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2020-05-21T19:31:06Z" + labels: + node-role.kubernetes.io/master: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-m-1.c.openshift-ci-build-farm.internal + resourceVersion: "4865640839" + uid: b088b9bb-307b-4997-b951-54d0eb55e7be + spec: + podCIDR: 10.128.4.0/24 + podCIDRs: + - 10.128.4.0/24 + status: + conditions: + - lastHeartbeatTime: null + lastTransitionTime: "2020-05-21T19:32:16Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T15:27:51Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T15:27:51Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T15:27:51Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T15:28:28Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-e3c7b185390e28b7535bc5d0855940ad + machineconfiguration.openshift.io/desiredConfig: rendered-master-e3c7b185390e28b7535bc5d0855940ad + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-e3c7b185390e28b7535bc5d0855940ad + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-e3c7b185390e28b7535bc5d0855940ad + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/ssh: accessed + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2020-05-21T19:31:06Z" + labels: + node-role.kubernetes.io/master: "" + topology.gke.io/zone: us-east1-d + name: build0-gstfj-m-2.c.openshift-ci-build-farm.internal + resourceVersion: "4865640831" + uid: 0cf8b966-14fd-40de-9cc2-f2edd22c70e3 + spec: + podCIDR: 10.128.5.0/24 + podCIDRs: + - 10.128.5.0/24 + status: + conditions: + - lastHeartbeatTime: null + lastTransitionTime: "2020-05-21T19:32:15Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T15:39:18Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T15:39:18Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T15:39:18Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T15:39:53Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-08T15:27:50Z" + labels: + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-w-b-f7dkq.c.openshift-ci-build-farm.internal + resourceVersion: "4865640833" + uid: e7147551-d28f-41c1-acc6-37a9e8c76955 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-08T15:27:50Z" + lastTransitionTime: "2024-02-08T15:27:50Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T15:22:53Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T15:22:53Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T15:22:53Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:18Z" + lastTransitionTime: "2024-02-27T15:22:58Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T15:24:00Z" + labels: + node-role.kubernetes.io: infra + node-role.kubernetes.io/infra: "" + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-w-b-infra-2stfh.c.openshift-ci-build-farm.internal + resourceVersion: "4865640567" + uid: c2363372-e01a-4c11-8d5c-6045b5de4f5e + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T15:24:01Z" + lastTransitionTime: "2024-02-27T15:24:01Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T15:24:00Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T15:24:00Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T15:24:00Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T15:24:46Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-01-19T20:09:29Z" + labels: + node-role.kubernetes.io: infra + node-role.kubernetes.io/infra: "" + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-w-b-infra-mhb8g.c.openshift-ci-build-farm.internal + resourceVersion: "4865641096" + uid: 8a08364a-1f7e-4675-9b94-136cab14827f + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-01-19T20:09:29Z" + lastTransitionTime: "2024-01-19T20:09:30Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T15:14:18Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T15:14:18Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T15:14:18Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:21Z" + lastTransitionTime: "2024-02-27T15:14:23Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-01-19T20:09:30Z" + labels: + node-role.kubernetes.io: infra + node-role.kubernetes.io/infra: "" + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-w-b-infra-n9kc5.c.openshift-ci-build-farm.internal + resourceVersion: "4865640735" + uid: de05c649-b565-4c41-a1b9-12e2227f502e + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-01-19T20:09:30Z" + lastTransitionTime: "2024-01-19T20:09:30Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:17:44Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:17:44Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:17:44Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:16Z" + lastTransitionTime: "2024-02-27T15:17:50Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T15:26:02Z" + labels: + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-b + name: build0-gstfj-w-b-mwf8t.c.openshift-ci-build-farm.internal + resourceVersion: "4865640534" + uid: 3222e38a-e138-441b-b2b0-730be564dda2 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T15:26:02Z" + lastTransitionTime: "2024-02-27T15:26:02Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:12Z" + lastTransitionTime: "2024-02-27T15:26:02Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:12Z" + lastTransitionTime: "2024-02-27T15:26:02Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:12Z" + lastTransitionTime: "2024-02-27T15:26:02Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:12Z" + lastTransitionTime: "2024-02-27T15:26:47Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-27T03:45:50Z" + labels: + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-w-c-nsmn5.c.openshift-ci-build-farm.internal + resourceVersion: "4865640644" + uid: 0322d13a-a707-4b3d-9430-8a48af57b62a + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-27T03:45:51Z" + lastTransitionTime: "2024-02-27T03:45:51Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T16:08:51Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T16:08:51Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T16:08:51Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:15Z" + lastTransitionTime: "2024-02-27T16:08:51Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredConfig: rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-55c03f1f59ad9bd3b224c96a3618ce1d + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/post-config-action: "" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-26T17:30:19Z" + labels: + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-c + name: build0-gstfj-w-c-qjbdl.c.openshift-ci-build-farm.internal + resourceVersion: "4865640589" + uid: 9e85fd60-91ed-4dbc-9c58-207a2aff4b7c + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-26T17:30:19Z" + lastTransitionTime: "2024-02-26T17:30:20Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T15:48:56Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T15:48:56Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T15:48:56Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:13Z" + lastTransitionTime: "2024-02-27T15:48:56Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-6b0cfe9b92e34c641ac59510e408b311 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "4865176381" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-20T03:33:03Z" + labels: + node-role.kubernetes.io/worker: "" + topology.gke.io/zone: us-east1-d + name: build0-gstfj-w-d-7rj9w.c.openshift-ci-build-farm.internal + resourceVersion: "4865640641" + uid: 49ddbf50-b29e-482c-a1c3-d912b4f35f03 + spec: {} + status: + conditions: + - lastHeartbeatTime: "2024-02-20T03:33:04Z" + lastTransitionTime: "2024-02-20T03:33:04Z" + message: openshift-sdn cleared kubelet-set NoRouteCreated + reason: RouteCreated + status: "False" + type: NetworkUnavailable + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-27T05:13:27Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-20T03:33:03Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-20T03:33:03Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-27T16:19:14Z" + lastTransitionTime: "2024-02-20T03:33:40Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining.output b/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining.output new file mode 100644 index 0000000000..ccfbf25254 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/4.16.0-ec2-control-plane-updated-pdb-prohibits-draining.output @@ -0,0 +1,48 @@ +An update is in progress for 4h3m46s: Error while reconciling 4.16.0-ec.3: the cluster operator machine-config is degraded + +Failing=True: + + Reason: ClusterOperatorDegraded + Message: Cluster operator machine-config is degraded + + += Control Plane = +Assessment: Completed +Completion: 100% +Duration: 3h30m31s +Operator Status: 36 Total, 36 Available, 0 Progressing, 1 Degraded + += Worker Upgrade = + += Worker Pool = +Worker Pool: worker +Assessment: Degraded +Completion: 39% +Worker Status: 59 Total, 46 Available, 5 Progressing, 36 Outdated, 12 Draining, 0 Excluded, 7 Degraded + +Worker Pool Node(s) +NAME ASSESSMENT PHASE VERSION EST MESSAGE +build0-gstfj-ci-prowjobs-worker-b-9lztv Degraded Draining 4.16.0-ec.2 ? failed to drain node: build0-gstfj-ci-prowjobs-worker-b-9lztv after 1 hour. Please see machine-config-controller logs for more information +build0-gstfj-ci-prowjobs-worker-b-bg9f5 Degraded Draining 4.16.0-ec.2 ? failed to drain node: build0-gstfj-ci-prowjobs-worker-b-bg9f5 after 1 hour. Please see machine-config-controller logs for more information +build0-gstfj-ci-prowjobs-worker-b-mrxwn Degraded Draining 4.16.0-ec.2 ? failed to drain node: build0-gstfj-ci-prowjobs-worker-b-mrxwn after 1 hour. Please see machine-config-controller logs for more information +build0-gstfj-ci-tests-worker-b-4h7pn Degraded Draining 4.16.0-ec.2 ? failed to drain node: build0-gstfj-ci-tests-worker-b-4h7pn after 1 hour. Please see machine-config-controller logs for more information +build0-gstfj-ci-tests-worker-b-jv5bg Degraded Draining 4.16.0-ec.2 ? failed to drain node: build0-gstfj-ci-tests-worker-b-jv5bg after 1 hour. Please see machine-config-controller logs for more information +build0-gstfj-ci-tests-worker-b-kj6gk Degraded Draining 4.16.0-ec.2 ? failed to drain node: build0-gstfj-ci-tests-worker-b-kj6gk after 1 hour. Please see machine-config-controller logs for more information +build0-gstfj-ci-tests-worker-c-dcz9p Degraded Draining 4.16.0-ec.2 ? failed to drain node: build0-gstfj-ci-tests-worker-c-dcz9p after 1 hour. Please see machine-config-controller logs for more information +build0-gstfj-ci-tests-worker-c-jq5rk Unavailable Updated 4.16.0-ec.3 - Node is unavailable +build0-gstfj-ci-tests-worker-c-2kz4m Progressing Draining 4.16.0-ec.2 +30m +build0-gstfj-ci-tests-worker-c-55hpj Progressing Draining 4.16.0-ec.2 +30m +... +Omitted additional 49 Total, 22 Completed, 46 Available, 3 Progressing, 27 Outdated, 3 Draining, 0 Excluded, and 0 Degraded nodes. +Pass along --details to see all information. + += Update Health = +SINCE LEVEL IMPACT MESSAGE +- Error Update Stalled Node build0-gstfj-ci-prowjobs-worker-b-9lztv is degraded | failed to drain node: build0-gstfj-ci-prowjobs-worker-b-9lztv after 1 hour. Please see machine-config-controller logs for more information +- Error Update Stalled Node build0-gstfj-ci-prowjobs-worker-b-bg9f5 is degraded | failed to drain node: build0-gstfj-ci-prowjobs-worker-b-bg9f5 after 1 hour. Please see machine-config-controller logs for more information +- Error Update Stalled Node build0-gstfj-ci-prowjobs-worker-b-mrxwn is degraded | failed to drain node: build0-gstfj-ci-prowjobs-worker-b-mrxwn after 1 hour. Please see machine-config-controller logs for more information +- Error Update Stalled Node build0-gstfj-ci-tests-worker-b-4h7pn is degraded | failed to drain node: build0-gstfj-ci-tests-worker-b-4h7pn after 1 hour. Please see machine-config-controller logs for more information +- Error Update Stalled Node build0-gstfj-ci-tests-worker-b-jv5bg is degraded | failed to drain node: build0-gstfj-ci-tests-worker-b-jv5bg after 1 hour. Please see machine-config-controller logs for more information +- Error Update Stalled Node build0-gstfj-ci-tests-worker-b-kj6gk is degraded | failed to drain node: build0-gstfj-ci-tests-worker-b-kj6gk after 1 hour. Please see machine-config-controller logs for more information +- Error Update Stalled Node build0-gstfj-ci-tests-worker-c-dcz9p is degraded | failed to drain node: build0-gstfj-ci-tests-worker-c-dcz9p after 1 hour. Please see machine-config-controller logs for more information +- Warning Update Speed Node build0-gstfj-ci-tests-worker-c-jq5rk is unavailable | Node is unavailable diff --git a/pkg/cli/admin/upgrade/status/examples/README.md b/pkg/cli/admin/upgrade/status/examples/README.md index 02cd05530b..87857d66c4 100644 --- a/pkg/cli/admin/upgrade/status/examples/README.md +++ b/pkg/cli/admin/upgrade/status/examples/README.md @@ -1,9 +1,12 @@ # Examples for `oc adm upgrade status` -Each example consists of two inputs and one output, matched by a common substring: +Each example consists of five inputs and one output, matched by a common substring: 1. `TESTCASE-cv.yaml`(input): ClusterVersion object (created by `oc get clusterversion version -o yaml`) 2. `TESTCASE-co.yaml`(input): list of ClusterOperators (created by `oc get clusteroperators -o yaml`) -3. `TESTCASE.out`(output): expected output of `oc adm upgrade status` for the two outputs +3. `TESTCASE-mc.yaml`(input): list of MachineConfigs (created by `oc get oc get machineconfigs -o yaml`) +4. `TESTCASE-mcp.yaml`(input): list of MachineConfigPools (created by `oc get machineconfigpools -o yaml`) +5. `TESTCASE-node.yaml`(input): list of Nodes (created by `oc get nodes -o yaml`) +6. `TESTCASE.out`(output): expected output of `oc adm upgrade status` for the two outputs The `TestExamples` test in `examples_test.go` file above validates all examples. When the testcase is executed with a non-empty `UPDATE` environmental variable, it will update the `TESTCASE.out` @@ -16,5 +19,5 @@ $ UPDATE=yes go test -v ./pkg/cli/admin/upgrade/status/... You can also pass the inputs to the `oc adm upgrade status` directly: ``` -$ oc adm upgrade status --mock-clusterversion=not-upgrading-cv.yaml --mock-clusteroperators=not-upgrading-co.yaml +$ oc adm upgrade status --mock-clusterversion=not-upgrading-cv.yaml ``` diff --git a/pkg/cli/admin/upgrade/status/examples/not-upgrading-mc.yaml b/pkg/cli/admin/upgrade/status/examples/not-upgrading-mc.yaml new file mode 100644 index 0000000000..b1549b94fa --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/not-upgrading-mc.yaml @@ -0,0 +1,293 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: master + name: 00-master + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "24839" + uid: b08f1a9c-7481-4b49-8aa9-2444051576fb + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 2 + labels: + machineconfiguration.openshift.io/role: worker + name: 00-worker + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "24840" + uid: a7addc79-0ce7-4a4a-a195-b17a21533396 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8834" + uid: de9332ff-2a1d-4d31-be98-226f26fb870c + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 01-master-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8835" + uid: 2a6a1cdb-5b79-49d3-983a-cfcced78b29e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-container-runtime + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8838" + uid: 68ae0e75-b66a-45e8-9c00-85d0dbbac77d + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 01-worker-kubelet + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: ControllerConfig + name: machine-config-controller + uid: dbc1af39-95c0-4346-9489-5306026e8392 + resourceVersion: "8846" + uid: ae1a342c-4feb-4f38-89af-cfe8c235d49b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 97-master-generated-kubelet + resourceVersion: "8840" + uid: 316f2737-0397-49fe-85e5-df4e37944b1b + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:29Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 97-worker-generated-kubelet + resourceVersion: "8855" + uid: b2480713-fc2b-440a-9dd4-d5bf8cd15d14 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 98-master-generated-kubelet + resourceVersion: "8837" + uid: e11eb47e-ce7f-48b8-9bdd-d125359b43d4 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 98-worker-generated-kubelet + resourceVersion: "8847" + uid: 901f3569-042f-445c-99cc-b34eb2bfc9f0 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8839" + uid: 50011095-9bde-4b05-84b5-c826eab55cdc + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:15Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: master + name: 99-master-ssh + resourceVersion: "1626" + uid: 9d3e5253-fa32-471d-872f-9b3c9fc54014 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + creationTimestamp: "2024-02-07T16:03:28Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-generated-registries + ownerReferences: + - apiVersion: config.openshift.io/v1 + kind: Image + name: cluster + uid: 6fff58ed-d8b4-4ed3-9b7f-d37ffdeb0665 + resourceVersion: "8843" + uid: b5101ea4-7deb-4501-89f6-b25d6a8e5c4e + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + creationTimestamp: "2024-02-07T16:00:16Z" + generation: 1 + labels: + machineconfiguration.openshift.io/role: worker + name: 99-worker-ssh + resourceVersion: "1650" + uid: 3152721d-116e-41a5-b9ee-f978fffc80ab + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.1 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "25018" + uid: f24cdff8-23e0-4247-bc10-2806c65cac85 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.1 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-master-5386b830f950f01bb6bb51c80fb3c072 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: master + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + resourceVersion: "8910" + uid: 811b316d-b1aa-43ba-8a7b-daf14ed7ca5f + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.1 + creationTimestamp: "2024-02-07T16:11:40Z" + generation: 1 + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "25021" + uid: 16b2d6db-d799-4646-b156-8354630e422a + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + metadata: + annotations: + machineconfiguration.openshift.io/generated-by-controller-version: 5ac7b4ae0bca76358e4d40f546306775a8e0ea2c + machineconfiguration.openshift.io/release-image-version: 4.14.1 + creationTimestamp: "2024-02-07T16:03:30Z" + generation: 1 + name: rendered-worker-9afa40a716fbeaa9be7388d0061948d3 + ownerReferences: + - apiVersion: machineconfiguration.openshift.io/v1 + blockOwnerDeletion: true + controller: true + kind: MachineConfigPool + name: worker + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + resourceVersion: "8909" + uid: 41a76c2c-9c02-443a-8191-e18a316714be +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/not-upgrading-mcp.yaml b/pkg/cli/admin/upgrade/status/examples/not-upgrading-mcp.yaml new file mode 100644 index 0000000000..f5c97bb2f4 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/not-upgrading-mcp.yaml @@ -0,0 +1,162 @@ +apiVersion: v1 +items: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 3 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + operator.machineconfiguration.openshift.io/required-for-upgrade: "" + pools.operator.machineconfiguration.openshift.io/master: "" + name: master + resourceVersion: "26226" + uid: d9c888d5-14f1-4bf9-9f7c-9dc7ecfa2c7a + spec: + configuration: + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-master + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-master-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-master-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-master-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: master + nodeSelector: + matchLabels: + node-role.kubernetes.io/master: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:06:30Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:48Z" + message: All nodes are updated with MachineConfig rendered-master-354cc9845ab33037fa7121a44dafecfd + reason: "" + status: "True" + type: Updated + - lastTransitionTime: "2024-02-07T16:12:48Z" + message: "" + reason: "" + status: "False" + type: Updating + configuration: + name: rendered-master-354cc9845ab33037fa7121a44dafecfd + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 3 + readyMachineCount: 3 + unavailableMachineCount: 0 + updatedMachineCount: 3 + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + metadata: + creationTimestamp: "2024-02-07T16:03:00Z" + generation: 3 + labels: + machineconfiguration.openshift.io/mco-built-in: "" + pools.operator.machineconfiguration.openshift.io/worker: "" + name: worker + resourceVersion: "26146" + uid: 9f08ae73-d4b9-4213-b303-33a3c953fca1 + spec: + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + source: + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 00-worker + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-container-runtime + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 01-worker-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 97-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 98-worker-generated-kubelet + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-generated-registries + - apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + name: 99-worker-ssh + machineConfigSelector: + matchLabels: + machineconfiguration.openshift.io/role: worker + nodeSelector: + matchLabels: + node-role.kubernetes.io/worker: "" + paused: false + status: + conditions: + - lastTransitionTime: "2024-02-07T16:03:30Z" + message: "" + reason: "" + status: "False" + type: RenderDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: NodeDegraded + - lastTransitionTime: "2024-02-07T16:03:35Z" + message: "" + reason: "" + status: "False" + type: Degraded + - lastTransitionTime: "2024-02-07T16:12:42Z" + message: All nodes are updated with MachineConfig rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + reason: "" + status: "True" + type: Updated + - lastTransitionTime: "2024-02-07T16:12:42Z" + message: "" + reason: "" + status: "False" + type: Updating + configuration: + name: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + degradedMachineCount: 0 + machineCount: 3 + observedGeneration: 3 + readyMachineCount: 3 + unavailableMachineCount: 0 + updatedMachineCount: 3 +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples/not-upgrading-node.yaml b/pkg/cli/admin/upgrade/status/examples/not-upgrading-node.yaml new file mode 100644 index 0000000000..e54eb4ed40 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/examples/not-upgrading-node.yaml @@ -0,0 +1,274 @@ +apiVersion: v1 +items: + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:53Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-20-162.us-east-2.compute.internal + resourceVersion: "31689" + uid: 88626d63-b4f4-44a5-b0bc-4de955567fbe + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:26:14Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:26:14Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:26:14Z" + lastTransitionTime: "2024-02-07T16:09:53Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:26:14Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:47Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-30-217.us-east-2.compute.internal + resourceVersion: "31409" + uid: fd848867-b28e-4c3f-acc1-5ff79558c60a + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:25:17Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:25:17Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:25:17Z" + lastTransitionTime: "2024-02-07T16:00:47Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:25:17Z" + lastTransitionTime: "2024-02-07T16:03:00Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:07:08Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-4-159.us-east-2.compute.internal + resourceVersion: "30503" + uid: 10554f1b-6f2b-4781-8ce0-6abbfb948645 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:22:38Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:22:38Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:22:38Z" + lastTransitionTime: "2024-02-07T16:07:08Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:22:38Z" + lastTransitionTime: "2024-02-07T16:08:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:48Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-53-40.us-east-2.compute.internal + resourceVersion: "31794" + uid: fa21423d-2616-4381-8889-35cffcaf0772 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:26:34Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:26:34Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:26:34Z" + lastTransitionTime: "2024-02-07T16:00:48Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:26:34Z" + lastTransitionTime: "2024-02-07T16:02:24Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredConfig: rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-master-354cc9845ab33037fa7121a44dafecfd + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:00:50Z" + labels: + node-role.kubernetes.io/control-plane: "" + node-role.kubernetes.io/master: "" + name: ip-10-0-92-180.us-east-2.compute.internal + resourceVersion: "31816" + uid: 4be70dad-dfe6-410d-ae91-d1f16388ac58 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:26:37Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:26:37Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:26:37Z" + lastTransitionTime: "2024-02-07T16:00:50Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:26:37Z" + lastTransitionTime: "2024-02-07T16:03:02Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + - apiVersion: v1 + kind: Node + metadata: + annotations: + machineconfiguration.openshift.io/controlPlaneTopology: HighlyAvailable + machineconfiguration.openshift.io/currentConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredConfig: rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/desiredDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastAppliedDrain: uncordon-rendered-worker-4cec9ed3a634560e5c083a187c8f93a7 + machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion: "24893" + machineconfiguration.openshift.io/reason: "" + machineconfiguration.openshift.io/state: Done + creationTimestamp: "2024-02-07T16:09:46Z" + labels: + machine.openshift.io/interruptible-instance: "" + node-role.kubernetes.io/worker: "" + name: ip-10-0-99-40.us-east-2.compute.internal + resourceVersion: "31904" + uid: 5e5831bc-5eff-4ea7-9db6-c3f5719d51d5 + status: + conditions: + - lastHeartbeatTime: "2024-02-07T16:26:57Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient memory available + reason: KubeletHasSufficientMemory + status: "False" + type: MemoryPressure + - lastHeartbeatTime: "2024-02-07T16:26:57Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has no disk pressure + reason: KubeletHasNoDiskPressure + status: "False" + type: DiskPressure + - lastHeartbeatTime: "2024-02-07T16:26:57Z" + lastTransitionTime: "2024-02-07T16:09:46Z" + message: kubelet has sufficient PID available + reason: KubeletHasSufficientPID + status: "False" + type: PIDPressure + - lastHeartbeatTime: "2024-02-07T16:26:57Z" + lastTransitionTime: "2024-02-07T16:10:36Z" + message: kubelet is posting ready status + reason: KubeletReady + status: "True" + type: Ready + volumesInUse: [] +kind: List +metadata: + resourceVersion: "" diff --git a/pkg/cli/admin/upgrade/status/examples_test.go b/pkg/cli/admin/upgrade/status/examples_test.go index 3a24e1ed21..7782c0d8cb 100644 --- a/pkg/cli/admin/upgrade/status/examples_test.go +++ b/pkg/cli/admin/upgrade/status/examples_test.go @@ -41,12 +41,8 @@ func TestExamples(t *testing.T) { cv := cv t.Run(cv, func(t *testing.T) { t.Parallel() - co := strings.Replace(cv, "-cv.yaml", "-co.yaml", 1) - opts := &options{ - mockCvPath: cv, - mockOperatorsPath: co, - } + opts := &options{mockData: mockData{cvPath: cv}} if err := opts.Complete(nil, nil, nil); err != nil { t.Fatalf("Error when completing options: %v", err) } diff --git a/pkg/cli/admin/upgrade/status/health.go b/pkg/cli/admin/upgrade/status/health.go index 95c19f0fad..0bd0484662 100644 --- a/pkg/cli/admin/upgrade/status/health.go +++ b/pkg/cli/admin/upgrade/status/health.go @@ -11,14 +11,16 @@ import ( type scopeType string const ( - scopeControlPlane scopeType = "ControlPlane" - scopeWorkerPool scopeType = "WorkerPool" + scopeTypeControlPlane scopeType = "ControlPlane" + scopeTypeWorkerPool scopeType = "WorkerPool" ) type allowedScopeKind string const ( - clusterOperator allowedScopeKind = "ClusterOperator" + scopeKindClusterOperator allowedScopeKind = "ClusterOperator" + scopeKindNode allowedScopeKind = "Node" + scopeKindMachineConfigPool allowedScopeKind = "MachineConfigPool" ) type scopeResource struct { @@ -144,12 +146,21 @@ func shortDuration(d time.Duration) string { return orig } +func stringSince(health *updateHealthData, insight updateInsight) string { + if insight.startedAt.IsZero() { + // On client it is not possible to calculate the precise time of all insights + // On server side we can backfill with firstObserved + return "-" + } + return shortDuration(health.evaluatedAt.Sub(insight.startedAt).Truncate(time.Second)) +} + func (i *updateHealthData) Write(w io.Writer) error { _, _ = w.Write([]byte("= Update Health =\n")) tabw := tabwriter.NewWriter(w, 0, 0, 3, ' ', 0) _, _ = tabw.Write([]byte("SINCE\tLEVEL\tIMPACT\tMESSAGE\n")) for _, insight := range i.insights { - _, _ = tabw.Write([]byte(shortDuration(i.evaluatedAt.Sub(insight.startedAt).Truncate(time.Second)) + "\t")) + _, _ = tabw.Write([]byte(stringSince(i, insight) + "\t")) _, _ = tabw.Write([]byte(insight.impact.level.String() + "\t")) _, _ = tabw.Write([]byte(insight.impact.impactType + "\t")) _, _ = tabw.Write([]byte(insight.impact.summary + "\n")) diff --git a/pkg/cli/admin/upgrade/status/mco/controller_common_constants.go b/pkg/cli/admin/upgrade/status/mco/controller_common_constants.go new file mode 100644 index 0000000000..33cec2e279 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/mco/controller_common_constants.go @@ -0,0 +1,83 @@ +// Taken from: https://github.com/openshift/machine-config-operator/blob/11d5151a784c7d4be5255ea41acfbf5092eda592/pkg/controller/common/constants.go +// TODO: Replace this file with the original MCO code when transitioning to server-side +package mco + +const ( + // MCONamespace is the namespace that should be used for all API objects owned by the MCO by default + MCONamespace = "openshift-machine-config-operator" + + // GeneratedByControllerVersionAnnotationKey is used to tag the machineconfigs generated by the controller with the version of the controller. + GeneratedByControllerVersionAnnotationKey = "machineconfiguration.openshift.io/generated-by-controller-version" + + // ReleaseImageVersionAnnotationKey is used to tag the rendered machineconfigs & controller config with the release image version. + ReleaseImageVersionAnnotationKey = "machineconfiguration.openshift.io/release-image-version" + + // OSImageURLOverriddenKey is used to tag a rendered machineconfig when OSImageURL has been overridden from default using machineconfig + OSImageURLOverriddenKey = "machineconfiguration.openshift.io/os-image-url-overridden" + + // ControllerConfigName is the name of the ControllerConfig object that controllers use + ControllerConfigName = "machine-config-controller" + + // KernelTypeDefault denominates the default kernel type + KernelTypeDefault = "default" + + // KernelTypeRealtime denominates the realtime kernel type + KernelTypeRealtime = "realtime" + + // KernelType64kPages denominates the 64k pages kernel + KernelType64kPages = "64k-pages" + + // MasterLabel defines the label associated with master node. The master taint uses the same label as taint's key + MasterLabel = "node-role.kubernetes.io/master" + + // MCNameSuffixAnnotationKey is used to keep track of the machine config name associated with a CR + MCNameSuffixAnnotationKey = "machineconfiguration.openshift.io/mc-name-suffix" + + // MaxMCNameSuffix is the maximum value of the name suffix of the machine config associated with kubeletconfig and containerruntime objects + MaxMCNameSuffix int = 9 + + // ClusterFeatureInstanceName is a singleton name for featureGate configuration + ClusterFeatureInstanceName = "cluster" + + // ClusterNodeInstanceName is a singleton name for node configuration + ClusterNodeInstanceName = "cluster" + + // MachineConfigPoolMaster is the MachineConfigPool name given to the master + MachineConfigPoolMaster = "master" + + // MachineConfigPoolWorker is the MachineConfigPool name given to the worker + MachineConfigPoolWorker = "worker" + + // LayeringEnabledPoolLabel is the label that enables the "layered" workflow path for a pool. + LayeringEnabledPoolLabel = "machineconfiguration.openshift.io/layering-enabled" + + // ExperimentalNewestLayeredImageEquivalentConfigAnnotationKey is the annotation that signifies which rendered config + // TODO(zzlotnik): Determine if we should use this still. + ExperimentalNewestLayeredImageEquivalentConfigAnnotationKey = "machineconfiguration.openshift.io/newestImageEquivalentConfig" + + OSImageBuildPodLabel = "machineconfiguration.openshift.io/buildPod" + + // InternalMCOIgnitionVersion is the ignition version that the MCO converts everything to internally. The intent here is that + // we should be able to update this constant when we bump the internal ignition version instead of having to hunt down all of + // the version references and figure out "was this supposed to be explicitly 3.4.0 or just the default version which happens + // to be 3.4.0 currently". Ideally if you find an explicit "3.4.0", it's supposed to be "3.4.0" version. If it's this constant, + // it's supposed to be the internal default version. + InternalMCOIgnitionVersion = "3.4.0" + + // MachineConfigRoleLabel is the role on MachineConfigs, used to select for pools + MachineConfigRoleLabel = "machineconfiguration.openshift.io/role" + + // BootImagesConfigMapName is a Configmap of golden bootimages, updated by CVO on an upgrade + BootImagesConfigMapName = "coreos-bootimages" + + // MCOVersionHashKey is the key for indexing the MCO git version hash stored in the bootimages configmap + MCOVersionHashKey = "MCOVersionHash" + + // MCOReleaseImageVersionKey is the key for indexing the MCO release version stored in the bootimages configmap + MCOReleaseImageVersionKey = "MCOReleaseImageVersion" + + ServiceCARotateAnnotation = "machineconfiguration.openshift.io/service-ca-rotate" + + ServiceCARotateTrue = "true" + ServiceCARotateFalse = "false" +) diff --git a/pkg/cli/admin/upgrade/status/mco/daemon_constants.go b/pkg/cli/admin/upgrade/status/mco/daemon_constants.go new file mode 100644 index 0000000000..8ccd9c2513 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/mco/daemon_constants.go @@ -0,0 +1,110 @@ +// Taken from: https://github.com/openshift/machine-config-operator/blob/11d5151a784c7d4be5255ea41acfbf5092eda592/pkg/daemon/constants/constants.go +// TODO: Replace this file with the original MCO code when transitioning to server-side +package mco + +const ( + // XXX + // + // Add a constant here, if and only if: it's exported (of course) and it's reused across the entire project. + // Otherwise, prefer an unexported const in a specific package. + // + // XXX + + // CurrentImageAnnotationKey is used to get the current OS image pullspec for a machine + CurrentImageAnnotationKey = "machineconfiguration.openshift.io/currentImage" + // DesiredImageAnnotationKey is used to specify the desired OS image pullspec for a machine + DesiredImageAnnotationKey = "machineconfiguration.openshift.io/desiredImage" + + // CurrentMachineConfigAnnotationKey is used to fetch current MachineConfig for a machine + CurrentMachineConfigAnnotationKey = "machineconfiguration.openshift.io/currentConfig" + // DesiredMachineConfigAnnotationKey is used to specify the desired MachineConfig for a machine + DesiredMachineConfigAnnotationKey = "machineconfiguration.openshift.io/desiredConfig" + // MachineConfigDaemonStateAnnotationKey is used to fetch the state of the daemon on the machine. + MachineConfigDaemonStateAnnotationKey = "machineconfiguration.openshift.io/state" + // DesiredDrainerAnnotationKey is set by the MCD to indicate drain/uncordon requests + DesiredDrainerAnnotationKey = "machineconfiguration.openshift.io/desiredDrain" + // LastAppliedDrainerAnnotationKey is set by the controller to indicate the last request applied + LastAppliedDrainerAnnotationKey = "machineconfiguration.openshift.io/lastAppliedDrain" + // DrainerStateDrain is used for drainer annotation as a value to indicate needing a drain + DrainerStateDrain = "drain" + // DrainerStateUncordon is used for drainer annotation as a value to indicate needing an uncordon + DrainerStateUncordon = "uncordon" + // ClusterControlPlaneTopologyAnnotationKey is set by the node controller by reading value from + // controllerConfig. MCD uses the annotation value to decide drain action on the node. + ClusterControlPlaneTopologyAnnotationKey = "machineconfiguration.openshift.io/controlPlaneTopology" + // OpenShiftOperatorManagedLabel is used to filter out kube objects that don't need to be synced by the MCO + OpenShiftOperatorManagedLabel = "openshift.io/operator-managed" + // ControllerConfigResourceVersionKey is used for the certificate writer to indicate the last controllerconfig object it synced upon + ControllerConfigResourceVersionKey = "machineconfiguration.openshift.io/lastSyncedControllerConfigResourceVersion" + // ControllerConfigSyncServerCA is used to determine if we have already synced the server CA for this version of the controller config + ControllerConfigSyncServerCA = "machineconfiguration.openshift.io/lastObservedServerCAAnnotation" + // GeneratedByVersionAnnotationKey is used to tag the controllerconfig to synchronize the MCO and MCC + GeneratedByVersionAnnotationKey = "machineconfiguration.openshift.io/generated-by-version" + + // MachineConfigDaemonStateWorking is set by daemon when it is beginning to apply an update. + MachineConfigDaemonStateWorking = "Working" + // MachineConfigDaemonStateDone is set by daemon when it is done applying an update. + MachineConfigDaemonStateDone = "Done" + // MachineConfigDaemonStateDegraded is set by daemon when an error not caused by a bad MachineConfig + // is thrown during an update. + MachineConfigDaemonStateDegraded = "Degraded" + // MachineConfigDaemonRebooting is used to indicate a reboot is either queued or is in progress. + MachineConfigDaemonStateRebooting = "Rebooting" + // MachineConfigDaemonStateUnreconcilable is set by the daemon when a MachineConfig cannot be applied. + MachineConfigDaemonStateUnreconcilable = "Unreconcilable" + // MachineConfigDaemonReasonAnnotationKey is set by the daemon when it needs to report a human readable reason for its state. E.g. when state flips to degraded/unreconcilable. + MachineConfigDaemonReasonAnnotationKey = "machineconfiguration.openshift.io/reason" + // MachineConfigDaemonPostConfigAction is set by the daemon when it needs to report a human readable post config action that takes place during update. + MachineConfigDaemonPostConfigAction = "machineconfiguration.openshift.io/post-config-action" + // MachineConfigDaemonFinalizeFailureAnnotationKey is set by the daemon when ostree fails to finalize + MachineConfigDaemonFinalizeFailureAnnotationKey = "machineconfiguration.openshift.io/ostree-finalize-staged-failure" + // InitialNodeAnnotationsFilePath defines the path at which it will find the node annotations it needs to set on the node once it comes up for the first time. + // The Machine Config Server writes the node annotations to this path. + InitialNodeAnnotationsFilePath = "/etc/machine-config-daemon/node-annotations.json" + // InitialNodeAnnotationsBakPath defines the path of InitialNodeAnnotationsFilePath when the initial bootstrap is done. We leave it around for debugging and reconciling. + InitialNodeAnnotationsBakPath = "/etc/machine-config-daemon/node-annotation.json.bak" + + // IgnitionSystemdPresetFile is where Ignition writes initial enabled/disabled systemd unit configs + // This should be removed on boot after MCO takes over, so if any of these are deleted we can go back + // to initial system settings + IgnitionSystemdPresetFile = "/etc/systemd/system-preset/20-ignition.preset" + + // EtcPivotFile is used by the `pivot` command + // For more information, see https://github.com/openshift/pivot/pull/25/commits/c77788a35d7ee4058d1410e89e6c7937bca89f6c#diff-04c6e90faac2675aa89e2176d2eec7d8R44 + EtcPivotFile = "/etc/pivot/image-pullspec" + + // MachineConfigEncapsulatedPath contains all of the data from a MachineConfig object + // except the Spec/Config object; this supports inverting+encapsulating a MachineConfig + // object so that Ignition can process it on first boot, and then the MCD can act on + // non-Ignition fields such as the osImageURL and kernelArguments. + MachineConfigEncapsulatedPath = "/etc/ignition-machine-config-encapsulated.json" + + // MachineConfigEncapsulatedBakPath defines the path where the machineconfigdaemom-firstboot.service + // will leave a copy of the encapsulated MachineConfig in MachineConfigEncapsulatedPath after + // processing for debugging and auditing purposes. + MachineConfigEncapsulatedBakPath = "/etc/ignition-machine-config-encapsulated.json.bak" + + // MachineConfigDaemonForceFile if present causes the MCD to skip checking the validity of the + // "currentConfig" state. Create this file (empty contents is fine) if you wish the MCD + // to proceed and attempt to "reconcile" to the new "desiredConfig" state regardless. + MachineConfigDaemonForceFile = "/run/machine-config-daemon-force" + + // coreUser is "core" and currently the only permissible user name + CoreUserName = "core" + CoreGroupName = "core" + + // changes to registries.conf will cause a crio reload and require extra logic about whether to drain + ContainerRegistryConfPath = "/etc/containers/registries.conf" + + // SSH Keys for user "core" will only be written at /home/core/.ssh + CoreUserSSHPath = "/home/" + CoreUserName + "/.ssh" + + // SSH keys in RHCOS 8 will be written to /home/core/.ssh/authorized_keys + RHCOS8SSHKeyPath = CoreUserSSHPath + "/authorized_keys" + + // SSH keys in RHCOS 9 / FCOS / SCOS will be written to /home/core/.ssh/authorized_keys.d/ignition + RHCOS9SSHKeyPath = CoreUserSSHPath + "/authorized_keys.d/ignition" + + // CRIOServiceName is used to specify reloads and restarts of the CRI-O service + CRIOServiceName = "crio" +) diff --git a/pkg/cli/admin/upgrade/status/mco/layered_node_state.go b/pkg/cli/admin/upgrade/status/mco/layered_node_state.go new file mode 100644 index 0000000000..96127018e0 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/mco/layered_node_state.go @@ -0,0 +1,266 @@ +// This is a modified https://github.com/openshift/machine-config-operator/blob/11d5151a784c7d4be5255ea41acfbf5092eda592/pkg/controller/common/layered_node_state.go +// TODO: Replace this file with the original MCO code when transitioning to server-side +package mco + +import ( + "fmt" + + mcfgv1 "github.com/openshift/api/machineconfiguration/v1" + corev1 "k8s.io/api/core/v1" +) + +// This is intended to provide a singular way to interrogate node objects to +// determine if they're in a specific state. A secondary goal is to provide a +// singular way to mutate node objects for the purposes of updating their +// current configurations. +// +// The eventual goal is to replace all of the node status functions in +// status.go with this code, then repackage this so that it can be used by any +// portion of the MCO which needs to interrogate or mutate node state. +type LayeredNodeState struct { + node *corev1.Node +} + +func NewLayeredNodeState(n *corev1.Node) *LayeredNodeState { + return &LayeredNodeState{node: n} +} + +// Augements the isNodeDoneAt() check with determining if the current / desired +// image annotations match the pools' values. +func (l *LayeredNodeState) IsDoneAt(mcp *mcfgv1.MachineConfigPool) bool { + return isNodeDoneAt(l.node, mcp) && l.isDesiredImageEqualToPool(mcp) && l.isCurrentImageEqualToPool(mcp) +} + +// The original behavior of getUnavailableMachines is: getUnavailableMachines +// returns the set of nodes which are either marked unscheduleable, or have a +// MCD actively working. If the MCD is actively working (or hasn't started) +// then the node *may* go unschedulable in the future, so we don't want to +// potentially start another node update exceeding our maxUnavailable. Somewhat +// the opposite of getReadyNodes(). +// +// This augments this check by determining if the desired iamge annotation is +// equal to what the pool expects. +func (l *LayeredNodeState) IsUnavailable(mcp *mcfgv1.MachineConfigPool) bool { + return isNodeUnavailable(l.node) && l.isDesiredImageEqualToPool(mcp) +} + +// Checks that the desired machineconfig and image annotations equal the ones +// specified by the pool. +func (l *LayeredNodeState) IsDesiredEqualToPool(mcp *mcfgv1.MachineConfigPool) bool { + return l.isDesiredMachineConfigEqualToPool(mcp) && l.isDesiredImageEqualToPool(mcp) +} + +// Compares the MachineConfig specified by the MachineConfigPool to the one +// specified by the node's desired MachineConfig annotation. +func (l *LayeredNodeState) isDesiredMachineConfigEqualToPool(mcp *mcfgv1.MachineConfigPool) bool { + return l.node.Annotations[DesiredMachineConfigAnnotationKey] == mcp.Spec.Configuration.Name +} + +// Determines if the nodes desired image is equal to the expected value from +// the MachineConfigPool. +func (l *LayeredNodeState) isDesiredImageEqualToPool(mcp *mcfgv1.MachineConfigPool) bool { + return l.isImageAnnotationEqualToPool(DesiredImageAnnotationKey, mcp) +} + +// Determines if the nodes current image is equal to the expected value from +// the MachineConfigPool. +func (l *LayeredNodeState) isCurrentImageEqualToPool(mcp *mcfgv1.MachineConfigPool) bool { + return l.isImageAnnotationEqualToPool(CurrentImageAnnotationKey, mcp) +} + +// Determines if a nodes' image annotation is equal to the expected value from +// the MachineConfigPool. If the pool is layered, this value should equal the +// OS image value, if the value is available. If the pool is not layered, then +// any image annotations should not be present on the node. +func (l *LayeredNodeState) isImageAnnotationEqualToPool(anno string, mcp *mcfgv1.MachineConfigPool) bool { + lps := NewLayeredPoolState(mcp) + + val, ok := l.node.Annotations[anno] + + if lps.IsLayered() && lps.HasOSImage() { + // If the pool is layered and has an OS image, check that it equals the + // node annotations' value. + return lps.GetOSImage() == val + } + + // If the pool is not layered, this annotation should not exist. + return val == "" || !ok +} + +// Sets the desired annotations from the MachineConfigPool, according to the +// following rules: +// +// 1. The desired MachineConfig annotation will always be set to match the one +// specified in the MachineConfigPool. +// 2. If the pool is layered and has the OS image available, it will set the +// desired image annotation. +// 3. If the pool is not layered and does not have the OS image available, it +// will remove the desired image annotation. +// +// Note: This will create a deep copy of the node object first to avoid +// mutating any underlying caches. +func (l *LayeredNodeState) SetDesiredStateFromPool(mcp *mcfgv1.MachineConfigPool) { + node := l.Node() + if node.Annotations == nil { + node.Annotations = map[string]string{} + } + + node.Annotations[DesiredMachineConfigAnnotationKey] = mcp.Spec.Configuration.Name + + lps := NewLayeredPoolState(mcp) + + if lps.IsLayered() && lps.HasOSImage() { + node.Annotations[DesiredImageAnnotationKey] = lps.GetOSImage() + } else { + delete(node.Annotations, DesiredImageAnnotationKey) + } + + l.node = node +} + +// Returns a deep copy of the underlying node object. +func (l *LayeredNodeState) Node() *corev1.Node { + return l.node.DeepCopy() +} + +// All functions below this line were copy / pasted from +// pkg/controller/node/status.go. A future cleanup effort will integrate these +// more seamlessly into the above struct. + +// isNodeDone returns true if the current == desired and the MCD has marked done. +func isNodeDone(node *corev1.Node) bool { + if node.Annotations == nil { + return false + } + + if !isNodeConfigDone(node) { + return false + } + + if !isNodeImageDone(node) { + return false + } + + if !isNodeMCDState(node, MachineConfigDaemonStateDone) { + return false + } + + return true +} + +// Determines if a node's configuration is done based upon the presence and +// equality of the current / desired config annotations. +func isNodeConfigDone(node *corev1.Node) bool { + cconfig, ok := node.Annotations[CurrentMachineConfigAnnotationKey] + if !ok || cconfig == "" { + return false + } + + dconfig, ok := node.Annotations[DesiredMachineConfigAnnotationKey] + if !ok || dconfig == "" { + return false + } + + return cconfig == dconfig +} + +// Determines if a node's image is done based upon the presence of the current +// / desired image annotations. Note: Unlike the above function, if both +// annotations are missing, we return "True" because we do not want to take +// these annotations into consideration. Only when one (or both) of these +// annotations is present should we take them into consideration. +// them into consideration. +func isNodeImageDone(node *corev1.Node) bool { + desired, desiredOK := node.Annotations[DesiredImageAnnotationKey] + current, currentOK := node.Annotations[CurrentImageAnnotationKey] + + // If neither annotation exists, we are "done" because there are no image + // annotations to consider. + if !desiredOK && !currentOK { + return true + } + + // If the desired annotation is empty, we are not "done" yet. + if desired == "" { + return false + } + + // If the current annotation is empty, we are not "done" yet. + if current == "" { + return false + } + + // If the current image equals the desired image and neither are empty, we are done. + return desired == current +} + +// isNodeDoneAt checks whether a node is fully updated to a targetConfig +func isNodeDoneAt(node *corev1.Node, pool *mcfgv1.MachineConfigPool) bool { + return isNodeDone(node) && node.Annotations[CurrentMachineConfigAnnotationKey] == pool.Spec.Configuration.Name +} + +// isNodeUnavailable is a helper function for getUnavailableMachines +// See the docs of getUnavailableMachines for more info +func isNodeUnavailable(node *corev1.Node) bool { + // Unready nodes are unavailable + if !isNodeReady(node) { + return true + } + // Ready nodes are not unavailable + if isNodeDone(node) { + return false + } + // Now we know the node isn't ready - the current config must not + // equal target. We want to further filter down on the MCD state. + // If a MCD is in a terminal (failing) state then we can safely retarget it. + // to a different config. Or to say it another way, a node is unavailable + // if the MCD is working, or hasn't started work but the configs differ. + return !isNodeMCDFailing(node) +} + +// isNodeMCDState checks the MCD state against the state parameter +func isNodeMCDState(node *corev1.Node, state string) bool { + dstate, ok := node.Annotations[MachineConfigDaemonStateAnnotationKey] + if !ok || dstate == "" { + return false + } + + return dstate == state +} + +func checkNodeReady(node *corev1.Node) error { + for i := range node.Status.Conditions { + cond := &node.Status.Conditions[i] + // We consider the node for scheduling only when its: + // - NodeReady condition status is ConditionTrue, + // - NodeDiskPressure condition status is ConditionFalse, + // - NodeNetworkUnavailable condition status is ConditionFalse. + if cond.Type == corev1.NodeReady && cond.Status != corev1.ConditionTrue { + return fmt.Errorf("node %s is reporting NotReady=%v", node.Name, cond.Status) + } + if cond.Type == corev1.NodeDiskPressure && cond.Status != corev1.ConditionFalse { + return fmt.Errorf("node %s is reporting OutOfDisk=%v", node.Name, cond.Status) + } + if cond.Type == corev1.NodeNetworkUnavailable && cond.Status != corev1.ConditionFalse { + return fmt.Errorf("node %s is reporting NetworkUnavailable=%v", node.Name, cond.Status) + } + } + // Ignore nodes that are marked unschedulable + if node.Spec.Unschedulable { + return fmt.Errorf("node %s is reporting Unschedulable", node.Name) + } + return nil +} + +func isNodeReady(node *corev1.Node) bool { + return checkNodeReady(node) == nil +} + +// isNodeMCDFailing checks if the MCD has unsuccessfully applied an update +func isNodeMCDFailing(node *corev1.Node) bool { + if node.Annotations[CurrentMachineConfigAnnotationKey] == node.Annotations[DesiredMachineConfigAnnotationKey] { + return false + } + return isNodeMCDState(node, MachineConfigDaemonStateDegraded) || + isNodeMCDState(node, MachineConfigDaemonStateUnreconcilable) +} diff --git a/pkg/cli/admin/upgrade/status/mco/layered_pool_state.go b/pkg/cli/admin/upgrade/status/mco/layered_pool_state.go new file mode 100644 index 0000000000..768c6e03e7 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/mco/layered_pool_state.go @@ -0,0 +1,54 @@ +// This is a modified https://github.com/openshift/machine-config-operator/blob/11d5151a784c7d4be5255ea41acfbf5092eda592/pkg/controller/common/layered_pool_state.go +// TODO: Replace this file with the original MCO code when transitioning to server-side +package mco + +import ( + mcfgv1 "github.com/openshift/api/machineconfiguration/v1" +) + +// This is intended to provide a singular way to interrogate MachineConfigPool +// objects to determine if they're in a specific state or not. The eventual +// goal is to use this to mutate the MachineConfigPool object to provide a +// single and consistent interface for that purpose. In this current state, we +// do not perform any mutations. +type LayeredPoolState struct { + pool *mcfgv1.MachineConfigPool +} + +func NewLayeredPoolState(pool *mcfgv1.MachineConfigPool) *LayeredPoolState { + return &LayeredPoolState{pool: pool} +} + +// Determines if a MachineConfigPool is layered by looking for the layering +// enabled label. +func (l *LayeredPoolState) IsLayered() bool { + if l.pool == nil { + return false + } + + if l.pool.Labels == nil { + return false + } + + if _, ok := l.pool.Labels[LayeringEnabledPoolLabel]; ok { + return true + } + return false +} + +// Returns the OS image, if one is present. +func (l *LayeredPoolState) GetOSImage() string { + osImage := l.pool.Annotations[ExperimentalNewestLayeredImageEquivalentConfigAnnotationKey] + return osImage +} + +// Determines if a given MachineConfigPool has an available OS image. Returns +// false if the annotation is missing or set to an empty string. +func (l *LayeredPoolState) HasOSImage() bool { + if l.pool.Labels == nil { + return false + } + + val, ok := l.pool.Annotations[ExperimentalNewestLayeredImageEquivalentConfigAnnotationKey] + return ok && val != "" +} diff --git a/pkg/cli/admin/upgrade/status/mockresources.go b/pkg/cli/admin/upgrade/status/mockresources.go new file mode 100644 index 0000000000..161740285e --- /dev/null +++ b/pkg/cli/admin/upgrade/status/mockresources.go @@ -0,0 +1,172 @@ +package status + +import ( + "fmt" + "os" + + configv1 "github.com/openshift/api/config/v1" + machineconfigv1 "github.com/openshift/api/machineconfiguration/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" +) + +type mockData struct { + cvPath string + operatorsPath string + machineConfigPoolsPath string + machineConfigsPath string + nodesPath string + clusterVersion *configv1.ClusterVersion + clusterOperators *configv1.ClusterOperatorList + machineConfigPools *machineconfigv1.MachineConfigPoolList + machineConfigs *machineconfigv1.MachineConfigList + nodes *corev1.NodeList +} + +func asResourceList[T any](objects *corev1.List, decoder runtime.Decoder) ([]T, error) { + var outputItems []T + for i, item := range objects.Items { + obj, err := runtime.Decode(decoder, item.Raw) + if err != nil { + return nil, err + } + typedObj, ok := any(obj).(*T) + if !ok { + return nil, fmt.Errorf("unexpected object type %T in List content at index %d", obj, i) + } + outputItems = append(outputItems, *typedObj) + } + return outputItems, nil +} + +func (o *mockData) load() error { + scheme := runtime.NewScheme() + codecs := serializer.NewCodecFactory(scheme) + if err := configv1.Install(scheme); err != nil { + return err + } + if err := corev1.AddToScheme(scheme); err != nil { + return err + } + if err := machineconfigv1.Install(scheme); err != nil { + return err + } + decoder := codecs.UniversalDecoder(configv1.GroupVersion, corev1.SchemeGroupVersion, machineconfigv1.GroupVersion) + + cvBytes, err := os.ReadFile(o.cvPath) + if err != nil { + return err + } + cvObj, err := runtime.Decode(decoder, cvBytes) + if err != nil { + return err + } + switch cvObj := cvObj.(type) { + case *configv1.ClusterVersion: + o.clusterVersion = cvObj + case *configv1.ClusterVersionList: + o.clusterVersion = &cvObj.Items[0] + case *corev1.List: + cvs, err := asResourceList[configv1.ClusterVersion](cvObj, decoder) + if err != nil { + return fmt.Errorf("error while parsing file %s: %w", o.cvPath, err) + } + o.clusterVersion = &cvs[0] + default: + return fmt.Errorf("unexpected object type %T in --mock-clusterversion=%s content", cvObj, o.cvPath) + } + + coListBytes, err := os.ReadFile(o.operatorsPath) + if err != nil { + return err + } + coListObj, err := runtime.Decode(decoder, coListBytes) + if err != nil { + return err + } + switch coListObj := coListObj.(type) { + case *configv1.ClusterOperatorList: + o.clusterOperators = coListObj + case *corev1.List: + cos, err := asResourceList[configv1.ClusterOperator](coListObj, decoder) + if err != nil { + return fmt.Errorf("error while parsing file %s: %w", o.operatorsPath, err) + } + o.clusterOperators = &configv1.ClusterOperatorList{ + Items: cos, + } + default: + return fmt.Errorf("unexpected object type %T in --mock-clusteroperators=%s content", coListObj, o.operatorsPath) + } + + nodeListBytes, err := os.ReadFile(o.nodesPath) + if err != nil { + return err + } + nodeListObj, err := runtime.Decode(decoder, nodeListBytes) + if err != nil { + return err + } + switch nodeListObj := nodeListObj.(type) { + case *corev1.NodeList: + o.nodes = nodeListObj + case *corev1.List: + nodes, err := asResourceList[corev1.Node](nodeListObj, decoder) + if err != nil { + return fmt.Errorf("error while parsing file %s: %w", o.nodesPath, err) + } + o.nodes = &corev1.NodeList{ + Items: nodes, + } + default: + return fmt.Errorf("unexpected object type %T in --mock-nodes=%s content", nodeListObj, o.nodesPath) + } + + mcpListBytes, err := os.ReadFile(o.machineConfigPoolsPath) + if err != nil { + return err + } + mcpListObj, err := runtime.Decode(decoder, mcpListBytes) + if err != nil { + return err + } + switch mcpListObj := mcpListObj.(type) { + case *machineconfigv1.MachineConfigPoolList: + o.machineConfigPools = mcpListObj + case *corev1.List: + mcps, err := asResourceList[machineconfigv1.MachineConfigPool](mcpListObj, decoder) + if err != nil { + return fmt.Errorf("error while parsing file %s: %w", o.machineConfigPoolsPath, err) + } + o.machineConfigPools = &machineconfigv1.MachineConfigPoolList{ + Items: mcps, + } + default: + return fmt.Errorf("unexpected object type %T in --mock-machineconfigpools=%s content", mcpListObj, o.machineConfigPoolsPath) + } + + mcListBytes, err := os.ReadFile(o.machineConfigsPath) + if err != nil { + return err + } + mcListObj, err := runtime.Decode(decoder, mcListBytes) + if err != nil { + return err + } + switch mcListObj := mcListObj.(type) { + case *machineconfigv1.MachineConfigList: + o.machineConfigs = mcListObj + case *corev1.List: + mcs, err := asResourceList[machineconfigv1.MachineConfig](mcListObj, decoder) + if err != nil { + return fmt.Errorf("error while parsing file %s: %w", o.machineConfigsPath, err) + } + o.machineConfigs = &machineconfigv1.MachineConfigList{ + Items: mcs, + } + default: + return fmt.Errorf("unexpected object type %T in --mock-machineconfigs=%s content", mcpListObj, o.machineConfigsPath) + } + return nil +} diff --git a/pkg/cli/admin/upgrade/status/status.go b/pkg/cli/admin/upgrade/status/status.go index 9392c92f75..6f22648901 100644 --- a/pkg/cli/admin/upgrade/status/status.go +++ b/pkg/cli/admin/upgrade/status/status.go @@ -4,7 +4,6 @@ package status import ( "context" "fmt" - "os" "strings" "time" @@ -12,13 +11,15 @@ import ( corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/serializer" "k8s.io/cli-runtime/pkg/genericiooptions" + corev1client "k8s.io/client-go/kubernetes/typed/core/v1" kcmdutil "k8s.io/kubectl/pkg/cmd/util" configv1 "github.com/openshift/api/config/v1" + machineconfigv1 "github.com/openshift/api/machineconfiguration/v1" configv1client "github.com/openshift/client-go/config/clientset/versioned" + machineconfigv1client "github.com/openshift/client-go/machineconfiguration/clientset/versioned" + "github.com/openshift/oc/pkg/cli/admin/upgrade/status/mco" ) const ( @@ -47,8 +48,7 @@ func New(f kcmdutil.Factory, streams genericiooptions.IOStreams) *cobra.Command flags := cmd.Flags() // TODO: We can remove these flags once the idea about `oc adm upgrade status` stabilizes and the command // is promoted out of the OC_ENABLE_CMD_UPGRADE_STATUS feature gate - flags.StringVar(&o.mockCvPath, "mock-clusterversion", "", "Path to a YAML ClusterVersion object to use for testing (will be removed later).") - flags.StringVar(&o.mockOperatorsPath, "mock-clusteroperators", "", "Path to a YAML ClusterOperatorList to use for testing (will be removed later).") + flags.StringVar(&o.mockData.cvPath, "mock-clusterversion", "", "Path to a YAML ClusterVersion object to use for testing (will be removed later). Files in the same directory with the same name and suffixes -co.yaml, -mcp.yaml, -mc.yaml, and -node.yaml are required.") return cmd } @@ -56,12 +56,11 @@ func New(f kcmdutil.Factory, streams genericiooptions.IOStreams) *cobra.Command type options struct { genericiooptions.IOStreams - mockCvPath string - mockOperatorsPath string - mockClusterVersion *configv1.ClusterVersion - mockClusterOperators *configv1.ClusterOperatorList + mockData mockData - Client configv1client.Interface + ConfigClient configv1client.Interface + CoreClient corev1client.CoreV1Interface + MachineConfigClient machineconfigv1client.Interface } func (o *options) Complete(f kcmdutil.Factory, cmd *cobra.Command, args []string) error { @@ -69,89 +68,39 @@ func (o *options) Complete(f kcmdutil.Factory, cmd *cobra.Command, args []string return kcmdutil.UsageErrorf(cmd, "positional arguments given") } - if (o.mockCvPath == "") != (o.mockOperatorsPath == "") { - return fmt.Errorf("--mock-clusterversion and --mock-clusteroperators must be used together") + cvSuffix := "-cv.yaml" + if o.mockData.cvPath != "" { + o.mockData.operatorsPath = strings.Replace(o.mockData.cvPath, cvSuffix, "-co.yaml", 1) + o.mockData.machineConfigPoolsPath = strings.Replace(o.mockData.cvPath, cvSuffix, "-mcp.yaml", 1) + o.mockData.machineConfigsPath = strings.Replace(o.mockData.cvPath, cvSuffix, "-mc.yaml", 1) + o.mockData.nodesPath = strings.Replace(o.mockData.cvPath, cvSuffix, "-node.yaml", 1) } - if o.mockCvPath == "" { + if o.mockData.cvPath == "" { cfg, err := f.ToRESTConfig() if err != nil { return err } - client, err := configv1client.NewForConfig(cfg) + configClient, err := configv1client.NewForConfig(cfg) if err != nil { return err } - o.Client = client - } else { - // Process the mock data passed in --mock-clusterversion and --mockclusteroperators - scheme := runtime.NewScheme() - codecs := serializer.NewCodecFactory(scheme) - - if err := configv1.Install(scheme); err != nil { - return err - } - if err := corev1.AddToScheme(scheme); err != nil { - return err - } - decoder := codecs.UniversalDecoder(configv1.GroupVersion, corev1.SchemeGroupVersion) - - cvBytes, err := os.ReadFile(o.mockCvPath) + o.ConfigClient = configClient + machineConfigClient, err := machineconfigv1client.NewForConfig(cfg) if err != nil { return err } - cvObj, err := runtime.Decode(decoder, cvBytes) - if err != nil { - return err - } - switch cvObj.(type) { - case *configv1.ClusterVersion: - o.mockClusterVersion = cvObj.(*configv1.ClusterVersion) - case *configv1.ClusterVersionList: - o.mockClusterVersion = &cvObj.(*configv1.ClusterVersionList).Items[0] - case *corev1.List: - cvObj, err := runtime.Decode(decoder, cvObj.(*corev1.List).Items[0].Raw) - if err != nil { - return err - } - cv, ok := cvObj.(*configv1.ClusterVersion) - if !ok { - return fmt.Errorf("unexpected object type %T in --mock-clusterversion=%s List content", cvObj, o.mockCvPath) - } - o.mockClusterVersion = cv - default: - return fmt.Errorf("unexpected object type %T in --mock-clusterversion=%s content", cvObj, o.mockCvPath) - } - - coListBytes, err := os.ReadFile(o.mockOperatorsPath) + o.MachineConfigClient = machineConfigClient + coreClient, err := corev1client.NewForConfig(cfg) if err != nil { return err } - coListObj, err := runtime.Decode(decoder, coListBytes) + o.CoreClient = coreClient + } else { + err := o.mockData.load() if err != nil { return err } - switch coListObj.(type) { - case *configv1.ClusterOperatorList: - o.mockClusterOperators = coListObj.(*configv1.ClusterOperatorList) - case *corev1.List: - o.mockClusterOperators = &configv1.ClusterOperatorList{} - coListItems := coListObj.(*corev1.List).Items - for i := range coListItems { - coObj, err := runtime.Decode(decoder, coListItems[i].Raw) - if err != nil { - return err - } - co, ok := coObj.(*configv1.ClusterOperator) - if !ok { - return fmt.Errorf("unexpected object type %T in --mock-clusteroperators=%s List content at index %d", coObj, o.mockOperatorsPath, i) - } - o.mockClusterOperators.Items = append(o.mockClusterOperators.Items, *co) - - } - default: - return fmt.Errorf("unexpected object type %T in --mock-clusteroperators=%s content", cvObj, o.mockOperatorsPath) - } } return nil @@ -160,9 +109,9 @@ func (o *options) Complete(f kcmdutil.Factory, cmd *cobra.Command, args []string func (o *options) Run(ctx context.Context) error { var cv *configv1.ClusterVersion now := time.Now() - if cv = o.mockClusterVersion; cv == nil { + if cv = o.mockData.clusterVersion; cv == nil { var err error - cv, err = o.Client.ConfigV1().ClusterVersions().Get(ctx, "version", metav1.GetOptions{}) + cv, err = o.ConfigClient.ConfigV1().ClusterVersions().Get(ctx, "version", metav1.GetOptions{}) if err != nil { if apierrors.IsNotFound(err) { return fmt.Errorf("no cluster version information available - you must be connected to an OpenShift version 4 server to fetch the current version") @@ -180,9 +129,9 @@ func (o *options) Run(ctx context.Context) error { } var operators *configv1.ClusterOperatorList - if operators = o.mockClusterOperators; operators == nil { + if operators = o.mockData.clusterOperators; operators == nil { var err error - operators, err = o.Client.ConfigV1().ClusterOperators().List(ctx, metav1.ListOptions{}) + operators, err = o.ConfigClient.ConfigV1().ClusterOperators().List(ctx, metav1.ListOptions{}) if err != nil { return err } @@ -205,7 +154,62 @@ func (o *options) Run(ctx context.Context) error { return fmt.Errorf("no current %s info, see `oc describe clusterversion` for more details.\n", configv1.OperatorProgressing) } - if progressing.Status != configv1.ConditionTrue { + var pools *machineconfigv1.MachineConfigPoolList + if pools = o.mockData.machineConfigPools; pools == nil { + var err error + pools, err = o.MachineConfigClient.MachineconfigurationV1().MachineConfigPools().List(ctx, metav1.ListOptions{}) + if err != nil { + return err + } + } + var allNodes *corev1.NodeList + if allNodes = o.mockData.nodes; allNodes == nil { + var err error + allNodes, err = o.CoreClient.Nodes().List(ctx, metav1.ListOptions{}) + if err != nil { + return err + } + } + var machineConfigs *machineconfigv1.MachineConfigList + if machineConfigs = o.mockData.machineConfigs; machineConfigs == nil { + machineConfigs = &machineconfigv1.MachineConfigList{} + for _, node := range allNodes.Items { + for _, key := range []string{mco.CurrentMachineConfigAnnotationKey, mco.DesiredMachineConfigAnnotationKey} { + mc, err := getMachineConfig(ctx, o.MachineConfigClient, machineConfigs.Items, node.Annotations[key]) + if err != nil { + return err + } + if mc != nil { + machineConfigs.Items = append(machineConfigs.Items, *mc) + } + } + } + } + + _, workerPools := separateMasterAndWorkerPools(pools) + var updateInsights []updateInsight + var workerPoolsStatusData []poolDisplayData + for _, pool := range workerPools { + nodes, err := selectNodesFromPool(pool, allNodes.Items) + if err != nil { + return err + } + nodesStatusData, insights := assessNodesStatus(cv, pool, nodes, machineConfigs.Items) + updateInsights = append(updateInsights, insights...) + poolStatus, insights := assessMachineConfigPool(pool, nodesStatusData) + updateInsights = append(updateInsights, insights...) + workerPoolsStatusData = append(workerPoolsStatusData, poolStatus) + } + + var isWorkerPoolOutdated bool + for _, pool := range workerPoolsStatusData { + if pool.Completion != 100 { + isWorkerPoolOutdated = true + break + } + } + + if progressing.Status != configv1.ConditionTrue && !isWorkerPoolOutdated { var reason, message string if reason = progressing.Reason; reason == "" { reason = "" @@ -217,7 +221,11 @@ func (o *options) Run(ctx context.Context) error { return nil } - updatingFor := now.Sub(progressing.LastTransitionTime.Time).Round(time.Second) + startedAt := progressing.LastTransitionTime.Time + if len(cv.Status.History) > 0 { + startedAt = cv.Status.History[0].StartedTime.Time + } + updatingFor := now.Sub(startedAt).Round(time.Second) fmt.Fprintf(o.Out, "An update is in progress for %s: %s\n", updatingFor, progressing.Message) if c := findClusterOperatorStatusCondition(cv.Status.Conditions, clusterStatusFailing); c != nil { @@ -228,14 +236,23 @@ func (o *options) Run(ctx context.Context) error { fmt.Fprintf(o.ErrOut, "warning: No current %s info, see `oc describe clusterversion` for more details.\n", clusterStatusFailing) } - controlPlaneStatusData, updateInsights := assessControlPlaneStatus(cv, operators.Items, now) + controlPlaneStatusData, insights := assessControlPlaneStatus(cv, operators.Items, now) + updateInsights = append(updateInsights, insights...) fmt.Fprintf(o.Out, "\n") _ = controlPlaneStatusData.Write(o.Out) + + fmt.Fprintf(o.Out, "\n= Worker Upgrade =\n") + for _, pool := range workerPoolsStatusData { + fmt.Fprintf(o.Out, "\n") + _ = pool.WritePool(o.Out) + fmt.Fprintf(o.Out, "\n") + pool.WriteNodes(o.Out) + } + fmt.Fprintf(o.Out, "\n") upgradeHealth := assessUpdateInsights(updateInsights, updatingFor, now) _ = upgradeHealth.Write(o.Out) return nil - } func findClusterOperatorStatusCondition(conditions []configv1.ClusterOperatorStatusCondition, name configv1.ClusterStatusConditionType) *configv1.ClusterOperatorStatusCondition { diff --git a/pkg/cli/admin/upgrade/status/workerpool.go b/pkg/cli/admin/upgrade/status/workerpool.go new file mode 100644 index 0000000000..85724627ca --- /dev/null +++ b/pkg/cli/admin/upgrade/status/workerpool.go @@ -0,0 +1,506 @@ +package status + +import ( + "context" + "fmt" + "io" + "sort" + "strings" + "text/tabwriter" + "text/template" + "time" + + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + + configv1 "github.com/openshift/api/config/v1" + mcfgv1 "github.com/openshift/api/machineconfiguration/v1" + mcfgv1client "github.com/openshift/client-go/machineconfiguration/clientset/versioned" + "github.com/openshift/oc/pkg/cli/admin/upgrade/status/mco" +) + +type nodePhase uint32 + +const ( + phaseStateDraining nodePhase = iota + phaseStateUpdating + phaseStateRebooting + phaseStatePaused + phaseStatePending + phaseStateUpdated +) + +func (phase nodePhase) String() string { + switch phase { + case phaseStateDraining: + return "Draining" + case phaseStateUpdating: + return "Updating" + case phaseStateRebooting: + return "Rebooting" + case phaseStatePaused: + return "Paused" + case phaseStatePending: + return "Pending" + case phaseStateUpdated: + return "Updated" + default: + return "" + } +} + +type nodeAssessment uint32 + +const ( + nodeAssessmentDegraded nodeAssessment = iota + nodeAssessmentUnavailable + nodeAssessmentProgressing + nodeAssessmentExcluded + nodeAssessmentOutdated + nodeAssessmentCompleted +) + +func (assessment nodeAssessment) String() string { + switch assessment { + case nodeAssessmentDegraded: + return "Degraded" + case nodeAssessmentUnavailable: + return "Unavailable" + case nodeAssessmentProgressing: + return "Progressing" + case nodeAssessmentExcluded: + return "Excluded" + case nodeAssessmentOutdated: + return "Outdated" + case nodeAssessmentCompleted: + return "Completed" + default: + return "" + } +} + +type nodeDisplayData struct { + Name string + Assessment nodeAssessment + Phase nodePhase + Version string + Estimate string + Message string + isUnavailable bool + isDegraded bool + isUpdating bool + isUpdated bool +} + +type nodesOverviewDisplayData struct { + Total int + Available int + Progressing int + Outdated int + Draining int + Excluded int + Degraded int +} + +type poolDisplayData struct { + Name string + Assessment assessmentState + Completion float64 + Duration time.Duration + NodesOverview nodesOverviewDisplayData + Nodes []nodeDisplayData +} + +func getMachineConfig(ctx context.Context, client mcfgv1client.Interface, machineConfigs []mcfgv1.MachineConfig, machineConfigName string) (*mcfgv1.MachineConfig, error) { + for _, mc := range machineConfigs { + if mc.Name == machineConfigName { + return nil, nil + } + } + return client.MachineconfigurationV1().MachineConfigs().Get(ctx, machineConfigName, v1.GetOptions{}) +} + +func separateMasterAndWorkerPools(poolList *mcfgv1.MachineConfigPoolList) (mcfgv1.MachineConfigPool, []mcfgv1.MachineConfigPool) { + for i := range poolList.Items { + if poolList.Items[i].Name == "master" { + return poolList.Items[i], append(poolList.Items[:i], poolList.Items[i+1:]...) + } + } + return mcfgv1.MachineConfigPool{}, poolList.Items +} + +func selectNodesFromPool(pool mcfgv1.MachineConfigPool, allNodes []corev1.Node) ([]corev1.Node, error) { + var res []corev1.Node + selector, err := v1.LabelSelectorAsSelector(pool.Spec.NodeSelector) + if err != nil { + return nil, err + } + for _, node := range allNodes { + if selector.Matches(labels.Set(node.Labels)) { + res = append(res, node) + } + } + return res, nil +} + +func assessNodesStatus(cv *configv1.ClusterVersion, pool mcfgv1.MachineConfigPool, nodes []corev1.Node, machineConfigs []mcfgv1.MachineConfig) ([]nodeDisplayData, []updateInsight) { + var nodesStatusData []nodeDisplayData + var insights []updateInsight + for _, node := range nodes { + currentVersion := getOpenShiftVersionOfMachineConfig(machineConfigs, node.Annotations[mco.CurrentMachineConfigAnnotationKey]) + desiredVersion := getOpenShiftVersionOfMachineConfig(machineConfigs, node.Annotations[mco.DesiredMachineConfigAnnotationKey]) + + isUnavailable := isNodeUnavailable(node, pool) + isDegraded := isNodeDegraded(node) + isUpdated := isNodeUpdated(cv, currentVersion) + isUpdating := isNodeUpdating(cv, currentVersion, desiredVersion) + + phase := calculatePhase(pool, node, isUpdating, isUpdated) + + var estimate string + var assessment nodeAssessment + switch phase { + case phaseStatePaused: + assessment = nodeAssessmentExcluded + estimate = "-" + case phaseStatePending: + assessment = nodeAssessmentOutdated + estimate = "?" + case phaseStateDraining: + assessment = nodeAssessmentProgressing + estimate = "+30m" + case phaseStateUpdating: + assessment = nodeAssessmentProgressing + estimate = "+20m" + case phaseStateRebooting: + assessment = nodeAssessmentProgressing + estimate = "+10m" + case phaseStateUpdated: + assessment = nodeAssessmentCompleted + estimate = "-" + } + + var message string + if isUnavailable && !isUpdating { + assessment = nodeAssessmentUnavailable + message = "Node is unavailable" // TODO: Consider bubbling up the exact reason for --details + estimate = "?" + if isUpdated { + estimate = "-" + } + } + + if isDegraded { + assessment = nodeAssessmentDegraded + message = node.Annotations[mco.MachineConfigDaemonReasonAnnotationKey] + estimate = "?" + if isUpdated { + estimate = "-" + } + } + + insights = append(insights, nodeInsights(pool, node, message, isUnavailable, isUpdating, isDegraded)...) + + nodesStatusData = append(nodesStatusData, nodeDisplayData{ + Name: node.Name, + Assessment: assessment, + Estimate: estimate, + Phase: phase, + Message: message, + Version: currentVersion, + isUnavailable: isUnavailable, + isDegraded: isDegraded, + isUpdating: isUpdating, + isUpdated: isUpdated, + }) + } + + sort.Slice(nodesStatusData[:], func(i, j int) bool { + if nodesStatusData[i].Assessment == nodesStatusData[j].Assessment { + if nodesStatusData[i].Phase == nodesStatusData[j].Phase { + return nodesStatusData[i].Name < nodesStatusData[j].Name + } + return nodesStatusData[i].Phase < nodesStatusData[j].Phase + } + return nodesStatusData[i].Assessment < nodesStatusData[j].Assessment + }) + + return nodesStatusData, insights +} + +func getOpenShiftVersionOfMachineConfig(machineConfigs []mcfgv1.MachineConfig, name string) string { + for _, mc := range machineConfigs { + if mc.Name == name { + return mc.Annotations[mco.ReleaseImageVersionAnnotationKey] + } + } + return "?" +} + +func isNodeDraining(node corev1.Node, isUpdating bool) bool { + desiredDrain := node.Annotations[mco.DesiredDrainerAnnotationKey] + appliedDrain := node.Annotations[mco.LastAppliedDrainerAnnotationKey] + if desiredDrain != appliedDrain { + desiredVerb := strings.Split(desiredDrain, "-")[0] + if desiredVerb == mco.DrainerStateDrain { + return true + } + } + + mcdState := node.Annotations[mco.MachineConfigDaemonStateAnnotationKey] + if isUpdating && mcdUpdatingStateToPhase(mcdState) == phaseStateUpdated { + // Node is supposed to be updating but MCD hasn't had the time to update + // its state from original `Done` to `Working` and start the drain process. + // Default to drain process so that we don't report completed. + return true + } + return false +} + +func isNodeUpdating(cv *configv1.ClusterVersion, currentNodeVersion string, desiredNodeVersion string) bool { + return !isNodeUpdated(cv, currentNodeVersion) && isNodeUpdated(cv, desiredNodeVersion) +} + +func isNodeUpdated(cv *configv1.ClusterVersion, nodeVersion string) bool { + if len(cv.Status.History) > 0 { + // Check the version of a node against the new entry in the history of CV + // A paused MCP will not contain the MC of the new history entry + return cv.Status.History[0].Version == nodeVersion + } + return false +} + +func isNodeUnavailable(node corev1.Node, pool mcfgv1.MachineConfigPool) bool { + lns := mco.NewLayeredNodeState(&node) + return lns.IsUnavailable(&pool) +} + +func isNodeDegraded(node corev1.Node) bool { + // Inspired by: https://github.com/openshift/machine-config-operator/blob/master/pkg/controller/node/status.go + if node.Annotations == nil { + return false + } + dconfig, ok := node.Annotations[mco.DesiredMachineConfigAnnotationKey] + if !ok || dconfig == "" { + return false + } + dstate, ok := node.Annotations[mco.MachineConfigDaemonStateAnnotationKey] + if !ok || dstate == "" { + return false + } + + if dstate == mco.MachineConfigDaemonStateDegraded || dstate == mco.MachineConfigDaemonStateUnreconcilable { + return true + } + return false +} + +func calculatePhase(pool mcfgv1.MachineConfigPool, node corev1.Node, isUpdating, isUpdated bool) nodePhase { + var phase nodePhase + switch { + case isUpdating && isNodeDraining(node, isUpdating): + phase = phaseStateDraining + case isUpdating: + phase = mcdUpdatingStateToPhase(node.Annotations[mco.MachineConfigDaemonStateAnnotationKey]) + case isUpdated: + phase = phaseStateUpdated + case pool.Spec.Paused: + phase = phaseStatePaused + default: + phase = phaseStatePending + } + return phase +} + +func mcdUpdatingStateToPhase(state string) nodePhase { + switch state { + case mco.MachineConfigDaemonStateWorking: + return phaseStateUpdating + case mco.MachineConfigDaemonStateRebooting: + return phaseStateRebooting + case mco.MachineConfigDaemonStateDone: + return phaseStateUpdated + default: + // For other MCD states during an update default to updating + return phaseStateUpdating + } +} + +func nodeInsights(pool mcfgv1.MachineConfigPool, node corev1.Node, reason string, isUnavailable, isUpdating, isDegraded bool) []updateInsight { + var insights []updateInsight + scope := scopeTypeWorkerPool + if pool.Name == "master" { + scope = scopeTypeControlPlane + } + if isUnavailable && !isUpdating { + insights = append(insights, updateInsight{ + startedAt: time.Time{}, + scope: updateInsightScope{ + scopeType: scope, + resources: []scopeResource{{kind: scopeKindNode, name: node.Name}}, + }, + impact: updateInsightImpact{ + level: warningImpactLevel, + impactType: updateSpeedImpactType, + summary: fmt.Sprintf("Node %s is unavailable | %s", node.Name, reason), + }, + }) + } + if isDegraded { + insights = append(insights, updateInsight{ + startedAt: time.Time{}, + scope: updateInsightScope{ + scopeType: scope, + resources: []scopeResource{{kind: scopeKindNode, name: node.Name}}, + }, + impact: updateInsightImpact{ + level: errorImpactLevel, + impactType: updateStalledImpactType, + summary: fmt.Sprintf("Node %s is degraded | %s", node.Name, reason), + }, + }) + } + return insights +} + +func assessMachineConfigPool(pool mcfgv1.MachineConfigPool, nodes []nodeDisplayData) (poolDisplayData, []updateInsight) { + var insights []updateInsight + poolStatusData := poolDisplayData{ + Name: pool.Name, + Nodes: nodes, + NodesOverview: nodesOverviewDisplayData{ + Total: len(nodes), + }, + } + + updatedCount := 0 + pendingCount := 0 + for _, node := range nodes { + if !node.isUnavailable { + poolStatusData.NodesOverview.Available++ + } + if node.isDegraded { + poolStatusData.NodesOverview.Degraded++ + } + + switch node.Phase { + case phaseStatePaused: + poolStatusData.NodesOverview.Excluded++ + poolStatusData.NodesOverview.Outdated++ + case phaseStatePending: + pendingCount++ + poolStatusData.NodesOverview.Outdated++ + case phaseStateDraining: + poolStatusData.NodesOverview.Draining++ + poolStatusData.NodesOverview.Outdated++ + if !node.isDegraded { + poolStatusData.NodesOverview.Progressing++ + } + case phaseStateUpdating: + poolStatusData.NodesOverview.Outdated++ + if !node.isDegraded { + poolStatusData.NodesOverview.Progressing++ + } + case phaseStateRebooting: + poolStatusData.NodesOverview.Outdated++ + if !node.isDegraded { + poolStatusData.NodesOverview.Progressing++ + } + case phaseStateUpdated: + updatedCount++ + } + } + + poolStatusData.Assessment = assessmentStateProgressing + if updatedCount == len(nodes) { + poolStatusData.Assessment = assessmentStateCompleted + } else if pendingCount == len(nodes) { + poolStatusData.Assessment = assessmentStatePending + } else if poolStatusData.NodesOverview.Degraded > 0 { + poolStatusData.Assessment = assessmentStateDegraded + } else if poolStatusData.NodesOverview.Excluded > 0 { + poolStatusData.Assessment = assessmentStateExcluded + } + + insights = machineConfigPoolInsights(poolStatusData, pool) + + poolStatusData.Completion = float64(updatedCount) / float64(len(nodes)) * 100.0 + return poolStatusData, insights +} + +func machineConfigPoolInsights(poolDisplay poolDisplayData, pool mcfgv1.MachineConfigPool) (insights []updateInsight) { + if poolDisplay.NodesOverview.Excluded > 0 && pool.Spec.Paused { + insights = append(insights, updateInsight{ + startedAt: time.Time{}, + scope: updateInsightScope{ + scopeType: scopeTypeWorkerPool, + resources: []scopeResource{{kind: scopeKindMachineConfigPool, name: pool.Name}}, + }, + impact: updateInsightImpact{ + level: warningImpactLevel, + impactType: updateStalledImpactType, + summary: fmt.Sprintf("Worker pool %s is paused | Outdated nodes in a paused pool will not be updated.", pool.Name), + }, + }) + } + return insights +} + +var workerPoolStatusTemplate = template.Must(template.New("workerPoolStatus").Parse(workerPoolStatusTemplateRaw)) + +func (pool *poolDisplayData) WritePool(f io.Writer) error { + return workerPoolStatusTemplate.Execute(f, pool) +} + +const workerPoolStatusTemplateRaw = `= Worker Pool = +Worker Pool: {{ .Name }} +Assessment: {{ .Assessment }} +Completion: {{ printf "%.0f" .Completion }}% +Worker Status: {{ .NodesOverview.Total }} Total, {{ .NodesOverview.Available }} Available, {{ .NodesOverview.Progressing }} Progressing, {{ .NodesOverview.Outdated }} Outdated, {{ .NodesOverview.Draining }} Draining, {{ .NodesOverview.Excluded }} Excluded, {{ .NodesOverview.Degraded }} Degraded +` + +func (pool *poolDisplayData) WriteNodes(w io.Writer) { + _, _ = w.Write([]byte("Worker Pool Node(s)\n")) + tabw := tabwriter.NewWriter(w, 0, 0, 3, ' ', 0) + _, _ = tabw.Write([]byte("NAME\tASSESSMENT\tPHASE\tVERSION\tEST\tMESSAGE\n")) + var total, completed, available, progressing, outdated, draining, excluded int + for i, node := range pool.Nodes { + if i >= 10 { + // Limit displaying too many nodes + // Display nodes in undesired states regardless their count + if !node.isDegraded && (!node.isUnavailable || node.isUpdating) { + total++ + if node.isUpdated { + completed++ + } else { + outdated++ + } + if !node.isUnavailable { + available++ + } + if node.Phase == phaseStateDraining { + draining++ + } + if node.Phase == phaseStatePaused { + excluded++ + } + if node.Assessment == nodeAssessmentProgressing { + progressing++ + } + continue + } + } + + _, _ = tabw.Write([]byte(node.Name + "\t")) + _, _ = tabw.Write([]byte(node.Assessment.String() + "\t")) + _, _ = tabw.Write([]byte(node.Phase.String() + "\t")) + _, _ = tabw.Write([]byte(node.Version + "\t")) + _, _ = tabw.Write([]byte(node.Estimate + "\t")) + _, _ = tabw.Write([]byte(node.Message + "\n")) + } + tabw.Flush() + if total > 0 { + fmt.Fprintf(w, "...\nOmitted additional %d Total, %d Completed, %d Available, %d Progressing, %d Outdated, %d Draining, %d Excluded, and 0 Degraded nodes.\nPass along --details to see all information.\n", total, completed, available, progressing, outdated, draining, excluded) + } +} diff --git a/pkg/cli/admin/upgrade/status/workerpool_test.go b/pkg/cli/admin/upgrade/status/workerpool_test.go new file mode 100644 index 0000000000..fcf5990eb5 --- /dev/null +++ b/pkg/cli/admin/upgrade/status/workerpool_test.go @@ -0,0 +1,1072 @@ +package status + +import ( + "fmt" + "testing" + "time" + + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/google/go-cmp/cmp" + configv1 "github.com/openshift/api/config/v1" + mcfgv1 "github.com/openshift/api/machineconfiguration/v1" + "github.com/openshift/oc/pkg/cli/admin/upgrade/status/mco" +) + +var allowUnexportedWorkerPools = cmp.AllowUnexported(nodeDisplayData{}, nodesOverviewDisplayData{}, poolDisplayData{}) + +type mcpBuilder struct { + machineConfigPool mcfgv1.MachineConfigPool +} + +func mcp(name string) *mcpBuilder { + return &mcpBuilder{ + machineConfigPool: mcfgv1.MachineConfigPool{ + ObjectMeta: v1.ObjectMeta{ + Name: name, + Labels: map[string]string{ + mcfgv1.KubeletConfigRoleLabelPrefix + name: "", + }, + }, + Spec: mcfgv1.MachineConfigPoolSpec{ + NodeSelector: &v1.LabelSelector{ + MatchLabels: map[string]string{ + fmt.Sprintf("node-role.kubernetes.io/%s", name): "", + }, + }, + }, + }, + } +} + +func (mcp *mcpBuilder) setMachineConfig(mcName string) *mcpBuilder { + mcp.machineConfigPool.Spec.Configuration.Name = mcName + return mcp +} + +func (mcp *mcpBuilder) paused() *mcpBuilder { + mcp.machineConfigPool.Spec.Paused = true + return mcp +} + +type mcBuilder struct { + machineConfig mcfgv1.MachineConfig +} + +func mc(name string) *mcBuilder { + return &mcBuilder{ + machineConfig: mcfgv1.MachineConfig{ + ObjectMeta: v1.ObjectMeta{ + Name: name, + }, + }, + } +} + +func (mc *mcBuilder) version(version string) *mcBuilder { + mc.machineConfig.Annotations = map[string]string{ + mco.ReleaseImageVersionAnnotationKey: version, + } + return mc +} + +type nodeBuilder struct { + node corev1.Node +} + +func node(name string) *nodeBuilder { + return &nodeBuilder{ + node: corev1.Node{ + ObjectMeta: v1.ObjectMeta{ + Name: name, + Annotations: map[string]string{}, + Labels: map[string]string{}, + }, + Spec: corev1.NodeSpec{ + Unschedulable: false, + }, + Status: corev1.NodeStatus{ + Conditions: []corev1.NodeCondition{ + { + Type: corev1.NodeReady, + Status: corev1.ConditionTrue, + LastHeartbeatTime: v1.NewTime(time.Now()), + LastTransitionTime: v1.NewTime(time.Now()), + Reason: "KubeletReady", + Message: "kubelet is posting ready status", + }, + { + Type: corev1.NodeMemoryPressure, + Status: corev1.ConditionFalse, + LastHeartbeatTime: v1.NewTime(time.Now()), + LastTransitionTime: v1.NewTime(time.Now()), + Reason: "KubeletHasSufficientMemory", + Message: "kubelet has sufficient memory available", + }, + { + Type: corev1.NodeDiskPressure, + Status: corev1.ConditionFalse, + LastHeartbeatTime: v1.NewTime(time.Now()), + LastTransitionTime: v1.NewTime(time.Now()), + Reason: "KubeletHasNoDiskPressure", + Message: "kubelet has no disk pressure", + }, + { + Type: corev1.NodePIDPressure, + Status: corev1.ConditionFalse, + LastHeartbeatTime: v1.NewTime(time.Now()), + LastTransitionTime: v1.NewTime(time.Now()), + Reason: "KubeletHasSufficientPID", + Message: "kubelet has sufficient PID available", + }, + { + Type: corev1.NodeNetworkUnavailable, + Status: corev1.ConditionFalse, + LastHeartbeatTime: v1.NewTime(time.Now()), + LastTransitionTime: v1.NewTime(time.Now()), + Reason: "RouteCreated", + Message: "openshift-sdn cleared kubelet-set NoRouteCreated", + }, + }, + }, + }, + } +} + +func (n *nodeBuilder) annotated(annotations map[string]string) *nodeBuilder { + n.node.Annotations = annotations + return n +} + +func (n *nodeBuilder) unavailable() *nodeBuilder { + n.node.Spec.Unschedulable = true + return n +} + +func (n *nodeBuilder) pending(currentConfig, desiredConfig string) *nodeBuilder { + annotations := map[string]string{ + "machineconfiguration.openshift.io/currentConfig": currentConfig, + "machineconfiguration.openshift.io/desiredConfig": desiredConfig, + "machineconfiguration.openshift.io/desiredDrain": "uncordon-rendered-1", + "machineconfiguration.openshift.io/lastAppliedDrain": "uncordon-rendered-1", + "machineconfiguration.openshift.io/reason": "", + "machineconfiguration.openshift.io/state": "Done", + } + return n.annotated(annotations) +} + +func (n *nodeBuilder) progressing_draining(currentConfig, desiredConfig string) *nodeBuilder { + annotations := map[string]string{ + "machineconfiguration.openshift.io/currentConfig": currentConfig, + "machineconfiguration.openshift.io/desiredConfig": desiredConfig, + "machineconfiguration.openshift.io/desiredDrain": "drain-rendered-1", + "machineconfiguration.openshift.io/lastAppliedDrain": "uncordon-rendered-1", + "machineconfiguration.openshift.io/reason": "", + "machineconfiguration.openshift.io/state": "Working", + } + return n.annotated(annotations).unavailable() +} + +func (n *nodeBuilder) progressing_draining_unset_mcd_state(currentConfig, desiredConfig string) *nodeBuilder { + // MCD did not have time to update its state in a node + annotations := map[string]string{ + "machineconfiguration.openshift.io/currentConfig": currentConfig, + "machineconfiguration.openshift.io/desiredConfig": desiredConfig, + "machineconfiguration.openshift.io/desiredDrain": "uncordon-rendered-1", + "machineconfiguration.openshift.io/lastAppliedDrain": "uncordon-rendered-1", + "machineconfiguration.openshift.io/reason": "", + "machineconfiguration.openshift.io/state": "Done", + } + return n.annotated(annotations).unavailable() +} + +func (n *nodeBuilder) progressing_updating(currentConfig, desiredConfig string) *nodeBuilder { + annotations := map[string]string{ + "machineconfiguration.openshift.io/currentConfig": currentConfig, + "machineconfiguration.openshift.io/desiredConfig": desiredConfig, + "machineconfiguration.openshift.io/desiredDrain": "drain-rendered-1", + "machineconfiguration.openshift.io/lastAppliedDrain": "drain-rendered-1", + "machineconfiguration.openshift.io/reason": "", + "machineconfiguration.openshift.io/state": "Working", + } + return n.annotated(annotations).unavailable() +} + +func (n *nodeBuilder) progressing_rebooting(currentConfig, desiredConfig string) *nodeBuilder { + annotations := map[string]string{ + "machineconfiguration.openshift.io/currentConfig": currentConfig, + "machineconfiguration.openshift.io/desiredConfig": desiredConfig, + "machineconfiguration.openshift.io/desiredDrain": "drain-rendered-1", + "machineconfiguration.openshift.io/lastAppliedDrain": "drain-rendered-1", + "machineconfiguration.openshift.io/reason": "", + "machineconfiguration.openshift.io/state": "Rebooting", + } + return n.annotated(annotations).unavailable() +} + +func (n *nodeBuilder) updated(currentConfig, desiredConfig string) *nodeBuilder { + annotations := map[string]string{ + "machineconfiguration.openshift.io/currentConfig": currentConfig, + "machineconfiguration.openshift.io/desiredConfig": desiredConfig, + "machineconfiguration.openshift.io/desiredDrain": "drain-rendered-1", + "machineconfiguration.openshift.io/lastAppliedDrain": "drain-rendered-1", + "machineconfiguration.openshift.io/reason": "", + "machineconfiguration.openshift.io/state": "Done", + } + return n.annotated(annotations) +} + +func (n *nodeBuilder) degraded_draining(currentConfig, desiredConfig, reason string) *nodeBuilder { + annotations := map[string]string{ + "machineconfiguration.openshift.io/currentConfig": currentConfig, + "machineconfiguration.openshift.io/desiredConfig": desiredConfig, + "machineconfiguration.openshift.io/desiredDrain": "drain-rendered-1", + "machineconfiguration.openshift.io/lastAppliedDrain": "uncordon-rendered-1", + "machineconfiguration.openshift.io/reason": reason, + "machineconfiguration.openshift.io/state": "Degraded", + } + return n.annotated(annotations).unavailable() +} + +func Test_assessNodesStatus(t *testing.T) { + oldOCPVersion := "3.10.0" + newOCPVersion := "4.16.0" + mcOld := mc("old").version(oldOCPVersion).machineConfig + mcNew := mc("new").version(newOCPVersion).machineConfig + machineConfigs := []mcfgv1.MachineConfig{ + mcOld, + mcNew, + } + mcpMaster := mcp("master").setMachineConfig("new").machineConfigPool + cvUpdating := configv1.ClusterVersion{ + Status: configv1.ClusterVersionStatus{ + Desired: configv1.Release{Version: newOCPVersion}, + History: []configv1.UpdateHistory{ + { + State: configv1.PartialUpdate, + Version: newOCPVersion, + }, + { + State: configv1.CompletedUpdate, + Version: oldOCPVersion, + }, + }, + }, + } + cvUpdated := configv1.ClusterVersion{ + Status: configv1.ClusterVersionStatus{ + Desired: configv1.Release{Version: newOCPVersion}, + History: []configv1.UpdateHistory{ + { + State: configv1.CompletedUpdate, + Version: newOCPVersion, + }, + { + State: configv1.CompletedUpdate, + Version: oldOCPVersion, + }, + }, + }, + } + type args struct { + cv *configv1.ClusterVersion + pool mcfgv1.MachineConfigPool + nodes []corev1.Node + machineConfigs []mcfgv1.MachineConfig + } + testCases := []struct { + name string + args args + expectedNodeDisplayData []nodeDisplayData + expectedUpdateInsight []updateInsight + }{ + { + name: "node is pending - all is well", + args: args{ + cv: &cvUpdating, + pool: mcpMaster, + nodes: []corev1.Node{ + node("a").pending(mcOld.Name, mcOld.Name).node, + }, + machineConfigs: machineConfigs, + }, + expectedNodeDisplayData: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentOutdated, + Phase: phaseStatePending, + Version: oldOCPVersion, + Estimate: "?", + Message: "", + isUnavailable: false, + isDegraded: false, + isUpdating: false, + isUpdated: false, + }, + }, + expectedUpdateInsight: nil, + }, + { + name: "node is draining - all is well", + args: args{ + cv: &cvUpdating, + pool: mcpMaster, + nodes: []corev1.Node{ + node("a").progressing_draining(mcOld.Name, mcNew.Name).node, + }, + machineConfigs: machineConfigs, + }, + expectedNodeDisplayData: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentProgressing, + Phase: phaseStateDraining, + Version: oldOCPVersion, + Estimate: "+30m", + Message: "", + isUnavailable: true, + isDegraded: false, + isUpdating: true, + isUpdated: false, + }, + }, + expectedUpdateInsight: nil, + }, + { + name: "node is draining - MCD did not have time to update its state", + args: args{ + cv: &cvUpdating, + pool: mcpMaster, + nodes: []corev1.Node{ + node("a").progressing_draining_unset_mcd_state(mcOld.Name, mcNew.Name).node, + }, + machineConfigs: machineConfigs, + }, + expectedNodeDisplayData: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentProgressing, + Phase: phaseStateDraining, + Version: oldOCPVersion, + Estimate: "+30m", + Message: "", + isUnavailable: true, + isDegraded: false, + isUpdating: true, + isUpdated: false, + }, + }, + expectedUpdateInsight: nil, + }, + { + name: "node is updating - all is well", + args: args{ + cv: &cvUpdating, + pool: mcpMaster, + nodes: []corev1.Node{ + node("a").progressing_updating(mcOld.Name, mcNew.Name).node, + }, + machineConfigs: machineConfigs, + }, + expectedNodeDisplayData: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentProgressing, + Phase: phaseStateUpdating, + Version: oldOCPVersion, + Estimate: "+20m", + Message: "", + isUnavailable: true, + isDegraded: false, + isUpdating: true, + isUpdated: false, + }, + }, + expectedUpdateInsight: nil, + }, + { + name: "node is rebooting - all is well", + args: args{ + cv: &cvUpdating, + pool: mcpMaster, + nodes: []corev1.Node{ + node("a").progressing_rebooting(mcOld.Name, mcNew.Name).node, + }, + machineConfigs: machineConfigs, + }, + expectedNodeDisplayData: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentProgressing, + Phase: phaseStateRebooting, + Version: oldOCPVersion, + Estimate: "+10m", + Message: "", + isUnavailable: true, + isDegraded: false, + isUpdating: true, + isUpdated: false, + }, + }, + expectedUpdateInsight: nil, + }, + { + name: "node is updated - all is well", + args: args{ + cv: &cvUpdated, + pool: mcpMaster, + nodes: []corev1.Node{ + node("a").updated(mcNew.Name, mcNew.Name).node, + }, + machineConfigs: machineConfigs, + }, + expectedNodeDisplayData: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentCompleted, + Phase: phaseStateUpdated, + Version: newOCPVersion, + Estimate: "-", + Message: "", + isUnavailable: false, + isDegraded: false, + isUpdating: false, + isUpdated: true, + }, + }, + expectedUpdateInsight: nil, + }, + { + name: "node is degraded - pdb prohibits draining", + args: args{ + cv: &cvUpdated, + pool: mcpMaster, + nodes: []corev1.Node{ + node("a").degraded_draining(mcOld.Name, mcNew.Name, "PDB prohibits draining").node, + }, + machineConfigs: machineConfigs, + }, + expectedNodeDisplayData: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentDegraded, + Phase: phaseStateDraining, + Version: oldOCPVersion, + Estimate: "?", + Message: "PDB prohibits draining", + isUnavailable: true, + isDegraded: true, + isUpdating: true, + isUpdated: false, + }, + }, + expectedUpdateInsight: []updateInsight{ + { + impact: updateInsightImpact{ + level: errorImpactLevel, + impactType: updateStalledImpactType, + summary: "Node a is degraded | PDB prohibits draining", + }, + scope: updateInsightScope{ + scopeType: scopeTypeControlPlane, + resources: []scopeResource{{kind: scopeKindNode, name: "a"}}, + }, + }, + }, + }, + { + name: "node is updated but unavailable", + args: args{ + cv: &cvUpdated, + pool: mcpMaster, + nodes: []corev1.Node{ + node("a").updated(mcNew.Name, mcNew.Name).unavailable().node, + }, + machineConfigs: machineConfigs, + }, + expectedNodeDisplayData: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentUnavailable, + Phase: phaseStateUpdated, + Version: newOCPVersion, + Estimate: "-", + Message: "Node is unavailable", + isUnavailable: true, + isDegraded: false, + isUpdating: false, + isUpdated: true, + }, + }, + expectedUpdateInsight: []updateInsight{ + { + impact: updateInsightImpact{ + level: warningImpactLevel, + impactType: updateSpeedImpactType, + summary: "Node a is unavailable | Node is unavailable", + }, + scope: updateInsightScope{ + scopeType: scopeTypeControlPlane, + resources: []scopeResource{{kind: scopeKindNode, name: "a"}}, + }, + }, + }}, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + nodeDisplayData, updateInsight := assessNodesStatus(tc.args.cv, tc.args.pool, tc.args.nodes, tc.args.machineConfigs) + if diff := cmp.Diff(tc.expectedNodeDisplayData, nodeDisplayData, allowUnexportedWorkerPools); diff != "" { + t.Errorf("nodeDisplayData differ from expected:\n%s", diff) + } + + if diff := cmp.Diff(tc.expectedUpdateInsight, updateInsight, allowUnexportedInsightStructs); diff != "" { + t.Errorf("updateInsight differ from expected:\n%s", diff) + } + }) + } +} + +func Test_assessNodesStatus_DisplayData_Sorting(t *testing.T) { + oldOCPVersion := "3.10.0" + newOCPVersion := "4.16.0" + mcOld := mc("old").version(oldOCPVersion).machineConfig + mcNew := mc("new").version(newOCPVersion).machineConfig + machineConfigs := []mcfgv1.MachineConfig{ + mcOld, + mcNew, + } + mcpMaster := mcp("master").setMachineConfig("new").machineConfigPool + cvUpdating := configv1.ClusterVersion{ + Status: configv1.ClusterVersionStatus{ + Desired: configv1.Release{Version: newOCPVersion}, + History: []configv1.UpdateHistory{ + { + State: configv1.PartialUpdate, + Version: newOCPVersion, + }, + { + State: configv1.CompletedUpdate, + Version: oldOCPVersion, + }, + }, + }, + } + type args struct { + cv *configv1.ClusterVersion + pool mcfgv1.MachineConfigPool + nodes []corev1.Node + machineConfigs []mcfgv1.MachineConfig + } + testCases := []struct { + name string + args args + expectedNodeDisplayData []nodeDisplayData + }{ + { + name: "priority is as follows Degraded > Unavailable > Progressing > Completed", + args: args{ + cv: &cvUpdating, + pool: mcpMaster, + nodes: []corev1.Node{ + node("a").updated(mcNew.Name, mcNew.Name).node, + node("b").degraded_draining(mcOld.Name, mcNew.Name, "PDB prohibits draining").node, + node("c").progressing_updating(mcOld.Name, mcNew.Name).node, + node("d").pending(mcOld.Name, mcOld.Name).unavailable().node, + }, + machineConfigs: machineConfigs, + }, + expectedNodeDisplayData: []nodeDisplayData{ + { + Name: "b", + Assessment: nodeAssessmentDegraded, + Phase: phaseStateDraining, + Version: oldOCPVersion, + Estimate: "?", + Message: "PDB prohibits draining", + isUnavailable: true, + isDegraded: true, + isUpdating: true, + isUpdated: false, + }, + { + Name: "d", + Assessment: nodeAssessmentUnavailable, + Phase: phaseStatePending, + Version: oldOCPVersion, + Estimate: "?", + Message: "Node is unavailable", + isUnavailable: true, + isDegraded: false, + isUpdating: false, + isUpdated: false, + }, + { + Name: "c", + Assessment: nodeAssessmentProgressing, + Phase: phaseStateUpdating, + Version: oldOCPVersion, + Estimate: "+20m", + Message: "", + isUnavailable: true, + isDegraded: false, + isUpdating: true, + isUpdated: false, + }, + { + Name: "a", + Assessment: nodeAssessmentCompleted, + Phase: phaseStateUpdated, + Version: newOCPVersion, + Estimate: "-", + Message: "", + isUnavailable: false, + isDegraded: false, + isUpdating: false, + isUpdated: true, + }, + }, + }, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + nodeDisplayData, _ := assessNodesStatus(tc.args.cv, tc.args.pool, tc.args.nodes, tc.args.machineConfigs) + if diff := cmp.Diff(tc.expectedNodeDisplayData, nodeDisplayData, allowUnexportedWorkerPools); diff != "" { + t.Errorf("nodeDisplayData differ from expected:\n%s", diff) + } + }) + } +} + +func Test_nodeInsights(t *testing.T) { + oldOCPVersion := "3.10.0" + newOCPVersion := "4.16.0" + mcOld := mc("old").version(oldOCPVersion).machineConfig + mcNew := mc("new").version(newOCPVersion).machineConfig + mcpMaster := mcp("master").setMachineConfig("new").machineConfigPool + mcpWorker := mcp("worker").setMachineConfig("new").machineConfigPool + type args struct { + pool mcfgv1.MachineConfigPool + node corev1.Node + reason string + isUnavailable bool + isUpdating bool + isDegraded bool + } + testCases := []struct { + name string + args args + expectedUpdateInsight []updateInsight + }{ + { + name: "node is updated - all is well", + args: args{ + pool: mcpMaster, + node: node("a").updated(mcNew.Name, mcNew.Name).node, + }, + expectedUpdateInsight: nil, + }, + { + name: "node is updated - unavailable - master pool", + args: args{ + pool: mcpMaster, + node: node("a").updated(mcNew.Name, mcNew.Name).unavailable().node, + reason: "Node is unavailable", + isUnavailable: true, + }, + expectedUpdateInsight: []updateInsight{ + { + impact: updateInsightImpact{ + level: warningImpactLevel, + impactType: updateSpeedImpactType, + summary: "Node a is unavailable | Node is unavailable", + }, + scope: updateInsightScope{ + scopeType: scopeTypeControlPlane, + resources: []scopeResource{{kind: scopeKindNode, name: "a"}}, + }, + }, + }, + }, + { + name: "node is updated - unavailable - worker pool", + args: args{ + pool: mcpWorker, + node: node("a").updated(mcNew.Name, mcNew.Name).unavailable().node, + reason: "Node is unavailable", + isUnavailable: true, + }, + expectedUpdateInsight: []updateInsight{ + { + impact: updateInsightImpact{ + level: warningImpactLevel, + impactType: updateSpeedImpactType, + summary: "Node a is unavailable | Node is unavailable", + }, + scope: updateInsightScope{ + scopeType: scopeTypeWorkerPool, + resources: []scopeResource{{kind: scopeKindNode, name: "a"}}, + }, + }, + }, + }, + { + name: "node is degraded - pdb prohibits draining", + args: args{ + pool: mcpWorker, + node: node("a").degraded_draining(mcOld.Name, mcNew.Name, "PDB prohibits draining").node, + reason: "PDB prohibits draining", + isUnavailable: true, + isUpdating: true, + isDegraded: true, + }, + expectedUpdateInsight: []updateInsight{ + { + impact: updateInsightImpact{ + level: errorImpactLevel, + impactType: updateStalledImpactType, + summary: "Node a is degraded | PDB prohibits draining", + }, + scope: updateInsightScope{ + scopeType: scopeTypeWorkerPool, + resources: []scopeResource{{kind: scopeKindNode, name: "a"}}, + }, + }, + }, + }, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + updateInsights := nodeInsights(tc.args.pool, tc.args.node, tc.args.reason, tc.args.isUnavailable, tc.args.isUpdating, tc.args.isDegraded) + if diff := cmp.Diff(tc.expectedUpdateInsight, updateInsights, allowUnexportedInsightStructs); diff != "" { + t.Errorf("updateInsight differ from expected:\n%s", diff) + } + }) + } +} + +func Test_assessMachineConfigPool(t *testing.T) { + oldOCPVersion := "3.10.0" + newOCPVersion := "4.16.0" + type args struct { + pool mcfgv1.MachineConfigPool + nodes []nodeDisplayData + } + testCases := []struct { + name string + args args + expectedPoolDisplayData poolDisplayData + expectedUpdateInsight []updateInsight + }{ + { + name: "progressing - all is well", + args: args{ + pool: mcp("master").setMachineConfig("new").machineConfigPool, + nodes: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentProgressing, + Phase: phaseStateUpdating, + Version: oldOCPVersion, + Estimate: "+20m", + Message: "", + isUnavailable: true, + isDegraded: false, + isUpdating: true, + isUpdated: false, + }, + { + Name: "b", + Assessment: nodeAssessmentCompleted, + Phase: phaseStateUpdated, + Version: newOCPVersion, + Estimate: "-", + isUpdated: true, + }, + }, + }, + expectedPoolDisplayData: poolDisplayData{ + Name: "master", + Assessment: assessmentStateProgressing, + Completion: 50, + NodesOverview: nodesOverviewDisplayData{ + Total: 2, + Available: 1, + Progressing: 1, + Outdated: 1, + }, + Nodes: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentProgressing, + Phase: phaseStateUpdating, + Version: oldOCPVersion, + Estimate: "+20m", + Message: "", + isUnavailable: true, + isDegraded: false, + isUpdating: true, + isUpdated: false, + }, + { + Name: "b", + Assessment: nodeAssessmentCompleted, + Phase: phaseStateUpdated, + Version: newOCPVersion, + Estimate: "-", + isUpdated: true, + }, + }, + }, + expectedUpdateInsight: nil, + }, + { + name: "degraded - pdb prohibits draining", + args: args{ + pool: mcp("worker").setMachineConfig("new").machineConfigPool, + nodes: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentDegraded, + Phase: phaseStateDraining, + Version: oldOCPVersion, + Estimate: "+30m", + Message: "PDB prohibits draining", + isUnavailable: true, + isDegraded: true, + isUpdating: true, + isUpdated: false, + }, + }, + }, + expectedPoolDisplayData: poolDisplayData{ + Name: "worker", + Assessment: assessmentStateDegraded, + Completion: 0, + NodesOverview: nodesOverviewDisplayData{ + Total: 1, + Degraded: 1, + Draining: 1, + Outdated: 1, + }, + Nodes: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentDegraded, + Phase: phaseStateDraining, + Version: oldOCPVersion, + Estimate: "+30m", + Message: "PDB prohibits draining", + isUnavailable: true, + isDegraded: true, + isUpdating: true, + isUpdated: false, + }, + }, + }, + expectedUpdateInsight: nil, + }, + { + name: "completed - all is well", + args: args{ + pool: mcp("worker").setMachineConfig("new").machineConfigPool, + nodes: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentCompleted, + Phase: phaseStateUpdated, + Version: newOCPVersion, + Estimate: "-", + isUpdated: true, + }, + { + Name: "b", + Assessment: nodeAssessmentCompleted, + Phase: phaseStateUpdated, + Version: newOCPVersion, + Estimate: "-", + isUpdated: true, + }, + }, + }, + expectedPoolDisplayData: poolDisplayData{ + Name: "worker", + Assessment: assessmentStateCompleted, + Completion: 100, + NodesOverview: nodesOverviewDisplayData{ + Total: 2, + Available: 2, + }, + Nodes: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentCompleted, + Phase: phaseStateUpdated, + Version: newOCPVersion, + Estimate: "-", + isUpdated: true, + }, + { + Name: "b", + Assessment: nodeAssessmentCompleted, + Phase: phaseStateUpdated, + Version: newOCPVersion, + Estimate: "-", + isUpdated: true, + }, + }, + }, + expectedUpdateInsight: nil, + }, + { + name: "paused worker pool with a pending node", + args: args{ + pool: mcp("worker").setMachineConfig("new").paused().machineConfigPool, + nodes: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentExcluded, + Phase: phaseStatePaused, + Version: oldOCPVersion, + Estimate: "?", + Message: "", + }, + }, + }, + expectedPoolDisplayData: poolDisplayData{ + Name: "worker", + Assessment: assessmentStateExcluded, + Completion: 0, + NodesOverview: nodesOverviewDisplayData{ + Total: 1, + Available: 1, + Excluded: 1, + Outdated: 1, + }, + Nodes: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentExcluded, + Phase: phaseStatePaused, + Version: oldOCPVersion, + Estimate: "?", + Message: "", + }, + }, + }, + expectedUpdateInsight: []updateInsight{ + { + impact: updateInsightImpact{ + level: warningImpactLevel, + impactType: updateStalledImpactType, + summary: "Worker pool worker is paused | Outdated nodes in a paused pool will not be updated.", + }, + scope: updateInsightScope{ + scopeType: scopeTypeWorkerPool, + resources: []scopeResource{{kind: scopeKindMachineConfigPool, name: "worker"}}, + }, + }, + }}, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + poolDisplayData, updateInsight := assessMachineConfigPool(tc.args.pool, tc.args.nodes) + if diff := cmp.Diff(tc.expectedPoolDisplayData, poolDisplayData, allowUnexportedWorkerPools); diff != "" { + t.Errorf("poolDisplayData differ from expected:\n%s", diff) + } + + if diff := cmp.Diff(tc.expectedUpdateInsight, updateInsight, allowUnexportedInsightStructs); diff != "" { + t.Errorf("updateInsight differ from expected:\n%s", diff) + } + }) + } +} + +func Test_machineConfigPoolInsights(t *testing.T) { + oldOCPVersion := "3.10.0" + type args struct { + poolDisplay poolDisplayData + pool mcfgv1.MachineConfigPool + } + testCases := []struct { + name string + args args + expectedUpdateInsight []updateInsight + }{ + { + name: "pending - all is well", + args: args{ + pool: mcp("worker").setMachineConfig("new").machineConfigPool, + poolDisplay: poolDisplayData{ + Name: "worker", + Assessment: assessmentStatePending, + Completion: 0, + NodesOverview: nodesOverviewDisplayData{ + Total: 1, + Available: 1, + Outdated: 1, + }, + Nodes: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentOutdated, + Phase: phaseStatePending, + Version: oldOCPVersion, + Estimate: "?", + Message: "", + }, + }, + }, + }, + expectedUpdateInsight: nil, + }, + { + name: "paused pool", + args: args{ + pool: mcp("worker").setMachineConfig("new").paused().machineConfigPool, + poolDisplay: poolDisplayData{ + Name: "worker", + Assessment: assessmentStateExcluded, + Completion: 0, + NodesOverview: nodesOverviewDisplayData{ + Total: 1, + Available: 1, + Excluded: 1, + Outdated: 1, + }, + Nodes: []nodeDisplayData{ + { + Name: "a", + Assessment: nodeAssessmentExcluded, + Phase: phaseStatePaused, + Version: oldOCPVersion, + Estimate: "?", + Message: "", + }, + }, + }, + }, + expectedUpdateInsight: []updateInsight{ + { + impact: updateInsightImpact{ + level: warningImpactLevel, + impactType: updateStalledImpactType, + summary: "Worker pool worker is paused | Outdated nodes in a paused pool will not be updated.", + }, + scope: updateInsightScope{ + scopeType: scopeTypeWorkerPool, + resources: []scopeResource{{kind: scopeKindMachineConfigPool, name: "worker"}}, + }, + }, + }, + }, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + updateInsight := machineConfigPoolInsights(tc.args.poolDisplay, tc.args.pool) + if diff := cmp.Diff(tc.expectedUpdateInsight, updateInsight, allowUnexportedInsightStructs); diff != "" { + t.Errorf("updateInsight differ from expected:\n%s", diff) + } + }) + } +} diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_containerruntimeconfig.crd.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_containerruntimeconfig.crd.yaml new file mode 100644 index 0000000000..b315836af6 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_containerruntimeconfig.crd.yaml @@ -0,0 +1,140 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: containerruntimeconfigs.machineconfiguration.openshift.io + labels: + "openshift.io/operator-managed": "" + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/1453 + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" +spec: + group: machineconfiguration.openshift.io + names: + kind: ContainerRuntimeConfig + listKind: ContainerRuntimeConfigList + plural: containerruntimeconfigs + singular: containerruntimeconfig + shortNames: + - ctrcfg + scope: Cluster + versions: + - name: v1 + served: true + storage: true + subresources: + status: {} + schema: + openAPIV3Schema: + description: "ContainerRuntimeConfig describes a customized Container Runtime configuration. \n Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer)." + 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: + type: object + spec: + description: ContainerRuntimeConfigSpec defines the desired state of ContainerRuntimeConfig + type: object + required: + - containerRuntimeConfig + properties: + containerRuntimeConfig: + description: ContainerRuntimeConfiguration defines the tuneables of the container runtime + type: object + properties: + defaultRuntime: + description: defaultRuntime is the name of the OCI runtime to be used as the default. + type: string + logLevel: + description: logLevel specifies the verbosity of the logs based on the level it is set to. Options are fatal, panic, error, warn, info, and debug. + type: string + logSizeMax: + description: logSizeMax specifies the Maximum size allowed for the container log file. Negative numbers indicate that no size limit is imposed. If it is positive, it must be >= 8192 to match/exceed conmon's read buffer. + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + overlaySize: + description: 'overlaySize specifies the maximum size of a container image. This flag can be used to set quota on the size of container images. (default: 10GB)' + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + pidsLimit: + description: pidsLimit specifies the maximum number of processes allowed in a container + type: integer + format: int64 + machineConfigPoolSelector: + description: MachineConfigPoolSelector selects which pools the ContainerRuntimeConfig shoud apply to. A nil selector will result in no pools being selected. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + x-kubernetes-map-type: atomic + status: + description: ContainerRuntimeConfigStatus defines the observed state of a ContainerRuntimeConfig + type: object + properties: + conditions: + description: conditions represents the latest available observations of current state. + type: array + items: + description: ContainerRuntimeConfigCondition defines the state of the ContainerRuntimeConfig + type: object + properties: + lastTransitionTime: + description: lastTransitionTime is the time of the last update to the current status object. + type: string + format: date-time + nullable: true + message: + description: message provides additional information about the current condition. This is only to be consumed by humans. + type: string + reason: + description: reason is the reason for the condition's last transition. Reasons are PascalCase + type: string + status: + description: status of the condition, one of True, False, Unknown. + type: string + type: + description: type specifies the state of the operator's reconciliation functionality. + type: string + x-kubernetes-list-type: atomic + observedGeneration: + description: observedGeneration represents the generation observed by the controller. + type: integer + format: int64 diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_controllerconfig-CustomNoUpgrade.crd.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_controllerconfig-CustomNoUpgrade.crd.yaml new file mode 100644 index 0000000000..5b5a66e34b --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_controllerconfig-CustomNoUpgrade.crd.yaml @@ -0,0 +1,1703 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + # name must match the spec fields below, and be in the form: . + name: controllerconfigs.machineconfiguration.openshift.io + labels: + "openshift.io/operator-managed": "" + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/1453 + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + release.openshift.io/feature-set: CustomNoUpgrade +spec: + # group name to use for REST API: /apis// + group: machineconfiguration.openshift.io + # either Namespaced or Cluster + scope: Cluster + names: + # plural name to be used in the URL: /apis/// + plural: controllerconfigs + # singular name to be used as an alias on the CLI and for display + singular: controllerconfig + # kind is normally the PascalCased singular type. Your resource manifests use this. + kind: ControllerConfig + # list of versions supported by this CustomResourceDefinition + versions: + - name: v1 + # Each version can be enabled/disabled by Served flag. + served: true + # One and only one version must be marked as the storage version. + storage: true + subresources: + status: {} + schema: + openAPIV3Schema: + description: "ControllerConfig describes configuration for MachineConfigController. This is currently only used to drive the MachineConfig objects generated by the TemplateController. \n Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer)." + 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: + type: object + spec: + description: ControllerConfigSpec is the spec for ControllerConfig resource. + type: object + required: + - additionalTrustBundle + - baseOSContainerImage + - cloudProviderCAData + - cloudProviderConfig + - clusterDNSIP + - dns + - images + - infra + - ipFamilies + - kubeAPIServerServingCAData + - network + - proxy + - releaseImage + - rootCAData + properties: + additionalTrustBundle: + description: additionalTrustBundle is a certificate bundle that will be added to the nodes trusted certificate store. + type: string + format: byte + nullable: true + baseOSContainerImage: + description: BaseOSContainerImage is the new-format container image for operating system updates. + type: string + baseOSExtensionsContainerImage: + description: BaseOSExtensionsContainerImage is the matching extensions container for the new-format container + type: string + cloudProviderCAData: + description: cloudProvider specifies the cloud provider CA data + type: string + format: byte + nullable: true + cloudProviderConfig: + description: cloudProviderConfig is the configuration for the given cloud provider + type: string + clusterDNSIP: + description: clusterDNSIP is the cluster DNS IP address + type: string + dns: + description: dns holds the cluster dns details + 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 the standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + baseDomain: + description: "baseDomain is the base domain of the cluster. All managed DNS records will be sub-domains of this base. \n For example, given the base domain `openshift.example.com`, an API server DNS record may be created for `cluster-api.openshift.example.com`. \n Once set, this field cannot be changed." + type: string + platform: + description: platform holds configuration specific to the underlying infrastructure provider for DNS. When omitted, this means the user has no opinion and the platform is left to choose reasonable defaults. These defaults are subject to change over time. + type: object + required: + - type + properties: + aws: + description: aws contains DNS configuration specific to the Amazon Web Services cloud provider. + type: object + properties: + privateZoneIAMRole: + description: privateZoneIAMRole contains the ARN of an IAM role that should be assumed when performing operations on the cluster's private hosted zone specified in the cluster DNS config. When left empty, no role should be assumed. + type: string + pattern: ^arn:(aws|aws-cn|aws-us-gov):iam::[0-9]{12}:role\/.*$ + type: + description: "type is the underlying infrastructure provider for the cluster. Allowed values: \"\", \"AWS\". \n Individual components may not support all platforms, and must handle unrecognized platforms with best-effort defaults." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + x-kubernetes-validations: + - rule: self in ['','AWS'] + message: allowed values are '' and 'AWS' + x-kubernetes-validations: + - rule: 'has(self.type) && self.type == ''AWS'' ? has(self.aws) : !has(self.aws)' + message: aws configuration is required when platform is AWS, and forbidden otherwise + privateZone: + description: "privateZone is the location where all the DNS records that are only available internally to the cluster exist. \n If this field is nil, no private records should be created. \n Once set, this field cannot be changed." + type: object + properties: + id: + description: "id is the identifier that can be used to find the DNS hosted zone. \n on AWS zone can be fetched using `ID` as id in [1] on Azure zone can be fetched using `ID` as a pre-determined name in [2], on GCP zone can be fetched using `ID` as a pre-determined name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" + type: string + tags: + description: "tags can be used to query the DNS hosted zone. \n on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" + type: object + additionalProperties: + type: string + publicZone: + description: "publicZone is the location where all the DNS records that are publicly accessible to the internet exist. \n If this field is nil, no public records should be created. \n Once set, this field cannot be changed." + type: object + properties: + id: + description: "id is the identifier that can be used to find the DNS hosted zone. \n on AWS zone can be fetched using `ID` as id in [1] on Azure zone can be fetched using `ID` as a pre-determined name in [2], on GCP zone can be fetched using `ID` as a pre-determined name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" + type: string + tags: + description: "tags can be used to query the DNS hosted zone. \n on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" + type: object + additionalProperties: + type: string + status: + description: status holds observed values from the cluster. They may not be overridden. + type: object + nullable: true + x-kubernetes-embedded-resource: true + etcdDiscoveryDomain: + description: etcdDiscoveryDomain is deprecated, use Infra.Status.EtcdDiscoveryDomain instead + type: string + imageRegistryBundleData: + description: imageRegistryBundleData is the ImageRegistryData + type: array + items: + description: ImageRegistryBundle contains information for writing image registry certificates + type: object + required: + - data + - file + properties: + data: + description: data holds the contents of the bundle that will be written to the file location + type: string + format: byte + file: + description: file holds the name of the file where the bundle will be written to disk + type: string + x-kubernetes-list-type: atomic + imageRegistryBundleUserData: + description: imageRegistryBundleUserData is Image Registry Data provided by the user + type: array + items: + description: ImageRegistryBundle contains information for writing image registry certificates + type: object + required: + - data + - file + properties: + data: + description: data holds the contents of the bundle that will be written to the file location + type: string + format: byte + file: + description: file holds the name of the file where the bundle will be written to disk + type: string + x-kubernetes-list-type: atomic + images: + description: images is map of images that are used by the controller to render templates under ./templates/ + type: object + additionalProperties: + type: string + infra: + description: infra holds the infrastructure details + 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 the standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + cloudConfig: + description: "cloudConfig is a reference to a ConfigMap containing the cloud provider configuration file. This configuration file is used to configure the Kubernetes cloud provider integration when using the built-in cloud provider integration or the external cloud controller manager. The namespace for this config map is openshift-config. \n cloudConfig should only be consumed by the kube_cloud_config controller. The controller is responsible for using the user configuration in the spec for various platforms and combining that with the user provided ConfigMap in this field to create a stitched kube cloud config. The controller generates a ConfigMap `kube-cloud-config` in `openshift-config-managed` namespace with the kube cloud config is stored in `cloud.conf` key. All the clients are expected to use the generated ConfigMap only." + type: object + properties: + key: + description: Key allows pointing to a specific key/value inside of the configmap. This is useful for logical file references. + type: string + name: + type: string + platformSpec: + description: platformSpec holds desired information specific to the underlying infrastructure provider. + type: object + properties: + alibabaCloud: + description: AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider. + type: object + aws: + description: AWS contains settings specific to the Amazon Web Services infrastructure provider. + type: object + properties: + serviceEndpoints: + description: serviceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. There must be only one ServiceEndpoint for a service. + type: array + items: + description: AWSServiceEndpoint store the configuration of a custom url to override existing defaults of AWS Services. + type: object + properties: + name: + description: name is the name of the AWS service. The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html This must be provided and cannot be empty. + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + pattern: ^https:// + x-kubernetes-list-type: atomic + azure: + description: Azure contains settings specific to the Azure infrastructure provider. + type: object + baremetal: + description: BareMetal contains settings specific to the BareMetal platform. + type: object + properties: + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.apiServerInternalIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: apiServerInternalIPs must contain at most one IPv4 address and at most one IPv6 address + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.ingressIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: ingressIPs must contain at most one IPv4 address and at most one IPv6 address + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, for example "10.0.0.0/8" or "fd00::/8". + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' + message: apiServerInternalIPs list is required once set + - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' + message: ingressIPs list is required once set + equinixMetal: + description: EquinixMetal contains settings specific to the Equinix Metal infrastructure provider. + type: object + external: + description: ExternalPlatformType represents generic infrastructure provider. Platform-specific components should be supplemented separately. + type: object + properties: + platformName: + description: PlatformName holds the arbitrary string representing the infrastructure provider name, expected to be set at the installation time. This field is solely for informational and reporting purposes and is not expected to be used for decision-making. + type: string + default: Unknown + x-kubernetes-validations: + - rule: oldSelf == 'Unknown' || self == oldSelf + message: platform name cannot be changed once set + gcp: + description: GCP contains settings specific to the Google Cloud Platform infrastructure provider. + type: object + ibmcloud: + description: IBMCloud contains settings specific to the IBMCloud infrastructure provider. + type: object + kubevirt: + description: Kubevirt contains settings specific to the kubevirt infrastructure provider. + type: object + nutanix: + description: Nutanix contains settings specific to the Nutanix infrastructure provider. + type: object + required: + - prismCentral + - prismElements + properties: + failureDomains: + description: failureDomains configures failure domains information for the Nutanix platform. When set, the failure domains defined here may be used to spread Machines across prism element clusters to improve fault tolerance of the cluster. + type: array + items: + description: NutanixFailureDomain configures failure domain information for the Nutanix platform. + type: object + required: + - cluster + - name + - subnets + properties: + cluster: + description: cluster is to identify the cluster (the Prism Element under management of the Prism Central), in which the Machine's VM will be created. The cluster identifier (uuid or name) can be obtained from the Prism Central console or using the prism_central API. + type: object + required: + - type + properties: + name: + description: name is the resource name in the PC. It cannot be empty if the type is Name. + type: string + type: + description: type is the identifier type to use for this resource. + type: string + enum: + - UUID + - Name + uuid: + description: uuid is the UUID of the resource in the PC. It cannot be empty if the type is UUID. + type: string + x-kubernetes-validations: + - rule: 'has(self.type) && self.type == ''UUID'' ? has(self.uuid) : !has(self.uuid)' + message: uuid configuration is required when type is UUID, and forbidden otherwise + - rule: 'has(self.type) && self.type == ''Name'' ? has(self.name) : !has(self.name)' + message: name configuration is required when type is Name, and forbidden otherwise + name: + description: name defines the unique name of a failure domain. Name is required and must be at most 64 characters in length. It must consist of only lower case alphanumeric characters and hyphens (-). It must start and end with an alphanumeric character. This value is arbitrary and is used to identify the failure domain within the platform. + type: string + maxLength: 64 + minLength: 1 + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?' + subnets: + description: subnets holds a list of identifiers (one or more) of the cluster's network subnets for the Machine's VM to connect to. The subnet identifiers (uuid or name) can be obtained from the Prism Central console or using the prism_central API. + type: array + maxItems: 1 + minItems: 1 + items: + description: NutanixResourceIdentifier holds the identity of a Nutanix PC resource (cluster, image, subnet, etc.) + type: object + required: + - type + properties: + name: + description: name is the resource name in the PC. It cannot be empty if the type is Name. + type: string + type: + description: type is the identifier type to use for this resource. + type: string + enum: + - UUID + - Name + uuid: + description: uuid is the UUID of the resource in the PC. It cannot be empty if the type is UUID. + type: string + x-kubernetes-validations: + - rule: 'has(self.type) && self.type == ''UUID'' ? has(self.uuid) : !has(self.uuid)' + message: uuid configuration is required when type is UUID, and forbidden otherwise + - rule: 'has(self.type) && self.type == ''Name'' ? has(self.name) : !has(self.name)' + message: name configuration is required when type is Name, and forbidden otherwise + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + prismCentral: + description: prismCentral holds the endpoint address and port to access the Nutanix Prism Central. When a cluster-wide proxy is installed, by default, this endpoint will be accessed via the proxy. Should you wish for communication with this endpoint not to be proxied, please add the endpoint to the proxy spec.noProxy list. + type: object + required: + - address + - port + properties: + address: + description: address is the endpoint address (DNS name or IP address) of the Nutanix Prism Central or Element (cluster) + type: string + maxLength: 256 + port: + description: port is the port number to access the Nutanix Prism Central or Element (cluster) + type: integer + format: int32 + maximum: 65535 + minimum: 1 + prismElements: + description: prismElements holds one or more endpoint address and port data to access the Nutanix Prism Elements (clusters) of the Nutanix Prism Central. Currently we only support one Prism Element (cluster) for an OpenShift cluster, where all the Nutanix resources (VMs, subnets, volumes, etc.) used in the OpenShift cluster are located. In the future, we may support Nutanix resources (VMs, etc.) spread over multiple Prism Elements (clusters) of the Prism Central. + type: array + items: + description: NutanixPrismElementEndpoint holds the name and endpoint data for a Prism Element (cluster) + type: object + required: + - endpoint + - name + properties: + endpoint: + description: endpoint holds the endpoint address and port data of the Prism Element (cluster). When a cluster-wide proxy is installed, by default, this endpoint will be accessed via the proxy. Should you wish for communication with this endpoint not to be proxied, please add the endpoint to the proxy spec.noProxy list. + type: object + required: + - address + - port + properties: + address: + description: address is the endpoint address (DNS name or IP address) of the Nutanix Prism Central or Element (cluster) + type: string + maxLength: 256 + port: + description: port is the port number to access the Nutanix Prism Central or Element (cluster) + type: integer + format: int32 + maximum: 65535 + minimum: 1 + name: + description: name is the name of the Prism Element (cluster). This value will correspond with the cluster field configured on other resources (eg Machines, PVCs, etc). + type: string + maxLength: 256 + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + openstack: + description: OpenStack contains settings specific to the OpenStack infrastructure provider. + type: object + properties: + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.apiServerInternalIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: apiServerInternalIPs must contain at most one IPv4 address and at most one IPv6 address + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.ingressIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: ingressIPs must contain at most one IPv4 address and at most one IPv6 address + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, for example "10.0.0.0/8" or "fd00::/8". + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' + message: apiServerInternalIPs list is required once set + - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' + message: ingressIPs list is required once set + ovirt: + description: Ovirt contains settings specific to the oVirt infrastructure provider. + type: object + powervs: + description: PowerVS contains settings specific to the IBM Power Systems Virtual Servers infrastructure provider. + type: object + properties: + serviceEndpoints: + description: serviceEndpoints is a list of custom endpoints which will override the default service endpoints of a Power VS service. + type: array + items: + description: PowervsServiceEndpoint stores the configuration of a custom url to override existing defaults of PowerVS Services. + type: object + required: + - name + - url + properties: + name: + description: name is the name of the Power VS service. Few of the services are IAM - https://cloud.ibm.com/apidocs/iam-identity-token-api ResourceController - https://cloud.ibm.com/apidocs/resource-controller/resource-controller Power Cloud - https://cloud.ibm.com/apidocs/power-cloud + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + format: uri + pattern: ^https:// + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: + description: type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", "OpenStack", "VSphere", "oVirt", "KubeVirt", "EquinixMetal", "PowerVS", "AlibabaCloud", "Nutanix" and "None". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform. + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + vsphere: + description: VSphere contains settings specific to the VSphere infrastructure provider. + type: object + properties: + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.apiServerInternalIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: apiServerInternalIPs must contain at most one IPv4 address and at most one IPv6 address + failureDomains: + description: failureDomains contains the definition of region, zone and the vCenter topology. If this is omitted failure domains (regions and zones) will not be used. + type: array + items: + description: VSpherePlatformFailureDomainSpec holds the region and zone failure domain and the vCenter topology of that failure domain. + type: object + required: + - name + - region + - server + - topology + - zone + properties: + name: + description: name defines the arbitrary but unique name of a failure domain. + type: string + maxLength: 256 + minLength: 1 + region: + description: region defines the name of a region tag that will be attached to a vCenter datacenter. The tag category in vCenter must be named openshift-region. + type: string + maxLength: 80 + minLength: 1 + server: + description: server is the fully-qualified domain name or the IP address of the vCenter server. --- + type: string + maxLength: 255 + minLength: 1 + topology: + description: Topology describes a given failure domain using vSphere constructs + type: object + required: + - computeCluster + - datacenter + - datastore + - networks + properties: + computeCluster: + description: computeCluster the absolute path of the vCenter cluster in which virtual machine will be located. The absolute path is of the form //host/. The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/host/.*? + datacenter: + description: datacenter is the name of vCenter datacenter in which virtual machines will be located. The maximum length of the datacenter name is 80 characters. + type: string + maxLength: 80 + datastore: + description: datastore is the absolute path of the datastore in which the virtual machine is located. The absolute path is of the form //datastore/ The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/datastore/.*? + folder: + description: folder is the absolute path of the folder where virtual machines are located. The absolute path is of the form //vm/. The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/vm/.*? + networks: + description: networks is the list of port group network names within this failure domain. Currently, we only support a single interface per RHCOS virtual machine. The available networks (port groups) can be listed using `govc ls 'network/*'` The single interface should be the absolute path of the form //network/. + type: array + maxItems: 1 + minItems: 1 + items: + type: string + x-kubernetes-list-type: atomic + resourcePool: + description: resourcePool is the absolute path of the resource pool where virtual machines will be created. The absolute path is of the form //host//Resources/. The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/host/.*?/Resources.* + template: + description: "template is the full inventory path of the virtual machine or template that will be cloned when creating new machines in this failure domain. The maximum length of the path is 2048 characters. \n When omitted, the template will be calculated by the control plane machineset operator based on the region and zone defined in VSpherePlatformFailureDomainSpec. For example, for zone=zonea, region=region1, and infrastructure name=test, the template path would be calculated as //vm/test-rhcos-region1-zonea." + type: string + maxLength: 2048 + minLength: 1 + pattern: ^/.*?/vm/.*? + zone: + description: zone defines the name of a zone tag that will be attached to a vCenter cluster. The tag category in vCenter must be named openshift-zone. + type: string + maxLength: 80 + minLength: 1 + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.ingressIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: ingressIPs must contain at most one IPv4 address and at most one IPv6 address + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, for example "10.0.0.0/8" or "fd00::/8". + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeNetworking: + description: nodeNetworking contains the definition of internal and external network constraints for assigning the node's networking. If this field is omitted, networking defaults to the legacy address selection behavior which is to only support a single address and return the first one found. + type: object + properties: + external: + description: external represents the network configuration of the node that is externally routable. + type: object + properties: + excludeNetworkSubnetCidr: + description: excludeNetworkSubnetCidr IP addresses in subnet ranges will be excluded when selecting the IP address from the VirtualMachine's VM for use in the status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: atomic + network: + description: network VirtualMachine's VM Network names that will be used to when searching for status.addresses fields. Note that if internal.networkSubnetCIDR and external.networkSubnetCIDR are not set, then the vNIC associated to this network must only have a single IP address assigned to it. The available networks (port groups) can be listed using `govc ls 'network/*'` + type: string + networkSubnetCidr: + description: networkSubnetCidr IP address on VirtualMachine's network interfaces included in the fields' CIDRs that will be used in respective status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: set + internal: + description: internal represents the network configuration of the node that is routable only within the cluster. + type: object + properties: + excludeNetworkSubnetCidr: + description: excludeNetworkSubnetCidr IP addresses in subnet ranges will be excluded when selecting the IP address from the VirtualMachine's VM for use in the status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: atomic + network: + description: network VirtualMachine's VM Network names that will be used to when searching for status.addresses fields. Note that if internal.networkSubnetCIDR and external.networkSubnetCIDR are not set, then the vNIC associated to this network must only have a single IP address assigned to it. The available networks (port groups) can be listed using `govc ls 'network/*'` + type: string + networkSubnetCidr: + description: networkSubnetCidr IP address on VirtualMachine's network interfaces included in the fields' CIDRs that will be used in respective status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: set + vcenters: + description: vcenters holds the connection details for services to communicate with vCenter. Currently, only a single vCenter is supported. --- + type: array + maxItems: 1 + minItems: 0 + items: + description: VSpherePlatformVCenterSpec stores the vCenter connection fields. This is used by the vSphere CCM. + type: object + required: + - datacenters + - server + properties: + datacenters: + description: The vCenter Datacenters in which the RHCOS vm guests are located. This field will be used by the Cloud Controller Manager. Each datacenter listed here should be used within a topology. + type: array + minItems: 1 + items: + type: string + x-kubernetes-list-type: set + port: + description: port is the TCP port that will be used to communicate to the vCenter endpoint. When omitted, this means the user has no opinion and it is up to the platform to choose a sensible default, which is subject to change over time. + type: integer + format: int32 + maximum: 32767 + minimum: 1 + server: + description: server is the fully-qualified domain name or the IP address of the vCenter server. --- + type: string + maxLength: 255 + x-kubernetes-list-type: atomic + x-kubernetes-validations: + - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' + message: apiServerInternalIPs list is required once set + - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' + message: ingressIPs list is required once set + status: + description: status holds observed values from the cluster. They may not be overridden. + type: object + properties: + apiServerInternalURI: + description: apiServerInternalURL is a valid URI with scheme 'https', address and optionally a port (defaulting to 443). apiServerInternalURL can be used by components like kubelets, to contact the Kubernetes API server using the infrastructure provider rather than Kubernetes networking. + type: string + apiServerURL: + description: apiServerURL is a valid URI with scheme 'https', address and optionally a port (defaulting to 443). apiServerURL can be used by components like the web console to tell users where to find the Kubernetes API. + type: string + controlPlaneTopology: + description: controlPlaneTopology expresses the expectations for operands that normally run on control nodes. The default is 'HighlyAvailable', which represents the behavior operators have in a "normal" cluster. The 'SingleReplica' mode will be used in single-node deployments and the operators should not configure the operand for highly-available operation The 'External' mode indicates that the control plane is hosted externally to the cluster and that its components are not visible within the cluster. + type: string + default: HighlyAvailable + enum: + - HighlyAvailable + - SingleReplica + - External + cpuPartitioning: + description: cpuPartitioning expresses if CPU partitioning is a currently enabled feature in the cluster. CPU Partitioning means that this cluster can support partitioning workloads to specific CPU Sets. Valid values are "None" and "AllNodes". When omitted, the default value is "None". The default value of "None" indicates that no nodes will be setup with CPU partitioning. The "AllNodes" value indicates that all nodes have been setup with CPU partitioning, and can then be further configured via the PerformanceProfile API. + type: string + default: None + enum: + - None + - AllNodes + etcdDiscoveryDomain: + description: 'etcdDiscoveryDomain is the domain used to fetch the SRV records for discovering etcd servers and clients. For more info: https://github.com/etcd-io/etcd/blob/329be66e8b3f9e2e6af83c123ff89297e49ebd15/Documentation/op-guide/clustering.md#dns-discovery deprecated: as of 4.7, this field is no longer set or honored. It will be removed in a future release.' + type: string + infrastructureName: + description: infrastructureName uniquely identifies a cluster with a human friendly name. Once set it should not be changed. Must be of max length 27 and must have only alphanumeric or hyphen characters. + type: string + infrastructureTopology: + description: 'infrastructureTopology expresses the expectations for infrastructure services that do not run on control plane nodes, usually indicated by a node selector for a `role` value other than `master`. The default is ''HighlyAvailable'', which represents the behavior operators have in a "normal" cluster. The ''SingleReplica'' mode will be used in single-node deployments and the operators should not configure the operand for highly-available operation NOTE: External topology mode is not applicable for this field.' + type: string + default: HighlyAvailable + enum: + - HighlyAvailable + - SingleReplica + platform: + description: "platform is the underlying infrastructure provider for the cluster. \n Deprecated: Use platformStatus.type instead." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + platformStatus: + description: platformStatus holds status information specific to the underlying infrastructure provider. + type: object + properties: + alibabaCloud: + description: AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider. + type: object + required: + - region + properties: + region: + description: region specifies the region for Alibaba Cloud resources created for the cluster. + type: string + pattern: ^[0-9A-Za-z-]+$ + resourceGroupID: + description: resourceGroupID is the ID of the resource group for the cluster. + type: string + pattern: ^(rg-[0-9A-Za-z]+)?$ + resourceTags: + description: resourceTags is a list of additional tags to apply to Alibaba Cloud resources created for the cluster. + type: array + maxItems: 20 + items: + description: AlibabaCloudResourceTag is the set of tags to add to apply to resources. + type: object + required: + - key + - value + properties: + key: + description: key is the key of the tag. + type: string + maxLength: 128 + minLength: 1 + value: + description: value is the value of the tag. + type: string + maxLength: 128 + minLength: 1 + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + aws: + description: AWS contains settings specific to the Amazon Web Services infrastructure provider. + type: object + properties: + region: + description: region holds the default AWS region for new AWS resources created by the cluster. + type: string + resourceTags: + description: resourceTags is a list of additional tags to apply to AWS resources created for the cluster. See https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html for information on tagging AWS resources. AWS supports a maximum of 50 tags per resource. OpenShift reserves 25 tags for its use, leaving 25 tags available for the user. + type: array + maxItems: 25 + items: + description: AWSResourceTag is a tag to apply to AWS resources created for the cluster. + type: object + required: + - key + - value + properties: + key: + description: key is the key of the tag + type: string + maxLength: 128 + minLength: 1 + pattern: ^[0-9A-Za-z_.:/=+-@]+$ + value: + description: value is the value of the tag. Some AWS service do not support empty values. Since tags are added to resources in many services, the length of the tag value must meet the requirements of all services. + type: string + maxLength: 256 + minLength: 1 + pattern: ^[0-9A-Za-z_.:/=+-@]+$ + x-kubernetes-list-type: atomic + serviceEndpoints: + description: ServiceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. There must be only one ServiceEndpoint for a service. + type: array + items: + description: AWSServiceEndpoint store the configuration of a custom url to override existing defaults of AWS Services. + type: object + properties: + name: + description: name is the name of the AWS service. The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html This must be provided and cannot be empty. + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + pattern: ^https:// + x-kubernetes-list-type: atomic + azure: + description: Azure contains settings specific to the Azure infrastructure provider. + type: object + properties: + armEndpoint: + description: armEndpoint specifies a URL to use for resource management in non-soverign clouds such as Azure Stack. + type: string + cloudName: + description: cloudName is the name of the Azure cloud environment which can be used to configure the Azure SDK with the appropriate Azure API endpoints. If empty, the value is equal to `AzurePublicCloud`. + type: string + enum: + - "" + - AzurePublicCloud + - AzureUSGovernmentCloud + - AzureChinaCloud + - AzureGermanCloud + - AzureStackCloud + networkResourceGroupName: + description: networkResourceGroupName is the Resource Group for network resources like the Virtual Network and Subnets used by the cluster. If empty, the value is same as ResourceGroupName. + type: string + resourceGroupName: + description: resourceGroupName is the Resource Group for new Azure resources created for the cluster. + type: string + resourceTags: + description: resourceTags is a list of additional tags to apply to Azure resources created for the cluster. See https://docs.microsoft.com/en-us/rest/api/resources/tags for information on tagging Azure resources. Due to limitations on Automation, Content Delivery Network, DNS Azure resources, a maximum of 15 tags may be applied. OpenShift reserves 5 tags for internal use, allowing 10 tags for user configuration. + type: array + maxItems: 10 + items: + description: AzureResourceTag is a tag to apply to Azure resources created for the cluster. + type: object + required: + - key + - value + properties: + key: + description: key is the key part of the tag. A tag key can have a maximum of 128 characters and cannot be empty. Key must begin with a letter, end with a letter, number or underscore, and must contain only alphanumeric characters and the following special characters `_ . -`. + type: string + maxLength: 128 + minLength: 1 + pattern: ^[a-zA-Z]([0-9A-Za-z_.-]*[0-9A-Za-z_])?$ + value: + description: 'value is the value part of the tag. A tag value can have a maximum of 256 characters and cannot be empty. Value must contain only alphanumeric characters and the following special characters `_ + , - . / : ; < = > ? @`.' + type: string + maxLength: 256 + minLength: 1 + pattern: ^[0-9A-Za-z_.=+-@]+$ + x-kubernetes-list-type: atomic + x-kubernetes-validations: + - rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + message: resourceTags are immutable and may only be configured during installation + x-kubernetes-validations: + - rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) || has(oldSelf.resourceTags) && has(self.resourceTags)' + message: resourceTags may only be configured during installation + baremetal: + description: BareMetal contains settings specific to the BareMetal platform. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + loadBalancer: + description: loadBalancer defines how the load balancer used by the cluster is configured. + type: object + default: + type: OpenShiftManagedDefault + properties: + type: + description: type defines the type of load balancer used by the cluster on BareMetal platform which can be a user-managed or openshift-managed load balancer that is to be used for the OpenShift API and Ingress endpoints. When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing defined in the machine config operator will be deployed. When set to UserManaged these static pods will not be deployed and it is expected that the load balancer is configured out of band by the deployer. When omitted, this means no opinion and the platform is left to choose a reasonable default. The default value is OpenShiftManagedDefault. + type: string + default: OpenShiftManagedDefault + enum: + - OpenShiftManagedDefault + - UserManaged + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: type is immutable once set + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for BareMetal deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster. + type: string + equinixMetal: + description: EquinixMetal contains settings specific to the Equinix Metal infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. + type: string + ingressIP: + description: ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + type: string + external: + description: External contains settings specific to the generic External infrastructure provider. + type: object + properties: + cloudControllerManager: + description: cloudControllerManager contains settings specific to the external Cloud Controller Manager (a.k.a. CCM or CPI). When omitted, new nodes will be not tainted and no extra initialization from the cloud controller manager is expected. + type: object + properties: + state: + description: "state determines whether or not an external Cloud Controller Manager is expected to be installed within the cluster. https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/#running-cloud-controller-manager \n Valid values are \"External\", \"None\" and omitted. When set to \"External\", new nodes will be tainted as uninitialized when created, preventing them from running workloads until they are initialized by the cloud controller manager. When omitted or set to \"None\", new nodes will be not tainted and no extra initialization from the cloud controller manager is expected." + type: string + enum: + - "" + - External + - None + x-kubernetes-validations: + - rule: self == oldSelf + message: state is immutable once set + x-kubernetes-validations: + - rule: (has(self.state) == has(oldSelf.state)) || (!has(oldSelf.state) && self.state != "External") + message: state may not be added or removed once set + x-kubernetes-validations: + - rule: has(self.cloudControllerManager) == has(oldSelf.cloudControllerManager) + message: cloudControllerManager may not be added or removed once set + gcp: + description: GCP contains settings specific to the Google Cloud Platform infrastructure provider. + type: object + properties: + cloudLoadBalancerConfig: + description: cloudLoadBalancerConfig is a union that contains the IP addresses of API, API-Int and Ingress Load Balancers created on the cloud platform. These values would not be populated on on-prem platforms. These Load Balancer IPs are used to configure the in-cluster DNS instances for API, API-Int and Ingress services. `dnsType` is expected to be set to `ClusterHosted` when these Load Balancer IP addresses are populated and used. + type: object + default: + dnsType: PlatformDefault + properties: + clusterHosted: + description: clusterHosted holds the IP addresses of API, API-Int and Ingress Load Balancers on Cloud Platforms. The DNS solution hosted within the cluster use these IP addresses to provide resolution for API, API-Int and Ingress services. + type: object + properties: + apiIntLoadBalancerIPs: + description: apiIntLoadBalancerIPs holds Load Balancer IPs for the internal API service. These Load Balancer IP addresses can be IPv4 and/or IPv6 addresses. Entries in the apiIntLoadBalancerIPs must be unique. A maximum of 16 IP addresses are permitted. + type: array + format: ip + maxItems: 16 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + apiLoadBalancerIPs: + description: apiLoadBalancerIPs holds Load Balancer IPs for the API service. These Load Balancer IP addresses can be IPv4 and/or IPv6 addresses. Could be empty for private clusters. Entries in the apiLoadBalancerIPs must be unique. A maximum of 16 IP addresses are permitted. + type: array + format: ip + maxItems: 16 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + ingressLoadBalancerIPs: + description: ingressLoadBalancerIPs holds IPs for Ingress Load Balancers. These Load Balancer IP addresses can be IPv4 and/or IPv6 addresses. Entries in the ingressLoadBalancerIPs must be unique. A maximum of 16 IP addresses are permitted. + type: array + format: ip + maxItems: 16 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + dnsType: + description: dnsType indicates the type of DNS solution in use within the cluster. Its default value of `PlatformDefault` indicates that the cluster's DNS is the default provided by the cloud platform. It can be set to `ClusterHosted` to bypass the configuration of the cloud default DNS. In this mode, the cluster needs to provide a self-hosted DNS solution for the cluster's installation to succeed. The cluster's use of the cloud's Load Balancers is unaffected by this setting. The value is immutable after it has been set at install time. Currently, there is no way for the customer to add additional DNS entries into the cluster hosted DNS. Enabling this functionality allows the user to start their own DNS solution outside the cluster after installation is complete. The customer would be responsible for configuring this custom DNS solution, and it can be run in addition to the in-cluster DNS solution. + type: string + default: PlatformDefault + enum: + - ClusterHosted + - PlatformDefault + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: dnsType is immutable + nullable: true + x-kubernetes-validations: + - rule: 'has(self.dnsType) && self.dnsType != ''ClusterHosted'' ? !has(self.clusterHosted) : true' + message: clusterHosted is permitted only when dnsType is ClusterHosted + projectID: + description: resourceGroupName is the Project ID for new GCP resources created for the cluster. + type: string + region: + description: region holds the region for new GCP resources created for the cluster. + type: string + resourceLabels: + description: resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, allowing 32 labels for user configuration. + type: array + maxItems: 32 + items: + description: GCPResourceLabel is a label to apply to GCP resources created for the cluster. + type: object + required: + - key + - value + properties: + key: + description: key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` and `openshift-io`. + type: string + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + x-kubernetes-validations: + - rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' + message: label keys must not start with either `openshift-io` or `kubernetes-io` + value: + description: value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + type: string + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + message: resourceLabels are immutable and may only be configured during installation + resourceTags: + description: resourceTags is a list of additional tags to apply to GCP resources created for the cluster. See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on tagging GCP resources. GCP supports a maximum of 50 tags per resource. + type: array + maxItems: 50 + items: + description: GCPResourceTag is a tag to apply to GCP resources created for the cluster. + type: object + required: + - key + - parentID + - value + properties: + key: + description: key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase alphanumeric characters, and the following special characters `._-`. + type: string + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + parentID: + description: 'parentID is the ID of the hierarchical resource where the tags are defined, e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, and hyphens, and must start with a letter, and cannot end with a hyphen.' + type: string + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + value: + description: value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + type: string + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + message: resourceTags are immutable and may only be configured during installation + x-kubernetes-validations: + - rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + message: resourceLabels may only be configured during installation + - rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) || has(oldSelf.resourceTags) && has(self.resourceTags)' + message: resourceTags may only be configured during installation + ibmcloud: + description: IBMCloud contains settings specific to the IBMCloud infrastructure provider. + type: object + properties: + cisInstanceCRN: + description: CISInstanceCRN is the CRN of the Cloud Internet Services instance managing the DNS zone for the cluster's base domain + type: string + dnsInstanceCRN: + description: DNSInstanceCRN is the CRN of the DNS Services instance managing the DNS zone for the cluster's base domain + type: string + location: + description: Location is where the cluster has been deployed + type: string + providerType: + description: ProviderType indicates the type of cluster that was created + type: string + resourceGroupName: + description: ResourceGroupName is the Resource Group for new IBMCloud resources created for the cluster. + type: string + serviceEndpoints: + description: serviceEndpoints is a list of custom endpoints which will override the default service endpoints of an IBM Cloud service. These endpoints are consumed by components within the cluster to reach the respective IBM Cloud Services. + type: array + items: + description: IBMCloudServiceEndpoint stores the configuration of a custom url to override existing defaults of IBM Cloud Services. + type: object + required: + - name + - url + properties: + name: + description: 'name is the name of the IBM Cloud service. Possible values are: CIS, COS, DNSServices, GlobalSearch, GlobalTagging, HyperProtect, IAM, KeyProtect, ResourceController, ResourceManager, or VPC. For example, the IBM Cloud Private IAM service could be configured with the service `name` of `IAM` and `url` of `https://private.iam.cloud.ibm.com` Whereas the IBM Cloud Private VPC service for US South (Dallas) could be configured with the service `name` of `VPC` and `url` of `https://us.south.private.iaas.cloud.ibm.com`' + type: string + enum: + - CIS + - COS + - DNSServices + - GlobalSearch + - GlobalTagging + - HyperProtect + - IAM + - KeyProtect + - ResourceController + - ResourceManager + - VPC + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + x-kubernetes-validations: + - rule: isURL(self) + message: url must be a valid absolute URL + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + kubevirt: + description: Kubevirt contains settings specific to the kubevirt infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. + type: string + ingressIP: + description: ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + type: string + nutanix: + description: Nutanix contains settings specific to the Nutanix infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + loadBalancer: + description: loadBalancer defines how the load balancer used by the cluster is configured. + type: object + default: + type: OpenShiftManagedDefault + properties: + type: + description: type defines the type of load balancer used by the cluster on Nutanix platform which can be a user-managed or openshift-managed load balancer that is to be used for the OpenShift API and Ingress endpoints. When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing defined in the machine config operator will be deployed. When set to UserManaged these static pods will not be deployed and it is expected that the load balancer is configured out of band by the deployer. When omitted, this means no opinion and the platform is left to choose a reasonable default. The default value is OpenShiftManagedDefault. + type: string + default: OpenShiftManagedDefault + enum: + - OpenShiftManagedDefault + - UserManaged + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: type is immutable once set + openstack: + description: OpenStack contains settings specific to the OpenStack infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + cloudName: + description: cloudName is the name of the desired OpenStack cloud in the client configuration file (`clouds.yaml`). + type: string + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + loadBalancer: + description: loadBalancer defines how the load balancer used by the cluster is configured. + type: object + default: + type: OpenShiftManagedDefault + properties: + type: + description: type defines the type of load balancer used by the cluster on OpenStack platform which can be a user-managed or openshift-managed load balancer that is to be used for the OpenShift API and Ingress endpoints. When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing defined in the machine config operator will be deployed. When set to UserManaged these static pods will not be deployed and it is expected that the load balancer is configured out of band by the deployer. When omitted, this means no opinion and the platform is left to choose a reasonable default. The default value is OpenShiftManagedDefault. + type: string + default: OpenShiftManagedDefault + enum: + - OpenShiftManagedDefault + - UserManaged + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: type is immutable once set + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for OpenStack deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster. + type: string + ovirt: + description: Ovirt contains settings specific to the oVirt infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + loadBalancer: + description: loadBalancer defines how the load balancer used by the cluster is configured. + type: object + default: + type: OpenShiftManagedDefault + properties: + type: + description: type defines the type of load balancer used by the cluster on Ovirt platform which can be a user-managed or openshift-managed load balancer that is to be used for the OpenShift API and Ingress endpoints. When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing defined in the machine config operator will be deployed. When set to UserManaged these static pods will not be deployed and it is expected that the load balancer is configured out of band by the deployer. When omitted, this means no opinion and the platform is left to choose a reasonable default. The default value is OpenShiftManagedDefault. + type: string + default: OpenShiftManagedDefault + enum: + - OpenShiftManagedDefault + - UserManaged + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: type is immutable once set + nodeDNSIP: + description: 'deprecated: as of 4.6, this field is no longer set or honored. It will be removed in a future release.' + type: string + powervs: + description: PowerVS contains settings specific to the Power Systems Virtual Servers infrastructure provider. + type: object + properties: + cisInstanceCRN: + description: CISInstanceCRN is the CRN of the Cloud Internet Services instance managing the DNS zone for the cluster's base domain + type: string + dnsInstanceCRN: + description: DNSInstanceCRN is the CRN of the DNS Services instance managing the DNS zone for the cluster's base domain + type: string + region: + description: region holds the default Power VS region for new Power VS resources created by the cluster. + type: string + resourceGroup: + description: 'resourceGroup is the resource group name for new IBMCloud resources created for a cluster. The resource group specified here will be used by cluster-image-registry-operator to set up a COS Instance in IBMCloud for the cluster registry. More about resource groups can be found here: https://cloud.ibm.com/docs/account?topic=account-rgs. When omitted, the image registry operator won''t be able to configure storage, which results in the image registry cluster operator not being in an available state.' + type: string + maxLength: 40 + pattern: ^[a-zA-Z0-9-_ ]+$ + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: resourceGroup is immutable once set + serviceEndpoints: + description: serviceEndpoints is a list of custom endpoints which will override the default service endpoints of a Power VS service. + type: array + items: + description: PowervsServiceEndpoint stores the configuration of a custom url to override existing defaults of PowerVS Services. + type: object + required: + - name + - url + properties: + name: + description: name is the name of the Power VS service. Few of the services are IAM - https://cloud.ibm.com/apidocs/iam-identity-token-api ResourceController - https://cloud.ibm.com/apidocs/resource-controller/resource-controller Power Cloud - https://cloud.ibm.com/apidocs/power-cloud + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + format: uri + pattern: ^https:// + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + zone: + description: 'zone holds the default zone for the new Power VS resources created by the cluster. Note: Currently only single-zone OCP clusters are supported' + type: string + x-kubernetes-validations: + - rule: '!has(oldSelf.resourceGroup) || has(self.resourceGroup)' + message: cannot unset resourceGroup once set + type: + description: "type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", \"VSphere\", \"oVirt\", \"EquinixMetal\", \"PowerVS\", \"AlibabaCloud\", \"Nutanix\" and \"None\". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform. \n This value will be synced with to the `status.platform` and `status.platformStatus.type`. Currently this value cannot be changed once set." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + vsphere: + description: VSphere contains settings specific to the VSphere infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + loadBalancer: + description: loadBalancer defines how the load balancer used by the cluster is configured. + type: object + default: + type: OpenShiftManagedDefault + properties: + type: + description: type defines the type of load balancer used by the cluster on VSphere platform which can be a user-managed or openshift-managed load balancer that is to be used for the OpenShift API and Ingress endpoints. When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing defined in the machine config operator will be deployed. When set to UserManaged these static pods will not be deployed and it is expected that the load balancer is configured out of band by the deployer. When omitted, this means no opinion and the platform is left to choose a reasonable default. The default value is OpenShiftManagedDefault. + type: string + default: OpenShiftManagedDefault + enum: + - OpenShiftManagedDefault + - UserManaged + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: type is immutable once set + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for vSphere deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster. + type: string + nullable: true + x-kubernetes-embedded-resource: true + internalRegistryPullSecret: + description: internalRegistryPullSecret is the pull secret for the internal registry, used by rpm-ostree to pull images from the internal registry if present + type: string + format: byte + nullable: true + ipFamilies: + description: ipFamilies indicates the IP families in use by the cluster network + type: string + kubeAPIServerServingCAData: + description: kubeAPIServerServingCAData managed Kubelet to API Server Cert... Rotated automatically + type: string + format: byte + network: + description: Network contains additional network related information + type: object + required: + - mtuMigration + properties: + mtuMigration: + description: MTUMigration contains the MTU migration configuration. + type: object + properties: + machine: + description: Machine contains MTU migration configuration for the machine's uplink. + type: object + properties: + from: + description: From is the MTU to migrate from. + type: integer + format: int32 + minimum: 0 + to: + description: To is the MTU to migrate to. + type: integer + format: int32 + minimum: 0 + network: + description: Network contains MTU migration configuration for the default network. + type: object + properties: + from: + description: From is the MTU to migrate from. + type: integer + format: int32 + minimum: 0 + to: + description: To is the MTU to migrate to. + type: integer + format: int32 + minimum: 0 + nullable: true + nullable: true + networkType: + description: 'networkType holds the type of network the cluster is using XXX: this is temporary and will be dropped as soon as possible in favor of a better support to start network related services the proper way. Nobody is also changing this once the cluster is up and running the first time, so, disallow regeneration if this changes.' + type: string + osImageURL: + description: OSImageURL is the old-format container image that contains the OS update payload. + type: string + platform: + description: platform is deprecated, use Infra.Status.PlatformStatus.Type instead + type: string + proxy: + description: proxy holds the current proxy configuration for the nodes + type: object + properties: + httpProxy: + description: httpProxy is the URL of the proxy for HTTP requests. + type: string + httpsProxy: + description: httpsProxy is the URL of the proxy for HTTPS requests. + type: string + noProxy: + description: noProxy is a comma-separated list of hostnames and/or CIDRs for which the proxy should not be used. + type: string + nullable: true + pullSecret: + description: pullSecret is the default pull secret that needs to be installed on all machines. + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + x-kubernetes-map-type: atomic + releaseImage: + description: releaseImage is the image used when installing the cluster + type: string + rootCAData: + description: rootCAData specifies the root CA data + type: string + format: byte + status: + description: ControllerConfigStatus is the status for ControllerConfig + type: object + properties: + conditions: + description: conditions represents the latest available observations of current state. + type: array + items: + description: ControllerConfigStatusCondition contains condition information for ControllerConfigStatus + type: object + required: + - lastTransitionTime + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the time of the last update to the current status object. + type: string + format: date-time + nullable: true + message: + description: message provides additional information about the current condition. This is only to be consumed by humans. + type: string + reason: + description: reason is the reason for the condition's last transition. Reasons are PascalCase + type: string + status: + description: status of the condition, one of True, False, Unknown. + type: string + type: + description: type specifies the state of the operator's reconciliation functionality. + type: string + x-kubernetes-list-type: atomic + controllerCertificates: + description: controllerCertificates represents the latest available observations of the automatically rotating certificates in the MCO. + type: array + items: + description: ControllerCertificate contains info about a specific cert. + type: object + required: + - bundleFile + - signer + - subject + properties: + bundleFile: + description: bundleFile is the larger bundle a cert comes from + type: string + notAfter: + description: notAfter is the upper boundary for validity + type: string + format: date-time + notBefore: + description: notBefore is the lower boundary for validity + type: string + format: date-time + signer: + description: signer is the cert Issuer + type: string + subject: + description: subject is the cert subject + type: string + x-kubernetes-list-type: atomic + observedGeneration: + description: observedGeneration represents the generation observed by the controller. + type: integer + format: int64 diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_controllerconfig-Default.crd.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_controllerconfig-Default.crd.yaml new file mode 100644 index 0000000000..d4a3cd4666 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_controllerconfig-Default.crd.yaml @@ -0,0 +1,1506 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + # name must match the spec fields below, and be in the form: . + name: controllerconfigs.machineconfiguration.openshift.io + labels: + "openshift.io/operator-managed": "" + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/1453 + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + release.openshift.io/feature-set: Default +spec: + # group name to use for REST API: /apis// + group: machineconfiguration.openshift.io + # either Namespaced or Cluster + scope: Cluster + names: + # plural name to be used in the URL: /apis/// + plural: controllerconfigs + # singular name to be used as an alias on the CLI and for display + singular: controllerconfig + # kind is normally the PascalCased singular type. Your resource manifests use this. + kind: ControllerConfig + # list of versions supported by this CustomResourceDefinition + versions: + - name: v1 + # Each version can be enabled/disabled by Served flag. + served: true + # One and only one version must be marked as the storage version. + storage: true + subresources: + status: {} + schema: + openAPIV3Schema: + description: "ControllerConfig describes configuration for MachineConfigController. This is currently only used to drive the MachineConfig objects generated by the TemplateController. \n Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer)." + 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: + type: object + spec: + description: ControllerConfigSpec is the spec for ControllerConfig resource. + type: object + required: + - additionalTrustBundle + - baseOSContainerImage + - cloudProviderCAData + - cloudProviderConfig + - clusterDNSIP + - dns + - images + - infra + - ipFamilies + - kubeAPIServerServingCAData + - network + - proxy + - releaseImage + - rootCAData + properties: + additionalTrustBundle: + description: additionalTrustBundle is a certificate bundle that will be added to the nodes trusted certificate store. + type: string + format: byte + nullable: true + baseOSContainerImage: + description: BaseOSContainerImage is the new-format container image for operating system updates. + type: string + baseOSExtensionsContainerImage: + description: BaseOSExtensionsContainerImage is the matching extensions container for the new-format container + type: string + cloudProviderCAData: + description: cloudProvider specifies the cloud provider CA data + type: string + format: byte + nullable: true + cloudProviderConfig: + description: cloudProviderConfig is the configuration for the given cloud provider + type: string + clusterDNSIP: + description: clusterDNSIP is the cluster DNS IP address + type: string + dns: + description: dns holds the cluster dns details + 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 the standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + baseDomain: + description: "baseDomain is the base domain of the cluster. All managed DNS records will be sub-domains of this base. \n For example, given the base domain `openshift.example.com`, an API server DNS record may be created for `cluster-api.openshift.example.com`. \n Once set, this field cannot be changed." + type: string + platform: + description: platform holds configuration specific to the underlying infrastructure provider for DNS. When omitted, this means the user has no opinion and the platform is left to choose reasonable defaults. These defaults are subject to change over time. + type: object + required: + - type + properties: + aws: + description: aws contains DNS configuration specific to the Amazon Web Services cloud provider. + type: object + properties: + privateZoneIAMRole: + description: privateZoneIAMRole contains the ARN of an IAM role that should be assumed when performing operations on the cluster's private hosted zone specified in the cluster DNS config. When left empty, no role should be assumed. + type: string + pattern: ^arn:(aws|aws-cn|aws-us-gov):iam::[0-9]{12}:role\/.*$ + type: + description: "type is the underlying infrastructure provider for the cluster. Allowed values: \"\", \"AWS\". \n Individual components may not support all platforms, and must handle unrecognized platforms with best-effort defaults." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + x-kubernetes-validations: + - rule: self in ['','AWS'] + message: allowed values are '' and 'AWS' + x-kubernetes-validations: + - rule: 'has(self.type) && self.type == ''AWS'' ? has(self.aws) : !has(self.aws)' + message: aws configuration is required when platform is AWS, and forbidden otherwise + privateZone: + description: "privateZone is the location where all the DNS records that are only available internally to the cluster exist. \n If this field is nil, no private records should be created. \n Once set, this field cannot be changed." + type: object + properties: + id: + description: "id is the identifier that can be used to find the DNS hosted zone. \n on AWS zone can be fetched using `ID` as id in [1] on Azure zone can be fetched using `ID` as a pre-determined name in [2], on GCP zone can be fetched using `ID` as a pre-determined name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" + type: string + tags: + description: "tags can be used to query the DNS hosted zone. \n on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" + type: object + additionalProperties: + type: string + publicZone: + description: "publicZone is the location where all the DNS records that are publicly accessible to the internet exist. \n If this field is nil, no public records should be created. \n Once set, this field cannot be changed." + type: object + properties: + id: + description: "id is the identifier that can be used to find the DNS hosted zone. \n on AWS zone can be fetched using `ID` as id in [1] on Azure zone can be fetched using `ID` as a pre-determined name in [2], on GCP zone can be fetched using `ID` as a pre-determined name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" + type: string + tags: + description: "tags can be used to query the DNS hosted zone. \n on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" + type: object + additionalProperties: + type: string + status: + description: status holds observed values from the cluster. They may not be overridden. + type: object + nullable: true + x-kubernetes-embedded-resource: true + etcdDiscoveryDomain: + description: etcdDiscoveryDomain is deprecated, use Infra.Status.EtcdDiscoveryDomain instead + type: string + imageRegistryBundleData: + description: imageRegistryBundleData is the ImageRegistryData + type: array + items: + description: ImageRegistryBundle contains information for writing image registry certificates + type: object + required: + - data + - file + properties: + data: + description: data holds the contents of the bundle that will be written to the file location + type: string + format: byte + file: + description: file holds the name of the file where the bundle will be written to disk + type: string + x-kubernetes-list-type: atomic + imageRegistryBundleUserData: + description: imageRegistryBundleUserData is Image Registry Data provided by the user + type: array + items: + description: ImageRegistryBundle contains information for writing image registry certificates + type: object + required: + - data + - file + properties: + data: + description: data holds the contents of the bundle that will be written to the file location + type: string + format: byte + file: + description: file holds the name of the file where the bundle will be written to disk + type: string + x-kubernetes-list-type: atomic + images: + description: images is map of images that are used by the controller to render templates under ./templates/ + type: object + additionalProperties: + type: string + infra: + description: infra holds the infrastructure details + 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 the standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + cloudConfig: + description: "cloudConfig is a reference to a ConfigMap containing the cloud provider configuration file. This configuration file is used to configure the Kubernetes cloud provider integration when using the built-in cloud provider integration or the external cloud controller manager. The namespace for this config map is openshift-config. \n cloudConfig should only be consumed by the kube_cloud_config controller. The controller is responsible for using the user configuration in the spec for various platforms and combining that with the user provided ConfigMap in this field to create a stitched kube cloud config. The controller generates a ConfigMap `kube-cloud-config` in `openshift-config-managed` namespace with the kube cloud config is stored in `cloud.conf` key. All the clients are expected to use the generated ConfigMap only." + type: object + properties: + key: + description: Key allows pointing to a specific key/value inside of the configmap. This is useful for logical file references. + type: string + name: + type: string + platformSpec: + description: platformSpec holds desired information specific to the underlying infrastructure provider. + type: object + properties: + alibabaCloud: + description: AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider. + type: object + aws: + description: AWS contains settings specific to the Amazon Web Services infrastructure provider. + type: object + properties: + serviceEndpoints: + description: serviceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. There must be only one ServiceEndpoint for a service. + type: array + items: + description: AWSServiceEndpoint store the configuration of a custom url to override existing defaults of AWS Services. + type: object + properties: + name: + description: name is the name of the AWS service. The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html This must be provided and cannot be empty. + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + pattern: ^https:// + x-kubernetes-list-type: atomic + azure: + description: Azure contains settings specific to the Azure infrastructure provider. + type: object + baremetal: + description: BareMetal contains settings specific to the BareMetal platform. + type: object + properties: + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.apiServerInternalIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: apiServerInternalIPs must contain at most one IPv4 address and at most one IPv6 address + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.ingressIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: ingressIPs must contain at most one IPv4 address and at most one IPv6 address + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, for example "10.0.0.0/8" or "fd00::/8". + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' + message: apiServerInternalIPs list is required once set + - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' + message: ingressIPs list is required once set + equinixMetal: + description: EquinixMetal contains settings specific to the Equinix Metal infrastructure provider. + type: object + external: + description: ExternalPlatformType represents generic infrastructure provider. Platform-specific components should be supplemented separately. + type: object + properties: + platformName: + description: PlatformName holds the arbitrary string representing the infrastructure provider name, expected to be set at the installation time. This field is solely for informational and reporting purposes and is not expected to be used for decision-making. + type: string + default: Unknown + x-kubernetes-validations: + - rule: oldSelf == 'Unknown' || self == oldSelf + message: platform name cannot be changed once set + gcp: + description: GCP contains settings specific to the Google Cloud Platform infrastructure provider. + type: object + ibmcloud: + description: IBMCloud contains settings specific to the IBMCloud infrastructure provider. + type: object + kubevirt: + description: Kubevirt contains settings specific to the kubevirt infrastructure provider. + type: object + nutanix: + description: Nutanix contains settings specific to the Nutanix infrastructure provider. + type: object + required: + - prismCentral + - prismElements + properties: + failureDomains: + description: failureDomains configures failure domains information for the Nutanix platform. When set, the failure domains defined here may be used to spread Machines across prism element clusters to improve fault tolerance of the cluster. + type: array + items: + description: NutanixFailureDomain configures failure domain information for the Nutanix platform. + type: object + required: + - cluster + - name + - subnets + properties: + cluster: + description: cluster is to identify the cluster (the Prism Element under management of the Prism Central), in which the Machine's VM will be created. The cluster identifier (uuid or name) can be obtained from the Prism Central console or using the prism_central API. + type: object + required: + - type + properties: + name: + description: name is the resource name in the PC. It cannot be empty if the type is Name. + type: string + type: + description: type is the identifier type to use for this resource. + type: string + enum: + - UUID + - Name + uuid: + description: uuid is the UUID of the resource in the PC. It cannot be empty if the type is UUID. + type: string + x-kubernetes-validations: + - rule: 'has(self.type) && self.type == ''UUID'' ? has(self.uuid) : !has(self.uuid)' + message: uuid configuration is required when type is UUID, and forbidden otherwise + - rule: 'has(self.type) && self.type == ''Name'' ? has(self.name) : !has(self.name)' + message: name configuration is required when type is Name, and forbidden otherwise + name: + description: name defines the unique name of a failure domain. Name is required and must be at most 64 characters in length. It must consist of only lower case alphanumeric characters and hyphens (-). It must start and end with an alphanumeric character. This value is arbitrary and is used to identify the failure domain within the platform. + type: string + maxLength: 64 + minLength: 1 + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?' + subnets: + description: subnets holds a list of identifiers (one or more) of the cluster's network subnets for the Machine's VM to connect to. The subnet identifiers (uuid or name) can be obtained from the Prism Central console or using the prism_central API. + type: array + maxItems: 1 + minItems: 1 + items: + description: NutanixResourceIdentifier holds the identity of a Nutanix PC resource (cluster, image, subnet, etc.) + type: object + required: + - type + properties: + name: + description: name is the resource name in the PC. It cannot be empty if the type is Name. + type: string + type: + description: type is the identifier type to use for this resource. + type: string + enum: + - UUID + - Name + uuid: + description: uuid is the UUID of the resource in the PC. It cannot be empty if the type is UUID. + type: string + x-kubernetes-validations: + - rule: 'has(self.type) && self.type == ''UUID'' ? has(self.uuid) : !has(self.uuid)' + message: uuid configuration is required when type is UUID, and forbidden otherwise + - rule: 'has(self.type) && self.type == ''Name'' ? has(self.name) : !has(self.name)' + message: name configuration is required when type is Name, and forbidden otherwise + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + prismCentral: + description: prismCentral holds the endpoint address and port to access the Nutanix Prism Central. When a cluster-wide proxy is installed, by default, this endpoint will be accessed via the proxy. Should you wish for communication with this endpoint not to be proxied, please add the endpoint to the proxy spec.noProxy list. + type: object + required: + - address + - port + properties: + address: + description: address is the endpoint address (DNS name or IP address) of the Nutanix Prism Central or Element (cluster) + type: string + maxLength: 256 + port: + description: port is the port number to access the Nutanix Prism Central or Element (cluster) + type: integer + format: int32 + maximum: 65535 + minimum: 1 + prismElements: + description: prismElements holds one or more endpoint address and port data to access the Nutanix Prism Elements (clusters) of the Nutanix Prism Central. Currently we only support one Prism Element (cluster) for an OpenShift cluster, where all the Nutanix resources (VMs, subnets, volumes, etc.) used in the OpenShift cluster are located. In the future, we may support Nutanix resources (VMs, etc.) spread over multiple Prism Elements (clusters) of the Prism Central. + type: array + items: + description: NutanixPrismElementEndpoint holds the name and endpoint data for a Prism Element (cluster) + type: object + required: + - endpoint + - name + properties: + endpoint: + description: endpoint holds the endpoint address and port data of the Prism Element (cluster). When a cluster-wide proxy is installed, by default, this endpoint will be accessed via the proxy. Should you wish for communication with this endpoint not to be proxied, please add the endpoint to the proxy spec.noProxy list. + type: object + required: + - address + - port + properties: + address: + description: address is the endpoint address (DNS name or IP address) of the Nutanix Prism Central or Element (cluster) + type: string + maxLength: 256 + port: + description: port is the port number to access the Nutanix Prism Central or Element (cluster) + type: integer + format: int32 + maximum: 65535 + minimum: 1 + name: + description: name is the name of the Prism Element (cluster). This value will correspond with the cluster field configured on other resources (eg Machines, PVCs, etc). + type: string + maxLength: 256 + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + openstack: + description: OpenStack contains settings specific to the OpenStack infrastructure provider. + type: object + properties: + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.apiServerInternalIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: apiServerInternalIPs must contain at most one IPv4 address and at most one IPv6 address + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.ingressIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: ingressIPs must contain at most one IPv4 address and at most one IPv6 address + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, for example "10.0.0.0/8" or "fd00::/8". + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' + message: apiServerInternalIPs list is required once set + - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' + message: ingressIPs list is required once set + ovirt: + description: Ovirt contains settings specific to the oVirt infrastructure provider. + type: object + powervs: + description: PowerVS contains settings specific to the IBM Power Systems Virtual Servers infrastructure provider. + type: object + properties: + serviceEndpoints: + description: serviceEndpoints is a list of custom endpoints which will override the default service endpoints of a Power VS service. + type: array + items: + description: PowervsServiceEndpoint stores the configuration of a custom url to override existing defaults of PowerVS Services. + type: object + required: + - name + - url + properties: + name: + description: name is the name of the Power VS service. Few of the services are IAM - https://cloud.ibm.com/apidocs/iam-identity-token-api ResourceController - https://cloud.ibm.com/apidocs/resource-controller/resource-controller Power Cloud - https://cloud.ibm.com/apidocs/power-cloud + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + format: uri + pattern: ^https:// + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: + description: type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", "OpenStack", "VSphere", "oVirt", "KubeVirt", "EquinixMetal", "PowerVS", "AlibabaCloud", "Nutanix" and "None". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform. + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + vsphere: + description: VSphere contains settings specific to the VSphere infrastructure provider. + type: object + properties: + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.apiServerInternalIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: apiServerInternalIPs must contain at most one IPv4 address and at most one IPv6 address + failureDomains: + description: failureDomains contains the definition of region, zone and the vCenter topology. If this is omitted failure domains (regions and zones) will not be used. + type: array + items: + description: VSpherePlatformFailureDomainSpec holds the region and zone failure domain and the vCenter topology of that failure domain. + type: object + required: + - name + - region + - server + - topology + - zone + properties: + name: + description: name defines the arbitrary but unique name of a failure domain. + type: string + maxLength: 256 + minLength: 1 + region: + description: region defines the name of a region tag that will be attached to a vCenter datacenter. The tag category in vCenter must be named openshift-region. + type: string + maxLength: 80 + minLength: 1 + server: + description: server is the fully-qualified domain name or the IP address of the vCenter server. --- + type: string + maxLength: 255 + minLength: 1 + topology: + description: Topology describes a given failure domain using vSphere constructs + type: object + required: + - computeCluster + - datacenter + - datastore + - networks + properties: + computeCluster: + description: computeCluster the absolute path of the vCenter cluster in which virtual machine will be located. The absolute path is of the form //host/. The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/host/.*? + datacenter: + description: datacenter is the name of vCenter datacenter in which virtual machines will be located. The maximum length of the datacenter name is 80 characters. + type: string + maxLength: 80 + datastore: + description: datastore is the absolute path of the datastore in which the virtual machine is located. The absolute path is of the form //datastore/ The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/datastore/.*? + folder: + description: folder is the absolute path of the folder where virtual machines are located. The absolute path is of the form //vm/. The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/vm/.*? + networks: + description: networks is the list of port group network names within this failure domain. Currently, we only support a single interface per RHCOS virtual machine. The available networks (port groups) can be listed using `govc ls 'network/*'` The single interface should be the absolute path of the form //network/. + type: array + maxItems: 1 + minItems: 1 + items: + type: string + x-kubernetes-list-type: atomic + resourcePool: + description: resourcePool is the absolute path of the resource pool where virtual machines will be created. The absolute path is of the form //host//Resources/. The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/host/.*?/Resources.* + zone: + description: zone defines the name of a zone tag that will be attached to a vCenter cluster. The tag category in vCenter must be named openshift-zone. + type: string + maxLength: 80 + minLength: 1 + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.ingressIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: ingressIPs must contain at most one IPv4 address and at most one IPv6 address + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, for example "10.0.0.0/8" or "fd00::/8". + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeNetworking: + description: nodeNetworking contains the definition of internal and external network constraints for assigning the node's networking. If this field is omitted, networking defaults to the legacy address selection behavior which is to only support a single address and return the first one found. + type: object + properties: + external: + description: external represents the network configuration of the node that is externally routable. + type: object + properties: + excludeNetworkSubnetCidr: + description: excludeNetworkSubnetCidr IP addresses in subnet ranges will be excluded when selecting the IP address from the VirtualMachine's VM for use in the status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: atomic + network: + description: network VirtualMachine's VM Network names that will be used to when searching for status.addresses fields. Note that if internal.networkSubnetCIDR and external.networkSubnetCIDR are not set, then the vNIC associated to this network must only have a single IP address assigned to it. The available networks (port groups) can be listed using `govc ls 'network/*'` + type: string + networkSubnetCidr: + description: networkSubnetCidr IP address on VirtualMachine's network interfaces included in the fields' CIDRs that will be used in respective status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: set + internal: + description: internal represents the network configuration of the node that is routable only within the cluster. + type: object + properties: + excludeNetworkSubnetCidr: + description: excludeNetworkSubnetCidr IP addresses in subnet ranges will be excluded when selecting the IP address from the VirtualMachine's VM for use in the status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: atomic + network: + description: network VirtualMachine's VM Network names that will be used to when searching for status.addresses fields. Note that if internal.networkSubnetCIDR and external.networkSubnetCIDR are not set, then the vNIC associated to this network must only have a single IP address assigned to it. The available networks (port groups) can be listed using `govc ls 'network/*'` + type: string + networkSubnetCidr: + description: networkSubnetCidr IP address on VirtualMachine's network interfaces included in the fields' CIDRs that will be used in respective status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: set + vcenters: + description: vcenters holds the connection details for services to communicate with vCenter. Currently, only a single vCenter is supported. --- + type: array + maxItems: 1 + minItems: 0 + items: + description: VSpherePlatformVCenterSpec stores the vCenter connection fields. This is used by the vSphere CCM. + type: object + required: + - datacenters + - server + properties: + datacenters: + description: The vCenter Datacenters in which the RHCOS vm guests are located. This field will be used by the Cloud Controller Manager. Each datacenter listed here should be used within a topology. + type: array + minItems: 1 + items: + type: string + x-kubernetes-list-type: set + port: + description: port is the TCP port that will be used to communicate to the vCenter endpoint. When omitted, this means the user has no opinion and it is up to the platform to choose a sensible default, which is subject to change over time. + type: integer + format: int32 + maximum: 32767 + minimum: 1 + server: + description: server is the fully-qualified domain name or the IP address of the vCenter server. --- + type: string + maxLength: 255 + x-kubernetes-list-type: atomic + x-kubernetes-validations: + - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' + message: apiServerInternalIPs list is required once set + - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' + message: ingressIPs list is required once set + status: + description: status holds observed values from the cluster. They may not be overridden. + type: object + properties: + apiServerInternalURI: + description: apiServerInternalURL is a valid URI with scheme 'https', address and optionally a port (defaulting to 443). apiServerInternalURL can be used by components like kubelets, to contact the Kubernetes API server using the infrastructure provider rather than Kubernetes networking. + type: string + apiServerURL: + description: apiServerURL is a valid URI with scheme 'https', address and optionally a port (defaulting to 443). apiServerURL can be used by components like the web console to tell users where to find the Kubernetes API. + type: string + controlPlaneTopology: + description: controlPlaneTopology expresses the expectations for operands that normally run on control nodes. The default is 'HighlyAvailable', which represents the behavior operators have in a "normal" cluster. The 'SingleReplica' mode will be used in single-node deployments and the operators should not configure the operand for highly-available operation The 'External' mode indicates that the control plane is hosted externally to the cluster and that its components are not visible within the cluster. + type: string + default: HighlyAvailable + enum: + - HighlyAvailable + - SingleReplica + - External + cpuPartitioning: + description: cpuPartitioning expresses if CPU partitioning is a currently enabled feature in the cluster. CPU Partitioning means that this cluster can support partitioning workloads to specific CPU Sets. Valid values are "None" and "AllNodes". When omitted, the default value is "None". The default value of "None" indicates that no nodes will be setup with CPU partitioning. The "AllNodes" value indicates that all nodes have been setup with CPU partitioning, and can then be further configured via the PerformanceProfile API. + type: string + default: None + enum: + - None + - AllNodes + etcdDiscoveryDomain: + description: 'etcdDiscoveryDomain is the domain used to fetch the SRV records for discovering etcd servers and clients. For more info: https://github.com/etcd-io/etcd/blob/329be66e8b3f9e2e6af83c123ff89297e49ebd15/Documentation/op-guide/clustering.md#dns-discovery deprecated: as of 4.7, this field is no longer set or honored. It will be removed in a future release.' + type: string + infrastructureName: + description: infrastructureName uniquely identifies a cluster with a human friendly name. Once set it should not be changed. Must be of max length 27 and must have only alphanumeric or hyphen characters. + type: string + infrastructureTopology: + description: 'infrastructureTopology expresses the expectations for infrastructure services that do not run on control plane nodes, usually indicated by a node selector for a `role` value other than `master`. The default is ''HighlyAvailable'', which represents the behavior operators have in a "normal" cluster. The ''SingleReplica'' mode will be used in single-node deployments and the operators should not configure the operand for highly-available operation NOTE: External topology mode is not applicable for this field.' + type: string + default: HighlyAvailable + enum: + - HighlyAvailable + - SingleReplica + platform: + description: "platform is the underlying infrastructure provider for the cluster. \n Deprecated: Use platformStatus.type instead." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + platformStatus: + description: platformStatus holds status information specific to the underlying infrastructure provider. + type: object + properties: + alibabaCloud: + description: AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider. + type: object + required: + - region + properties: + region: + description: region specifies the region for Alibaba Cloud resources created for the cluster. + type: string + pattern: ^[0-9A-Za-z-]+$ + resourceGroupID: + description: resourceGroupID is the ID of the resource group for the cluster. + type: string + pattern: ^(rg-[0-9A-Za-z]+)?$ + resourceTags: + description: resourceTags is a list of additional tags to apply to Alibaba Cloud resources created for the cluster. + type: array + maxItems: 20 + items: + description: AlibabaCloudResourceTag is the set of tags to add to apply to resources. + type: object + required: + - key + - value + properties: + key: + description: key is the key of the tag. + type: string + maxLength: 128 + minLength: 1 + value: + description: value is the value of the tag. + type: string + maxLength: 128 + minLength: 1 + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + aws: + description: AWS contains settings specific to the Amazon Web Services infrastructure provider. + type: object + properties: + region: + description: region holds the default AWS region for new AWS resources created by the cluster. + type: string + resourceTags: + description: resourceTags is a list of additional tags to apply to AWS resources created for the cluster. See https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html for information on tagging AWS resources. AWS supports a maximum of 50 tags per resource. OpenShift reserves 25 tags for its use, leaving 25 tags available for the user. + type: array + maxItems: 25 + items: + description: AWSResourceTag is a tag to apply to AWS resources created for the cluster. + type: object + required: + - key + - value + properties: + key: + description: key is the key of the tag + type: string + maxLength: 128 + minLength: 1 + pattern: ^[0-9A-Za-z_.:/=+-@]+$ + value: + description: value is the value of the tag. Some AWS service do not support empty values. Since tags are added to resources in many services, the length of the tag value must meet the requirements of all services. + type: string + maxLength: 256 + minLength: 1 + pattern: ^[0-9A-Za-z_.:/=+-@]+$ + x-kubernetes-list-type: atomic + serviceEndpoints: + description: ServiceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. There must be only one ServiceEndpoint for a service. + type: array + items: + description: AWSServiceEndpoint store the configuration of a custom url to override existing defaults of AWS Services. + type: object + properties: + name: + description: name is the name of the AWS service. The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html This must be provided and cannot be empty. + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + pattern: ^https:// + x-kubernetes-list-type: atomic + azure: + description: Azure contains settings specific to the Azure infrastructure provider. + type: object + properties: + armEndpoint: + description: armEndpoint specifies a URL to use for resource management in non-soverign clouds such as Azure Stack. + type: string + cloudName: + description: cloudName is the name of the Azure cloud environment which can be used to configure the Azure SDK with the appropriate Azure API endpoints. If empty, the value is equal to `AzurePublicCloud`. + type: string + enum: + - "" + - AzurePublicCloud + - AzureUSGovernmentCloud + - AzureChinaCloud + - AzureGermanCloud + - AzureStackCloud + networkResourceGroupName: + description: networkResourceGroupName is the Resource Group for network resources like the Virtual Network and Subnets used by the cluster. If empty, the value is same as ResourceGroupName. + type: string + resourceGroupName: + description: resourceGroupName is the Resource Group for new Azure resources created for the cluster. + type: string + resourceTags: + description: resourceTags is a list of additional tags to apply to Azure resources created for the cluster. See https://docs.microsoft.com/en-us/rest/api/resources/tags for information on tagging Azure resources. Due to limitations on Automation, Content Delivery Network, DNS Azure resources, a maximum of 15 tags may be applied. OpenShift reserves 5 tags for internal use, allowing 10 tags for user configuration. + type: array + maxItems: 10 + items: + description: AzureResourceTag is a tag to apply to Azure resources created for the cluster. + type: object + required: + - key + - value + properties: + key: + description: key is the key part of the tag. A tag key can have a maximum of 128 characters and cannot be empty. Key must begin with a letter, end with a letter, number or underscore, and must contain only alphanumeric characters and the following special characters `_ . -`. + type: string + maxLength: 128 + minLength: 1 + pattern: ^[a-zA-Z]([0-9A-Za-z_.-]*[0-9A-Za-z_])?$ + value: + description: 'value is the value part of the tag. A tag value can have a maximum of 256 characters and cannot be empty. Value must contain only alphanumeric characters and the following special characters `_ + , - . / : ; < = > ? @`.' + type: string + maxLength: 256 + minLength: 1 + pattern: ^[0-9A-Za-z_.=+-@]+$ + x-kubernetes-list-type: atomic + x-kubernetes-validations: + - rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + message: resourceTags are immutable and may only be configured during installation + x-kubernetes-validations: + - rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) || has(oldSelf.resourceTags) && has(self.resourceTags)' + message: resourceTags may only be configured during installation + baremetal: + description: BareMetal contains settings specific to the BareMetal platform. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for BareMetal deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster. + type: string + equinixMetal: + description: EquinixMetal contains settings specific to the Equinix Metal infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. + type: string + ingressIP: + description: ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + type: string + external: + description: External contains settings specific to the generic External infrastructure provider. + type: object + properties: + cloudControllerManager: + description: cloudControllerManager contains settings specific to the external Cloud Controller Manager (a.k.a. CCM or CPI). When omitted, new nodes will be not tainted and no extra initialization from the cloud controller manager is expected. + type: object + properties: + state: + description: "state determines whether or not an external Cloud Controller Manager is expected to be installed within the cluster. https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/#running-cloud-controller-manager \n Valid values are \"External\", \"None\" and omitted. When set to \"External\", new nodes will be tainted as uninitialized when created, preventing them from running workloads until they are initialized by the cloud controller manager. When omitted or set to \"None\", new nodes will be not tainted and no extra initialization from the cloud controller manager is expected." + type: string + enum: + - "" + - External + - None + x-kubernetes-validations: + - rule: self == oldSelf + message: state is immutable once set + x-kubernetes-validations: + - rule: (has(self.state) == has(oldSelf.state)) || (!has(oldSelf.state) && self.state != "External") + message: state may not be added or removed once set + x-kubernetes-validations: + - rule: has(self.cloudControllerManager) == has(oldSelf.cloudControllerManager) + message: cloudControllerManager may not be added or removed once set + gcp: + description: GCP contains settings specific to the Google Cloud Platform infrastructure provider. + type: object + properties: + projectID: + description: resourceGroupName is the Project ID for new GCP resources created for the cluster. + type: string + region: + description: region holds the region for new GCP resources created for the cluster. + type: string + ibmcloud: + description: IBMCloud contains settings specific to the IBMCloud infrastructure provider. + type: object + properties: + cisInstanceCRN: + description: CISInstanceCRN is the CRN of the Cloud Internet Services instance managing the DNS zone for the cluster's base domain + type: string + dnsInstanceCRN: + description: DNSInstanceCRN is the CRN of the DNS Services instance managing the DNS zone for the cluster's base domain + type: string + location: + description: Location is where the cluster has been deployed + type: string + providerType: + description: ProviderType indicates the type of cluster that was created + type: string + resourceGroupName: + description: ResourceGroupName is the Resource Group for new IBMCloud resources created for the cluster. + type: string + serviceEndpoints: + description: serviceEndpoints is a list of custom endpoints which will override the default service endpoints of an IBM Cloud service. These endpoints are consumed by components within the cluster to reach the respective IBM Cloud Services. + type: array + items: + description: IBMCloudServiceEndpoint stores the configuration of a custom url to override existing defaults of IBM Cloud Services. + type: object + required: + - name + - url + properties: + name: + description: 'name is the name of the IBM Cloud service. Possible values are: CIS, COS, DNSServices, GlobalSearch, GlobalTagging, HyperProtect, IAM, KeyProtect, ResourceController, ResourceManager, or VPC. For example, the IBM Cloud Private IAM service could be configured with the service `name` of `IAM` and `url` of `https://private.iam.cloud.ibm.com` Whereas the IBM Cloud Private VPC service for US South (Dallas) could be configured with the service `name` of `VPC` and `url` of `https://us.south.private.iaas.cloud.ibm.com`' + type: string + enum: + - CIS + - COS + - DNSServices + - GlobalSearch + - GlobalTagging + - HyperProtect + - IAM + - KeyProtect + - ResourceController + - ResourceManager + - VPC + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + x-kubernetes-validations: + - rule: isURL(self) + message: url must be a valid absolute URL + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + kubevirt: + description: Kubevirt contains settings specific to the kubevirt infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. + type: string + ingressIP: + description: ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + type: string + nutanix: + description: Nutanix contains settings specific to the Nutanix infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + openstack: + description: OpenStack contains settings specific to the OpenStack infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + cloudName: + description: cloudName is the name of the desired OpenStack cloud in the client configuration file (`clouds.yaml`). + type: string + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + loadBalancer: + description: loadBalancer defines how the load balancer used by the cluster is configured. + type: object + default: + type: OpenShiftManagedDefault + properties: + type: + description: type defines the type of load balancer used by the cluster on OpenStack platform which can be a user-managed or openshift-managed load balancer that is to be used for the OpenShift API and Ingress endpoints. When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing defined in the machine config operator will be deployed. When set to UserManaged these static pods will not be deployed and it is expected that the load balancer is configured out of band by the deployer. When omitted, this means no opinion and the platform is left to choose a reasonable default. The default value is OpenShiftManagedDefault. + type: string + default: OpenShiftManagedDefault + enum: + - OpenShiftManagedDefault + - UserManaged + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: type is immutable once set + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for OpenStack deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster. + type: string + ovirt: + description: Ovirt contains settings specific to the oVirt infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + nodeDNSIP: + description: 'deprecated: as of 4.6, this field is no longer set or honored. It will be removed in a future release.' + type: string + powervs: + description: PowerVS contains settings specific to the Power Systems Virtual Servers infrastructure provider. + type: object + properties: + cisInstanceCRN: + description: CISInstanceCRN is the CRN of the Cloud Internet Services instance managing the DNS zone for the cluster's base domain + type: string + dnsInstanceCRN: + description: DNSInstanceCRN is the CRN of the DNS Services instance managing the DNS zone for the cluster's base domain + type: string + region: + description: region holds the default Power VS region for new Power VS resources created by the cluster. + type: string + resourceGroup: + description: 'resourceGroup is the resource group name for new IBMCloud resources created for a cluster. The resource group specified here will be used by cluster-image-registry-operator to set up a COS Instance in IBMCloud for the cluster registry. More about resource groups can be found here: https://cloud.ibm.com/docs/account?topic=account-rgs. When omitted, the image registry operator won''t be able to configure storage, which results in the image registry cluster operator not being in an available state.' + type: string + maxLength: 40 + pattern: ^[a-zA-Z0-9-_ ]+$ + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: resourceGroup is immutable once set + serviceEndpoints: + description: serviceEndpoints is a list of custom endpoints which will override the default service endpoints of a Power VS service. + type: array + items: + description: PowervsServiceEndpoint stores the configuration of a custom url to override existing defaults of PowerVS Services. + type: object + required: + - name + - url + properties: + name: + description: name is the name of the Power VS service. Few of the services are IAM - https://cloud.ibm.com/apidocs/iam-identity-token-api ResourceController - https://cloud.ibm.com/apidocs/resource-controller/resource-controller Power Cloud - https://cloud.ibm.com/apidocs/power-cloud + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + format: uri + pattern: ^https:// + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + zone: + description: 'zone holds the default zone for the new Power VS resources created by the cluster. Note: Currently only single-zone OCP clusters are supported' + type: string + x-kubernetes-validations: + - rule: '!has(oldSelf.resourceGroup) || has(self.resourceGroup)' + message: cannot unset resourceGroup once set + type: + description: "type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", \"VSphere\", \"oVirt\", \"EquinixMetal\", \"PowerVS\", \"AlibabaCloud\", \"Nutanix\" and \"None\". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform. \n This value will be synced with to the `status.platform` and `status.platformStatus.type`. Currently this value cannot be changed once set." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + vsphere: + description: VSphere contains settings specific to the VSphere infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for vSphere deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster. + type: string + nullable: true + x-kubernetes-embedded-resource: true + internalRegistryPullSecret: + description: internalRegistryPullSecret is the pull secret for the internal registry, used by rpm-ostree to pull images from the internal registry if present + type: string + format: byte + nullable: true + ipFamilies: + description: ipFamilies indicates the IP families in use by the cluster network + type: string + kubeAPIServerServingCAData: + description: kubeAPIServerServingCAData managed Kubelet to API Server Cert... Rotated automatically + type: string + format: byte + network: + description: Network contains additional network related information + type: object + required: + - mtuMigration + properties: + mtuMigration: + description: MTUMigration contains the MTU migration configuration. + type: object + properties: + machine: + description: Machine contains MTU migration configuration for the machine's uplink. + type: object + properties: + from: + description: From is the MTU to migrate from. + type: integer + format: int32 + minimum: 0 + to: + description: To is the MTU to migrate to. + type: integer + format: int32 + minimum: 0 + network: + description: Network contains MTU migration configuration for the default network. + type: object + properties: + from: + description: From is the MTU to migrate from. + type: integer + format: int32 + minimum: 0 + to: + description: To is the MTU to migrate to. + type: integer + format: int32 + minimum: 0 + nullable: true + nullable: true + networkType: + description: 'networkType holds the type of network the cluster is using XXX: this is temporary and will be dropped as soon as possible in favor of a better support to start network related services the proper way. Nobody is also changing this once the cluster is up and running the first time, so, disallow regeneration if this changes.' + type: string + osImageURL: + description: OSImageURL is the old-format container image that contains the OS update payload. + type: string + platform: + description: platform is deprecated, use Infra.Status.PlatformStatus.Type instead + type: string + proxy: + description: proxy holds the current proxy configuration for the nodes + type: object + properties: + httpProxy: + description: httpProxy is the URL of the proxy for HTTP requests. + type: string + httpsProxy: + description: httpsProxy is the URL of the proxy for HTTPS requests. + type: string + noProxy: + description: noProxy is a comma-separated list of hostnames and/or CIDRs for which the proxy should not be used. + type: string + nullable: true + pullSecret: + description: pullSecret is the default pull secret that needs to be installed on all machines. + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + x-kubernetes-map-type: atomic + releaseImage: + description: releaseImage is the image used when installing the cluster + type: string + rootCAData: + description: rootCAData specifies the root CA data + type: string + format: byte + status: + description: ControllerConfigStatus is the status for ControllerConfig + type: object + properties: + conditions: + description: conditions represents the latest available observations of current state. + type: array + items: + description: ControllerConfigStatusCondition contains condition information for ControllerConfigStatus + type: object + required: + - lastTransitionTime + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the time of the last update to the current status object. + type: string + format: date-time + nullable: true + message: + description: message provides additional information about the current condition. This is only to be consumed by humans. + type: string + reason: + description: reason is the reason for the condition's last transition. Reasons are PascalCase + type: string + status: + description: status of the condition, one of True, False, Unknown. + type: string + type: + description: type specifies the state of the operator's reconciliation functionality. + type: string + x-kubernetes-list-type: atomic + controllerCertificates: + description: controllerCertificates represents the latest available observations of the automatically rotating certificates in the MCO. + type: array + items: + description: ControllerCertificate contains info about a specific cert. + type: object + required: + - bundleFile + - signer + - subject + properties: + bundleFile: + description: bundleFile is the larger bundle a cert comes from + type: string + notAfter: + description: notAfter is the upper boundary for validity + type: string + format: date-time + notBefore: + description: notBefore is the lower boundary for validity + type: string + format: date-time + signer: + description: signer is the cert Issuer + type: string + subject: + description: subject is the cert subject + type: string + x-kubernetes-list-type: atomic + observedGeneration: + description: observedGeneration represents the generation observed by the controller. + type: integer + format: int64 diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_controllerconfig-TechPreviewNoUpgrade.crd.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_controllerconfig-TechPreviewNoUpgrade.crd.yaml new file mode 100644 index 0000000000..1a1b605a73 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_controllerconfig-TechPreviewNoUpgrade.crd.yaml @@ -0,0 +1,1703 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + # name must match the spec fields below, and be in the form: . + name: controllerconfigs.machineconfiguration.openshift.io + labels: + "openshift.io/operator-managed": "" + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/1453 + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + release.openshift.io/feature-set: TechPreviewNoUpgrade +spec: + # group name to use for REST API: /apis// + group: machineconfiguration.openshift.io + # either Namespaced or Cluster + scope: Cluster + names: + # plural name to be used in the URL: /apis/// + plural: controllerconfigs + # singular name to be used as an alias on the CLI and for display + singular: controllerconfig + # kind is normally the PascalCased singular type. Your resource manifests use this. + kind: ControllerConfig + # list of versions supported by this CustomResourceDefinition + versions: + - name: v1 + # Each version can be enabled/disabled by Served flag. + served: true + # One and only one version must be marked as the storage version. + storage: true + subresources: + status: {} + schema: + openAPIV3Schema: + description: "ControllerConfig describes configuration for MachineConfigController. This is currently only used to drive the MachineConfig objects generated by the TemplateController. \n Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer)." + 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: + type: object + spec: + description: ControllerConfigSpec is the spec for ControllerConfig resource. + type: object + required: + - additionalTrustBundle + - baseOSContainerImage + - cloudProviderCAData + - cloudProviderConfig + - clusterDNSIP + - dns + - images + - infra + - ipFamilies + - kubeAPIServerServingCAData + - network + - proxy + - releaseImage + - rootCAData + properties: + additionalTrustBundle: + description: additionalTrustBundle is a certificate bundle that will be added to the nodes trusted certificate store. + type: string + format: byte + nullable: true + baseOSContainerImage: + description: BaseOSContainerImage is the new-format container image for operating system updates. + type: string + baseOSExtensionsContainerImage: + description: BaseOSExtensionsContainerImage is the matching extensions container for the new-format container + type: string + cloudProviderCAData: + description: cloudProvider specifies the cloud provider CA data + type: string + format: byte + nullable: true + cloudProviderConfig: + description: cloudProviderConfig is the configuration for the given cloud provider + type: string + clusterDNSIP: + description: clusterDNSIP is the cluster DNS IP address + type: string + dns: + description: dns holds the cluster dns details + 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 the standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + baseDomain: + description: "baseDomain is the base domain of the cluster. All managed DNS records will be sub-domains of this base. \n For example, given the base domain `openshift.example.com`, an API server DNS record may be created for `cluster-api.openshift.example.com`. \n Once set, this field cannot be changed." + type: string + platform: + description: platform holds configuration specific to the underlying infrastructure provider for DNS. When omitted, this means the user has no opinion and the platform is left to choose reasonable defaults. These defaults are subject to change over time. + type: object + required: + - type + properties: + aws: + description: aws contains DNS configuration specific to the Amazon Web Services cloud provider. + type: object + properties: + privateZoneIAMRole: + description: privateZoneIAMRole contains the ARN of an IAM role that should be assumed when performing operations on the cluster's private hosted zone specified in the cluster DNS config. When left empty, no role should be assumed. + type: string + pattern: ^arn:(aws|aws-cn|aws-us-gov):iam::[0-9]{12}:role\/.*$ + type: + description: "type is the underlying infrastructure provider for the cluster. Allowed values: \"\", \"AWS\". \n Individual components may not support all platforms, and must handle unrecognized platforms with best-effort defaults." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + x-kubernetes-validations: + - rule: self in ['','AWS'] + message: allowed values are '' and 'AWS' + x-kubernetes-validations: + - rule: 'has(self.type) && self.type == ''AWS'' ? has(self.aws) : !has(self.aws)' + message: aws configuration is required when platform is AWS, and forbidden otherwise + privateZone: + description: "privateZone is the location where all the DNS records that are only available internally to the cluster exist. \n If this field is nil, no private records should be created. \n Once set, this field cannot be changed." + type: object + properties: + id: + description: "id is the identifier that can be used to find the DNS hosted zone. \n on AWS zone can be fetched using `ID` as id in [1] on Azure zone can be fetched using `ID` as a pre-determined name in [2], on GCP zone can be fetched using `ID` as a pre-determined name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" + type: string + tags: + description: "tags can be used to query the DNS hosted zone. \n on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" + type: object + additionalProperties: + type: string + publicZone: + description: "publicZone is the location where all the DNS records that are publicly accessible to the internet exist. \n If this field is nil, no public records should be created. \n Once set, this field cannot be changed." + type: object + properties: + id: + description: "id is the identifier that can be used to find the DNS hosted zone. \n on AWS zone can be fetched using `ID` as id in [1] on Azure zone can be fetched using `ID` as a pre-determined name in [2], on GCP zone can be fetched using `ID` as a pre-determined name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" + type: string + tags: + description: "tags can be used to query the DNS hosted zone. \n on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" + type: object + additionalProperties: + type: string + status: + description: status holds observed values from the cluster. They may not be overridden. + type: object + nullable: true + x-kubernetes-embedded-resource: true + etcdDiscoveryDomain: + description: etcdDiscoveryDomain is deprecated, use Infra.Status.EtcdDiscoveryDomain instead + type: string + imageRegistryBundleData: + description: imageRegistryBundleData is the ImageRegistryData + type: array + items: + description: ImageRegistryBundle contains information for writing image registry certificates + type: object + required: + - data + - file + properties: + data: + description: data holds the contents of the bundle that will be written to the file location + type: string + format: byte + file: + description: file holds the name of the file where the bundle will be written to disk + type: string + x-kubernetes-list-type: atomic + imageRegistryBundleUserData: + description: imageRegistryBundleUserData is Image Registry Data provided by the user + type: array + items: + description: ImageRegistryBundle contains information for writing image registry certificates + type: object + required: + - data + - file + properties: + data: + description: data holds the contents of the bundle that will be written to the file location + type: string + format: byte + file: + description: file holds the name of the file where the bundle will be written to disk + type: string + x-kubernetes-list-type: atomic + images: + description: images is map of images that are used by the controller to render templates under ./templates/ + type: object + additionalProperties: + type: string + infra: + description: infra holds the infrastructure details + 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 the standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + cloudConfig: + description: "cloudConfig is a reference to a ConfigMap containing the cloud provider configuration file. This configuration file is used to configure the Kubernetes cloud provider integration when using the built-in cloud provider integration or the external cloud controller manager. The namespace for this config map is openshift-config. \n cloudConfig should only be consumed by the kube_cloud_config controller. The controller is responsible for using the user configuration in the spec for various platforms and combining that with the user provided ConfigMap in this field to create a stitched kube cloud config. The controller generates a ConfigMap `kube-cloud-config` in `openshift-config-managed` namespace with the kube cloud config is stored in `cloud.conf` key. All the clients are expected to use the generated ConfigMap only." + type: object + properties: + key: + description: Key allows pointing to a specific key/value inside of the configmap. This is useful for logical file references. + type: string + name: + type: string + platformSpec: + description: platformSpec holds desired information specific to the underlying infrastructure provider. + type: object + properties: + alibabaCloud: + description: AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider. + type: object + aws: + description: AWS contains settings specific to the Amazon Web Services infrastructure provider. + type: object + properties: + serviceEndpoints: + description: serviceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. There must be only one ServiceEndpoint for a service. + type: array + items: + description: AWSServiceEndpoint store the configuration of a custom url to override existing defaults of AWS Services. + type: object + properties: + name: + description: name is the name of the AWS service. The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html This must be provided and cannot be empty. + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + pattern: ^https:// + x-kubernetes-list-type: atomic + azure: + description: Azure contains settings specific to the Azure infrastructure provider. + type: object + baremetal: + description: BareMetal contains settings specific to the BareMetal platform. + type: object + properties: + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.apiServerInternalIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: apiServerInternalIPs must contain at most one IPv4 address and at most one IPv6 address + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.ingressIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: ingressIPs must contain at most one IPv4 address and at most one IPv6 address + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, for example "10.0.0.0/8" or "fd00::/8". + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' + message: apiServerInternalIPs list is required once set + - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' + message: ingressIPs list is required once set + equinixMetal: + description: EquinixMetal contains settings specific to the Equinix Metal infrastructure provider. + type: object + external: + description: ExternalPlatformType represents generic infrastructure provider. Platform-specific components should be supplemented separately. + type: object + properties: + platformName: + description: PlatformName holds the arbitrary string representing the infrastructure provider name, expected to be set at the installation time. This field is solely for informational and reporting purposes and is not expected to be used for decision-making. + type: string + default: Unknown + x-kubernetes-validations: + - rule: oldSelf == 'Unknown' || self == oldSelf + message: platform name cannot be changed once set + gcp: + description: GCP contains settings specific to the Google Cloud Platform infrastructure provider. + type: object + ibmcloud: + description: IBMCloud contains settings specific to the IBMCloud infrastructure provider. + type: object + kubevirt: + description: Kubevirt contains settings specific to the kubevirt infrastructure provider. + type: object + nutanix: + description: Nutanix contains settings specific to the Nutanix infrastructure provider. + type: object + required: + - prismCentral + - prismElements + properties: + failureDomains: + description: failureDomains configures failure domains information for the Nutanix platform. When set, the failure domains defined here may be used to spread Machines across prism element clusters to improve fault tolerance of the cluster. + type: array + items: + description: NutanixFailureDomain configures failure domain information for the Nutanix platform. + type: object + required: + - cluster + - name + - subnets + properties: + cluster: + description: cluster is to identify the cluster (the Prism Element under management of the Prism Central), in which the Machine's VM will be created. The cluster identifier (uuid or name) can be obtained from the Prism Central console or using the prism_central API. + type: object + required: + - type + properties: + name: + description: name is the resource name in the PC. It cannot be empty if the type is Name. + type: string + type: + description: type is the identifier type to use for this resource. + type: string + enum: + - UUID + - Name + uuid: + description: uuid is the UUID of the resource in the PC. It cannot be empty if the type is UUID. + type: string + x-kubernetes-validations: + - rule: 'has(self.type) && self.type == ''UUID'' ? has(self.uuid) : !has(self.uuid)' + message: uuid configuration is required when type is UUID, and forbidden otherwise + - rule: 'has(self.type) && self.type == ''Name'' ? has(self.name) : !has(self.name)' + message: name configuration is required when type is Name, and forbidden otherwise + name: + description: name defines the unique name of a failure domain. Name is required and must be at most 64 characters in length. It must consist of only lower case alphanumeric characters and hyphens (-). It must start and end with an alphanumeric character. This value is arbitrary and is used to identify the failure domain within the platform. + type: string + maxLength: 64 + minLength: 1 + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?' + subnets: + description: subnets holds a list of identifiers (one or more) of the cluster's network subnets for the Machine's VM to connect to. The subnet identifiers (uuid or name) can be obtained from the Prism Central console or using the prism_central API. + type: array + maxItems: 1 + minItems: 1 + items: + description: NutanixResourceIdentifier holds the identity of a Nutanix PC resource (cluster, image, subnet, etc.) + type: object + required: + - type + properties: + name: + description: name is the resource name in the PC. It cannot be empty if the type is Name. + type: string + type: + description: type is the identifier type to use for this resource. + type: string + enum: + - UUID + - Name + uuid: + description: uuid is the UUID of the resource in the PC. It cannot be empty if the type is UUID. + type: string + x-kubernetes-validations: + - rule: 'has(self.type) && self.type == ''UUID'' ? has(self.uuid) : !has(self.uuid)' + message: uuid configuration is required when type is UUID, and forbidden otherwise + - rule: 'has(self.type) && self.type == ''Name'' ? has(self.name) : !has(self.name)' + message: name configuration is required when type is Name, and forbidden otherwise + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + prismCentral: + description: prismCentral holds the endpoint address and port to access the Nutanix Prism Central. When a cluster-wide proxy is installed, by default, this endpoint will be accessed via the proxy. Should you wish for communication with this endpoint not to be proxied, please add the endpoint to the proxy spec.noProxy list. + type: object + required: + - address + - port + properties: + address: + description: address is the endpoint address (DNS name or IP address) of the Nutanix Prism Central or Element (cluster) + type: string + maxLength: 256 + port: + description: port is the port number to access the Nutanix Prism Central or Element (cluster) + type: integer + format: int32 + maximum: 65535 + minimum: 1 + prismElements: + description: prismElements holds one or more endpoint address and port data to access the Nutanix Prism Elements (clusters) of the Nutanix Prism Central. Currently we only support one Prism Element (cluster) for an OpenShift cluster, where all the Nutanix resources (VMs, subnets, volumes, etc.) used in the OpenShift cluster are located. In the future, we may support Nutanix resources (VMs, etc.) spread over multiple Prism Elements (clusters) of the Prism Central. + type: array + items: + description: NutanixPrismElementEndpoint holds the name and endpoint data for a Prism Element (cluster) + type: object + required: + - endpoint + - name + properties: + endpoint: + description: endpoint holds the endpoint address and port data of the Prism Element (cluster). When a cluster-wide proxy is installed, by default, this endpoint will be accessed via the proxy. Should you wish for communication with this endpoint not to be proxied, please add the endpoint to the proxy spec.noProxy list. + type: object + required: + - address + - port + properties: + address: + description: address is the endpoint address (DNS name or IP address) of the Nutanix Prism Central or Element (cluster) + type: string + maxLength: 256 + port: + description: port is the port number to access the Nutanix Prism Central or Element (cluster) + type: integer + format: int32 + maximum: 65535 + minimum: 1 + name: + description: name is the name of the Prism Element (cluster). This value will correspond with the cluster field configured on other resources (eg Machines, PVCs, etc). + type: string + maxLength: 256 + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + openstack: + description: OpenStack contains settings specific to the OpenStack infrastructure provider. + type: object + properties: + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.apiServerInternalIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: apiServerInternalIPs must contain at most one IPv4 address and at most one IPv6 address + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.ingressIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: ingressIPs must contain at most one IPv4 address and at most one IPv6 address + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, for example "10.0.0.0/8" or "fd00::/8". + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' + message: apiServerInternalIPs list is required once set + - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' + message: ingressIPs list is required once set + ovirt: + description: Ovirt contains settings specific to the oVirt infrastructure provider. + type: object + powervs: + description: PowerVS contains settings specific to the IBM Power Systems Virtual Servers infrastructure provider. + type: object + properties: + serviceEndpoints: + description: serviceEndpoints is a list of custom endpoints which will override the default service endpoints of a Power VS service. + type: array + items: + description: PowervsServiceEndpoint stores the configuration of a custom url to override existing defaults of PowerVS Services. + type: object + required: + - name + - url + properties: + name: + description: name is the name of the Power VS service. Few of the services are IAM - https://cloud.ibm.com/apidocs/iam-identity-token-api ResourceController - https://cloud.ibm.com/apidocs/resource-controller/resource-controller Power Cloud - https://cloud.ibm.com/apidocs/power-cloud + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + format: uri + pattern: ^https:// + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: + description: type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", "OpenStack", "VSphere", "oVirt", "KubeVirt", "EquinixMetal", "PowerVS", "AlibabaCloud", "Nutanix" and "None". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform. + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + vsphere: + description: VSphere contains settings specific to the VSphere infrastructure provider. + type: object + properties: + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.apiServerInternalIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: apiServerInternalIPs must contain at most one IPv4 address and at most one IPv6 address + failureDomains: + description: failureDomains contains the definition of region, zone and the vCenter topology. If this is omitted failure domains (regions and zones) will not be used. + type: array + items: + description: VSpherePlatformFailureDomainSpec holds the region and zone failure domain and the vCenter topology of that failure domain. + type: object + required: + - name + - region + - server + - topology + - zone + properties: + name: + description: name defines the arbitrary but unique name of a failure domain. + type: string + maxLength: 256 + minLength: 1 + region: + description: region defines the name of a region tag that will be attached to a vCenter datacenter. The tag category in vCenter must be named openshift-region. + type: string + maxLength: 80 + minLength: 1 + server: + description: server is the fully-qualified domain name or the IP address of the vCenter server. --- + type: string + maxLength: 255 + minLength: 1 + topology: + description: Topology describes a given failure domain using vSphere constructs + type: object + required: + - computeCluster + - datacenter + - datastore + - networks + properties: + computeCluster: + description: computeCluster the absolute path of the vCenter cluster in which virtual machine will be located. The absolute path is of the form //host/. The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/host/.*? + datacenter: + description: datacenter is the name of vCenter datacenter in which virtual machines will be located. The maximum length of the datacenter name is 80 characters. + type: string + maxLength: 80 + datastore: + description: datastore is the absolute path of the datastore in which the virtual machine is located. The absolute path is of the form //datastore/ The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/datastore/.*? + folder: + description: folder is the absolute path of the folder where virtual machines are located. The absolute path is of the form //vm/. The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/vm/.*? + networks: + description: networks is the list of port group network names within this failure domain. Currently, we only support a single interface per RHCOS virtual machine. The available networks (port groups) can be listed using `govc ls 'network/*'` The single interface should be the absolute path of the form //network/. + type: array + maxItems: 1 + minItems: 1 + items: + type: string + x-kubernetes-list-type: atomic + resourcePool: + description: resourcePool is the absolute path of the resource pool where virtual machines will be created. The absolute path is of the form //host//Resources/. The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/host/.*?/Resources.* + template: + description: "template is the full inventory path of the virtual machine or template that will be cloned when creating new machines in this failure domain. The maximum length of the path is 2048 characters. \n When omitted, the template will be calculated by the control plane machineset operator based on the region and zone defined in VSpherePlatformFailureDomainSpec. For example, for zone=zonea, region=region1, and infrastructure name=test, the template path would be calculated as //vm/test-rhcos-region1-zonea." + type: string + maxLength: 2048 + minLength: 1 + pattern: ^/.*?/vm/.*? + zone: + description: zone defines the name of a zone tag that will be attached to a vCenter cluster. The tag category in vCenter must be named openshift-zone. + type: string + maxLength: 80 + minLength: 1 + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.ingressIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: ingressIPs must contain at most one IPv4 address and at most one IPv6 address + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, for example "10.0.0.0/8" or "fd00::/8". + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeNetworking: + description: nodeNetworking contains the definition of internal and external network constraints for assigning the node's networking. If this field is omitted, networking defaults to the legacy address selection behavior which is to only support a single address and return the first one found. + type: object + properties: + external: + description: external represents the network configuration of the node that is externally routable. + type: object + properties: + excludeNetworkSubnetCidr: + description: excludeNetworkSubnetCidr IP addresses in subnet ranges will be excluded when selecting the IP address from the VirtualMachine's VM for use in the status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: atomic + network: + description: network VirtualMachine's VM Network names that will be used to when searching for status.addresses fields. Note that if internal.networkSubnetCIDR and external.networkSubnetCIDR are not set, then the vNIC associated to this network must only have a single IP address assigned to it. The available networks (port groups) can be listed using `govc ls 'network/*'` + type: string + networkSubnetCidr: + description: networkSubnetCidr IP address on VirtualMachine's network interfaces included in the fields' CIDRs that will be used in respective status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: set + internal: + description: internal represents the network configuration of the node that is routable only within the cluster. + type: object + properties: + excludeNetworkSubnetCidr: + description: excludeNetworkSubnetCidr IP addresses in subnet ranges will be excluded when selecting the IP address from the VirtualMachine's VM for use in the status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: atomic + network: + description: network VirtualMachine's VM Network names that will be used to when searching for status.addresses fields. Note that if internal.networkSubnetCIDR and external.networkSubnetCIDR are not set, then the vNIC associated to this network must only have a single IP address assigned to it. The available networks (port groups) can be listed using `govc ls 'network/*'` + type: string + networkSubnetCidr: + description: networkSubnetCidr IP address on VirtualMachine's network interfaces included in the fields' CIDRs that will be used in respective status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: set + vcenters: + description: vcenters holds the connection details for services to communicate with vCenter. Currently, only a single vCenter is supported. --- + type: array + maxItems: 1 + minItems: 0 + items: + description: VSpherePlatformVCenterSpec stores the vCenter connection fields. This is used by the vSphere CCM. + type: object + required: + - datacenters + - server + properties: + datacenters: + description: The vCenter Datacenters in which the RHCOS vm guests are located. This field will be used by the Cloud Controller Manager. Each datacenter listed here should be used within a topology. + type: array + minItems: 1 + items: + type: string + x-kubernetes-list-type: set + port: + description: port is the TCP port that will be used to communicate to the vCenter endpoint. When omitted, this means the user has no opinion and it is up to the platform to choose a sensible default, which is subject to change over time. + type: integer + format: int32 + maximum: 32767 + minimum: 1 + server: + description: server is the fully-qualified domain name or the IP address of the vCenter server. --- + type: string + maxLength: 255 + x-kubernetes-list-type: atomic + x-kubernetes-validations: + - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' + message: apiServerInternalIPs list is required once set + - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' + message: ingressIPs list is required once set + status: + description: status holds observed values from the cluster. They may not be overridden. + type: object + properties: + apiServerInternalURI: + description: apiServerInternalURL is a valid URI with scheme 'https', address and optionally a port (defaulting to 443). apiServerInternalURL can be used by components like kubelets, to contact the Kubernetes API server using the infrastructure provider rather than Kubernetes networking. + type: string + apiServerURL: + description: apiServerURL is a valid URI with scheme 'https', address and optionally a port (defaulting to 443). apiServerURL can be used by components like the web console to tell users where to find the Kubernetes API. + type: string + controlPlaneTopology: + description: controlPlaneTopology expresses the expectations for operands that normally run on control nodes. The default is 'HighlyAvailable', which represents the behavior operators have in a "normal" cluster. The 'SingleReplica' mode will be used in single-node deployments and the operators should not configure the operand for highly-available operation The 'External' mode indicates that the control plane is hosted externally to the cluster and that its components are not visible within the cluster. + type: string + default: HighlyAvailable + enum: + - HighlyAvailable + - SingleReplica + - External + cpuPartitioning: + description: cpuPartitioning expresses if CPU partitioning is a currently enabled feature in the cluster. CPU Partitioning means that this cluster can support partitioning workloads to specific CPU Sets. Valid values are "None" and "AllNodes". When omitted, the default value is "None". The default value of "None" indicates that no nodes will be setup with CPU partitioning. The "AllNodes" value indicates that all nodes have been setup with CPU partitioning, and can then be further configured via the PerformanceProfile API. + type: string + default: None + enum: + - None + - AllNodes + etcdDiscoveryDomain: + description: 'etcdDiscoveryDomain is the domain used to fetch the SRV records for discovering etcd servers and clients. For more info: https://github.com/etcd-io/etcd/blob/329be66e8b3f9e2e6af83c123ff89297e49ebd15/Documentation/op-guide/clustering.md#dns-discovery deprecated: as of 4.7, this field is no longer set or honored. It will be removed in a future release.' + type: string + infrastructureName: + description: infrastructureName uniquely identifies a cluster with a human friendly name. Once set it should not be changed. Must be of max length 27 and must have only alphanumeric or hyphen characters. + type: string + infrastructureTopology: + description: 'infrastructureTopology expresses the expectations for infrastructure services that do not run on control plane nodes, usually indicated by a node selector for a `role` value other than `master`. The default is ''HighlyAvailable'', which represents the behavior operators have in a "normal" cluster. The ''SingleReplica'' mode will be used in single-node deployments and the operators should not configure the operand for highly-available operation NOTE: External topology mode is not applicable for this field.' + type: string + default: HighlyAvailable + enum: + - HighlyAvailable + - SingleReplica + platform: + description: "platform is the underlying infrastructure provider for the cluster. \n Deprecated: Use platformStatus.type instead." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + platformStatus: + description: platformStatus holds status information specific to the underlying infrastructure provider. + type: object + properties: + alibabaCloud: + description: AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider. + type: object + required: + - region + properties: + region: + description: region specifies the region for Alibaba Cloud resources created for the cluster. + type: string + pattern: ^[0-9A-Za-z-]+$ + resourceGroupID: + description: resourceGroupID is the ID of the resource group for the cluster. + type: string + pattern: ^(rg-[0-9A-Za-z]+)?$ + resourceTags: + description: resourceTags is a list of additional tags to apply to Alibaba Cloud resources created for the cluster. + type: array + maxItems: 20 + items: + description: AlibabaCloudResourceTag is the set of tags to add to apply to resources. + type: object + required: + - key + - value + properties: + key: + description: key is the key of the tag. + type: string + maxLength: 128 + minLength: 1 + value: + description: value is the value of the tag. + type: string + maxLength: 128 + minLength: 1 + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + aws: + description: AWS contains settings specific to the Amazon Web Services infrastructure provider. + type: object + properties: + region: + description: region holds the default AWS region for new AWS resources created by the cluster. + type: string + resourceTags: + description: resourceTags is a list of additional tags to apply to AWS resources created for the cluster. See https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html for information on tagging AWS resources. AWS supports a maximum of 50 tags per resource. OpenShift reserves 25 tags for its use, leaving 25 tags available for the user. + type: array + maxItems: 25 + items: + description: AWSResourceTag is a tag to apply to AWS resources created for the cluster. + type: object + required: + - key + - value + properties: + key: + description: key is the key of the tag + type: string + maxLength: 128 + minLength: 1 + pattern: ^[0-9A-Za-z_.:/=+-@]+$ + value: + description: value is the value of the tag. Some AWS service do not support empty values. Since tags are added to resources in many services, the length of the tag value must meet the requirements of all services. + type: string + maxLength: 256 + minLength: 1 + pattern: ^[0-9A-Za-z_.:/=+-@]+$ + x-kubernetes-list-type: atomic + serviceEndpoints: + description: ServiceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. There must be only one ServiceEndpoint for a service. + type: array + items: + description: AWSServiceEndpoint store the configuration of a custom url to override existing defaults of AWS Services. + type: object + properties: + name: + description: name is the name of the AWS service. The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html This must be provided and cannot be empty. + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + pattern: ^https:// + x-kubernetes-list-type: atomic + azure: + description: Azure contains settings specific to the Azure infrastructure provider. + type: object + properties: + armEndpoint: + description: armEndpoint specifies a URL to use for resource management in non-soverign clouds such as Azure Stack. + type: string + cloudName: + description: cloudName is the name of the Azure cloud environment which can be used to configure the Azure SDK with the appropriate Azure API endpoints. If empty, the value is equal to `AzurePublicCloud`. + type: string + enum: + - "" + - AzurePublicCloud + - AzureUSGovernmentCloud + - AzureChinaCloud + - AzureGermanCloud + - AzureStackCloud + networkResourceGroupName: + description: networkResourceGroupName is the Resource Group for network resources like the Virtual Network and Subnets used by the cluster. If empty, the value is same as ResourceGroupName. + type: string + resourceGroupName: + description: resourceGroupName is the Resource Group for new Azure resources created for the cluster. + type: string + resourceTags: + description: resourceTags is a list of additional tags to apply to Azure resources created for the cluster. See https://docs.microsoft.com/en-us/rest/api/resources/tags for information on tagging Azure resources. Due to limitations on Automation, Content Delivery Network, DNS Azure resources, a maximum of 15 tags may be applied. OpenShift reserves 5 tags for internal use, allowing 10 tags for user configuration. + type: array + maxItems: 10 + items: + description: AzureResourceTag is a tag to apply to Azure resources created for the cluster. + type: object + required: + - key + - value + properties: + key: + description: key is the key part of the tag. A tag key can have a maximum of 128 characters and cannot be empty. Key must begin with a letter, end with a letter, number or underscore, and must contain only alphanumeric characters and the following special characters `_ . -`. + type: string + maxLength: 128 + minLength: 1 + pattern: ^[a-zA-Z]([0-9A-Za-z_.-]*[0-9A-Za-z_])?$ + value: + description: 'value is the value part of the tag. A tag value can have a maximum of 256 characters and cannot be empty. Value must contain only alphanumeric characters and the following special characters `_ + , - . / : ; < = > ? @`.' + type: string + maxLength: 256 + minLength: 1 + pattern: ^[0-9A-Za-z_.=+-@]+$ + x-kubernetes-list-type: atomic + x-kubernetes-validations: + - rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + message: resourceTags are immutable and may only be configured during installation + x-kubernetes-validations: + - rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) || has(oldSelf.resourceTags) && has(self.resourceTags)' + message: resourceTags may only be configured during installation + baremetal: + description: BareMetal contains settings specific to the BareMetal platform. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + loadBalancer: + description: loadBalancer defines how the load balancer used by the cluster is configured. + type: object + default: + type: OpenShiftManagedDefault + properties: + type: + description: type defines the type of load balancer used by the cluster on BareMetal platform which can be a user-managed or openshift-managed load balancer that is to be used for the OpenShift API and Ingress endpoints. When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing defined in the machine config operator will be deployed. When set to UserManaged these static pods will not be deployed and it is expected that the load balancer is configured out of band by the deployer. When omitted, this means no opinion and the platform is left to choose a reasonable default. The default value is OpenShiftManagedDefault. + type: string + default: OpenShiftManagedDefault + enum: + - OpenShiftManagedDefault + - UserManaged + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: type is immutable once set + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for BareMetal deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster. + type: string + equinixMetal: + description: EquinixMetal contains settings specific to the Equinix Metal infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. + type: string + ingressIP: + description: ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + type: string + external: + description: External contains settings specific to the generic External infrastructure provider. + type: object + properties: + cloudControllerManager: + description: cloudControllerManager contains settings specific to the external Cloud Controller Manager (a.k.a. CCM or CPI). When omitted, new nodes will be not tainted and no extra initialization from the cloud controller manager is expected. + type: object + properties: + state: + description: "state determines whether or not an external Cloud Controller Manager is expected to be installed within the cluster. https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/#running-cloud-controller-manager \n Valid values are \"External\", \"None\" and omitted. When set to \"External\", new nodes will be tainted as uninitialized when created, preventing them from running workloads until they are initialized by the cloud controller manager. When omitted or set to \"None\", new nodes will be not tainted and no extra initialization from the cloud controller manager is expected." + type: string + enum: + - "" + - External + - None + x-kubernetes-validations: + - rule: self == oldSelf + message: state is immutable once set + x-kubernetes-validations: + - rule: (has(self.state) == has(oldSelf.state)) || (!has(oldSelf.state) && self.state != "External") + message: state may not be added or removed once set + x-kubernetes-validations: + - rule: has(self.cloudControllerManager) == has(oldSelf.cloudControllerManager) + message: cloudControllerManager may not be added or removed once set + gcp: + description: GCP contains settings specific to the Google Cloud Platform infrastructure provider. + type: object + properties: + cloudLoadBalancerConfig: + description: cloudLoadBalancerConfig is a union that contains the IP addresses of API, API-Int and Ingress Load Balancers created on the cloud platform. These values would not be populated on on-prem platforms. These Load Balancer IPs are used to configure the in-cluster DNS instances for API, API-Int and Ingress services. `dnsType` is expected to be set to `ClusterHosted` when these Load Balancer IP addresses are populated and used. + type: object + default: + dnsType: PlatformDefault + properties: + clusterHosted: + description: clusterHosted holds the IP addresses of API, API-Int and Ingress Load Balancers on Cloud Platforms. The DNS solution hosted within the cluster use these IP addresses to provide resolution for API, API-Int and Ingress services. + type: object + properties: + apiIntLoadBalancerIPs: + description: apiIntLoadBalancerIPs holds Load Balancer IPs for the internal API service. These Load Balancer IP addresses can be IPv4 and/or IPv6 addresses. Entries in the apiIntLoadBalancerIPs must be unique. A maximum of 16 IP addresses are permitted. + type: array + format: ip + maxItems: 16 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + apiLoadBalancerIPs: + description: apiLoadBalancerIPs holds Load Balancer IPs for the API service. These Load Balancer IP addresses can be IPv4 and/or IPv6 addresses. Could be empty for private clusters. Entries in the apiLoadBalancerIPs must be unique. A maximum of 16 IP addresses are permitted. + type: array + format: ip + maxItems: 16 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + ingressLoadBalancerIPs: + description: ingressLoadBalancerIPs holds IPs for Ingress Load Balancers. These Load Balancer IP addresses can be IPv4 and/or IPv6 addresses. Entries in the ingressLoadBalancerIPs must be unique. A maximum of 16 IP addresses are permitted. + type: array + format: ip + maxItems: 16 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + dnsType: + description: dnsType indicates the type of DNS solution in use within the cluster. Its default value of `PlatformDefault` indicates that the cluster's DNS is the default provided by the cloud platform. It can be set to `ClusterHosted` to bypass the configuration of the cloud default DNS. In this mode, the cluster needs to provide a self-hosted DNS solution for the cluster's installation to succeed. The cluster's use of the cloud's Load Balancers is unaffected by this setting. The value is immutable after it has been set at install time. Currently, there is no way for the customer to add additional DNS entries into the cluster hosted DNS. Enabling this functionality allows the user to start their own DNS solution outside the cluster after installation is complete. The customer would be responsible for configuring this custom DNS solution, and it can be run in addition to the in-cluster DNS solution. + type: string + default: PlatformDefault + enum: + - ClusterHosted + - PlatformDefault + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: dnsType is immutable + nullable: true + x-kubernetes-validations: + - rule: 'has(self.dnsType) && self.dnsType != ''ClusterHosted'' ? !has(self.clusterHosted) : true' + message: clusterHosted is permitted only when dnsType is ClusterHosted + projectID: + description: resourceGroupName is the Project ID for new GCP resources created for the cluster. + type: string + region: + description: region holds the region for new GCP resources created for the cluster. + type: string + resourceLabels: + description: resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, allowing 32 labels for user configuration. + type: array + maxItems: 32 + items: + description: GCPResourceLabel is a label to apply to GCP resources created for the cluster. + type: object + required: + - key + - value + properties: + key: + description: key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` and `openshift-io`. + type: string + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + x-kubernetes-validations: + - rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' + message: label keys must not start with either `openshift-io` or `kubernetes-io` + value: + description: value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + type: string + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + message: resourceLabels are immutable and may only be configured during installation + resourceTags: + description: resourceTags is a list of additional tags to apply to GCP resources created for the cluster. See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on tagging GCP resources. GCP supports a maximum of 50 tags per resource. + type: array + maxItems: 50 + items: + description: GCPResourceTag is a tag to apply to GCP resources created for the cluster. + type: object + required: + - key + - parentID + - value + properties: + key: + description: key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase alphanumeric characters, and the following special characters `._-`. + type: string + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + parentID: + description: 'parentID is the ID of the hierarchical resource where the tags are defined, e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, and hyphens, and must start with a letter, and cannot end with a hyphen.' + type: string + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + value: + description: value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + type: string + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + message: resourceTags are immutable and may only be configured during installation + x-kubernetes-validations: + - rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + message: resourceLabels may only be configured during installation + - rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) || has(oldSelf.resourceTags) && has(self.resourceTags)' + message: resourceTags may only be configured during installation + ibmcloud: + description: IBMCloud contains settings specific to the IBMCloud infrastructure provider. + type: object + properties: + cisInstanceCRN: + description: CISInstanceCRN is the CRN of the Cloud Internet Services instance managing the DNS zone for the cluster's base domain + type: string + dnsInstanceCRN: + description: DNSInstanceCRN is the CRN of the DNS Services instance managing the DNS zone for the cluster's base domain + type: string + location: + description: Location is where the cluster has been deployed + type: string + providerType: + description: ProviderType indicates the type of cluster that was created + type: string + resourceGroupName: + description: ResourceGroupName is the Resource Group for new IBMCloud resources created for the cluster. + type: string + serviceEndpoints: + description: serviceEndpoints is a list of custom endpoints which will override the default service endpoints of an IBM Cloud service. These endpoints are consumed by components within the cluster to reach the respective IBM Cloud Services. + type: array + items: + description: IBMCloudServiceEndpoint stores the configuration of a custom url to override existing defaults of IBM Cloud Services. + type: object + required: + - name + - url + properties: + name: + description: 'name is the name of the IBM Cloud service. Possible values are: CIS, COS, DNSServices, GlobalSearch, GlobalTagging, HyperProtect, IAM, KeyProtect, ResourceController, ResourceManager, or VPC. For example, the IBM Cloud Private IAM service could be configured with the service `name` of `IAM` and `url` of `https://private.iam.cloud.ibm.com` Whereas the IBM Cloud Private VPC service for US South (Dallas) could be configured with the service `name` of `VPC` and `url` of `https://us.south.private.iaas.cloud.ibm.com`' + type: string + enum: + - CIS + - COS + - DNSServices + - GlobalSearch + - GlobalTagging + - HyperProtect + - IAM + - KeyProtect + - ResourceController + - ResourceManager + - VPC + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + x-kubernetes-validations: + - rule: isURL(self) + message: url must be a valid absolute URL + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + kubevirt: + description: Kubevirt contains settings specific to the kubevirt infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. + type: string + ingressIP: + description: ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + type: string + nutanix: + description: Nutanix contains settings specific to the Nutanix infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + loadBalancer: + description: loadBalancer defines how the load balancer used by the cluster is configured. + type: object + default: + type: OpenShiftManagedDefault + properties: + type: + description: type defines the type of load balancer used by the cluster on Nutanix platform which can be a user-managed or openshift-managed load balancer that is to be used for the OpenShift API and Ingress endpoints. When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing defined in the machine config operator will be deployed. When set to UserManaged these static pods will not be deployed and it is expected that the load balancer is configured out of band by the deployer. When omitted, this means no opinion and the platform is left to choose a reasonable default. The default value is OpenShiftManagedDefault. + type: string + default: OpenShiftManagedDefault + enum: + - OpenShiftManagedDefault + - UserManaged + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: type is immutable once set + openstack: + description: OpenStack contains settings specific to the OpenStack infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + cloudName: + description: cloudName is the name of the desired OpenStack cloud in the client configuration file (`clouds.yaml`). + type: string + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + loadBalancer: + description: loadBalancer defines how the load balancer used by the cluster is configured. + type: object + default: + type: OpenShiftManagedDefault + properties: + type: + description: type defines the type of load balancer used by the cluster on OpenStack platform which can be a user-managed or openshift-managed load balancer that is to be used for the OpenShift API and Ingress endpoints. When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing defined in the machine config operator will be deployed. When set to UserManaged these static pods will not be deployed and it is expected that the load balancer is configured out of band by the deployer. When omitted, this means no opinion and the platform is left to choose a reasonable default. The default value is OpenShiftManagedDefault. + type: string + default: OpenShiftManagedDefault + enum: + - OpenShiftManagedDefault + - UserManaged + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: type is immutable once set + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for OpenStack deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster. + type: string + ovirt: + description: Ovirt contains settings specific to the oVirt infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + loadBalancer: + description: loadBalancer defines how the load balancer used by the cluster is configured. + type: object + default: + type: OpenShiftManagedDefault + properties: + type: + description: type defines the type of load balancer used by the cluster on Ovirt platform which can be a user-managed or openshift-managed load balancer that is to be used for the OpenShift API and Ingress endpoints. When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing defined in the machine config operator will be deployed. When set to UserManaged these static pods will not be deployed and it is expected that the load balancer is configured out of band by the deployer. When omitted, this means no opinion and the platform is left to choose a reasonable default. The default value is OpenShiftManagedDefault. + type: string + default: OpenShiftManagedDefault + enum: + - OpenShiftManagedDefault + - UserManaged + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: type is immutable once set + nodeDNSIP: + description: 'deprecated: as of 4.6, this field is no longer set or honored. It will be removed in a future release.' + type: string + powervs: + description: PowerVS contains settings specific to the Power Systems Virtual Servers infrastructure provider. + type: object + properties: + cisInstanceCRN: + description: CISInstanceCRN is the CRN of the Cloud Internet Services instance managing the DNS zone for the cluster's base domain + type: string + dnsInstanceCRN: + description: DNSInstanceCRN is the CRN of the DNS Services instance managing the DNS zone for the cluster's base domain + type: string + region: + description: region holds the default Power VS region for new Power VS resources created by the cluster. + type: string + resourceGroup: + description: 'resourceGroup is the resource group name for new IBMCloud resources created for a cluster. The resource group specified here will be used by cluster-image-registry-operator to set up a COS Instance in IBMCloud for the cluster registry. More about resource groups can be found here: https://cloud.ibm.com/docs/account?topic=account-rgs. When omitted, the image registry operator won''t be able to configure storage, which results in the image registry cluster operator not being in an available state.' + type: string + maxLength: 40 + pattern: ^[a-zA-Z0-9-_ ]+$ + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: resourceGroup is immutable once set + serviceEndpoints: + description: serviceEndpoints is a list of custom endpoints which will override the default service endpoints of a Power VS service. + type: array + items: + description: PowervsServiceEndpoint stores the configuration of a custom url to override existing defaults of PowerVS Services. + type: object + required: + - name + - url + properties: + name: + description: name is the name of the Power VS service. Few of the services are IAM - https://cloud.ibm.com/apidocs/iam-identity-token-api ResourceController - https://cloud.ibm.com/apidocs/resource-controller/resource-controller Power Cloud - https://cloud.ibm.com/apidocs/power-cloud + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + format: uri + pattern: ^https:// + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + zone: + description: 'zone holds the default zone for the new Power VS resources created by the cluster. Note: Currently only single-zone OCP clusters are supported' + type: string + x-kubernetes-validations: + - rule: '!has(oldSelf.resourceGroup) || has(self.resourceGroup)' + message: cannot unset resourceGroup once set + type: + description: "type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", \"VSphere\", \"oVirt\", \"EquinixMetal\", \"PowerVS\", \"AlibabaCloud\", \"Nutanix\" and \"None\". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform. \n This value will be synced with to the `status.platform` and `status.platformStatus.type`. Currently this value cannot be changed once set." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + vsphere: + description: VSphere contains settings specific to the VSphere infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + loadBalancer: + description: loadBalancer defines how the load balancer used by the cluster is configured. + type: object + default: + type: OpenShiftManagedDefault + properties: + type: + description: type defines the type of load balancer used by the cluster on VSphere platform which can be a user-managed or openshift-managed load balancer that is to be used for the OpenShift API and Ingress endpoints. When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing defined in the machine config operator will be deployed. When set to UserManaged these static pods will not be deployed and it is expected that the load balancer is configured out of band by the deployer. When omitted, this means no opinion and the platform is left to choose a reasonable default. The default value is OpenShiftManagedDefault. + type: string + default: OpenShiftManagedDefault + enum: + - OpenShiftManagedDefault + - UserManaged + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: type is immutable once set + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for vSphere deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster. + type: string + nullable: true + x-kubernetes-embedded-resource: true + internalRegistryPullSecret: + description: internalRegistryPullSecret is the pull secret for the internal registry, used by rpm-ostree to pull images from the internal registry if present + type: string + format: byte + nullable: true + ipFamilies: + description: ipFamilies indicates the IP families in use by the cluster network + type: string + kubeAPIServerServingCAData: + description: kubeAPIServerServingCAData managed Kubelet to API Server Cert... Rotated automatically + type: string + format: byte + network: + description: Network contains additional network related information + type: object + required: + - mtuMigration + properties: + mtuMigration: + description: MTUMigration contains the MTU migration configuration. + type: object + properties: + machine: + description: Machine contains MTU migration configuration for the machine's uplink. + type: object + properties: + from: + description: From is the MTU to migrate from. + type: integer + format: int32 + minimum: 0 + to: + description: To is the MTU to migrate to. + type: integer + format: int32 + minimum: 0 + network: + description: Network contains MTU migration configuration for the default network. + type: object + properties: + from: + description: From is the MTU to migrate from. + type: integer + format: int32 + minimum: 0 + to: + description: To is the MTU to migrate to. + type: integer + format: int32 + minimum: 0 + nullable: true + nullable: true + networkType: + description: 'networkType holds the type of network the cluster is using XXX: this is temporary and will be dropped as soon as possible in favor of a better support to start network related services the proper way. Nobody is also changing this once the cluster is up and running the first time, so, disallow regeneration if this changes.' + type: string + osImageURL: + description: OSImageURL is the old-format container image that contains the OS update payload. + type: string + platform: + description: platform is deprecated, use Infra.Status.PlatformStatus.Type instead + type: string + proxy: + description: proxy holds the current proxy configuration for the nodes + type: object + properties: + httpProxy: + description: httpProxy is the URL of the proxy for HTTP requests. + type: string + httpsProxy: + description: httpsProxy is the URL of the proxy for HTTPS requests. + type: string + noProxy: + description: noProxy is a comma-separated list of hostnames and/or CIDRs for which the proxy should not be used. + type: string + nullable: true + pullSecret: + description: pullSecret is the default pull secret that needs to be installed on all machines. + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + x-kubernetes-map-type: atomic + releaseImage: + description: releaseImage is the image used when installing the cluster + type: string + rootCAData: + description: rootCAData specifies the root CA data + type: string + format: byte + status: + description: ControllerConfigStatus is the status for ControllerConfig + type: object + properties: + conditions: + description: conditions represents the latest available observations of current state. + type: array + items: + description: ControllerConfigStatusCondition contains condition information for ControllerConfigStatus + type: object + required: + - lastTransitionTime + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the time of the last update to the current status object. + type: string + format: date-time + nullable: true + message: + description: message provides additional information about the current condition. This is only to be consumed by humans. + type: string + reason: + description: reason is the reason for the condition's last transition. Reasons are PascalCase + type: string + status: + description: status of the condition, one of True, False, Unknown. + type: string + type: + description: type specifies the state of the operator's reconciliation functionality. + type: string + x-kubernetes-list-type: atomic + controllerCertificates: + description: controllerCertificates represents the latest available observations of the automatically rotating certificates in the MCO. + type: array + items: + description: ControllerCertificate contains info about a specific cert. + type: object + required: + - bundleFile + - signer + - subject + properties: + bundleFile: + description: bundleFile is the larger bundle a cert comes from + type: string + notAfter: + description: notAfter is the upper boundary for validity + type: string + format: date-time + notBefore: + description: notBefore is the lower boundary for validity + type: string + format: date-time + signer: + description: signer is the cert Issuer + type: string + subject: + description: subject is the cert subject + type: string + x-kubernetes-list-type: atomic + observedGeneration: + description: observedGeneration represents the generation observed by the controller. + type: integer + format: int64 diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_controllerconfig.crd.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_controllerconfig.crd.yaml new file mode 100644 index 0000000000..0249d212c1 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_controllerconfig.crd.yaml @@ -0,0 +1,1505 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + # name must match the spec fields below, and be in the form: . + name: controllerconfigs.machineconfiguration.openshift.io + labels: + "openshift.io/operator-managed": "" + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/1453 + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" +spec: + # group name to use for REST API: /apis// + group: machineconfiguration.openshift.io + # either Namespaced or Cluster + scope: Cluster + names: + # plural name to be used in the URL: /apis/// + plural: controllerconfigs + # singular name to be used as an alias on the CLI and for display + singular: controllerconfig + # kind is normally the PascalCased singular type. Your resource manifests use this. + kind: ControllerConfig + # list of versions supported by this CustomResourceDefinition + versions: + - name: v1 + # Each version can be enabled/disabled by Served flag. + served: true + # One and only one version must be marked as the storage version. + storage: true + subresources: + status: {} + schema: + openAPIV3Schema: + description: "ControllerConfig describes configuration for MachineConfigController. This is currently only used to drive the MachineConfig objects generated by the TemplateController. \n Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer)." + 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: + type: object + spec: + description: ControllerConfigSpec is the spec for ControllerConfig resource. + type: object + required: + - additionalTrustBundle + - baseOSContainerImage + - cloudProviderCAData + - cloudProviderConfig + - clusterDNSIP + - dns + - images + - infra + - ipFamilies + - kubeAPIServerServingCAData + - network + - proxy + - releaseImage + - rootCAData + properties: + additionalTrustBundle: + description: additionalTrustBundle is a certificate bundle that will be added to the nodes trusted certificate store. + type: string + format: byte + nullable: true + baseOSContainerImage: + description: BaseOSContainerImage is the new-format container image for operating system updates. + type: string + baseOSExtensionsContainerImage: + description: BaseOSExtensionsContainerImage is the matching extensions container for the new-format container + type: string + cloudProviderCAData: + description: cloudProvider specifies the cloud provider CA data + type: string + format: byte + nullable: true + cloudProviderConfig: + description: cloudProviderConfig is the configuration for the given cloud provider + type: string + clusterDNSIP: + description: clusterDNSIP is the cluster DNS IP address + type: string + dns: + description: dns holds the cluster dns details + 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 the standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + baseDomain: + description: "baseDomain is the base domain of the cluster. All managed DNS records will be sub-domains of this base. \n For example, given the base domain `openshift.example.com`, an API server DNS record may be created for `cluster-api.openshift.example.com`. \n Once set, this field cannot be changed." + type: string + platform: + description: platform holds configuration specific to the underlying infrastructure provider for DNS. When omitted, this means the user has no opinion and the platform is left to choose reasonable defaults. These defaults are subject to change over time. + type: object + required: + - type + properties: + aws: + description: aws contains DNS configuration specific to the Amazon Web Services cloud provider. + type: object + properties: + privateZoneIAMRole: + description: privateZoneIAMRole contains the ARN of an IAM role that should be assumed when performing operations on the cluster's private hosted zone specified in the cluster DNS config. When left empty, no role should be assumed. + type: string + pattern: ^arn:(aws|aws-cn|aws-us-gov):iam::[0-9]{12}:role\/.*$ + type: + description: "type is the underlying infrastructure provider for the cluster. Allowed values: \"\", \"AWS\". \n Individual components may not support all platforms, and must handle unrecognized platforms with best-effort defaults." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + x-kubernetes-validations: + - rule: self in ['','AWS'] + message: allowed values are '' and 'AWS' + x-kubernetes-validations: + - rule: 'has(self.type) && self.type == ''AWS'' ? has(self.aws) : !has(self.aws)' + message: aws configuration is required when platform is AWS, and forbidden otherwise + privateZone: + description: "privateZone is the location where all the DNS records that are only available internally to the cluster exist. \n If this field is nil, no private records should be created. \n Once set, this field cannot be changed." + type: object + properties: + id: + description: "id is the identifier that can be used to find the DNS hosted zone. \n on AWS zone can be fetched using `ID` as id in [1] on Azure zone can be fetched using `ID` as a pre-determined name in [2], on GCP zone can be fetched using `ID` as a pre-determined name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" + type: string + tags: + description: "tags can be used to query the DNS hosted zone. \n on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" + type: object + additionalProperties: + type: string + publicZone: + description: "publicZone is the location where all the DNS records that are publicly accessible to the internet exist. \n If this field is nil, no public records should be created. \n Once set, this field cannot be changed." + type: object + properties: + id: + description: "id is the identifier that can be used to find the DNS hosted zone. \n on AWS zone can be fetched using `ID` as id in [1] on Azure zone can be fetched using `ID` as a pre-determined name in [2], on GCP zone can be fetched using `ID` as a pre-determined name in [3]. \n [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get" + type: string + tags: + description: "tags can be used to query the DNS hosted zone. \n on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone using `Tags` as tag-filters, \n [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options" + type: object + additionalProperties: + type: string + status: + description: status holds observed values from the cluster. They may not be overridden. + type: object + nullable: true + x-kubernetes-embedded-resource: true + etcdDiscoveryDomain: + description: etcdDiscoveryDomain is deprecated, use Infra.Status.EtcdDiscoveryDomain instead + type: string + imageRegistryBundleData: + description: imageRegistryBundleData is the ImageRegistryData + type: array + items: + description: ImageRegistryBundle contains information for writing image registry certificates + type: object + required: + - data + - file + properties: + data: + description: data holds the contents of the bundle that will be written to the file location + type: string + format: byte + file: + description: file holds the name of the file where the bundle will be written to disk + type: string + x-kubernetes-list-type: atomic + imageRegistryBundleUserData: + description: imageRegistryBundleUserData is Image Registry Data provided by the user + type: array + items: + description: ImageRegistryBundle contains information for writing image registry certificates + type: object + required: + - data + - file + properties: + data: + description: data holds the contents of the bundle that will be written to the file location + type: string + format: byte + file: + description: file holds the name of the file where the bundle will be written to disk + type: string + x-kubernetes-list-type: atomic + images: + description: images is map of images that are used by the controller to render templates under ./templates/ + type: object + additionalProperties: + type: string + infra: + description: infra holds the infrastructure details + 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 the standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + type: object + spec: + description: spec holds user settable values for configuration + type: object + properties: + cloudConfig: + description: "cloudConfig is a reference to a ConfigMap containing the cloud provider configuration file. This configuration file is used to configure the Kubernetes cloud provider integration when using the built-in cloud provider integration or the external cloud controller manager. The namespace for this config map is openshift-config. \n cloudConfig should only be consumed by the kube_cloud_config controller. The controller is responsible for using the user configuration in the spec for various platforms and combining that with the user provided ConfigMap in this field to create a stitched kube cloud config. The controller generates a ConfigMap `kube-cloud-config` in `openshift-config-managed` namespace with the kube cloud config is stored in `cloud.conf` key. All the clients are expected to use the generated ConfigMap only." + type: object + properties: + key: + description: Key allows pointing to a specific key/value inside of the configmap. This is useful for logical file references. + type: string + name: + type: string + platformSpec: + description: platformSpec holds desired information specific to the underlying infrastructure provider. + type: object + properties: + alibabaCloud: + description: AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider. + type: object + aws: + description: AWS contains settings specific to the Amazon Web Services infrastructure provider. + type: object + properties: + serviceEndpoints: + description: serviceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. There must be only one ServiceEndpoint for a service. + type: array + items: + description: AWSServiceEndpoint store the configuration of a custom url to override existing defaults of AWS Services. + type: object + properties: + name: + description: name is the name of the AWS service. The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html This must be provided and cannot be empty. + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + pattern: ^https:// + x-kubernetes-list-type: atomic + azure: + description: Azure contains settings specific to the Azure infrastructure provider. + type: object + baremetal: + description: BareMetal contains settings specific to the BareMetal platform. + type: object + properties: + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.apiServerInternalIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: apiServerInternalIPs must contain at most one IPv4 address and at most one IPv6 address + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.ingressIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: ingressIPs must contain at most one IPv4 address and at most one IPv6 address + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, for example "10.0.0.0/8" or "fd00::/8". + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' + message: apiServerInternalIPs list is required once set + - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' + message: ingressIPs list is required once set + equinixMetal: + description: EquinixMetal contains settings specific to the Equinix Metal infrastructure provider. + type: object + external: + description: ExternalPlatformType represents generic infrastructure provider. Platform-specific components should be supplemented separately. + type: object + properties: + platformName: + description: PlatformName holds the arbitrary string representing the infrastructure provider name, expected to be set at the installation time. This field is solely for informational and reporting purposes and is not expected to be used for decision-making. + type: string + default: Unknown + x-kubernetes-validations: + - rule: oldSelf == 'Unknown' || self == oldSelf + message: platform name cannot be changed once set + gcp: + description: GCP contains settings specific to the Google Cloud Platform infrastructure provider. + type: object + ibmcloud: + description: IBMCloud contains settings specific to the IBMCloud infrastructure provider. + type: object + kubevirt: + description: Kubevirt contains settings specific to the kubevirt infrastructure provider. + type: object + nutanix: + description: Nutanix contains settings specific to the Nutanix infrastructure provider. + type: object + required: + - prismCentral + - prismElements + properties: + failureDomains: + description: failureDomains configures failure domains information for the Nutanix platform. When set, the failure domains defined here may be used to spread Machines across prism element clusters to improve fault tolerance of the cluster. + type: array + items: + description: NutanixFailureDomain configures failure domain information for the Nutanix platform. + type: object + required: + - cluster + - name + - subnets + properties: + cluster: + description: cluster is to identify the cluster (the Prism Element under management of the Prism Central), in which the Machine's VM will be created. The cluster identifier (uuid or name) can be obtained from the Prism Central console or using the prism_central API. + type: object + required: + - type + properties: + name: + description: name is the resource name in the PC. It cannot be empty if the type is Name. + type: string + type: + description: type is the identifier type to use for this resource. + type: string + enum: + - UUID + - Name + uuid: + description: uuid is the UUID of the resource in the PC. It cannot be empty if the type is UUID. + type: string + x-kubernetes-validations: + - rule: 'has(self.type) && self.type == ''UUID'' ? has(self.uuid) : !has(self.uuid)' + message: uuid configuration is required when type is UUID, and forbidden otherwise + - rule: 'has(self.type) && self.type == ''Name'' ? has(self.name) : !has(self.name)' + message: name configuration is required when type is Name, and forbidden otherwise + name: + description: name defines the unique name of a failure domain. Name is required and must be at most 64 characters in length. It must consist of only lower case alphanumeric characters and hyphens (-). It must start and end with an alphanumeric character. This value is arbitrary and is used to identify the failure domain within the platform. + type: string + maxLength: 64 + minLength: 1 + pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?' + subnets: + description: subnets holds a list of identifiers (one or more) of the cluster's network subnets for the Machine's VM to connect to. The subnet identifiers (uuid or name) can be obtained from the Prism Central console or using the prism_central API. + type: array + maxItems: 1 + minItems: 1 + items: + description: NutanixResourceIdentifier holds the identity of a Nutanix PC resource (cluster, image, subnet, etc.) + type: object + required: + - type + properties: + name: + description: name is the resource name in the PC. It cannot be empty if the type is Name. + type: string + type: + description: type is the identifier type to use for this resource. + type: string + enum: + - UUID + - Name + uuid: + description: uuid is the UUID of the resource in the PC. It cannot be empty if the type is UUID. + type: string + x-kubernetes-validations: + - rule: 'has(self.type) && self.type == ''UUID'' ? has(self.uuid) : !has(self.uuid)' + message: uuid configuration is required when type is UUID, and forbidden otherwise + - rule: 'has(self.type) && self.type == ''Name'' ? has(self.name) : !has(self.name)' + message: name configuration is required when type is Name, and forbidden otherwise + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + prismCentral: + description: prismCentral holds the endpoint address and port to access the Nutanix Prism Central. When a cluster-wide proxy is installed, by default, this endpoint will be accessed via the proxy. Should you wish for communication with this endpoint not to be proxied, please add the endpoint to the proxy spec.noProxy list. + type: object + required: + - address + - port + properties: + address: + description: address is the endpoint address (DNS name or IP address) of the Nutanix Prism Central or Element (cluster) + type: string + maxLength: 256 + port: + description: port is the port number to access the Nutanix Prism Central or Element (cluster) + type: integer + format: int32 + maximum: 65535 + minimum: 1 + prismElements: + description: prismElements holds one or more endpoint address and port data to access the Nutanix Prism Elements (clusters) of the Nutanix Prism Central. Currently we only support one Prism Element (cluster) for an OpenShift cluster, where all the Nutanix resources (VMs, subnets, volumes, etc.) used in the OpenShift cluster are located. In the future, we may support Nutanix resources (VMs, etc.) spread over multiple Prism Elements (clusters) of the Prism Central. + type: array + items: + description: NutanixPrismElementEndpoint holds the name and endpoint data for a Prism Element (cluster) + type: object + required: + - endpoint + - name + properties: + endpoint: + description: endpoint holds the endpoint address and port data of the Prism Element (cluster). When a cluster-wide proxy is installed, by default, this endpoint will be accessed via the proxy. Should you wish for communication with this endpoint not to be proxied, please add the endpoint to the proxy spec.noProxy list. + type: object + required: + - address + - port + properties: + address: + description: address is the endpoint address (DNS name or IP address) of the Nutanix Prism Central or Element (cluster) + type: string + maxLength: 256 + port: + description: port is the port number to access the Nutanix Prism Central or Element (cluster) + type: integer + format: int32 + maximum: 65535 + minimum: 1 + name: + description: name is the name of the Prism Element (cluster). This value will correspond with the cluster field configured on other resources (eg Machines, PVCs, etc). + type: string + maxLength: 256 + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + openstack: + description: OpenStack contains settings specific to the OpenStack infrastructure provider. + type: object + properties: + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.apiServerInternalIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: apiServerInternalIPs must contain at most one IPv4 address and at most one IPv6 address + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.ingressIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: ingressIPs must contain at most one IPv4 address and at most one IPv6 address + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, for example "10.0.0.0/8" or "fd00::/8". + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' + message: apiServerInternalIPs list is required once set + - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' + message: ingressIPs list is required once set + ovirt: + description: Ovirt contains settings specific to the oVirt infrastructure provider. + type: object + powervs: + description: PowerVS contains settings specific to the IBM Power Systems Virtual Servers infrastructure provider. + type: object + properties: + serviceEndpoints: + description: serviceEndpoints is a list of custom endpoints which will override the default service endpoints of a Power VS service. + type: array + items: + description: PowervsServiceEndpoint stores the configuration of a custom url to override existing defaults of PowerVS Services. + type: object + required: + - name + - url + properties: + name: + description: name is the name of the Power VS service. Few of the services are IAM - https://cloud.ibm.com/apidocs/iam-identity-token-api ResourceController - https://cloud.ibm.com/apidocs/resource-controller/resource-controller Power Cloud - https://cloud.ibm.com/apidocs/power-cloud + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + format: uri + pattern: ^https:// + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + type: + description: type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", "OpenStack", "VSphere", "oVirt", "KubeVirt", "EquinixMetal", "PowerVS", "AlibabaCloud", "Nutanix" and "None". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform. + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + vsphere: + description: VSphere contains settings specific to the VSphere infrastructure provider. + type: object + properties: + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.apiServerInternalIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: apiServerInternalIPs must contain at most one IPv4 address and at most one IPv6 address + failureDomains: + description: failureDomains contains the definition of region, zone and the vCenter topology. If this is omitted failure domains (regions and zones) will not be used. + type: array + items: + description: VSpherePlatformFailureDomainSpec holds the region and zone failure domain and the vCenter topology of that failure domain. + type: object + required: + - name + - region + - server + - topology + - zone + properties: + name: + description: name defines the arbitrary but unique name of a failure domain. + type: string + maxLength: 256 + minLength: 1 + region: + description: region defines the name of a region tag that will be attached to a vCenter datacenter. The tag category in vCenter must be named openshift-region. + type: string + maxLength: 80 + minLength: 1 + server: + description: server is the fully-qualified domain name or the IP address of the vCenter server. --- + type: string + maxLength: 255 + minLength: 1 + topology: + description: Topology describes a given failure domain using vSphere constructs + type: object + required: + - computeCluster + - datacenter + - datastore + - networks + properties: + computeCluster: + description: computeCluster the absolute path of the vCenter cluster in which virtual machine will be located. The absolute path is of the form //host/. The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/host/.*? + datacenter: + description: datacenter is the name of vCenter datacenter in which virtual machines will be located. The maximum length of the datacenter name is 80 characters. + type: string + maxLength: 80 + datastore: + description: datastore is the absolute path of the datastore in which the virtual machine is located. The absolute path is of the form //datastore/ The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/datastore/.*? + folder: + description: folder is the absolute path of the folder where virtual machines are located. The absolute path is of the form //vm/. The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/vm/.*? + networks: + description: networks is the list of port group network names within this failure domain. Currently, we only support a single interface per RHCOS virtual machine. The available networks (port groups) can be listed using `govc ls 'network/*'` The single interface should be the absolute path of the form //network/. + type: array + maxItems: 1 + minItems: 1 + items: + type: string + x-kubernetes-list-type: atomic + resourcePool: + description: resourcePool is the absolute path of the resource pool where virtual machines will be created. The absolute path is of the form //host//Resources/. The maximum length of the path is 2048 characters. + type: string + maxLength: 2048 + pattern: ^/.*?/host/.*?/Resources.* + zone: + description: zone defines the name of a zone tag that will be attached to a vCenter cluster. The tag category in vCenter must be named openshift-zone. + type: string + maxLength: 80 + minLength: 1 + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IP addresses, one from IPv4 family and one from IPv6. In single stack clusters a single IP address is expected. When omitted, values from the status.ingressIPs will be used. Once set, the list cannot be completely removed (but its second entry can). + type: array + maxItems: 2 + items: + description: IP is an IP address (for example, "10.0.0.0" or "fd00::"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*) + x-kubernetes-list-type: set + x-kubernetes-validations: + - rule: 'size(self) == 2 ? self.exists_one(x, x.contains('':'')) : true' + message: ingressIPs must contain at most one IPv4 address and at most one IPv6 address + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, for example "10.0.0.0/8" or "fd00::/8". + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeNetworking: + description: nodeNetworking contains the definition of internal and external network constraints for assigning the node's networking. If this field is omitted, networking defaults to the legacy address selection behavior which is to only support a single address and return the first one found. + type: object + properties: + external: + description: external represents the network configuration of the node that is externally routable. + type: object + properties: + excludeNetworkSubnetCidr: + description: excludeNetworkSubnetCidr IP addresses in subnet ranges will be excluded when selecting the IP address from the VirtualMachine's VM for use in the status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: atomic + network: + description: network VirtualMachine's VM Network names that will be used to when searching for status.addresses fields. Note that if internal.networkSubnetCIDR and external.networkSubnetCIDR are not set, then the vNIC associated to this network must only have a single IP address assigned to it. The available networks (port groups) can be listed using `govc ls 'network/*'` + type: string + networkSubnetCidr: + description: networkSubnetCidr IP address on VirtualMachine's network interfaces included in the fields' CIDRs that will be used in respective status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: set + internal: + description: internal represents the network configuration of the node that is routable only within the cluster. + type: object + properties: + excludeNetworkSubnetCidr: + description: excludeNetworkSubnetCidr IP addresses in subnet ranges will be excluded when selecting the IP address from the VirtualMachine's VM for use in the status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: atomic + network: + description: network VirtualMachine's VM Network names that will be used to when searching for status.addresses fields. Note that if internal.networkSubnetCIDR and external.networkSubnetCIDR are not set, then the vNIC associated to this network must only have a single IP address assigned to it. The available networks (port groups) can be listed using `govc ls 'network/*'` + type: string + networkSubnetCidr: + description: networkSubnetCidr IP address on VirtualMachine's network interfaces included in the fields' CIDRs that will be used in respective status.addresses fields. --- + type: array + items: + type: string + x-kubernetes-list-type: set + vcenters: + description: vcenters holds the connection details for services to communicate with vCenter. Currently, only a single vCenter is supported. --- + type: array + maxItems: 1 + minItems: 0 + items: + description: VSpherePlatformVCenterSpec stores the vCenter connection fields. This is used by the vSphere CCM. + type: object + required: + - datacenters + - server + properties: + datacenters: + description: The vCenter Datacenters in which the RHCOS vm guests are located. This field will be used by the Cloud Controller Manager. Each datacenter listed here should be used within a topology. + type: array + minItems: 1 + items: + type: string + x-kubernetes-list-type: set + port: + description: port is the TCP port that will be used to communicate to the vCenter endpoint. When omitted, this means the user has no opinion and it is up to the platform to choose a sensible default, which is subject to change over time. + type: integer + format: int32 + maximum: 32767 + minimum: 1 + server: + description: server is the fully-qualified domain name or the IP address of the vCenter server. --- + type: string + maxLength: 255 + x-kubernetes-list-type: atomic + x-kubernetes-validations: + - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' + message: apiServerInternalIPs list is required once set + - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' + message: ingressIPs list is required once set + status: + description: status holds observed values from the cluster. They may not be overridden. + type: object + properties: + apiServerInternalURI: + description: apiServerInternalURL is a valid URI with scheme 'https', address and optionally a port (defaulting to 443). apiServerInternalURL can be used by components like kubelets, to contact the Kubernetes API server using the infrastructure provider rather than Kubernetes networking. + type: string + apiServerURL: + description: apiServerURL is a valid URI with scheme 'https', address and optionally a port (defaulting to 443). apiServerURL can be used by components like the web console to tell users where to find the Kubernetes API. + type: string + controlPlaneTopology: + description: controlPlaneTopology expresses the expectations for operands that normally run on control nodes. The default is 'HighlyAvailable', which represents the behavior operators have in a "normal" cluster. The 'SingleReplica' mode will be used in single-node deployments and the operators should not configure the operand for highly-available operation The 'External' mode indicates that the control plane is hosted externally to the cluster and that its components are not visible within the cluster. + type: string + default: HighlyAvailable + enum: + - HighlyAvailable + - SingleReplica + - External + cpuPartitioning: + description: cpuPartitioning expresses if CPU partitioning is a currently enabled feature in the cluster. CPU Partitioning means that this cluster can support partitioning workloads to specific CPU Sets. Valid values are "None" and "AllNodes". When omitted, the default value is "None". The default value of "None" indicates that no nodes will be setup with CPU partitioning. The "AllNodes" value indicates that all nodes have been setup with CPU partitioning, and can then be further configured via the PerformanceProfile API. + type: string + default: None + enum: + - None + - AllNodes + etcdDiscoveryDomain: + description: 'etcdDiscoveryDomain is the domain used to fetch the SRV records for discovering etcd servers and clients. For more info: https://github.com/etcd-io/etcd/blob/329be66e8b3f9e2e6af83c123ff89297e49ebd15/Documentation/op-guide/clustering.md#dns-discovery deprecated: as of 4.7, this field is no longer set or honored. It will be removed in a future release.' + type: string + infrastructureName: + description: infrastructureName uniquely identifies a cluster with a human friendly name. Once set it should not be changed. Must be of max length 27 and must have only alphanumeric or hyphen characters. + type: string + infrastructureTopology: + description: 'infrastructureTopology expresses the expectations for infrastructure services that do not run on control plane nodes, usually indicated by a node selector for a `role` value other than `master`. The default is ''HighlyAvailable'', which represents the behavior operators have in a "normal" cluster. The ''SingleReplica'' mode will be used in single-node deployments and the operators should not configure the operand for highly-available operation NOTE: External topology mode is not applicable for this field.' + type: string + default: HighlyAvailable + enum: + - HighlyAvailable + - SingleReplica + platform: + description: "platform is the underlying infrastructure provider for the cluster. \n Deprecated: Use platformStatus.type instead." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + platformStatus: + description: platformStatus holds status information specific to the underlying infrastructure provider. + type: object + properties: + alibabaCloud: + description: AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider. + type: object + required: + - region + properties: + region: + description: region specifies the region for Alibaba Cloud resources created for the cluster. + type: string + pattern: ^[0-9A-Za-z-]+$ + resourceGroupID: + description: resourceGroupID is the ID of the resource group for the cluster. + type: string + pattern: ^(rg-[0-9A-Za-z]+)?$ + resourceTags: + description: resourceTags is a list of additional tags to apply to Alibaba Cloud resources created for the cluster. + type: array + maxItems: 20 + items: + description: AlibabaCloudResourceTag is the set of tags to add to apply to resources. + type: object + required: + - key + - value + properties: + key: + description: key is the key of the tag. + type: string + maxLength: 128 + minLength: 1 + value: + description: value is the value of the tag. + type: string + maxLength: 128 + minLength: 1 + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + aws: + description: AWS contains settings specific to the Amazon Web Services infrastructure provider. + type: object + properties: + region: + description: region holds the default AWS region for new AWS resources created by the cluster. + type: string + resourceTags: + description: resourceTags is a list of additional tags to apply to AWS resources created for the cluster. See https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html for information on tagging AWS resources. AWS supports a maximum of 50 tags per resource. OpenShift reserves 25 tags for its use, leaving 25 tags available for the user. + type: array + maxItems: 25 + items: + description: AWSResourceTag is a tag to apply to AWS resources created for the cluster. + type: object + required: + - key + - value + properties: + key: + description: key is the key of the tag + type: string + maxLength: 128 + minLength: 1 + pattern: ^[0-9A-Za-z_.:/=+-@]+$ + value: + description: value is the value of the tag. Some AWS service do not support empty values. Since tags are added to resources in many services, the length of the tag value must meet the requirements of all services. + type: string + maxLength: 256 + minLength: 1 + pattern: ^[0-9A-Za-z_.:/=+-@]+$ + x-kubernetes-list-type: atomic + serviceEndpoints: + description: ServiceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. There must be only one ServiceEndpoint for a service. + type: array + items: + description: AWSServiceEndpoint store the configuration of a custom url to override existing defaults of AWS Services. + type: object + properties: + name: + description: name is the name of the AWS service. The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html This must be provided and cannot be empty. + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + pattern: ^https:// + x-kubernetes-list-type: atomic + azure: + description: Azure contains settings specific to the Azure infrastructure provider. + type: object + properties: + armEndpoint: + description: armEndpoint specifies a URL to use for resource management in non-soverign clouds such as Azure Stack. + type: string + cloudName: + description: cloudName is the name of the Azure cloud environment which can be used to configure the Azure SDK with the appropriate Azure API endpoints. If empty, the value is equal to `AzurePublicCloud`. + type: string + enum: + - "" + - AzurePublicCloud + - AzureUSGovernmentCloud + - AzureChinaCloud + - AzureGermanCloud + - AzureStackCloud + networkResourceGroupName: + description: networkResourceGroupName is the Resource Group for network resources like the Virtual Network and Subnets used by the cluster. If empty, the value is same as ResourceGroupName. + type: string + resourceGroupName: + description: resourceGroupName is the Resource Group for new Azure resources created for the cluster. + type: string + resourceTags: + description: resourceTags is a list of additional tags to apply to Azure resources created for the cluster. See https://docs.microsoft.com/en-us/rest/api/resources/tags for information on tagging Azure resources. Due to limitations on Automation, Content Delivery Network, DNS Azure resources, a maximum of 15 tags may be applied. OpenShift reserves 5 tags for internal use, allowing 10 tags for user configuration. + type: array + maxItems: 10 + items: + description: AzureResourceTag is a tag to apply to Azure resources created for the cluster. + type: object + required: + - key + - value + properties: + key: + description: key is the key part of the tag. A tag key can have a maximum of 128 characters and cannot be empty. Key must begin with a letter, end with a letter, number or underscore, and must contain only alphanumeric characters and the following special characters `_ . -`. + type: string + maxLength: 128 + minLength: 1 + pattern: ^[a-zA-Z]([0-9A-Za-z_.-]*[0-9A-Za-z_])?$ + value: + description: 'value is the value part of the tag. A tag value can have a maximum of 256 characters and cannot be empty. Value must contain only alphanumeric characters and the following special characters `_ + , - . / : ; < = > ? @`.' + type: string + maxLength: 256 + minLength: 1 + pattern: ^[0-9A-Za-z_.=+-@]+$ + x-kubernetes-list-type: atomic + x-kubernetes-validations: + - rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + message: resourceTags are immutable and may only be configured during installation + x-kubernetes-validations: + - rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) || has(oldSelf.resourceTags) && has(self.resourceTags)' + message: resourceTags may only be configured during installation + baremetal: + description: BareMetal contains settings specific to the BareMetal platform. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for BareMetal deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster. + type: string + equinixMetal: + description: EquinixMetal contains settings specific to the Equinix Metal infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. + type: string + ingressIP: + description: ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + type: string + external: + description: External contains settings specific to the generic External infrastructure provider. + type: object + properties: + cloudControllerManager: + description: cloudControllerManager contains settings specific to the external Cloud Controller Manager (a.k.a. CCM or CPI). When omitted, new nodes will be not tainted and no extra initialization from the cloud controller manager is expected. + type: object + properties: + state: + description: "state determines whether or not an external Cloud Controller Manager is expected to be installed within the cluster. https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/#running-cloud-controller-manager \n Valid values are \"External\", \"None\" and omitted. When set to \"External\", new nodes will be tainted as uninitialized when created, preventing them from running workloads until they are initialized by the cloud controller manager. When omitted or set to \"None\", new nodes will be not tainted and no extra initialization from the cloud controller manager is expected." + type: string + enum: + - "" + - External + - None + x-kubernetes-validations: + - rule: self == oldSelf + message: state is immutable once set + x-kubernetes-validations: + - rule: (has(self.state) == has(oldSelf.state)) || (!has(oldSelf.state) && self.state != "External") + message: state may not be added or removed once set + x-kubernetes-validations: + - rule: has(self.cloudControllerManager) == has(oldSelf.cloudControllerManager) + message: cloudControllerManager may not be added or removed once set + gcp: + description: GCP contains settings specific to the Google Cloud Platform infrastructure provider. + type: object + properties: + projectID: + description: resourceGroupName is the Project ID for new GCP resources created for the cluster. + type: string + region: + description: region holds the region for new GCP resources created for the cluster. + type: string + ibmcloud: + description: IBMCloud contains settings specific to the IBMCloud infrastructure provider. + type: object + properties: + cisInstanceCRN: + description: CISInstanceCRN is the CRN of the Cloud Internet Services instance managing the DNS zone for the cluster's base domain + type: string + dnsInstanceCRN: + description: DNSInstanceCRN is the CRN of the DNS Services instance managing the DNS zone for the cluster's base domain + type: string + location: + description: Location is where the cluster has been deployed + type: string + providerType: + description: ProviderType indicates the type of cluster that was created + type: string + resourceGroupName: + description: ResourceGroupName is the Resource Group for new IBMCloud resources created for the cluster. + type: string + serviceEndpoints: + description: serviceEndpoints is a list of custom endpoints which will override the default service endpoints of an IBM Cloud service. These endpoints are consumed by components within the cluster to reach the respective IBM Cloud Services. + type: array + items: + description: IBMCloudServiceEndpoint stores the configuration of a custom url to override existing defaults of IBM Cloud Services. + type: object + required: + - name + - url + properties: + name: + description: 'name is the name of the IBM Cloud service. Possible values are: CIS, COS, DNSServices, GlobalSearch, GlobalTagging, HyperProtect, IAM, KeyProtect, ResourceController, ResourceManager, or VPC. For example, the IBM Cloud Private IAM service could be configured with the service `name` of `IAM` and `url` of `https://private.iam.cloud.ibm.com` Whereas the IBM Cloud Private VPC service for US South (Dallas) could be configured with the service `name` of `VPC` and `url` of `https://us.south.private.iaas.cloud.ibm.com`' + type: string + enum: + - CIS + - COS + - DNSServices + - GlobalSearch + - GlobalTagging + - HyperProtect + - IAM + - KeyProtect + - ResourceController + - ResourceManager + - VPC + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + x-kubernetes-validations: + - rule: isURL(self) + message: url must be a valid absolute URL + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + kubevirt: + description: Kubevirt contains settings specific to the kubevirt infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. + type: string + ingressIP: + description: ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. + type: string + nutanix: + description: Nutanix contains settings specific to the Nutanix infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + openstack: + description: OpenStack contains settings specific to the OpenStack infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + cloudName: + description: cloudName is the name of the desired OpenStack cloud in the client configuration file (`clouds.yaml`). + type: string + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + loadBalancer: + description: loadBalancer defines how the load balancer used by the cluster is configured. + type: object + default: + type: OpenShiftManagedDefault + properties: + type: + description: type defines the type of load balancer used by the cluster on OpenStack platform which can be a user-managed or openshift-managed load balancer that is to be used for the OpenShift API and Ingress endpoints. When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing defined in the machine config operator will be deployed. When set to UserManaged these static pods will not be deployed and it is expected that the load balancer is configured out of band by the deployer. When omitted, this means no opinion and the platform is left to choose a reasonable default. The default value is OpenShiftManagedDefault. + type: string + default: OpenShiftManagedDefault + enum: + - OpenShiftManagedDefault + - UserManaged + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: type is immutable once set + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for OpenStack deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster. + type: string + ovirt: + description: Ovirt contains settings specific to the oVirt infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + nodeDNSIP: + description: 'deprecated: as of 4.6, this field is no longer set or honored. It will be removed in a future release.' + type: string + powervs: + description: PowerVS contains settings specific to the Power Systems Virtual Servers infrastructure provider. + type: object + properties: + cisInstanceCRN: + description: CISInstanceCRN is the CRN of the Cloud Internet Services instance managing the DNS zone for the cluster's base domain + type: string + dnsInstanceCRN: + description: DNSInstanceCRN is the CRN of the DNS Services instance managing the DNS zone for the cluster's base domain + type: string + region: + description: region holds the default Power VS region for new Power VS resources created by the cluster. + type: string + resourceGroup: + description: 'resourceGroup is the resource group name for new IBMCloud resources created for a cluster. The resource group specified here will be used by cluster-image-registry-operator to set up a COS Instance in IBMCloud for the cluster registry. More about resource groups can be found here: https://cloud.ibm.com/docs/account?topic=account-rgs. When omitted, the image registry operator won''t be able to configure storage, which results in the image registry cluster operator not being in an available state.' + type: string + maxLength: 40 + pattern: ^[a-zA-Z0-9-_ ]+$ + x-kubernetes-validations: + - rule: oldSelf == '' || self == oldSelf + message: resourceGroup is immutable once set + serviceEndpoints: + description: serviceEndpoints is a list of custom endpoints which will override the default service endpoints of a Power VS service. + type: array + items: + description: PowervsServiceEndpoint stores the configuration of a custom url to override existing defaults of PowerVS Services. + type: object + required: + - name + - url + properties: + name: + description: name is the name of the Power VS service. Few of the services are IAM - https://cloud.ibm.com/apidocs/iam-identity-token-api ResourceController - https://cloud.ibm.com/apidocs/resource-controller/resource-controller Power Cloud - https://cloud.ibm.com/apidocs/power-cloud + type: string + pattern: ^[a-z0-9-]+$ + url: + description: url is fully qualified URI with scheme https, that overrides the default generated endpoint for a client. This must be provided and cannot be empty. + type: string + format: uri + pattern: ^https:// + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + zone: + description: 'zone holds the default zone for the new Power VS resources created by the cluster. Note: Currently only single-zone OCP clusters are supported' + type: string + x-kubernetes-validations: + - rule: '!has(oldSelf.resourceGroup) || has(self.resourceGroup)' + message: cannot unset resourceGroup once set + type: + description: "type is the underlying infrastructure provider for the cluster. This value controls whether infrastructure automation such as service load balancers, dynamic volume provisioning, machine creation and deletion, and other integrations are enabled. If None, no infrastructure automation is enabled. Allowed values are \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", \"OpenStack\", \"VSphere\", \"oVirt\", \"EquinixMetal\", \"PowerVS\", \"AlibabaCloud\", \"Nutanix\" and \"None\". Individual components may not support all platforms, and must handle unrecognized platforms as None if they do not support that platform. \n This value will be synced with to the `status.platform` and `status.platformStatus.type`. Currently this value cannot be changed once set." + type: string + enum: + - "" + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - AlibabaCloud + - Nutanix + - External + vsphere: + description: VSphere contains settings specific to the VSphere infrastructure provider. + type: object + properties: + apiServerInternalIP: + description: "apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI points to. It is the IP for a self-hosted load balancer in front of the API servers. \n Deprecated: Use APIServerInternalIPs instead." + type: string + apiServerInternalIPs: + description: apiServerInternalIPs are the IP addresses to contact the Kubernetes API server that can be used by components inside the cluster, like kubelets using the infrastructure rather than Kubernetes networking. These are the IPs for a self-hosted load balancer in front of the API servers. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + ingressIP: + description: "ingressIP is an external IP which routes to the default ingress controller. The IP is a suitable target of a wildcard DNS record used to resolve default route host names. \n Deprecated: Use IngressIPs instead." + type: string + ingressIPs: + description: ingressIPs are the external IPs which route to the default ingress controller. The IPs are suitable targets of a wildcard DNS record used to resolve default route host names. In dual stack clusters this list contains two IPs otherwise only one. + type: array + format: ip + maxItems: 2 + items: + type: string + x-kubernetes-list-type: set + machineNetworks: + description: machineNetworks are IP networks used to connect all the OpenShift cluster nodes. + type: array + maxItems: 32 + items: + description: CIDR is an IP address range in CIDR notation (for example, "10.0.0.0/8" or "fd00::/8"). + type: string + pattern: (^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))$)|(^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$) + x-kubernetes-list-type: set + nodeDNSIP: + description: nodeDNSIP is the IP address for the internal DNS used by the nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` provides name resolution for the nodes themselves. There is no DNS-as-a-service for vSphere deployments. In order to minimize necessary changes to the datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames to the nodes in the cluster. + type: string + nullable: true + x-kubernetes-embedded-resource: true + internalRegistryPullSecret: + description: internalRegistryPullSecret is the pull secret for the internal registry, used by rpm-ostree to pull images from the internal registry if present + type: string + format: byte + nullable: true + ipFamilies: + description: ipFamilies indicates the IP families in use by the cluster network + type: string + kubeAPIServerServingCAData: + description: kubeAPIServerServingCAData managed Kubelet to API Server Cert... Rotated automatically + type: string + format: byte + network: + description: Network contains additional network related information + type: object + required: + - mtuMigration + properties: + mtuMigration: + description: MTUMigration contains the MTU migration configuration. + type: object + properties: + machine: + description: Machine contains MTU migration configuration for the machine's uplink. + type: object + properties: + from: + description: From is the MTU to migrate from. + type: integer + format: int32 + minimum: 0 + to: + description: To is the MTU to migrate to. + type: integer + format: int32 + minimum: 0 + network: + description: Network contains MTU migration configuration for the default network. + type: object + properties: + from: + description: From is the MTU to migrate from. + type: integer + format: int32 + minimum: 0 + to: + description: To is the MTU to migrate to. + type: integer + format: int32 + minimum: 0 + nullable: true + nullable: true + networkType: + description: 'networkType holds the type of network the cluster is using XXX: this is temporary and will be dropped as soon as possible in favor of a better support to start network related services the proper way. Nobody is also changing this once the cluster is up and running the first time, so, disallow regeneration if this changes.' + type: string + osImageURL: + description: OSImageURL is the old-format container image that contains the OS update payload. + type: string + platform: + description: platform is deprecated, use Infra.Status.PlatformStatus.Type instead + type: string + proxy: + description: proxy holds the current proxy configuration for the nodes + type: object + properties: + httpProxy: + description: httpProxy is the URL of the proxy for HTTP requests. + type: string + httpsProxy: + description: httpsProxy is the URL of the proxy for HTTPS requests. + type: string + noProxy: + description: noProxy is a comma-separated list of hostnames and/or CIDRs for which the proxy should not be used. + type: string + nullable: true + pullSecret: + description: pullSecret is the default pull secret that needs to be installed on all machines. + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + x-kubernetes-map-type: atomic + releaseImage: + description: releaseImage is the image used when installing the cluster + type: string + rootCAData: + description: rootCAData specifies the root CA data + type: string + format: byte + status: + description: ControllerConfigStatus is the status for ControllerConfig + type: object + properties: + conditions: + description: conditions represents the latest available observations of current state. + type: array + items: + description: ControllerConfigStatusCondition contains condition information for ControllerConfigStatus + type: object + required: + - lastTransitionTime + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the time of the last update to the current status object. + type: string + format: date-time + nullable: true + message: + description: message provides additional information about the current condition. This is only to be consumed by humans. + type: string + reason: + description: reason is the reason for the condition's last transition. Reasons are PascalCase + type: string + status: + description: status of the condition, one of True, False, Unknown. + type: string + type: + description: type specifies the state of the operator's reconciliation functionality. + type: string + x-kubernetes-list-type: atomic + controllerCertificates: + description: controllerCertificates represents the latest available observations of the automatically rotating certificates in the MCO. + type: array + items: + description: ControllerCertificate contains info about a specific cert. + type: object + required: + - bundleFile + - signer + - subject + properties: + bundleFile: + description: bundleFile is the larger bundle a cert comes from + type: string + notAfter: + description: notAfter is the upper boundary for validity + type: string + format: date-time + notBefore: + description: notBefore is the lower boundary for validity + type: string + format: date-time + signer: + description: signer is the cert Issuer + type: string + subject: + description: subject is the cert subject + type: string + x-kubernetes-list-type: atomic + observedGeneration: + description: observedGeneration represents the generation observed by the controller. + type: integer + format: int64 diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_kubeletconfig.crd.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_kubeletconfig.crd.yaml new file mode 100644 index 0000000000..7171973b00 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_kubeletconfig.crd.yaml @@ -0,0 +1,158 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: kubeletconfigs.machineconfiguration.openshift.io + labels: + "openshift.io/operator-managed": "" + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/1453 + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" +spec: + group: machineconfiguration.openshift.io + names: + kind: KubeletConfig + listKind: KubeletConfigList + plural: kubeletconfigs + singular: kubeletconfig + scope: Cluster + versions: + - name: v1 + served: true + storage: true + subresources: + status: {} + schema: + openAPIV3Schema: + description: "KubeletConfig describes a customized Kubelet configuration. \n Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer)." + 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: + type: object + spec: + description: KubeletConfigSpec defines the desired state of KubeletConfig + type: object + properties: + autoSizingReserved: + type: boolean + kubeletConfig: + description: kubeletConfig fields are defined in kubernetes upstream. Please refer to the types defined in the version/commit used by OpenShift of the upstream kubernetes. It's important to note that, since the fields of the kubelet configuration are directly fetched from upstream the validation of those values is handled directly by the kubelet. Please refer to the upstream version of the relevant kubernetes for the valid values of these fields. Invalid values of the kubelet configuration fields may render cluster nodes unusable. + type: object + x-kubernetes-preserve-unknown-fields: true + logLevel: + type: integer + format: int32 + machineConfigPoolSelector: + description: MachineConfigPoolSelector selects which pools the KubeletConfig shoud apply to. A nil selector will result in no pools being selected. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + x-kubernetes-map-type: atomic + tlsSecurityProfile: + description: If unset, the default is based on the apiservers.config.openshift.io/cluster resource. Note that only Old and Intermediate profiles are currently supported, and the maximum available minTLSVersion is VersionTLS12. + type: object + properties: + custom: + description: "custom is a user-defined TLS security profile. Be extremely careful using a custom profile as invalid configurations can be catastrophic. An example custom profile looks like this: \n ciphers: - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 - ECDHE-RSA-AES128-GCM-SHA256 - ECDHE-ECDSA-AES128-GCM-SHA256 minTLSVersion: VersionTLS11" + type: object + properties: + ciphers: + description: "ciphers is used to specify the cipher algorithms that are negotiated during the TLS handshake. Operators may remove entries their operands do not support. For example, to use DES-CBC3-SHA (yaml): \n ciphers: - DES-CBC3-SHA" + type: array + items: + type: string + minTLSVersion: + description: "minTLSVersion is used to specify the minimal version of the TLS protocol that is negotiated during the TLS handshake. For example, to use TLS versions 1.1, 1.2 and 1.3 (yaml): \n minTLSVersion: VersionTLS11 \n NOTE: currently the highest minTLSVersion allowed is VersionTLS12" + type: string + enum: + - VersionTLS10 + - VersionTLS11 + - VersionTLS12 + - VersionTLS13 + nullable: true + intermediate: + description: "intermediate is a TLS security profile based on: \n https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28recommended.29 \n and looks like this (yaml): \n ciphers: - TLS_AES_128_GCM_SHA256 - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 - ECDHE-ECDSA-AES128-GCM-SHA256 - ECDHE-RSA-AES128-GCM-SHA256 - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 - DHE-RSA-AES128-GCM-SHA256 - DHE-RSA-AES256-GCM-SHA384 minTLSVersion: VersionTLS12" + type: object + nullable: true + modern: + description: "modern is a TLS security profile based on: \n https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility \n and looks like this (yaml): \n ciphers: - TLS_AES_128_GCM_SHA256 - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 minTLSVersion: VersionTLS13 \n NOTE: Currently unsupported." + type: object + nullable: true + old: + description: "old is a TLS security profile based on: \n https://wiki.mozilla.org/Security/Server_Side_TLS#Old_backward_compatibility \n and looks like this (yaml): \n ciphers: - TLS_AES_128_GCM_SHA256 - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 - ECDHE-ECDSA-AES128-GCM-SHA256 - ECDHE-RSA-AES128-GCM-SHA256 - ECDHE-ECDSA-AES256-GCM-SHA384 - ECDHE-RSA-AES256-GCM-SHA384 - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 - DHE-RSA-AES128-GCM-SHA256 - DHE-RSA-AES256-GCM-SHA384 - DHE-RSA-CHACHA20-POLY1305 - ECDHE-ECDSA-AES128-SHA256 - ECDHE-RSA-AES128-SHA256 - ECDHE-ECDSA-AES128-SHA - ECDHE-RSA-AES128-SHA - ECDHE-ECDSA-AES256-SHA384 - ECDHE-RSA-AES256-SHA384 - ECDHE-ECDSA-AES256-SHA - ECDHE-RSA-AES256-SHA - DHE-RSA-AES128-SHA256 - DHE-RSA-AES256-SHA256 - AES128-GCM-SHA256 - AES256-GCM-SHA384 - AES128-SHA256 - AES256-SHA256 - AES128-SHA - AES256-SHA - DES-CBC3-SHA minTLSVersion: VersionTLS10" + type: object + nullable: true + type: + description: "type is one of Old, Intermediate, Modern or Custom. Custom provides the ability to specify individual TLS security profile parameters. Old, Intermediate and Modern are TLS security profiles based on: \n https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations \n The profiles are intent based, so they may change over time as new ciphers are developed and existing ciphers are found to be insecure. Depending on precisely which ciphers are available to a process, the list may be reduced. \n Note that the Modern profile is currently not supported because it is not yet well adopted by common software libraries." + type: string + enum: + - Old + - Intermediate + - Modern + - Custom + status: + description: KubeletConfigStatus defines the observed state of a KubeletConfig + type: object + properties: + conditions: + description: conditions represents the latest available observations of current state. + type: array + items: + description: KubeletConfigCondition defines the state of the KubeletConfig + type: object + properties: + lastTransitionTime: + description: lastTransitionTime is the time of the last update to the current status object. + type: string + format: date-time + nullable: true + message: + description: message provides additional information about the current condition. This is only to be consumed by humans. + type: string + reason: + description: reason is the reason for the condition's last transition. Reasons are PascalCase + type: string + status: + description: status of the condition, one of True, False, Unknown. + type: string + type: + description: type specifies the state of the operator's reconciliation functionality. + type: string + observedGeneration: + description: observedGeneration represents the generation observed by the controller. + type: integer + format: int64 diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_machineconfig.crd.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_machineconfig.crd.yaml new file mode 100644 index 0000000000..c063e6f0ec --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_machineconfig.crd.yaml @@ -0,0 +1,93 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + # name must match the spec fields below, and be in the form: . + name: machineconfigs.machineconfiguration.openshift.io + labels: + "openshift.io/operator-managed": "" + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/1453 + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" +spec: + # group name to use for REST API: /apis// + group: machineconfiguration.openshift.io + # either Namespaced or Cluster + scope: Cluster + names: + # plural name to be used in the URL: /apis/// + plural: machineconfigs + # singular name to be used as an alias on the CLI and for display + singular: machineconfig + # kind is normally the PascalCased singular type. Your resource manifests use this. + kind: MachineConfig + # shortNames allow shorter string to match your resource on the CLI + shortNames: + - mc + # list of versions supported by this CustomResourceDefinition + versions: + - name: v1 + # Each version can be enabled/disabled by Served flag. + served: true + # One and only one version must be marked as the storage version. + storage: true + additionalPrinterColumns: + - jsonPath: .metadata.annotations.machineconfiguration\.openshift\.io/generated-by-controller-version + description: Version of the controller that generated the machineconfig. This will be empty if the machineconfig is not managed by a controller. + name: GeneratedByController + type: string + - jsonPath: .spec.config.ignition.version + description: Version of the Ignition Config defined in the machineconfig. + name: IgnitionVersion + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + # openAPIV3Schema has been hand modified. Do not overwrite directly with generated crd fields as we do not allow all config fields. + schema: + openAPIV3Schema: + description: "MachineConfig defines the configuration for a machine \n Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer)." + 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 + 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: MachineConfigSpec is the spec for MachineConfig + type: object + properties: + baseOSExtensionsContainerImage: + description: BaseOSExtensionsContainerImage specifies the remote location that will be used to fetch the extensions container matching a new-format OS image + type: string + config: + description: Config is a Ignition Config object. + type: object + x-kubernetes-preserve-unknown-fields: true + extensions: + description: extensions contains a list of additional features that can be enabled on host + type: array + items: + type: string + x-kubernetes-list-type: atomic + fips: + description: fips controls FIPS mode + type: boolean + kernelArguments: + description: kernelArguments contains a list of kernel arguments to be added + type: array + items: + type: string + nullable: true + x-kubernetes-list-type: atomic + kernelType: + description: kernelType contains which kernel we want to be running like default (traditional), realtime, 64k-pages (aarch64 only). + type: string + osImageURL: + description: OSImageURL specifies the remote location that will be used to fetch the OS. + type: string diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_machineconfigpool.crd.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_machineconfigpool.crd.yaml new file mode 100644 index 0000000000..f2afeef4a3 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/0000_80_machineconfigpool.crd.yaml @@ -0,0 +1,347 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + # name must match the spec fields below, and be in the form: . + name: machineconfigpools.machineconfiguration.openshift.io + labels: + "openshift.io/operator-managed": "" + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/1453 + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" +spec: + # group name to use for REST API: /apis// + group: machineconfiguration.openshift.io + # either Namespaced or Cluster + scope: Cluster + names: + # plural name to be used in the URL: /apis/// + plural: machineconfigpools + # singular name to be used as an alias on the CLI and for display + singular: machineconfigpool + # kind is normally the PascalCased singular type. Your resource manifests use this. + kind: MachineConfigPool + # shortNames allow shorter string to match your resource on the CLI + shortNames: + - mcp + # list of versions supported by this CustomResourceDefinition + versions: + - name: v1 + # Each version can be enabled/disabled by Served flag. + served: true + # One and only one version must be marked as the storage version. + storage: true + subresources: + status: {} + additionalPrinterColumns: + - jsonPath: .status.configuration.name + name: Config + type: string + - jsonPath: .status.conditions[?(@.type=="Updated")].status + description: When all the machines in the pool are updated to the correct machine config. + name: Updated + type: string + - jsonPath: .status.conditions[?(@.type=="Updating")].status + description: When at least one of machine is not either not updated or is in the process of updating to the desired machine config. + name: Updating + type: string + - jsonPath: .status.conditions[?(@.type=="Degraded")].status + description: When progress is blocked on updating one or more nodes, or the pool configuration is failing. + name: Degraded + type: string + - jsonPath: .status.machineCount + description: Total number of machines in the machine config pool + name: MachineCount + type: number + - jsonPath: .status.readyMachineCount + description: Total number of ready machines targeted by the pool + name: ReadyMachineCount + type: number + - jsonPath: .status.updatedMachineCount + description: Total number of machines targeted by the pool that have the CurrentMachineConfig as their config + name: UpdatedMachineCount + type: number + - jsonPath: .status.degradedMachineCount + description: Total number of machines marked degraded (or unreconcilable) + name: DegradedMachineCount + type: number + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + schema: + openAPIV3Schema: + description: "MachineConfigPool describes a pool of MachineConfigs. \n Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer)." + 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: + type: object + spec: + description: MachineConfigPoolSpec is the spec for MachineConfigPool resource. + type: object + properties: + configuration: + description: The targeted MachineConfig object for the machine config pool. + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + source: + description: source is the list of MachineConfig objects that were used to generate the single MachineConfig object specified in `content`. + type: array + items: + description: "ObjectReference contains enough information to let you inspect or modify the referred object. --- New uses of this type are discouraged because of difficulty describing its usage when embedded in APIs. 1. Ignored fields. It includes many fields which are not generally honored. For instance, ResourceVersion and FieldPath are both very rarely valid in actual usage. 2. Invalid usage help. It is impossible to add specific help for individual usage. In most embedded usages, there are particular restrictions like, \"must refer only to types A and B\" or \"UID not honored\" or \"name must be restricted\". Those cannot be well described when embedded. 3. Inconsistent validation. Because the usages are different, the validation rules are different by usage, which makes it hard for users to predict what will happen. 4. The fields are both imprecise and overly precise. Kind is not a precise mapping to a URL. This can produce ambiguity during interpretation and require a REST mapping. In most cases, the dependency is on the group,resource tuple and the version of the actual struct is irrelevant. 5. We cannot easily change it. Because this type is embedded in many locations, updates to this type will affect numerous schemas. Don't make new APIs embed an underspecified API type they do not control. \n Instead of using this type, create a locally provided and used type that is well-focused on your reference. For example, ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 ." + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + x-kubernetes-map-type: atomic + machineConfigSelector: + description: machineConfigSelector specifies a label selector for MachineConfigs. Refer https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ on how label and selectors work. + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + x-kubernetes-map-type: atomic + maxUnavailable: + description: "maxUnavailable defines either an integer number or percentage of nodes in the pool that can go Unavailable during an update. This includes nodes Unavailable for any reason, including user initiated cordons, failing nodes, etc. The default value is 1. \n A value larger than 1 will mean multiple nodes going unavailable during the update, which may affect your workload stress on the remaining nodes. You cannot set this value to 0 to stop updates (it will default back to 1); to stop updates, use the 'paused' property instead. Drain will respect Pod Disruption Budgets (PDBs) such as etcd quorum guards, even if maxUnavailable is greater than one." + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + nodeSelector: + description: nodeSelector specifies a label selector for Machines + type: object + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. The requirements are ANDed. + type: array + items: + description: A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values. + type: object + required: + - key + - operator + properties: + key: + description: key is the label key that the selector applies to. + type: string + operator: + description: operator represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch. + type: array + items: + type: string + matchLabels: + description: matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels map is equivalent to an element of matchExpressions, whose key field is "key", the operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + additionalProperties: + type: string + x-kubernetes-map-type: atomic + paused: + description: paused specifies whether or not changes to this machine config pool should be stopped. This includes generating new desiredMachineConfig and update of machines. + type: boolean + status: + description: MachineConfigPoolStatus is the status for MachineConfigPool resource. + type: object + properties: + certExpirys: + description: certExpirys keeps track of important certificate expiration data + type: array + items: + description: ceryExpiry contains the bundle name and the expiry date + type: object + required: + - bundle + - subject + properties: + bundle: + description: bundle is the name of the bundle in which the subject certificate resides + type: string + expiry: + description: expiry is the date after which the certificate will no longer be valid + type: string + format: date-time + subject: + description: subject is the subject of the certificate + type: string + x-kubernetes-list-type: atomic + conditions: + description: conditions represents the latest available observations of current state. + type: array + items: + description: MachineConfigPoolCondition contains condition information for an MachineConfigPool. + type: object + properties: + lastTransitionTime: + description: lastTransitionTime is the timestamp corresponding to the last status change of this condition. + type: string + format: date-time + nullable: true + message: + description: message is a human readable description of the details of the last transition, complementing reason. + type: string + reason: + description: reason is a brief machine readable explanation for the condition's last transition. + type: string + status: + description: status of the condition, one of ('True', 'False', 'Unknown'). + type: string + type: + description: type of the condition, currently ('Done', 'Updating', 'Failed'). + type: string + x-kubernetes-list-type: atomic + configuration: + description: configuration represents the current MachineConfig object for the machine config pool. + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + source: + description: source is the list of MachineConfig objects that were used to generate the single MachineConfig object specified in `content`. + type: array + items: + description: "ObjectReference contains enough information to let you inspect or modify the referred object. --- New uses of this type are discouraged because of difficulty describing its usage when embedded in APIs. 1. Ignored fields. It includes many fields which are not generally honored. For instance, ResourceVersion and FieldPath are both very rarely valid in actual usage. 2. Invalid usage help. It is impossible to add specific help for individual usage. In most embedded usages, there are particular restrictions like, \"must refer only to types A and B\" or \"UID not honored\" or \"name must be restricted\". Those cannot be well described when embedded. 3. Inconsistent validation. Because the usages are different, the validation rules are different by usage, which makes it hard for users to predict what will happen. 4. The fields are both imprecise and overly precise. Kind is not a precise mapping to a URL. This can produce ambiguity during interpretation and require a REST mapping. In most cases, the dependency is on the group,resource tuple and the version of the actual struct is irrelevant. 5. We cannot easily change it. Because this type is embedded in many locations, updates to this type will affect numerous schemas. Don't make new APIs embed an underspecified API type they do not control. \n Instead of using this type, create a locally provided and used type that is well-focused on your reference. For example, ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 ." + type: object + properties: + apiVersion: + description: API version of the referent. + type: string + fieldPath: + description: 'If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object. TODO: this design is not final and this field is subject to change in the future.' + type: string + kind: + description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + name: + description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + type: string + namespace: + description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + type: string + resourceVersion: + description: 'Specific resourceVersion to which this reference is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + type: string + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + x-kubernetes-map-type: atomic + x-kubernetes-list-type: atomic + uid: + description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + type: string + x-kubernetes-map-type: atomic + degradedMachineCount: + description: degradedMachineCount represents the total number of machines marked degraded (or unreconcilable). A node is marked degraded if applying a configuration failed.. + type: integer + format: int32 + machineCount: + description: machineCount represents the total number of machines in the machine config pool. + type: integer + format: int32 + observedGeneration: + description: observedGeneration represents the generation observed by the controller. + type: integer + format: int64 + readyMachineCount: + description: readyMachineCount represents the total number of ready machines targeted by the pool. + type: integer + format: int32 + unavailableMachineCount: + description: unavailableMachineCount represents the total number of unavailable (non-ready) machines targeted by the pool. A node is marked unavailable if it is in updating state or NodeReady condition is false. + type: integer + format: int32 + updatedMachineCount: + description: updatedMachineCount represents the total number of machines targeted by the pool that have the CurrentMachineConfig as their config. + type: integer + format: int32 diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/custom.controllerconfig.testsuite.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/custom.controllerconfig.testsuite.yaml new file mode 100644 index 0000000000..6d54b498cd --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/custom.controllerconfig.testsuite.yaml @@ -0,0 +1,122 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "[Custom] ControllerConfig" +crd: 0000_80_controllerconfig-CustomNoUpgrade.crd.yaml +tests: + onCreate: + - name: Should be able to create a ControllerConfig for vSphere with external load balancer + initial: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: ControllerConfig + spec: + additionalTrustBundle: Y2VydGlmaWNhdGUK + baseOSContainerImage: example.com/example/openshift-release-dev@sha256:d98795f7932441b30bb8bcfbbf05912875383fad1f2b3be08a22ec148d68607e + baseOSExtensionsContainerImage: example.com/example/openshift-release-dev@sha256:d98795f7932441b30bb8bcfbbf05912875383fad1f2b3be08a22ec148d68607e + cloudProviderCAData: null + cloudProviderConfig: "" + clusterDNSIP: fd02::a + dns: + apiVersion: config.openshift.io/v1 + kind: DNS + spec: + baseDomain: fake.redhat.com + images: + machineConfigOperator: rexample.com/example/openshift-release-dev@sha256:2c3ea52ac3a41c6d58e85977c3149413e3fa4b70eb2397426456863adbf43306 + infra: + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + cloudConfig: + name: "" + platformSpec: + type: VSphere + vsphere: {} + status: + apiServerInternalURI: https://api-int.cnfde4.sno.ptp.lab.eng.bos.redhat.com:6443 + apiServerURL: https://api.cnfde4.sno.ptp.lab.eng.bos.redhat.com:6443 + cpuPartitioning: "None" + controlPlaneTopology: SingleReplica + etcdDiscoveryDomain: "" + infrastructureName: cnfde4-sxhr7 + infrastructureTopology: SingleReplica + platform: VSphere + platformStatus: + type: VSphere + vsphere: + apiServerInternalIP: 10.38.153.2 + apiServerInternalIPs: + - 10.38.153.2 + ingressIP: 10.38.153.3 + ingressIPs: + - 10.38.153.3 + loadBalancer: + type: UserManaged + ipFamilies: IPv6 + kubeAPIServerServingCAData: Y2VydGlmaWNhdGUK + network: null + networkType: OVNKubernetes + osImageURL: example.com/example/openshift-release-dev@sha256:eacdc37aec78fdbf8caa9601e4012ab31453cf59b086474901900e853e803ea8 + platform: none + proxy: null + pullSecret: + name: pull-secret + namespace: openshift-config + releaseImage: "" + rootCAData: Y2VydGlmaWNhdGUK + expected: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: ControllerConfig + spec: + additionalTrustBundle: Y2VydGlmaWNhdGUK + baseOSContainerImage: example.com/example/openshift-release-dev@sha256:d98795f7932441b30bb8bcfbbf05912875383fad1f2b3be08a22ec148d68607e + baseOSExtensionsContainerImage: example.com/example/openshift-release-dev@sha256:d98795f7932441b30bb8bcfbbf05912875383fad1f2b3be08a22ec148d68607e + cloudProviderCAData: null + cloudProviderConfig: "" + clusterDNSIP: fd02::a + dns: + apiVersion: config.openshift.io/v1 + kind: DNS + spec: + baseDomain: fake.redhat.com + images: + machineConfigOperator: rexample.com/example/openshift-release-dev@sha256:2c3ea52ac3a41c6d58e85977c3149413e3fa4b70eb2397426456863adbf43306 + infra: + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + cloudConfig: + name: "" + platformSpec: + type: VSphere + vsphere: {} + status: + apiServerInternalURI: https://api-int.cnfde4.sno.ptp.lab.eng.bos.redhat.com:6443 + apiServerURL: https://api.cnfde4.sno.ptp.lab.eng.bos.redhat.com:6443 + cpuPartitioning: "None" + controlPlaneTopology: SingleReplica + etcdDiscoveryDomain: "" + infrastructureName: cnfde4-sxhr7 + infrastructureTopology: SingleReplica + platform: VSphere + platformStatus: + type: VSphere + vsphere: + apiServerInternalIP: 10.38.153.2 + apiServerInternalIPs: + - 10.38.153.2 + ingressIP: 10.38.153.3 + ingressIPs: + - 10.38.153.3 + loadBalancer: + type: UserManaged + ipFamilies: IPv6 + kubeAPIServerServingCAData: Y2VydGlmaWNhdGUK + network: null + networkType: OVNKubernetes + osImageURL: example.com/example/openshift-release-dev@sha256:eacdc37aec78fdbf8caa9601e4012ab31453cf59b086474901900e853e803ea8 + platform: none + proxy: null + pullSecret: + name: pull-secret + namespace: openshift-config + releaseImage: "" + rootCAData: Y2VydGlmaWNhdGUK diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/doc.go b/vendor/github.com/openshift/api/machineconfiguration/v1/doc.go new file mode 100644 index 0000000000..c3b273145d --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/doc.go @@ -0,0 +1,6 @@ +// +k8s:deepcopy-gen=package,register +// +groupName=machineconfiguration.openshift.io + +// +kubebuilder:validation:Optional +// Package v1 is the v1 version of the API. +package v1 diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/register.go b/vendor/github.com/openshift/api/machineconfiguration/v1/register.go new file mode 100644 index 0000000000..bbafc28dea --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/register.go @@ -0,0 +1,52 @@ +package v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + // GroupName is the group name of this api + GroupName = "machineconfiguration.openshift.io" + // GroupVersion is the version of this api group + GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + schemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // Install is a function which adds this version to a scheme + Install = schemeBuilder.AddToScheme + + // SchemeGroupVersion is DEPRECATED + SchemeGroupVersion = GroupVersion + // AddToScheme is DEPRECATED + AddToScheme = Install +) + +// addKnownTypes adds types to API group +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &ContainerRuntimeConfig{}, + &ContainerRuntimeConfigList{}, + &ControllerConfig{}, + &ControllerConfigList{}, + &KubeletConfig{}, + &KubeletConfigList{}, + &MachineConfig{}, + &MachineConfigList{}, + &MachineConfigPool{}, + &MachineConfigPoolList{}, + ) + + metav1.AddToGroupVersion(scheme, GroupVersion) + + return nil +} + +// Resource is used to validate existence of a resource in this API group +func Resource(resource string) schema.GroupResource { + return schema.GroupResource{Group: GroupName, Resource: resource} +} + +// Kind is used to validate existence of a resource kind in this API group +func Kind(kind string) schema.GroupKind { + return schema.GroupKind{Group: GroupName, Kind: kind} +} diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/stable.containerruntimeconfig.testsuite.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/stable.containerruntimeconfig.testsuite.yaml new file mode 100644 index 0000000000..5a901bfebe --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/stable.containerruntimeconfig.testsuite.yaml @@ -0,0 +1,16 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "[Stable] ContainerRuntimeConfig" +crd: 0000_80_containerruntimeconfig.crd.yaml +tests: + onCreate: + - name: Should be able to create a minimal ContainerRuntimeConfig + initial: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: ContainerRuntimeConfig + spec: + containerRuntimeConfig: {} + expected: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: ContainerRuntimeConfig + spec: + containerRuntimeConfig: {} diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/stable.controllerconfig.testsuite.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/stable.controllerconfig.testsuite.yaml new file mode 100644 index 0000000000..cb4b370d69 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/stable.controllerconfig.testsuite.yaml @@ -0,0 +1,102 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "[Stable] ControllerConfig" +crd: 0000_80_controllerconfig-Default.crd.yaml +tests: + onCreate: + - name: Should be able to create a minimal ControllerConfig + initial: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: ControllerConfig + spec: + additionalTrustBundle: Y2VydGlmaWNhdGUK + baseOSContainerImage: example.com/example/openshift-release-dev@sha256:d98795f7932441b30bb8bcfbbf05912875383fad1f2b3be08a22ec148d68607e + baseOSExtensionsContainerImage: example.com/example/openshift-release-dev@sha256:d98795f7932441b30bb8bcfbbf05912875383fad1f2b3be08a22ec148d68607e + cloudProviderCAData: null + cloudProviderConfig: "" + clusterDNSIP: fd02::a + dns: + apiVersion: config.openshift.io/v1 + kind: DNS + spec: + baseDomain: fake.redhat.com + images: + machineConfigOperator: rexample.com/example/openshift-release-dev@sha256:2c3ea52ac3a41c6d58e85977c3149413e3fa4b70eb2397426456863adbf43306 + infra: + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + cloudConfig: + name: "" + platformSpec: + type: None + status: + apiServerInternalURI: https://api-int.cnfde4.sno.ptp.lab.eng.bos.redhat.com:6443 + apiServerURL: https://api.cnfde4.sno.ptp.lab.eng.bos.redhat.com:6443 + cpuPartitioning: "None" + controlPlaneTopology: SingleReplica + etcdDiscoveryDomain: "" + infrastructureName: cnfde4-sxhr7 + infrastructureTopology: SingleReplica + platform: None + platformStatus: + type: None + ipFamilies: IPv6 + kubeAPIServerServingCAData: Y2VydGlmaWNhdGUK + network: null + networkType: OVNKubernetes + osImageURL: example.com/example/openshift-release-dev@sha256:eacdc37aec78fdbf8caa9601e4012ab31453cf59b086474901900e853e803ea8 + platform: none + proxy: null + pullSecret: + name: pull-secret + namespace: openshift-config + releaseImage: "" + rootCAData: Y2VydGlmaWNhdGUK + expected: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: ControllerConfig + spec: + additionalTrustBundle: Y2VydGlmaWNhdGUK + baseOSContainerImage: example.com/example/openshift-release-dev@sha256:d98795f7932441b30bb8bcfbbf05912875383fad1f2b3be08a22ec148d68607e + baseOSExtensionsContainerImage: example.com/example/openshift-release-dev@sha256:d98795f7932441b30bb8bcfbbf05912875383fad1f2b3be08a22ec148d68607e + cloudProviderCAData: null + cloudProviderConfig: "" + clusterDNSIP: fd02::a + dns: + apiVersion: config.openshift.io/v1 + kind: DNS + spec: + baseDomain: fake.redhat.com + images: + machineConfigOperator: rexample.com/example/openshift-release-dev@sha256:2c3ea52ac3a41c6d58e85977c3149413e3fa4b70eb2397426456863adbf43306 + infra: + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + cloudConfig: + name: "" + platformSpec: + type: None + status: + apiServerInternalURI: https://api-int.cnfde4.sno.ptp.lab.eng.bos.redhat.com:6443 + apiServerURL: https://api.cnfde4.sno.ptp.lab.eng.bos.redhat.com:6443 + cpuPartitioning: "None" + controlPlaneTopology: SingleReplica + etcdDiscoveryDomain: "" + infrastructureName: cnfde4-sxhr7 + infrastructureTopology: SingleReplica + platform: None + platformStatus: + type: None + ipFamilies: IPv6 + kubeAPIServerServingCAData: Y2VydGlmaWNhdGUK + network: null + networkType: OVNKubernetes + osImageURL: example.com/example/openshift-release-dev@sha256:eacdc37aec78fdbf8caa9601e4012ab31453cf59b086474901900e853e803ea8 + platform: none + proxy: null + pullSecret: + name: pull-secret + namespace: openshift-config + releaseImage: "" + rootCAData: Y2VydGlmaWNhdGUK diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/stable.kubeletconfig.testsuite.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/stable.kubeletconfig.testsuite.yaml new file mode 100644 index 0000000000..c4456ce82b --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/stable.kubeletconfig.testsuite.yaml @@ -0,0 +1,14 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "[Stable] KubeletConfig" +crd: 0000_80_kubeletconfig.crd.yaml +tests: + onCreate: + - name: Should be able to create a minimal KubeletConfig + initial: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: KubeletConfig + spec: {} # No spec is required for a KubeletConfig + expected: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: KubeletConfig + spec: {} diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/stable.machineconfig.testsuite.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/stable.machineconfig.testsuite.yaml new file mode 100644 index 0000000000..26db0e8aed --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/stable.machineconfig.testsuite.yaml @@ -0,0 +1,14 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "[Stable] MachineConfig" +crd: 0000_80_machineconfig.crd.yaml +tests: + onCreate: + - name: Should be able to create a minimal MachineConfig + initial: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + spec: {} # No spec is required for a MachineConfig + expected: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfig + spec: {} diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/stable.machineconfigpool.testsuite.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/stable.machineconfigpool.testsuite.yaml new file mode 100644 index 0000000000..37fb01e733 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/stable.machineconfigpool.testsuite.yaml @@ -0,0 +1,14 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "[Stable] MachineConfigPool" +crd: 0000_80_machineconfigpool.crd.yaml +tests: + onCreate: + - name: Should be able to create a minimal MachineConfigPool + initial: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + spec: {} # No spec is required for a MachineConfigPool + expected: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: MachineConfigPool + spec: {} diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/techpreview.controllerconfig.testsuite.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1/techpreview.controllerconfig.testsuite.yaml new file mode 100644 index 0000000000..37239c6fd1 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/techpreview.controllerconfig.testsuite.yaml @@ -0,0 +1,122 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "[TechPreview] ControllerConfig" +crd: 0000_80_controllerconfig-TechPreviewNoUpgrade.crd.yaml +tests: + onCreate: + - name: Should be able to create a ControllerConfig for vSphere with external load balancer + initial: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: ControllerConfig + spec: + additionalTrustBundle: Y2VydGlmaWNhdGUK + baseOSContainerImage: example.com/example/openshift-release-dev@sha256:d98795f7932441b30bb8bcfbbf05912875383fad1f2b3be08a22ec148d68607e + baseOSExtensionsContainerImage: example.com/example/openshift-release-dev@sha256:d98795f7932441b30bb8bcfbbf05912875383fad1f2b3be08a22ec148d68607e + cloudProviderCAData: null + cloudProviderConfig: "" + clusterDNSIP: fd02::a + dns: + apiVersion: config.openshift.io/v1 + kind: DNS + spec: + baseDomain: fake.redhat.com + images: + machineConfigOperator: rexample.com/example/openshift-release-dev@sha256:2c3ea52ac3a41c6d58e85977c3149413e3fa4b70eb2397426456863adbf43306 + infra: + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + cloudConfig: + name: "" + platformSpec: + type: VSphere + vsphere: {} + status: + apiServerInternalURI: https://api-int.cnfde4.sno.ptp.lab.eng.bos.redhat.com:6443 + apiServerURL: https://api.cnfde4.sno.ptp.lab.eng.bos.redhat.com:6443 + cpuPartitioning: "None" + controlPlaneTopology: SingleReplica + etcdDiscoveryDomain: "" + infrastructureName: cnfde4-sxhr7 + infrastructureTopology: SingleReplica + platform: VSphere + platformStatus: + type: VSphere + vsphere: + apiServerInternalIP: 10.38.153.2 + apiServerInternalIPs: + - 10.38.153.2 + ingressIP: 10.38.153.3 + ingressIPs: + - 10.38.153.3 + loadBalancer: + type: UserManaged + ipFamilies: IPv6 + kubeAPIServerServingCAData: Y2VydGlmaWNhdGUK + network: null + networkType: OVNKubernetes + osImageURL: example.com/example/openshift-release-dev@sha256:eacdc37aec78fdbf8caa9601e4012ab31453cf59b086474901900e853e803ea8 + platform: none + proxy: null + pullSecret: + name: pull-secret + namespace: openshift-config + releaseImage: "" + rootCAData: Y2VydGlmaWNhdGUK + expected: | + apiVersion: machineconfiguration.openshift.io/v1 + kind: ControllerConfig + spec: + additionalTrustBundle: Y2VydGlmaWNhdGUK + baseOSContainerImage: example.com/example/openshift-release-dev@sha256:d98795f7932441b30bb8bcfbbf05912875383fad1f2b3be08a22ec148d68607e + baseOSExtensionsContainerImage: example.com/example/openshift-release-dev@sha256:d98795f7932441b30bb8bcfbbf05912875383fad1f2b3be08a22ec148d68607e + cloudProviderCAData: null + cloudProviderConfig: "" + clusterDNSIP: fd02::a + dns: + apiVersion: config.openshift.io/v1 + kind: DNS + spec: + baseDomain: fake.redhat.com + images: + machineConfigOperator: rexample.com/example/openshift-release-dev@sha256:2c3ea52ac3a41c6d58e85977c3149413e3fa4b70eb2397426456863adbf43306 + infra: + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + cloudConfig: + name: "" + platformSpec: + type: VSphere + vsphere: {} + status: + apiServerInternalURI: https://api-int.cnfde4.sno.ptp.lab.eng.bos.redhat.com:6443 + apiServerURL: https://api.cnfde4.sno.ptp.lab.eng.bos.redhat.com:6443 + cpuPartitioning: "None" + controlPlaneTopology: SingleReplica + etcdDiscoveryDomain: "" + infrastructureName: cnfde4-sxhr7 + infrastructureTopology: SingleReplica + platform: VSphere + platformStatus: + type: VSphere + vsphere: + apiServerInternalIP: 10.38.153.2 + apiServerInternalIPs: + - 10.38.153.2 + ingressIP: 10.38.153.3 + ingressIPs: + - 10.38.153.3 + loadBalancer: + type: UserManaged + ipFamilies: IPv6 + kubeAPIServerServingCAData: Y2VydGlmaWNhdGUK + network: null + networkType: OVNKubernetes + osImageURL: example.com/example/openshift-release-dev@sha256:eacdc37aec78fdbf8caa9601e4012ab31453cf59b086474901900e853e803ea8 + platform: none + proxy: null + pullSecret: + name: pull-secret + namespace: openshift-config + releaseImage: "" + rootCAData: Y2VydGlmaWNhdGUK diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/types.go b/vendor/github.com/openshift/api/machineconfiguration/v1/types.go new file mode 100644 index 0000000000..3b00b134d4 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/types.go @@ -0,0 +1,762 @@ +package v1 + +import ( + configv1 "github.com/openshift/api/config/v1" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/intstr" +) + +// MachineConfigRoleLabelKey is metadata key in the MachineConfig. Specifies the node role that config should be applied to. +// For example: `master` or `worker` +const MachineConfigRoleLabelKey = "machineconfiguration.openshift.io/role" + +// KubeletConfigRoleLabelPrefix is the label that must be present in the KubeletConfig CR +const KubeletConfigRoleLabelPrefix = "pools.operator.machineconfiguration.openshift.io/" + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ControllerConfig describes configuration for MachineConfigController. +// This is currently only used to drive the MachineConfig objects generated by the TemplateController. +// +// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer). +// +openshift:compatibility-gen:level=1 +type ControllerConfig struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // TODO(jkyros): inconsistent historical generation resulted in the controllerconfig CRD being + // generated with all fields required, while everything else was generated with optional + + // +kubebuilder:validation:Required + Spec ControllerConfigSpec `json:"spec"` + // +optional + Status ControllerConfigStatus `json:"status"` +} + +// ControllerConfigSpec is the spec for ControllerConfig resource. +type ControllerConfigSpec struct { + // clusterDNSIP is the cluster DNS IP address + // +kubebuilder:validation:Required + ClusterDNSIP string `json:"clusterDNSIP"` + + // cloudProviderConfig is the configuration for the given cloud provider + // +kubebuilder:validation:Required + CloudProviderConfig string `json:"cloudProviderConfig"` + + // platform is deprecated, use Infra.Status.PlatformStatus.Type instead + // +optional + Platform string `json:"platform,omitempty"` + + // etcdDiscoveryDomain is deprecated, use Infra.Status.EtcdDiscoveryDomain instead + // +optional + EtcdDiscoveryDomain string `json:"etcdDiscoveryDomain,omitempty"` + + // TODO: Use string for CA data + + // kubeAPIServerServingCAData managed Kubelet to API Server Cert... Rotated automatically + // +kubebuilder:validation:Required + KubeAPIServerServingCAData []byte `json:"kubeAPIServerServingCAData"` + + // rootCAData specifies the root CA data + // +kubebuilder:validation:Required + RootCAData []byte `json:"rootCAData"` + + // cloudProvider specifies the cloud provider CA data + // +kubebuilder:validation:Required + // +nullable + CloudProviderCAData []byte `json:"cloudProviderCAData"` + + // additionalTrustBundle is a certificate bundle that will be added to the nodes + // trusted certificate store. + // +kubebuilder:validation:Required + // +nullable + AdditionalTrustBundle []byte `json:"additionalTrustBundle"` + + // imageRegistryBundleUserData is Image Registry Data provided by the user + // +listType=atomic + // +optional + ImageRegistryBundleUserData []ImageRegistryBundle `json:"imageRegistryBundleUserData"` + + // imageRegistryBundleData is the ImageRegistryData + // +listType=atomic + // +optional + ImageRegistryBundleData []ImageRegistryBundle `json:"imageRegistryBundleData"` + + // TODO: Investigate using a ConfigMapNameReference for the PullSecret and OSImageURL + + // pullSecret is the default pull secret that needs to be installed + // on all machines. + // +optional + PullSecret *corev1.ObjectReference `json:"pullSecret,omitempty"` + + // internalRegistryPullSecret is the pull secret for the internal registry, used by + // rpm-ostree to pull images from the internal registry if present + // +optional + // +nullable + InternalRegistryPullSecret []byte `json:"internalRegistryPullSecret"` + + // images is map of images that are used by the controller to render templates under ./templates/ + // +kubebuilder:validation:Required + Images map[string]string `json:"images"` + + // BaseOSContainerImage is the new-format container image for operating system updates. + // +kubebuilder:validation:Required + BaseOSContainerImage string `json:"baseOSContainerImage"` + + // BaseOSExtensionsContainerImage is the matching extensions container for the new-format container + // +optional + BaseOSExtensionsContainerImage string `json:"baseOSExtensionsContainerImage"` + + // OSImageURL is the old-format container image that contains the OS update payload. + // +optional + OSImageURL string `json:"osImageURL"` + + // releaseImage is the image used when installing the cluster + // +kubebuilder:validation:Required + ReleaseImage string `json:"releaseImage"` + + // proxy holds the current proxy configuration for the nodes + // +kubebuilder:validation:Required + // +nullable + Proxy *configv1.ProxyStatus `json:"proxy"` + + // infra holds the infrastructure details + // +kubebuilder:validation:EmbeddedResource + // +kubebuilder:validation:Required + // +nullable + Infra *configv1.Infrastructure `json:"infra"` + + // dns holds the cluster dns details + // +kubebuilder:validation:EmbeddedResource + // +kubebuilder:validation:Required + // +nullable + DNS *configv1.DNS `json:"dns"` + + // ipFamilies indicates the IP families in use by the cluster network + // +kubebuilder:validation:Required + IPFamilies IPFamiliesType `json:"ipFamilies"` + + // networkType holds the type of network the cluster is using + // XXX: this is temporary and will be dropped as soon as possible in favor of a better support + // to start network related services the proper way. + // Nobody is also changing this once the cluster is up and running the first time, so, disallow + // regeneration if this changes. + // +optional + NetworkType string `json:"networkType,omitempty"` + + // Network contains additional network related information + // +kubebuilder:validation:Required + // +nullable + Network *NetworkInfo `json:"network"` +} + +// ImageRegistryBundle contains information for writing image registry certificates +type ImageRegistryBundle struct { + // file holds the name of the file where the bundle will be written to disk + // +kubebuilder:validation:Required + File string `json:"file"` + // data holds the contents of the bundle that will be written to the file location + // +kubebuilder:validation:Required + Data []byte `json:"data"` +} + +// IPFamiliesType indicates whether the cluster network is IPv4-only, IPv6-only, or dual-stack +type IPFamiliesType string + +const ( + IPFamiliesIPv4 IPFamiliesType = "IPv4" + IPFamiliesIPv6 IPFamiliesType = "IPv6" + IPFamiliesDualStack IPFamiliesType = "DualStack" + IPFamiliesDualStackIPv6Primary IPFamiliesType = "DualStackIPv6Primary" +) + +// Network contains network related configuration +type NetworkInfo struct { + // MTUMigration contains the MTU migration configuration. + // +kubebuilder:validation:Required + // +nullable + MTUMigration *configv1.MTUMigration `json:"mtuMigration"` +} + +// ControllerConfigStatus is the status for ControllerConfig +type ControllerConfigStatus struct { + // observedGeneration represents the generation observed by the controller. + // +optional + ObservedGeneration int64 `json:"observedGeneration,omitempty"` + + // conditions represents the latest available observations of current state. + // +listType=atomic + // +optional + Conditions []ControllerConfigStatusCondition `json:"conditions"` + + // controllerCertificates represents the latest available observations of the automatically rotating certificates in the MCO. + // +listType=atomic + // +optional + ControllerCertificates []ControllerCertificate `json:"controllerCertificates"` +} + +// ControllerCertificate contains info about a specific cert. +type ControllerCertificate struct { + // subject is the cert subject + // +kubebuilder:validation:Required + Subject string `json:"subject"` + + // signer is the cert Issuer + // +kubebuilder:validation:Required + Signer string `json:"signer"` + + // notBefore is the lower boundary for validity + // +optional + NotBefore *metav1.Time `json:"notBefore"` + + // notAfter is the upper boundary for validity + // +optional + NotAfter *metav1.Time `json:"notAfter"` + + // bundleFile is the larger bundle a cert comes from + // +kubebuilder:validation:Required + BundleFile string `json:"bundleFile"` +} + +// ControllerConfigStatusCondition contains condition information for ControllerConfigStatus +type ControllerConfigStatusCondition struct { + // type specifies the state of the operator's reconciliation functionality. + // +kubebuilder:validation:Required + Type ControllerConfigStatusConditionType `json:"type"` + + // status of the condition, one of True, False, Unknown. + // +kubebuilder:validation:Required + Status corev1.ConditionStatus `json:"status"` + + // lastTransitionTime is the time of the last update to the current status object. + // +kubebuilder:validation:Required + // +nullable + LastTransitionTime metav1.Time `json:"lastTransitionTime"` + + // reason is the reason for the condition's last transition. Reasons are PascalCase + // +optional + Reason string `json:"reason,omitempty"` + + // message provides additional information about the current condition. + // This is only to be consumed by humans. + // +optional + Message string `json:"message,omitempty"` +} + +// ControllerConfigStatusConditionType valid conditions of a ControllerConfigStatus +type ControllerConfigStatusConditionType string + +const ( + // TemplateControllerRunning means the template controller is currently running. + TemplateControllerRunning ControllerConfigStatusConditionType = "TemplateControllerRunning" + + // TemplateControllerCompleted means the template controller has completed reconciliation. + TemplateControllerCompleted ControllerConfigStatusConditionType = "TemplateControllerCompleted" + + // TemplateControllerFailing means the template controller is failing. + TemplateControllerFailing ControllerConfigStatusConditionType = "TemplateControllerFailing" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ControllerConfigList is a list of ControllerConfig resources +// +// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer). +// +openshift:compatibility-gen:level=1 +type ControllerConfigList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []ControllerConfig `json:"items"` +} + +// +genclient +// +genclient:noStatus +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// MachineConfig defines the configuration for a machine +// +// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer). +// +openshift:compatibility-gen:level=1 +type MachineConfig struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + // +optional + Spec MachineConfigSpec `json:"spec"` +} + +// MachineConfigSpec is the spec for MachineConfig +type MachineConfigSpec struct { + // OSImageURL specifies the remote location that will be used to + // fetch the OS. + // +optional + OSImageURL string `json:"osImageURL"` + + // BaseOSExtensionsContainerImage specifies the remote location that will be used + // to fetch the extensions container matching a new-format OS image + // +optional + BaseOSExtensionsContainerImage string `json:"baseOSExtensionsContainerImage"` + + // Config is a Ignition Config object. + // +optional + Config runtime.RawExtension `json:"config"` + + // kernelArguments contains a list of kernel arguments to be added + // +listType=atomic + // +nullable + // +optional + KernelArguments []string `json:"kernelArguments"` + + // extensions contains a list of additional features that can be enabled on host + // +listType=atomic + // +optional + Extensions []string `json:"extensions"` + + // fips controls FIPS mode + // +optional + FIPS bool `json:"fips"` + + // kernelType contains which kernel we want to be running like default + // (traditional), realtime, 64k-pages (aarch64 only). + // +optional + KernelType string `json:"kernelType"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// MachineConfigList is a list of MachineConfig resources +// +// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer). +// +openshift:compatibility-gen:level=1 +type MachineConfigList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []MachineConfig `json:"items"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// MachineConfigPool describes a pool of MachineConfigs. +// +// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer). +// +openshift:compatibility-gen:level=1 +type MachineConfigPool struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // +kubebuilder:validation:Required + Spec MachineConfigPoolSpec `json:"spec"` + // +optional + Status MachineConfigPoolStatus `json:"status"` +} + +// MachineConfigPoolSpec is the spec for MachineConfigPool resource. +type MachineConfigPoolSpec struct { + // machineConfigSelector specifies a label selector for MachineConfigs. + // Refer https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ on how label and selectors work. + // +optional + MachineConfigSelector *metav1.LabelSelector `json:"machineConfigSelector,omitempty"` + + // nodeSelector specifies a label selector for Machines + // +optional + NodeSelector *metav1.LabelSelector `json:"nodeSelector,omitempty"` + + // paused specifies whether or not changes to this machine config pool should be stopped. + // This includes generating new desiredMachineConfig and update of machines. + // +optional + Paused bool `json:"paused"` + + // maxUnavailable defines either an integer number or percentage + // of nodes in the pool that can go Unavailable during an update. + // This includes nodes Unavailable for any reason, including user + // initiated cordons, failing nodes, etc. The default value is 1. + // + // A value larger than 1 will mean multiple nodes going unavailable during + // the update, which may affect your workload stress on the remaining nodes. + // You cannot set this value to 0 to stop updates (it will default back to 1); + // to stop updates, use the 'paused' property instead. Drain will respect + // Pod Disruption Budgets (PDBs) such as etcd quorum guards, even if + // maxUnavailable is greater than one. + // +optional + MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty"` + + // The targeted MachineConfig object for the machine config pool. + // +optional + Configuration MachineConfigPoolStatusConfiguration `json:"configuration"` +} + +// MachineConfigPoolStatus is the status for MachineConfigPool resource. +type MachineConfigPoolStatus struct { + // observedGeneration represents the generation observed by the controller. + // +optional + ObservedGeneration int64 `json:"observedGeneration,omitempty"` + + // configuration represents the current MachineConfig object for the machine config pool. + // +optional + Configuration MachineConfigPoolStatusConfiguration `json:"configuration"` + + // machineCount represents the total number of machines in the machine config pool. + // +optional + MachineCount int32 `json:"machineCount"` + + // updatedMachineCount represents the total number of machines targeted by the pool that have the CurrentMachineConfig as their config. + // +optional + UpdatedMachineCount int32 `json:"updatedMachineCount"` + + // readyMachineCount represents the total number of ready machines targeted by the pool. + // +optional + ReadyMachineCount int32 `json:"readyMachineCount"` + + // unavailableMachineCount represents the total number of unavailable (non-ready) machines targeted by the pool. + // A node is marked unavailable if it is in updating state or NodeReady condition is false. + // +optional + UnavailableMachineCount int32 `json:"unavailableMachineCount"` + + // degradedMachineCount represents the total number of machines marked degraded (or unreconcilable). + // A node is marked degraded if applying a configuration failed.. + // +optional + DegradedMachineCount int32 `json:"degradedMachineCount"` + + // conditions represents the latest available observations of current state. + // +listType=atomic + // +optional + Conditions []MachineConfigPoolCondition `json:"conditions"` + + // certExpirys keeps track of important certificate expiration data + // +listType=atomic + // +optional + CertExpirys []CertExpiry `json:"certExpirys"` +} + +// ceryExpiry contains the bundle name and the expiry date +type CertExpiry struct { + // bundle is the name of the bundle in which the subject certificate resides + // +kubebuilder:validation:Required + Bundle string `json:"bundle"` + // subject is the subject of the certificate + // +kubebuilder:validation:Required + Subject string `json:"subject"` + // expiry is the date after which the certificate will no longer be valid + // +optional + Expiry *metav1.Time `json:"expiry"` +} + +// MachineConfigPoolStatusConfiguration stores the current configuration for the pool, and +// optionally also stores the list of MachineConfig objects used to generate the configuration. +type MachineConfigPoolStatusConfiguration struct { + corev1.ObjectReference `json:",inline"` + + // source is the list of MachineConfig objects that were used to generate the single MachineConfig object specified in `content`. + // +listType=atomic + // +optional + Source []corev1.ObjectReference `json:"source,omitempty"` +} + +// MachineConfigPoolCondition contains condition information for an MachineConfigPool. +type MachineConfigPoolCondition struct { + // type of the condition, currently ('Done', 'Updating', 'Failed'). + // +optional + Type MachineConfigPoolConditionType `json:"type"` + + // status of the condition, one of ('True', 'False', 'Unknown'). + // +optional + Status corev1.ConditionStatus `json:"status"` + + // lastTransitionTime is the timestamp corresponding to the last status + // change of this condition. + // +nullable + // +optional + LastTransitionTime metav1.Time `json:"lastTransitionTime"` + + // reason is a brief machine readable explanation for the condition's last + // transition. + // +optional + Reason string `json:"reason"` + + // message is a human readable description of the details of the last + // transition, complementing reason. + // +optional + Message string `json:"message"` +} + +// MachineConfigPoolConditionType valid conditions of a MachineConfigPool +type MachineConfigPoolConditionType string + +const ( + // MachineConfigPoolUpdated means MachineConfigPool is updated completely. + // When the all the machines in the pool are updated to the correct machine config. + MachineConfigPoolUpdated MachineConfigPoolConditionType = "Updated" + + // MachineConfigPoolUpdating means MachineConfigPool is updating. + // When at least one of machine is not either not updated or is in the process of updating + // to the desired machine config. + MachineConfigPoolUpdating MachineConfigPoolConditionType = "Updating" + + // MachineConfigPoolNodeDegraded means the update for one of the machine is not progressing + MachineConfigPoolNodeDegraded MachineConfigPoolConditionType = "NodeDegraded" + + // MachineConfigPoolRenderDegraded means the rendered configuration for the pool cannot be generated because of an error + MachineConfigPoolRenderDegraded MachineConfigPoolConditionType = "RenderDegraded" + + // MachineConfigPoolDegraded is the overall status of the pool based, today, on whether we fail with NodeDegraded or RenderDegraded + MachineConfigPoolDegraded MachineConfigPoolConditionType = "Degraded" + + MachineConfigPoolBuildPending MachineConfigPoolConditionType = "BuildPending" + + MachineConfigPoolBuilding MachineConfigPoolConditionType = "Building" + + MachineConfigPoolBuildSuccess MachineConfigPoolConditionType = "BuildSuccess" + + MachineConfigPoolBuildFailed MachineConfigPoolConditionType = "BuildFailed" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// MachineConfigPoolList is a list of MachineConfigPool resources +// +// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer). +// +openshift:compatibility-gen:level=1 +type MachineConfigPoolList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []MachineConfigPool `json:"items"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// KubeletConfig describes a customized Kubelet configuration. +// +// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer). +// +openshift:compatibility-gen:level=1 +type KubeletConfig struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // +kubebuilder:validation:Required + Spec KubeletConfigSpec `json:"spec"` + // +optional + Status KubeletConfigStatus `json:"status"` +} + +// KubeletConfigSpec defines the desired state of KubeletConfig +type KubeletConfigSpec struct { + // +optional + AutoSizingReserved *bool `json:"autoSizingReserved,omitempty"` + // +optional + LogLevel *int32 `json:"logLevel,omitempty"` + + // MachineConfigPoolSelector selects which pools the KubeletConfig shoud apply to. + // A nil selector will result in no pools being selected. + // +optional + MachineConfigPoolSelector *metav1.LabelSelector `json:"machineConfigPoolSelector,omitempty"` + // kubeletConfig fields are defined in kubernetes upstream. Please refer to the types defined in the version/commit used by + // OpenShift of the upstream kubernetes. It's important to note that, since the fields of the kubelet configuration are directly fetched from + // upstream the validation of those values is handled directly by the kubelet. Please refer to the upstream version of the relevant kubernetes + // for the valid values of these fields. Invalid values of the kubelet configuration fields may render cluster nodes unusable. + // +optional + KubeletConfig *runtime.RawExtension `json:"kubeletConfig,omitempty"` + + // If unset, the default is based on the apiservers.config.openshift.io/cluster resource. + // Note that only Old and Intermediate profiles are currently supported, and + // the maximum available minTLSVersion is VersionTLS12. + // +optional + TLSSecurityProfile *configv1.TLSSecurityProfile `json:"tlsSecurityProfile,omitempty"` +} + +// KubeletConfigStatus defines the observed state of a KubeletConfig +type KubeletConfigStatus struct { + // observedGeneration represents the generation observed by the controller. + // +optional + ObservedGeneration int64 `json:"observedGeneration,omitempty"` + + // conditions represents the latest available observations of current state. + // +optional + Conditions []KubeletConfigCondition `json:"conditions"` +} + +// KubeletConfigCondition defines the state of the KubeletConfig +type KubeletConfigCondition struct { + // type specifies the state of the operator's reconciliation functionality. + // +optional + Type KubeletConfigStatusConditionType `json:"type"` + + // status of the condition, one of True, False, Unknown. + // +optional + Status corev1.ConditionStatus `json:"status"` + + // lastTransitionTime is the time of the last update to the current status object. + // +optional + // +nullable + LastTransitionTime metav1.Time `json:"lastTransitionTime"` + + // reason is the reason for the condition's last transition. Reasons are PascalCase + // +optional + Reason string `json:"reason,omitempty"` + + // message provides additional information about the current condition. + // This is only to be consumed by humans. + // +optional + Message string `json:"message,omitempty"` +} + +// KubeletConfigStatusConditionType is the state of the operator's reconciliation functionality. +type KubeletConfigStatusConditionType string + +const ( + // KubeletConfigSuccess designates a successful application of a KubeletConfig CR. + KubeletConfigSuccess KubeletConfigStatusConditionType = "Success" + + // KubeletConfigFailure designates a failure applying a KubeletConfig CR. + KubeletConfigFailure KubeletConfigStatusConditionType = "Failure" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// KubeletConfigList is a list of KubeletConfig resources +// +// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer). +// +openshift:compatibility-gen:level=1 +type KubeletConfigList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []KubeletConfig `json:"items"` +} + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ContainerRuntimeConfig describes a customized Container Runtime configuration. +// +// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer). +// +openshift:compatibility-gen:level=1 +type ContainerRuntimeConfig struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // +kubebuilder:validation:Required + Spec ContainerRuntimeConfigSpec `json:"spec"` + // +optional + Status ContainerRuntimeConfigStatus `json:"status"` +} + +// ContainerRuntimeConfigSpec defines the desired state of ContainerRuntimeConfig +type ContainerRuntimeConfigSpec struct { + // MachineConfigPoolSelector selects which pools the ContainerRuntimeConfig shoud apply to. + // A nil selector will result in no pools being selected. + // +optional + MachineConfigPoolSelector *metav1.LabelSelector `json:"machineConfigPoolSelector,omitempty"` + + // +kubebuilder:validation:Required + ContainerRuntimeConfig *ContainerRuntimeConfiguration `json:"containerRuntimeConfig,omitempty"` +} + +// ContainerRuntimeConfiguration defines the tuneables of the container runtime +type ContainerRuntimeConfiguration struct { + // pidsLimit specifies the maximum number of processes allowed in a container + // +optional + PidsLimit *int64 `json:"pidsLimit,omitempty"` + + // logLevel specifies the verbosity of the logs based on the level it is set to. + // Options are fatal, panic, error, warn, info, and debug. + // +optional + LogLevel string `json:"logLevel,omitempty"` + + // logSizeMax specifies the Maximum size allowed for the container log file. + // Negative numbers indicate that no size limit is imposed. + // If it is positive, it must be >= 8192 to match/exceed conmon's read buffer. + // +optional + LogSizeMax *resource.Quantity `json:"logSizeMax,omitempty"` + + // overlaySize specifies the maximum size of a container image. + // This flag can be used to set quota on the size of container images. (default: 10GB) + // +optional + OverlaySize *resource.Quantity `json:"overlaySize,omitempty"` + + // defaultRuntime is the name of the OCI runtime to be used as the default. + // +optional + DefaultRuntime ContainerRuntimeDefaultRuntime `json:"defaultRuntime,omitempty"` +} + +type ContainerRuntimeDefaultRuntime string + +const ( + ContainerRuntimeDefaultRuntimeEmpty = "" + ContainerRuntimeDefaultRuntimeRunc = "runc" + ContainerRuntimeDefaultRuntimeCrun = "crun" + ContainerRuntimeDefaultRuntimeDefault = ContainerRuntimeDefaultRuntimeRunc +) + +// ContainerRuntimeConfigStatus defines the observed state of a ContainerRuntimeConfig +type ContainerRuntimeConfigStatus struct { + // observedGeneration represents the generation observed by the controller. + // +optional + ObservedGeneration int64 `json:"observedGeneration,omitempty"` + + // conditions represents the latest available observations of current state. + // +listType=atomic + // +optional + Conditions []ContainerRuntimeConfigCondition `json:"conditions"` +} + +// ContainerRuntimeConfigCondition defines the state of the ContainerRuntimeConfig +type ContainerRuntimeConfigCondition struct { + // type specifies the state of the operator's reconciliation functionality. + // +optional + Type ContainerRuntimeConfigStatusConditionType `json:"type"` + + // status of the condition, one of True, False, Unknown. + // +optional + Status corev1.ConditionStatus `json:"status"` + + // lastTransitionTime is the time of the last update to the current status object. + // +nullable + // +optional + LastTransitionTime metav1.Time `json:"lastTransitionTime"` + + // reason is the reason for the condition's last transition. Reasons are PascalCase + // +optional + Reason string `json:"reason,omitempty"` + + // message provides additional information about the current condition. + // This is only to be consumed by humans. + // +optional + Message string `json:"message,omitempty"` +} + +// ContainerRuntimeConfigStatusConditionType is the state of the operator's reconciliation functionality. +type ContainerRuntimeConfigStatusConditionType string + +const ( + // ContainerRuntimeConfigSuccess designates a successful application of a ContainerRuntimeConfig CR. + ContainerRuntimeConfigSuccess ContainerRuntimeConfigStatusConditionType = "Success" + + // ContainerRuntimeConfigFailure designates a failure applying a ContainerRuntimeConfig CR. + ContainerRuntimeConfigFailure ContainerRuntimeConfigStatusConditionType = "Failure" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// ContainerRuntimeConfigList is a list of ContainerRuntimeConfig resources +// +// Compatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer). +// +openshift:compatibility-gen:level=1 +type ContainerRuntimeConfigList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []ContainerRuntimeConfig `json:"items"` +} diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/machineconfiguration/v1/zz_generated.deepcopy.go new file mode 100644 index 0000000000..180027a84e --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/zz_generated.deepcopy.go @@ -0,0 +1,845 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1 + +import ( + configv1 "github.com/openshift/api/config/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + intstr "k8s.io/apimachinery/pkg/util/intstr" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CertExpiry) DeepCopyInto(out *CertExpiry) { + *out = *in + if in.Expiry != nil { + in, out := &in.Expiry, &out.Expiry + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CertExpiry. +func (in *CertExpiry) DeepCopy() *CertExpiry { + if in == nil { + return nil + } + out := new(CertExpiry) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ContainerRuntimeConfig) DeepCopyInto(out *ContainerRuntimeConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerRuntimeConfig. +func (in *ContainerRuntimeConfig) DeepCopy() *ContainerRuntimeConfig { + if in == nil { + return nil + } + out := new(ContainerRuntimeConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ContainerRuntimeConfig) 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 *ContainerRuntimeConfigCondition) DeepCopyInto(out *ContainerRuntimeConfigCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerRuntimeConfigCondition. +func (in *ContainerRuntimeConfigCondition) DeepCopy() *ContainerRuntimeConfigCondition { + if in == nil { + return nil + } + out := new(ContainerRuntimeConfigCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ContainerRuntimeConfigList) DeepCopyInto(out *ContainerRuntimeConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ContainerRuntimeConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerRuntimeConfigList. +func (in *ContainerRuntimeConfigList) DeepCopy() *ContainerRuntimeConfigList { + if in == nil { + return nil + } + out := new(ContainerRuntimeConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ContainerRuntimeConfigList) 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 *ContainerRuntimeConfigSpec) DeepCopyInto(out *ContainerRuntimeConfigSpec) { + *out = *in + if in.MachineConfigPoolSelector != nil { + in, out := &in.MachineConfigPoolSelector, &out.MachineConfigPoolSelector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.ContainerRuntimeConfig != nil { + in, out := &in.ContainerRuntimeConfig, &out.ContainerRuntimeConfig + *out = new(ContainerRuntimeConfiguration) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerRuntimeConfigSpec. +func (in *ContainerRuntimeConfigSpec) DeepCopy() *ContainerRuntimeConfigSpec { + if in == nil { + return nil + } + out := new(ContainerRuntimeConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ContainerRuntimeConfigStatus) DeepCopyInto(out *ContainerRuntimeConfigStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ContainerRuntimeConfigCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerRuntimeConfigStatus. +func (in *ContainerRuntimeConfigStatus) DeepCopy() *ContainerRuntimeConfigStatus { + if in == nil { + return nil + } + out := new(ContainerRuntimeConfigStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ContainerRuntimeConfiguration) DeepCopyInto(out *ContainerRuntimeConfiguration) { + *out = *in + if in.PidsLimit != nil { + in, out := &in.PidsLimit, &out.PidsLimit + *out = new(int64) + **out = **in + } + if in.LogSizeMax != nil { + in, out := &in.LogSizeMax, &out.LogSizeMax + x := (*in).DeepCopy() + *out = &x + } + if in.OverlaySize != nil { + in, out := &in.OverlaySize, &out.OverlaySize + x := (*in).DeepCopy() + *out = &x + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerRuntimeConfiguration. +func (in *ContainerRuntimeConfiguration) DeepCopy() *ContainerRuntimeConfiguration { + if in == nil { + return nil + } + out := new(ContainerRuntimeConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControllerCertificate) DeepCopyInto(out *ControllerCertificate) { + *out = *in + if in.NotBefore != nil { + in, out := &in.NotBefore, &out.NotBefore + *out = (*in).DeepCopy() + } + if in.NotAfter != nil { + in, out := &in.NotAfter, &out.NotAfter + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControllerCertificate. +func (in *ControllerCertificate) DeepCopy() *ControllerCertificate { + if in == nil { + return nil + } + out := new(ControllerCertificate) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControllerConfig) DeepCopyInto(out *ControllerConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControllerConfig. +func (in *ControllerConfig) DeepCopy() *ControllerConfig { + if in == nil { + return nil + } + out := new(ControllerConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ControllerConfig) 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 *ControllerConfigList) DeepCopyInto(out *ControllerConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]ControllerConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControllerConfigList. +func (in *ControllerConfigList) DeepCopy() *ControllerConfigList { + if in == nil { + return nil + } + out := new(ControllerConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *ControllerConfigList) 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 *ControllerConfigSpec) DeepCopyInto(out *ControllerConfigSpec) { + *out = *in + if in.KubeAPIServerServingCAData != nil { + in, out := &in.KubeAPIServerServingCAData, &out.KubeAPIServerServingCAData + *out = make([]byte, len(*in)) + copy(*out, *in) + } + if in.RootCAData != nil { + in, out := &in.RootCAData, &out.RootCAData + *out = make([]byte, len(*in)) + copy(*out, *in) + } + if in.CloudProviderCAData != nil { + in, out := &in.CloudProviderCAData, &out.CloudProviderCAData + *out = make([]byte, len(*in)) + copy(*out, *in) + } + if in.AdditionalTrustBundle != nil { + in, out := &in.AdditionalTrustBundle, &out.AdditionalTrustBundle + *out = make([]byte, len(*in)) + copy(*out, *in) + } + if in.ImageRegistryBundleUserData != nil { + in, out := &in.ImageRegistryBundleUserData, &out.ImageRegistryBundleUserData + *out = make([]ImageRegistryBundle, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ImageRegistryBundleData != nil { + in, out := &in.ImageRegistryBundleData, &out.ImageRegistryBundleData + *out = make([]ImageRegistryBundle, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.PullSecret != nil { + in, out := &in.PullSecret, &out.PullSecret + *out = new(corev1.ObjectReference) + **out = **in + } + if in.InternalRegistryPullSecret != nil { + in, out := &in.InternalRegistryPullSecret, &out.InternalRegistryPullSecret + *out = make([]byte, len(*in)) + copy(*out, *in) + } + if in.Images != nil { + in, out := &in.Images, &out.Images + *out = make(map[string]string, len(*in)) + for key, val := range *in { + (*out)[key] = val + } + } + if in.Proxy != nil { + in, out := &in.Proxy, &out.Proxy + *out = new(configv1.ProxyStatus) + **out = **in + } + if in.Infra != nil { + in, out := &in.Infra, &out.Infra + *out = new(configv1.Infrastructure) + (*in).DeepCopyInto(*out) + } + if in.DNS != nil { + in, out := &in.DNS, &out.DNS + *out = new(configv1.DNS) + (*in).DeepCopyInto(*out) + } + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(NetworkInfo) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControllerConfigSpec. +func (in *ControllerConfigSpec) DeepCopy() *ControllerConfigSpec { + if in == nil { + return nil + } + out := new(ControllerConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControllerConfigStatus) DeepCopyInto(out *ControllerConfigStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]ControllerConfigStatusCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.ControllerCertificates != nil { + in, out := &in.ControllerCertificates, &out.ControllerCertificates + *out = make([]ControllerCertificate, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControllerConfigStatus. +func (in *ControllerConfigStatus) DeepCopy() *ControllerConfigStatus { + if in == nil { + return nil + } + out := new(ControllerConfigStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControllerConfigStatusCondition) DeepCopyInto(out *ControllerConfigStatusCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControllerConfigStatusCondition. +func (in *ControllerConfigStatusCondition) DeepCopy() *ControllerConfigStatusCondition { + if in == nil { + return nil + } + out := new(ControllerConfigStatusCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ImageRegistryBundle) DeepCopyInto(out *ImageRegistryBundle) { + *out = *in + if in.Data != nil { + in, out := &in.Data, &out.Data + *out = make([]byte, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageRegistryBundle. +func (in *ImageRegistryBundle) DeepCopy() *ImageRegistryBundle { + if in == nil { + return nil + } + out := new(ImageRegistryBundle) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeletConfig) DeepCopyInto(out *KubeletConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeletConfig. +func (in *KubeletConfig) DeepCopy() *KubeletConfig { + if in == nil { + return nil + } + out := new(KubeletConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KubeletConfig) 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 *KubeletConfigCondition) DeepCopyInto(out *KubeletConfigCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeletConfigCondition. +func (in *KubeletConfigCondition) DeepCopy() *KubeletConfigCondition { + if in == nil { + return nil + } + out := new(KubeletConfigCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeletConfigList) DeepCopyInto(out *KubeletConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]KubeletConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeletConfigList. +func (in *KubeletConfigList) DeepCopy() *KubeletConfigList { + if in == nil { + return nil + } + out := new(KubeletConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *KubeletConfigList) 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 *KubeletConfigSpec) DeepCopyInto(out *KubeletConfigSpec) { + *out = *in + if in.AutoSizingReserved != nil { + in, out := &in.AutoSizingReserved, &out.AutoSizingReserved + *out = new(bool) + **out = **in + } + if in.LogLevel != nil { + in, out := &in.LogLevel, &out.LogLevel + *out = new(int32) + **out = **in + } + if in.MachineConfigPoolSelector != nil { + in, out := &in.MachineConfigPoolSelector, &out.MachineConfigPoolSelector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.KubeletConfig != nil { + in, out := &in.KubeletConfig, &out.KubeletConfig + *out = new(runtime.RawExtension) + (*in).DeepCopyInto(*out) + } + if in.TLSSecurityProfile != nil { + in, out := &in.TLSSecurityProfile, &out.TLSSecurityProfile + *out = new(configv1.TLSSecurityProfile) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeletConfigSpec. +func (in *KubeletConfigSpec) DeepCopy() *KubeletConfigSpec { + if in == nil { + return nil + } + out := new(KubeletConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeletConfigStatus) DeepCopyInto(out *KubeletConfigStatus) { + *out = *in + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]KubeletConfigCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeletConfigStatus. +func (in *KubeletConfigStatus) DeepCopy() *KubeletConfigStatus { + if in == nil { + return nil + } + out := new(KubeletConfigStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineConfig) DeepCopyInto(out *MachineConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfig. +func (in *MachineConfig) DeepCopy() *MachineConfig { + if in == nil { + return nil + } + out := new(MachineConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MachineConfig) 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 *MachineConfigList) DeepCopyInto(out *MachineConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]MachineConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigList. +func (in *MachineConfigList) DeepCopy() *MachineConfigList { + if in == nil { + return nil + } + out := new(MachineConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MachineConfigList) 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 *MachineConfigPool) DeepCopyInto(out *MachineConfigPool) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigPool. +func (in *MachineConfigPool) DeepCopy() *MachineConfigPool { + if in == nil { + return nil + } + out := new(MachineConfigPool) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MachineConfigPool) 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 *MachineConfigPoolCondition) DeepCopyInto(out *MachineConfigPoolCondition) { + *out = *in + in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigPoolCondition. +func (in *MachineConfigPoolCondition) DeepCopy() *MachineConfigPoolCondition { + if in == nil { + return nil + } + out := new(MachineConfigPoolCondition) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineConfigPoolList) DeepCopyInto(out *MachineConfigPoolList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]MachineConfigPool, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigPoolList. +func (in *MachineConfigPoolList) DeepCopy() *MachineConfigPoolList { + if in == nil { + return nil + } + out := new(MachineConfigPoolList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MachineConfigPoolList) 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 *MachineConfigPoolSpec) DeepCopyInto(out *MachineConfigPoolSpec) { + *out = *in + if in.MachineConfigSelector != nil { + in, out := &in.MachineConfigSelector, &out.MachineConfigSelector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.NodeSelector != nil { + in, out := &in.NodeSelector, &out.NodeSelector + *out = new(metav1.LabelSelector) + (*in).DeepCopyInto(*out) + } + if in.MaxUnavailable != nil { + in, out := &in.MaxUnavailable, &out.MaxUnavailable + *out = new(intstr.IntOrString) + **out = **in + } + in.Configuration.DeepCopyInto(&out.Configuration) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigPoolSpec. +func (in *MachineConfigPoolSpec) DeepCopy() *MachineConfigPoolSpec { + if in == nil { + return nil + } + out := new(MachineConfigPoolSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineConfigPoolStatus) DeepCopyInto(out *MachineConfigPoolStatus) { + *out = *in + in.Configuration.DeepCopyInto(&out.Configuration) + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]MachineConfigPoolCondition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.CertExpirys != nil { + in, out := &in.CertExpirys, &out.CertExpirys + *out = make([]CertExpiry, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigPoolStatus. +func (in *MachineConfigPoolStatus) DeepCopy() *MachineConfigPoolStatus { + if in == nil { + return nil + } + out := new(MachineConfigPoolStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineConfigPoolStatusConfiguration) DeepCopyInto(out *MachineConfigPoolStatusConfiguration) { + *out = *in + out.ObjectReference = in.ObjectReference + if in.Source != nil { + in, out := &in.Source, &out.Source + *out = make([]corev1.ObjectReference, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigPoolStatusConfiguration. +func (in *MachineConfigPoolStatusConfiguration) DeepCopy() *MachineConfigPoolStatusConfiguration { + if in == nil { + return nil + } + out := new(MachineConfigPoolStatusConfiguration) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineConfigSpec) DeepCopyInto(out *MachineConfigSpec) { + *out = *in + in.Config.DeepCopyInto(&out.Config) + if in.KernelArguments != nil { + in, out := &in.KernelArguments, &out.KernelArguments + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.Extensions != nil { + in, out := &in.Extensions, &out.Extensions + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigSpec. +func (in *MachineConfigSpec) DeepCopy() *MachineConfigSpec { + if in == nil { + return nil + } + out := new(MachineConfigSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *NetworkInfo) DeepCopyInto(out *NetworkInfo) { + *out = *in + if in.MTUMigration != nil { + in, out := &in.MTUMigration, &out.MTUMigration + *out = new(configv1.MTUMigration) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NetworkInfo. +func (in *NetworkInfo) DeepCopy() *NetworkInfo { + if in == nil { + return nil + } + out := new(NetworkInfo) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/machineconfiguration/v1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000..d1151c23b4 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,338 @@ +package v1 + +// 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_CertExpiry = map[string]string{ + "": "ceryExpiry contains the bundle name and the expiry date", + "bundle": "bundle is the name of the bundle in which the subject certificate resides", + "subject": "subject is the subject of the certificate", + "expiry": "expiry is the date after which the certificate will no longer be valid", +} + +func (CertExpiry) SwaggerDoc() map[string]string { + return map_CertExpiry +} + +var map_ContainerRuntimeConfig = map[string]string{ + "": "ContainerRuntimeConfig describes a customized Container Runtime configuration.\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).", +} + +func (ContainerRuntimeConfig) SwaggerDoc() map[string]string { + return map_ContainerRuntimeConfig +} + +var map_ContainerRuntimeConfigCondition = map[string]string{ + "": "ContainerRuntimeConfigCondition defines the state of the ContainerRuntimeConfig", + "type": "type specifies the state of the operator's reconciliation functionality.", + "status": "status of the condition, one of True, False, Unknown.", + "lastTransitionTime": "lastTransitionTime is the time of the last update to the current status object.", + "reason": "reason is the reason for the condition's last transition. Reasons are PascalCase", + "message": "message provides additional information about the current condition. This is only to be consumed by humans.", +} + +func (ContainerRuntimeConfigCondition) SwaggerDoc() map[string]string { + return map_ContainerRuntimeConfigCondition +} + +var map_ContainerRuntimeConfigList = map[string]string{ + "": "ContainerRuntimeConfigList is a list of ContainerRuntimeConfig resources\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).", +} + +func (ContainerRuntimeConfigList) SwaggerDoc() map[string]string { + return map_ContainerRuntimeConfigList +} + +var map_ContainerRuntimeConfigSpec = map[string]string{ + "": "ContainerRuntimeConfigSpec defines the desired state of ContainerRuntimeConfig", + "machineConfigPoolSelector": "MachineConfigPoolSelector selects which pools the ContainerRuntimeConfig shoud apply to. A nil selector will result in no pools being selected.", +} + +func (ContainerRuntimeConfigSpec) SwaggerDoc() map[string]string { + return map_ContainerRuntimeConfigSpec +} + +var map_ContainerRuntimeConfigStatus = map[string]string{ + "": "ContainerRuntimeConfigStatus defines the observed state of a ContainerRuntimeConfig", + "observedGeneration": "observedGeneration represents the generation observed by the controller.", + "conditions": "conditions represents the latest available observations of current state.", +} + +func (ContainerRuntimeConfigStatus) SwaggerDoc() map[string]string { + return map_ContainerRuntimeConfigStatus +} + +var map_ContainerRuntimeConfiguration = map[string]string{ + "": "ContainerRuntimeConfiguration defines the tuneables of the container runtime", + "pidsLimit": "pidsLimit specifies the maximum number of processes allowed in a container", + "logLevel": "logLevel specifies the verbosity of the logs based on the level it is set to. Options are fatal, panic, error, warn, info, and debug.", + "logSizeMax": "logSizeMax specifies the Maximum size allowed for the container log file. Negative numbers indicate that no size limit is imposed. If it is positive, it must be >= 8192 to match/exceed conmon's read buffer.", + "overlaySize": "overlaySize specifies the maximum size of a container image. This flag can be used to set quota on the size of container images. (default: 10GB)", + "defaultRuntime": "defaultRuntime is the name of the OCI runtime to be used as the default.", +} + +func (ContainerRuntimeConfiguration) SwaggerDoc() map[string]string { + return map_ContainerRuntimeConfiguration +} + +var map_ControllerCertificate = map[string]string{ + "": "ControllerCertificate contains info about a specific cert.", + "subject": "subject is the cert subject", + "signer": "signer is the cert Issuer", + "notBefore": "notBefore is the lower boundary for validity", + "notAfter": "notAfter is the upper boundary for validity", + "bundleFile": "bundleFile is the larger bundle a cert comes from", +} + +func (ControllerCertificate) SwaggerDoc() map[string]string { + return map_ControllerCertificate +} + +var map_ControllerConfig = map[string]string{ + "": "ControllerConfig describes configuration for MachineConfigController. This is currently only used to drive the MachineConfig objects generated by the TemplateController.\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).", +} + +func (ControllerConfig) SwaggerDoc() map[string]string { + return map_ControllerConfig +} + +var map_ControllerConfigList = map[string]string{ + "": "ControllerConfigList is a list of ControllerConfig resources\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).", +} + +func (ControllerConfigList) SwaggerDoc() map[string]string { + return map_ControllerConfigList +} + +var map_ControllerConfigSpec = map[string]string{ + "": "ControllerConfigSpec is the spec for ControllerConfig resource.", + "clusterDNSIP": "clusterDNSIP is the cluster DNS IP address", + "cloudProviderConfig": "cloudProviderConfig is the configuration for the given cloud provider", + "platform": "platform is deprecated, use Infra.Status.PlatformStatus.Type instead", + "etcdDiscoveryDomain": "etcdDiscoveryDomain is deprecated, use Infra.Status.EtcdDiscoveryDomain instead", + "kubeAPIServerServingCAData": "kubeAPIServerServingCAData managed Kubelet to API Server Cert... Rotated automatically", + "rootCAData": "rootCAData specifies the root CA data", + "cloudProviderCAData": "cloudProvider specifies the cloud provider CA data", + "additionalTrustBundle": "additionalTrustBundle is a certificate bundle that will be added to the nodes trusted certificate store.", + "imageRegistryBundleUserData": "imageRegistryBundleUserData is Image Registry Data provided by the user", + "imageRegistryBundleData": "imageRegistryBundleData is the ImageRegistryData", + "pullSecret": "pullSecret is the default pull secret that needs to be installed on all machines.", + "internalRegistryPullSecret": "internalRegistryPullSecret is the pull secret for the internal registry, used by rpm-ostree to pull images from the internal registry if present", + "images": "images is map of images that are used by the controller to render templates under ./templates/", + "baseOSContainerImage": "BaseOSContainerImage is the new-format container image for operating system updates.", + "baseOSExtensionsContainerImage": "BaseOSExtensionsContainerImage is the matching extensions container for the new-format container", + "osImageURL": "OSImageURL is the old-format container image that contains the OS update payload.", + "releaseImage": "releaseImage is the image used when installing the cluster", + "proxy": "proxy holds the current proxy configuration for the nodes", + "infra": "infra holds the infrastructure details", + "dns": "dns holds the cluster dns details", + "ipFamilies": "ipFamilies indicates the IP families in use by the cluster network", + "networkType": "networkType holds the type of network the cluster is using XXX: this is temporary and will be dropped as soon as possible in favor of a better support to start network related services the proper way. Nobody is also changing this once the cluster is up and running the first time, so, disallow regeneration if this changes.", + "network": "Network contains additional network related information", +} + +func (ControllerConfigSpec) SwaggerDoc() map[string]string { + return map_ControllerConfigSpec +} + +var map_ControllerConfigStatus = map[string]string{ + "": "ControllerConfigStatus is the status for ControllerConfig", + "observedGeneration": "observedGeneration represents the generation observed by the controller.", + "conditions": "conditions represents the latest available observations of current state.", + "controllerCertificates": "controllerCertificates represents the latest available observations of the automatically rotating certificates in the MCO.", +} + +func (ControllerConfigStatus) SwaggerDoc() map[string]string { + return map_ControllerConfigStatus +} + +var map_ControllerConfigStatusCondition = map[string]string{ + "": "ControllerConfigStatusCondition contains condition information for ControllerConfigStatus", + "type": "type specifies the state of the operator's reconciliation functionality.", + "status": "status of the condition, one of True, False, Unknown.", + "lastTransitionTime": "lastTransitionTime is the time of the last update to the current status object.", + "reason": "reason is the reason for the condition's last transition. Reasons are PascalCase", + "message": "message provides additional information about the current condition. This is only to be consumed by humans.", +} + +func (ControllerConfigStatusCondition) SwaggerDoc() map[string]string { + return map_ControllerConfigStatusCondition +} + +var map_ImageRegistryBundle = map[string]string{ + "": "ImageRegistryBundle contains information for writing image registry certificates", + "file": "file holds the name of the file where the bundle will be written to disk", + "data": "data holds the contents of the bundle that will be written to the file location", +} + +func (ImageRegistryBundle) SwaggerDoc() map[string]string { + return map_ImageRegistryBundle +} + +var map_KubeletConfig = map[string]string{ + "": "KubeletConfig describes a customized Kubelet configuration.\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).", +} + +func (KubeletConfig) SwaggerDoc() map[string]string { + return map_KubeletConfig +} + +var map_KubeletConfigCondition = map[string]string{ + "": "KubeletConfigCondition defines the state of the KubeletConfig", + "type": "type specifies the state of the operator's reconciliation functionality.", + "status": "status of the condition, one of True, False, Unknown.", + "lastTransitionTime": "lastTransitionTime is the time of the last update to the current status object.", + "reason": "reason is the reason for the condition's last transition. Reasons are PascalCase", + "message": "message provides additional information about the current condition. This is only to be consumed by humans.", +} + +func (KubeletConfigCondition) SwaggerDoc() map[string]string { + return map_KubeletConfigCondition +} + +var map_KubeletConfigList = map[string]string{ + "": "KubeletConfigList is a list of KubeletConfig resources\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).", +} + +func (KubeletConfigList) SwaggerDoc() map[string]string { + return map_KubeletConfigList +} + +var map_KubeletConfigSpec = map[string]string{ + "": "KubeletConfigSpec defines the desired state of KubeletConfig", + "machineConfigPoolSelector": "MachineConfigPoolSelector selects which pools the KubeletConfig shoud apply to. A nil selector will result in no pools being selected.", + "kubeletConfig": "kubeletConfig fields are defined in kubernetes upstream. Please refer to the types defined in the version/commit used by OpenShift of the upstream kubernetes. It's important to note that, since the fields of the kubelet configuration are directly fetched from upstream the validation of those values is handled directly by the kubelet. Please refer to the upstream version of the relevant kubernetes for the valid values of these fields. Invalid values of the kubelet configuration fields may render cluster nodes unusable.", + "tlsSecurityProfile": "If unset, the default is based on the apiservers.config.openshift.io/cluster resource. Note that only Old and Intermediate profiles are currently supported, and the maximum available minTLSVersion is VersionTLS12.", +} + +func (KubeletConfigSpec) SwaggerDoc() map[string]string { + return map_KubeletConfigSpec +} + +var map_KubeletConfigStatus = map[string]string{ + "": "KubeletConfigStatus defines the observed state of a KubeletConfig", + "observedGeneration": "observedGeneration represents the generation observed by the controller.", + "conditions": "conditions represents the latest available observations of current state.", +} + +func (KubeletConfigStatus) SwaggerDoc() map[string]string { + return map_KubeletConfigStatus +} + +var map_MachineConfig = map[string]string{ + "": "MachineConfig defines the configuration for a machine\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).", +} + +func (MachineConfig) SwaggerDoc() map[string]string { + return map_MachineConfig +} + +var map_MachineConfigList = map[string]string{ + "": "MachineConfigList is a list of MachineConfig resources\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).", +} + +func (MachineConfigList) SwaggerDoc() map[string]string { + return map_MachineConfigList +} + +var map_MachineConfigPool = map[string]string{ + "": "MachineConfigPool describes a pool of MachineConfigs.\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).", +} + +func (MachineConfigPool) SwaggerDoc() map[string]string { + return map_MachineConfigPool +} + +var map_MachineConfigPoolCondition = map[string]string{ + "": "MachineConfigPoolCondition contains condition information for an MachineConfigPool.", + "type": "type of the condition, currently ('Done', 'Updating', 'Failed').", + "status": "status of the condition, one of ('True', 'False', 'Unknown').", + "lastTransitionTime": "lastTransitionTime is the timestamp corresponding to the last status change of this condition.", + "reason": "reason is a brief machine readable explanation for the condition's last transition.", + "message": "message is a human readable description of the details of the last transition, complementing reason.", +} + +func (MachineConfigPoolCondition) SwaggerDoc() map[string]string { + return map_MachineConfigPoolCondition +} + +var map_MachineConfigPoolList = map[string]string{ + "": "MachineConfigPoolList is a list of MachineConfigPool resources\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).", +} + +func (MachineConfigPoolList) SwaggerDoc() map[string]string { + return map_MachineConfigPoolList +} + +var map_MachineConfigPoolSpec = map[string]string{ + "": "MachineConfigPoolSpec is the spec for MachineConfigPool resource.", + "machineConfigSelector": "machineConfigSelector specifies a label selector for MachineConfigs. Refer https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ on how label and selectors work.", + "nodeSelector": "nodeSelector specifies a label selector for Machines", + "paused": "paused specifies whether or not changes to this machine config pool should be stopped. This includes generating new desiredMachineConfig and update of machines.", + "maxUnavailable": "maxUnavailable defines either an integer number or percentage of nodes in the pool that can go Unavailable during an update. This includes nodes Unavailable for any reason, including user initiated cordons, failing nodes, etc. The default value is 1.\n\nA value larger than 1 will mean multiple nodes going unavailable during the update, which may affect your workload stress on the remaining nodes. You cannot set this value to 0 to stop updates (it will default back to 1); to stop updates, use the 'paused' property instead. Drain will respect Pod Disruption Budgets (PDBs) such as etcd quorum guards, even if maxUnavailable is greater than one.", + "configuration": "The targeted MachineConfig object for the machine config pool.", +} + +func (MachineConfigPoolSpec) SwaggerDoc() map[string]string { + return map_MachineConfigPoolSpec +} + +var map_MachineConfigPoolStatus = map[string]string{ + "": "MachineConfigPoolStatus is the status for MachineConfigPool resource.", + "observedGeneration": "observedGeneration represents the generation observed by the controller.", + "configuration": "configuration represents the current MachineConfig object for the machine config pool.", + "machineCount": "machineCount represents the total number of machines in the machine config pool.", + "updatedMachineCount": "updatedMachineCount represents the total number of machines targeted by the pool that have the CurrentMachineConfig as their config.", + "readyMachineCount": "readyMachineCount represents the total number of ready machines targeted by the pool.", + "unavailableMachineCount": "unavailableMachineCount represents the total number of unavailable (non-ready) machines targeted by the pool. A node is marked unavailable if it is in updating state or NodeReady condition is false.", + "degradedMachineCount": "degradedMachineCount represents the total number of machines marked degraded (or unreconcilable). A node is marked degraded if applying a configuration failed..", + "conditions": "conditions represents the latest available observations of current state.", + "certExpirys": "certExpirys keeps track of important certificate expiration data", +} + +func (MachineConfigPoolStatus) SwaggerDoc() map[string]string { + return map_MachineConfigPoolStatus +} + +var map_MachineConfigPoolStatusConfiguration = map[string]string{ + "": "MachineConfigPoolStatusConfiguration stores the current configuration for the pool, and optionally also stores the list of MachineConfig objects used to generate the configuration.", + "source": "source is the list of MachineConfig objects that were used to generate the single MachineConfig object specified in `content`.", +} + +func (MachineConfigPoolStatusConfiguration) SwaggerDoc() map[string]string { + return map_MachineConfigPoolStatusConfiguration +} + +var map_MachineConfigSpec = map[string]string{ + "": "MachineConfigSpec is the spec for MachineConfig", + "osImageURL": "OSImageURL specifies the remote location that will be used to fetch the OS.", + "baseOSExtensionsContainerImage": "BaseOSExtensionsContainerImage specifies the remote location that will be used to fetch the extensions container matching a new-format OS image", + "config": "Config is a Ignition Config object.", + "kernelArguments": "kernelArguments contains a list of kernel arguments to be added", + "extensions": "extensions contains a list of additional features that can be enabled on host", + "fips": "fips controls FIPS mode", + "kernelType": "kernelType contains which kernel we want to be running like default (traditional), realtime, 64k-pages (aarch64 only).", +} + +func (MachineConfigSpec) SwaggerDoc() map[string]string { + return map_MachineConfigSpec +} + +var map_NetworkInfo = map[string]string{ + "": "Network contains network related configuration", + "mtuMigration": "MTUMigration contains the MTU migration configuration.", +} + +func (NetworkInfo) SwaggerDoc() map[string]string { + return map_NetworkInfo +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/0000_80_machineconfignode-CustomNoUpgrade.crd.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/0000_80_machineconfignode-CustomNoUpgrade.crd.yaml new file mode 100644 index 0000000000..295d4a466b --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/0000_80_machineconfignode-CustomNoUpgrade.crd.yaml @@ -0,0 +1,207 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: machineconfignodes.machineconfiguration.openshift.io + labels: + "openshift.io/operator-managed": "" + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/1596 + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + release.openshift.io/feature-set: CustomNoUpgrade +spec: + # group name to use for REST API: /apis// + group: machineconfiguration.openshift.io + scope: Cluster + names: + kind: MachineConfigNode + singular: machineconfignode + plural: machineconfignodes + versions: + - name: v1alpha1 + # Each version can be enabled/disabled by Served flag. + served: true + # One and only one version must be marked as the storage version. + storage: true + subresources: + status: {} + additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=="Updated")].status + name: Updated + type: string + - jsonPath: .status.conditions[?(@.type=="UpdatePrepared")].status + name: UpdatePrepared + type: string + - jsonPath: .status.conditions[?(@.type=="UpdateExecuted")].status + name: UpdateExecuted + type: string + - jsonPath: .status.conditions[?(@.type=="UpdatePostActionComplete")].status + name: UpdatePostActionComplete + type: string + - jsonPath: .status.conditions[?(@.type=="UpdateComplete")].status + name: UpdateComplete + type: string + - jsonPath: .status.conditions[?(@.type=="Resumed")].status + name: Resumed + type: string + - jsonPath: .status.conditions[?(@.type=="UpdateCompatible")].status + name: UpdateCompatible + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=="AppliedFilesAndOS")].status + name: UpdatedFilesAndOS + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=="Cordoned")].status + name: CordonedNode + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=="Drained")].status + name: DrainedNode + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=="RebootedNode")].status + name: RebootedNode + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=="ReloadedCRIO")].status + name: ReloadedCRIO + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=="Uncordoned")].status + name: UncordonedNode + priority: 1 + type: string + schema: + openAPIV3Schema: + description: 'MachineConfigNode describes the health of the Machines on the system 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.' + 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: + type: object + spec: + description: spec describes the configuration of the machine config node. + type: object + required: + - configVersion + - node + - pool + properties: + configVersion: + description: configVersion holds the desired config version for the node targeted by this machine config node resource. The desired version represents the machine config the node will attempt to update to. This gets set before the machine config operator validates the new machine config against the current machine config. + type: object + required: + - desired + properties: + desired: + description: desired is the name of the machine config that the the node should be upgraded to. This value is set when the machine config pool generates a new version of its rendered configuration. When this value is changed, the machine config daemon starts the node upgrade process. This value gets set in the machine config node spec once the machine config has been targeted for upgrade and before it is validated. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length. + type: string + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + node: + description: node contains a reference to the node for this machine config node. + type: object + required: + - name + properties: + name: + description: name is the object name. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length. + type: string + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + pool: + description: pool contains a reference to the machine config pool that this machine config node's referenced node belongs to. + type: object + required: + - name + properties: + name: + description: name is the object name. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length. + type: string + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + status: + description: status describes the last observed state of this machine config node. + type: object + required: + - configVersion + properties: + conditions: + description: conditions represent the observations of a machine config node's current state. + type: array + items: + description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, \n type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + type: object + required: + - lastTransitionTime + - message + - reason + - status + - type + 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. + type: string + format: date-time + message: + description: message is a human readable message indicating details about the transition. This may be an empty string. + type: string + maxLength: 32768 + 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. + type: integer + format: int64 + minimum: 0 + 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. + type: string + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + status: + description: status of the condition, one of True, False, Unknown. + type: string + enum: + - "True" + - "False" + - Unknown + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + type: string + 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])$ + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + configVersion: + description: configVersion describes the current and desired machine config for this node. The current version represents the current machine config for the node and is updated after a successful update. The desired version represents the machine config the node will attempt to update to. This desired machine config has been compared to the current machine config and has been validated by the machine config operator as one that is valid and that exists. + type: object + required: + - desired + properties: + current: + description: current is the name of the machine config currently in use on the node. This value is updated once the machine config daemon has completed the update of the configuration for the node. This value should match the desired version unless an upgrade is in progress. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length. + type: string + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + desired: + description: desired is the MachineConfig the node wants to upgrade to. This value gets set in the machine config node status once the machine config has been validated against the current machine config. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length. + type: string + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + observedGeneration: + description: observedGeneration represents the generation observed by the controller. This field is updated when the controller observes a change to the desiredConfig in the configVersion of the machine config node spec. + type: integer + format: int64 + x-kubernetes-validations: + - rule: self.metadata.name == self.spec.node.name + message: spec.node.name should match metadata.name diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/0000_80_machineconfignode-TechPreviewNoUpgrade.crd.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/0000_80_machineconfignode-TechPreviewNoUpgrade.crd.yaml new file mode 100644 index 0000000000..69ffa1f727 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/0000_80_machineconfignode-TechPreviewNoUpgrade.crd.yaml @@ -0,0 +1,207 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: machineconfignodes.machineconfiguration.openshift.io + labels: + "openshift.io/operator-managed": "" + annotations: + api-approved.openshift.io: https://github.com/openshift/api/pull/1596 + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + include.release.openshift.io/single-node-developer: "true" + release.openshift.io/feature-set: TechPreviewNoUpgrade +spec: + # group name to use for REST API: /apis// + group: machineconfiguration.openshift.io + scope: Cluster + names: + kind: MachineConfigNode + singular: machineconfignode + plural: machineconfignodes + versions: + - name: v1alpha1 + # Each version can be enabled/disabled by Served flag. + served: true + # One and only one version must be marked as the storage version. + storage: true + subresources: + status: {} + additionalPrinterColumns: + - jsonPath: .status.conditions[?(@.type=="Updated")].status + name: Updated + type: string + - jsonPath: .status.conditions[?(@.type=="UpdatePrepared")].status + name: UpdatePrepared + type: string + - jsonPath: .status.conditions[?(@.type=="UpdateExecuted")].status + name: UpdateExecuted + type: string + - jsonPath: .status.conditions[?(@.type=="UpdatePostActionComplete")].status + name: UpdatePostActionComplete + type: string + - jsonPath: .status.conditions[?(@.type=="UpdateComplete")].status + name: UpdateComplete + type: string + - jsonPath: .status.conditions[?(@.type=="Resumed")].status + name: Resumed + type: string + - jsonPath: .status.conditions[?(@.type=="UpdateCompatible")].status + name: UpdateCompatible + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=="AppliedFilesAndOS")].status + name: UpdatedFilesAndOS + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=="Cordoned")].status + name: CordonedNode + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=="Drained")].status + name: DrainedNode + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=="RebootedNode")].status + name: RebootedNode + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=="ReloadedCRIO")].status + name: ReloadedCRIO + priority: 1 + type: string + - jsonPath: .status.conditions[?(@.type=="Uncordoned")].status + name: UncordonedNode + priority: 1 + type: string + schema: + openAPIV3Schema: + description: 'MachineConfigNode describes the health of the Machines on the system 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.' + 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: + type: object + spec: + description: spec describes the configuration of the machine config node. + type: object + required: + - configVersion + - node + - pool + properties: + configVersion: + description: configVersion holds the desired config version for the node targeted by this machine config node resource. The desired version represents the machine config the node will attempt to update to. This gets set before the machine config operator validates the new machine config against the current machine config. + type: object + required: + - desired + properties: + desired: + description: desired is the name of the machine config that the the node should be upgraded to. This value is set when the machine config pool generates a new version of its rendered configuration. When this value is changed, the machine config daemon starts the node upgrade process. This value gets set in the machine config node spec once the machine config has been targeted for upgrade and before it is validated. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length. + type: string + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + node: + description: node contains a reference to the node for this machine config node. + type: object + required: + - name + properties: + name: + description: name is the object name. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length. + type: string + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + pool: + description: pool contains a reference to the machine config pool that this machine config node's referenced node belongs to. + type: object + required: + - name + properties: + name: + description: name is the object name. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length. + type: string + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + status: + description: status describes the last observed state of this machine config node. + type: object + required: + - configVersion + properties: + conditions: + description: conditions represent the observations of a machine config node's current state. + type: array + items: + description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, \n type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + type: object + required: + - lastTransitionTime + - message + - reason + - status + - type + 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. + type: string + format: date-time + message: + description: message is a human readable message indicating details about the transition. This may be an empty string. + type: string + maxLength: 32768 + 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. + type: integer + format: int64 + minimum: 0 + 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. + type: string + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + status: + description: status of the condition, one of True, False, Unknown. + type: string + enum: + - "True" + - "False" + - Unknown + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + type: string + 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])$ + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + configVersion: + description: configVersion describes the current and desired machine config for this node. The current version represents the current machine config for the node and is updated after a successful update. The desired version represents the machine config the node will attempt to update to. This desired machine config has been compared to the current machine config and has been validated by the machine config operator as one that is valid and that exists. + type: object + required: + - desired + properties: + current: + description: current is the name of the machine config currently in use on the node. This value is updated once the machine config daemon has completed the update of the configuration for the node. This value should match the desired version unless an upgrade is in progress. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length. + type: string + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + desired: + description: desired is the MachineConfig the node wants to upgrade to. This value gets set in the machine config node status once the machine config has been validated against the current machine config. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length. + type: string + maxLength: 253 + pattern: ^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$ + observedGeneration: + description: observedGeneration represents the generation observed by the controller. This field is updated when the controller observes a change to the desiredConfig in the configVersion of the machine config node spec. + type: integer + format: int64 + x-kubernetes-validations: + - rule: self.metadata.name == self.spec.node.name + message: spec.node.name should match metadata.name diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/Makefile b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/Makefile new file mode 100644 index 0000000000..5943b2583a --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/Makefile @@ -0,0 +1,3 @@ +.PHONY: test +test: + make -C ../../tests test GINKGO_EXTRA_ARGS=--focus="machineconfiguration.openshift.io/v1alpha1" diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/custom.machineconfignode.testsuite.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/custom.machineconfignode.testsuite.yaml new file mode 100644 index 0000000000..3b12d072af --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/custom.machineconfignode.testsuite.yaml @@ -0,0 +1,80 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "[Custom] MachineConfigNode" +crd: 0000_80_machineconfignode-CustomNoUpgrade.crd.yaml +tests: + onCreate: + - name: Should be able to create a minimal MachineConfigNode + initial: | + apiVersion: machineconfiguration.openshift.io/v1alpha1 + kind: MachineConfigNode + metadata: + name: foobar + spec: + node: + name: foobar + pool: + name: worker + configVersion: + desired: rendered-worker-abc + expected: | + apiVersion: machineconfiguration.openshift.io/v1alpha1 + kind: MachineConfigNode + metadata: + name: foobar + spec: + node: + name: foobar + pool: + name: worker + configVersion: + desired: rendered-worker-abc + - name: Node name must match the Object name. + initial: | + apiVersion: machineconfiguration.openshift.io/v1alpha1 + kind: MachineConfigNode + metadata: + name: foobar + spec: + node: + name: barfoo + pool: + name: worker + configVersion: + desired: rendered-worker-abc + expectedError: "Invalid value: \"object\": spec.node.name should match metadata.name" + - name: Pool is required. + initial: | + apiVersion: machineconfiguration.openshift.io/v1alpha1 + kind: MachineConfigNode + metadata: + name: foobar + spec: + node: + name: barfoo + configVersion: + desired: rendered-worker-abc + expectedError: "spec.pool: Required value, : Invalid value: \"null\"" + - name: Node is required. + initial: | + apiVersion: machineconfiguration.openshift.io/v1alpha1 + kind: MachineConfigNode + metadata: + name: foobar + spec: + pool: + name: barfoo + configVersion: + desired: rendered-worker-abc + expectedError: "spec.node: Required value, : Invalid value: \"null\"" + - name: ConfigVersion is required. + initial: | + apiVersion: machineconfiguration.openshift.io/v1alpha1 + kind: MachineConfigNode + metadata: + name: foobar + spec: + pool: + name: barfoo + node: + name: foobar + expectedError: "spec.configVersion: Required value, : Invalid value: \"null\"" diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/doc.go b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/doc.go new file mode 100644 index 0000000000..5876803877 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/doc.go @@ -0,0 +1,7 @@ +// +k8s:deepcopy-gen=package,register +// +groupName=machineconfiguration.openshift.io +// +k8s:defaulter-gen=TypeMeta +// +k8s:openapi-gen=true + +// Package v1alpha1 is the v1alpha1 version of the API. +package v1alpha1 diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/register.go b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/register.go new file mode 100644 index 0000000000..b18dfac66e --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/register.go @@ -0,0 +1,43 @@ +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +var ( + GroupName = "machineconfiguration.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 +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(GroupVersion, + &MachineConfigNode{}, + &MachineConfigNodeList{}, + ) + metav1.AddToGroupVersion(scheme, GroupVersion) + return nil +} + +// 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} +} + +// Kind is used to validate existence of a resource kind in this API group +func Kind(kind string) schema.GroupKind { + return schema.GroupKind{Group: GroupName, Kind: kind} +} diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/techpreview.machineconfignode.testsuite.yaml b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/techpreview.machineconfignode.testsuite.yaml new file mode 100644 index 0000000000..eec4192e2e --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/techpreview.machineconfignode.testsuite.yaml @@ -0,0 +1,80 @@ +apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this +name: "[TechPreview] MachineConfigNode" +crd: 0000_80_machineconfignode-TechPreviewNoUpgrade.crd.yaml +tests: + onCreate: + - name: Should be able to create a minimal MachineConfigNode + initial: | + apiVersion: machineconfiguration.openshift.io/v1alpha1 + kind: MachineConfigNode + metadata: + name: foobar + spec: + node: + name: foobar + pool: + name: worker + configVersion: + desired: rendered-worker-abc + expected: | + apiVersion: machineconfiguration.openshift.io/v1alpha1 + kind: MachineConfigNode + metadata: + name: foobar + spec: + node: + name: foobar + pool: + name: worker + configVersion: + desired: rendered-worker-abc + - name: Node name must match the Object name. + initial: | + apiVersion: machineconfiguration.openshift.io/v1alpha1 + kind: MachineConfigNode + metadata: + name: foobar + spec: + node: + name: barfoo + pool: + name: worker + configVersion: + desired: rendered-worker-abc + expectedError: "Invalid value: \"object\": spec.node.name should match metadata.name" + - name: Pool is required. + initial: | + apiVersion: machineconfiguration.openshift.io/v1alpha1 + kind: MachineConfigNode + metadata: + name: foobar + spec: + node: + name: barfoo + configVersion: + desired: rendered-worker-abc + expectedError: "spec.pool: Required value, : Invalid value: \"null\"" + - name: Node is required. + initial: | + apiVersion: machineconfiguration.openshift.io/v1alpha1 + kind: MachineConfigNode + metadata: + name: foobar + spec: + pool: + name: barfoo + configVersion: + desired: rendered-worker-abc + expectedError: "spec.node: Required value, : Invalid value: \"null\"" + - name: ConfigVersion is required. + initial: | + apiVersion: machineconfiguration.openshift.io/v1alpha1 + kind: MachineConfigNode + metadata: + name: foobar + spec: + pool: + name: barfoo + node: + name: foobar + expectedError: "spec.configVersion: Required value, : Invalid value: \"null\"" diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/types_machineconfignode.go b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/types_machineconfignode.go new file mode 100644 index 0000000000..299a6b7cbd --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/types_machineconfignode.go @@ -0,0 +1,170 @@ +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// +genclient +// +genclient:nonNamespaced +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// MachineConfigNode describes the health of the Machines on the system +// 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:validation:XValidation:rule="self.metadata.name == self.spec.node.name",message="spec.node.name should match metadata.name" +type MachineConfigNode struct { + metav1.TypeMeta `json:",inline"` + metav1.ObjectMeta `json:"metadata,omitempty"` + + // spec describes the configuration of the machine config node. + // +kubebuilder:validation:Required + Spec MachineConfigNodeSpec `json:"spec"` + + // status describes the last observed state of this machine config node. + // +optional + Status MachineConfigNodeStatus `json:"status"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// MachineConfigNodeList describes all of the MachinesStates on the system +// +// 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 MachineConfigNodeList struct { + metav1.TypeMeta `json:",inline"` + metav1.ListMeta `json:"metadata"` + + Items []MachineConfigNode `json:"items"` +} + +// MCOObjectReference holds information about an object the MCO either owns +// or modifies in some way +type MCOObjectReference struct { + // name is the object name. + // Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) + // It may consist of only alphanumeric characters, hyphens (-) and periods (.) + // and must be at most 253 characters in length. + // +kubebuilder:validation:MaxLength:=253 + // +kubebuilder:validation:Pattern=`^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$` + // +kubebuilder:validation:Required + Name string `json:"name"` +} + +// MachineConfigNodeSpec describes the MachineConfigNode we are managing. +type MachineConfigNodeSpec struct { + // node contains a reference to the node for this machine config node. + // +kubebuilder:validation:Required + Node MCOObjectReference `json:"node"` + + // pool contains a reference to the machine config pool that this machine config node's + // referenced node belongs to. + // +kubebuilder:validation:Required + Pool MCOObjectReference `json:"pool"` + + // configVersion holds the desired config version for the node targeted by this machine config node resource. + // The desired version represents the machine config the node will attempt to update to. This gets set before the machine config operator validates + // the new machine config against the current machine config. + // +kubebuilder:validation:Required + ConfigVersion MachineConfigNodeSpecMachineConfigVersion `json:"configVersion"` +} + +// MachineConfigNodeStatus holds the reported information on a particular machine config node. +type MachineConfigNodeStatus struct { + // conditions represent the observations of a machine config node's current state. + // +patchMergeKey=type + // +patchStrategy=merge + // +listType=map + // +listMapKey=type + Conditions []metav1.Condition `json:"conditions,omitempty" patchStrategy:"merge" patchMergeKey:"type"` + // observedGeneration represents the generation observed by the controller. + // This field is updated when the controller observes a change to the desiredConfig in the configVersion of the machine config node spec. + // +kubebuilder:validation:Required + ObservedGeneration int64 `json:"observedGeneration,omitempty"` + // configVersion describes the current and desired machine config for this node. + // The current version represents the current machine config for the node and is updated after a successful update. + // The desired version represents the machine config the node will attempt to update to. + // This desired machine config has been compared to the current machine config and has been validated by the machine config operator as one that is valid and that exists. + // +kubebuilder:validation:Required + ConfigVersion MachineConfigNodeStatusMachineConfigVersion `json:"configVersion"` +} + +// MachineConfigNodeStatusMachineConfigVersion holds the current and desired config versions as last updated in the MCN status. +// When the current and desired versions are not matched, the machine config pool is processing an upgrade and the machine config node will +// monitor the upgrade process. +// When the current and desired versions do not match, +// the machine config node will ignore these events given that certain operations happen both during the MCO's upgrade mode and the daily operations mode. +type MachineConfigNodeStatusMachineConfigVersion struct { + // current is the name of the machine config currently in use on the node. + // This value is updated once the machine config daemon has completed the update of the configuration for the node. + // This value should match the desired version unless an upgrade is in progress. + // Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) + // It may consist of only alphanumeric characters, hyphens (-) and periods (.) + // and must be at most 253 characters in length. + // +kubebuilder:validation:MaxLength=253 + // +kubebuilder:validation:Pattern=`^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$` + // +optional + Current string `json:"current"` + // desired is the MachineConfig the node wants to upgrade to. + // This value gets set in the machine config node status once the machine config has been validated + // against the current machine config. + // Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) + // It may consist of only alphanumeric characters, hyphens (-) and periods (.) + // and must be at most 253 characters in length. + // +kubebuilder:validation:MaxLength=253 + // +kubebuilder:validation:Pattern=`^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$` + // +kubebuilder:validation:Required + Desired string `json:"desired"` +} + +// MachineConfigNodeSpecMachineConfigVersion holds the desired config version for the current observed machine config node. +// When Current is not equal to Desired; the MachineConfigOperator is in an upgrade phase and the machine config node will +// take account of upgrade related events. Otherwise they will be ignored given that certain operations +// happen both during the MCO's upgrade mode and the daily operations mode. +type MachineConfigNodeSpecMachineConfigVersion struct { + // desired is the name of the machine config that the the node should be upgraded to. + // This value is set when the machine config pool generates a new version of its rendered configuration. + // When this value is changed, the machine config daemon starts the node upgrade process. + // This value gets set in the machine config node spec once the machine config has been targeted for upgrade and before it is validated. + // Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) + // It may consist of only alphanumeric characters, hyphens (-) and periods (.) + // and must be at most 253 characters in length. + // +kubebuilder:validation:MaxLength=253 + // +kubebuilder:validation:Pattern=`^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])(\.([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9]))*$` + // +kubebuilder:validation:Required + Desired string `json:"desired"` +} + +// StateProgress is each possible state for each possible MachineConfigNodeType +// UpgradeProgression Kind will only use the "MachinConfigPoolUpdate..." types for example +// Please note: These conditions are subject to change. Both additions and deletions may be made. +type StateProgress string + +const ( + // MachineConfigNodeUpdatePrepared describes a machine that is preparing in the daemon to trigger an update + MachineConfigNodeUpdatePrepared StateProgress = "UpdatePrepared" + // MachineConfigNodeUpdateExecuted describes a machine that has executed the body of the upgrade + MachineConfigNodeUpdateExecuted StateProgress = "UpdateExecuted" + // MachineConfigNodeUpdatePostActionComplete describes a machine that has executed its post update action + MachineConfigNodeUpdatePostActionComplete StateProgress = "UpdatePostActionComplete" + // MachineConfigNodeUpdateComplete describes a machine that has completed the core parts of an upgrade. + MachineConfigNodeUpdateComplete StateProgress = "UpdateComplete" + // MachineConfigNodeUpdated describes a machine that has a matching desired and current config after executing an update + MachineConfigNodeUpdated StateProgress = "Updated" + // MachineConfigNodeUpdateResumed describes a machine that has resumed normal processes + MachineConfigNodeResumed StateProgress = "Resumed" + // MachineConfigNodeUpdateCompatible the part of the preparing phase where the mco decides whether it can update + MachineConfigNodeUpdateCompatible StateProgress = "UpdateCompatible" + // MachineConfigNodeUpdateDrained describes the part of the inprogress phase where the node drains + MachineConfigNodeUpdateDrained StateProgress = "Drained" + // MachineConfigNodeUpdateFilesAndOS describes the part of the inprogress phase where the nodes file and OS config change + MachineConfigNodeUpdateFilesAndOS StateProgress = "AppliedFilesAndOS" + // MachineConfigNodeUpdateCordoned describes the part of the completing phase where the node cordons + MachineConfigNodeUpdateCordoned StateProgress = "Cordoned" + // MachineConfigNodeUpdateUncordoned describes the part of the completing phase where the node uncordons + MachineConfigNodeUpdateUncordoned StateProgress = "Uncordoned" + // MachineConfigNodeUpdateRebooted describes the part of the post action phase where the node reboots itself + MachineConfigNodeUpdateRebooted StateProgress = "RebootedNode" + // MachineConfigNodeUpdateReloaded describes the part of the post action phase where the node reloads its CRIO service + MachineConfigNodeUpdateReloaded StateProgress = "ReloadedCRIO" +) diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 0000000000..d2ab9b91af --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,163 @@ +//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 *MCOObjectReference) DeepCopyInto(out *MCOObjectReference) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MCOObjectReference. +func (in *MCOObjectReference) DeepCopy() *MCOObjectReference { + if in == nil { + return nil + } + out := new(MCOObjectReference) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineConfigNode) DeepCopyInto(out *MachineConfigNode) { + *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 MachineConfigNode. +func (in *MachineConfigNode) DeepCopy() *MachineConfigNode { + if in == nil { + return nil + } + out := new(MachineConfigNode) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MachineConfigNode) 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 *MachineConfigNodeList) DeepCopyInto(out *MachineConfigNodeList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]MachineConfigNode, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigNodeList. +func (in *MachineConfigNodeList) DeepCopy() *MachineConfigNodeList { + if in == nil { + return nil + } + out := new(MachineConfigNodeList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *MachineConfigNodeList) 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 *MachineConfigNodeSpec) DeepCopyInto(out *MachineConfigNodeSpec) { + *out = *in + out.Node = in.Node + out.Pool = in.Pool + out.ConfigVersion = in.ConfigVersion + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigNodeSpec. +func (in *MachineConfigNodeSpec) DeepCopy() *MachineConfigNodeSpec { + if in == nil { + return nil + } + out := new(MachineConfigNodeSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineConfigNodeSpecMachineConfigVersion) DeepCopyInto(out *MachineConfigNodeSpecMachineConfigVersion) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigNodeSpecMachineConfigVersion. +func (in *MachineConfigNodeSpecMachineConfigVersion) DeepCopy() *MachineConfigNodeSpecMachineConfigVersion { + if in == nil { + return nil + } + out := new(MachineConfigNodeSpecMachineConfigVersion) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineConfigNodeStatus) DeepCopyInto(out *MachineConfigNodeStatus) { + *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.ConfigVersion = in.ConfigVersion + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigNodeStatus. +func (in *MachineConfigNodeStatus) DeepCopy() *MachineConfigNodeStatus { + if in == nil { + return nil + } + out := new(MachineConfigNodeStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *MachineConfigNodeStatusMachineConfigVersion) DeepCopyInto(out *MachineConfigNodeStatusMachineConfigVersion) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new MachineConfigNodeStatusMachineConfigVersion. +func (in *MachineConfigNodeStatusMachineConfigVersion) DeepCopy() *MachineConfigNodeStatusMachineConfigVersion { + if in == nil { + return nil + } + out := new(MachineConfigNodeStatusMachineConfigVersion) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/zz_generated.swagger_doc_generated.go new file mode 100644 index 0000000000..0044c9c4b6 --- /dev/null +++ b/vendor/github.com/openshift/api/machineconfiguration/v1alpha1/zz_generated.swagger_doc_generated.go @@ -0,0 +1,82 @@ +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_MCOObjectReference = map[string]string{ + "": "MCOObjectReference holds information about an object the MCO either owns or modifies in some way", + "name": "name is the object name. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length.", +} + +func (MCOObjectReference) SwaggerDoc() map[string]string { + return map_MCOObjectReference +} + +var map_MachineConfigNode = map[string]string{ + "": "MachineConfigNode describes the health of the Machines on the system 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.", + "spec": "spec describes the configuration of the machine config node.", + "status": "status describes the last observed state of this machine config node.", +} + +func (MachineConfigNode) SwaggerDoc() map[string]string { + return map_MachineConfigNode +} + +var map_MachineConfigNodeList = map[string]string{ + "": "MachineConfigNodeList describes all of the MachinesStates on the system\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.", +} + +func (MachineConfigNodeList) SwaggerDoc() map[string]string { + return map_MachineConfigNodeList +} + +var map_MachineConfigNodeSpec = map[string]string{ + "": "MachineConfigNodeSpec describes the MachineConfigNode we are managing.", + "node": "node contains a reference to the node for this machine config node.", + "pool": "pool contains a reference to the machine config pool that this machine config node's referenced node belongs to.", + "configVersion": "configVersion holds the desired config version for the node targeted by this machine config node resource. The desired version represents the machine config the node will attempt to update to. This gets set before the machine config operator validates the new machine config against the current machine config.", +} + +func (MachineConfigNodeSpec) SwaggerDoc() map[string]string { + return map_MachineConfigNodeSpec +} + +var map_MachineConfigNodeSpecMachineConfigVersion = map[string]string{ + "": "MachineConfigNodeSpecMachineConfigVersion holds the desired config version for the current observed machine config node. When Current is not equal to Desired; the MachineConfigOperator is in an upgrade phase and the machine config node will take account of upgrade related events. Otherwise they will be ignored given that certain operations happen both during the MCO's upgrade mode and the daily operations mode.", + "desired": "desired is the name of the machine config that the the node should be upgraded to. This value is set when the machine config pool generates a new version of its rendered configuration. When this value is changed, the machine config daemon starts the node upgrade process. This value gets set in the machine config node spec once the machine config has been targeted for upgrade and before it is validated. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length.", +} + +func (MachineConfigNodeSpecMachineConfigVersion) SwaggerDoc() map[string]string { + return map_MachineConfigNodeSpecMachineConfigVersion +} + +var map_MachineConfigNodeStatus = map[string]string{ + "": "MachineConfigNodeStatus holds the reported information on a particular machine config node.", + "conditions": "conditions represent the observations of a machine config node's current state.", + "observedGeneration": "observedGeneration represents the generation observed by the controller. This field is updated when the controller observes a change to the desiredConfig in the configVersion of the machine config node spec.", + "configVersion": "configVersion describes the current and desired machine config for this node. The current version represents the current machine config for the node and is updated after a successful update. The desired version represents the machine config the node will attempt to update to. This desired machine config has been compared to the current machine config and has been validated by the machine config operator as one that is valid and that exists.", +} + +func (MachineConfigNodeStatus) SwaggerDoc() map[string]string { + return map_MachineConfigNodeStatus +} + +var map_MachineConfigNodeStatusMachineConfigVersion = map[string]string{ + "": "MachineConfigNodeStatusMachineConfigVersion holds the current and desired config versions as last updated in the MCN status. When the current and desired versions are not matched, the machine config pool is processing an upgrade and the machine config node will monitor the upgrade process. When the current and desired versions do not match, the machine config node will ignore these events given that certain operations happen both during the MCO's upgrade mode and the daily operations mode.", + "current": "current is the name of the machine config currently in use on the node. This value is updated once the machine config daemon has completed the update of the configuration for the node. This value should match the desired version unless an upgrade is in progress. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length.", + "desired": "desired is the MachineConfig the node wants to upgrade to. This value gets set in the machine config node status once the machine config has been validated against the current machine config. Must be a lowercase RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) It may consist of only alphanumeric characters, hyphens (-) and periods (.) and must be at most 253 characters in length.", +} + +func (MachineConfigNodeStatusMachineConfigVersion) SwaggerDoc() map[string]string { + return map_MachineConfigNodeStatusMachineConfigVersion +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/internal/internal.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/internal/internal.go new file mode 100644 index 0000000000..fe3397900a --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/internal/internal.go @@ -0,0 +1,329 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package internal + +import ( + "fmt" + "sync" + + typed "sigs.k8s.io/structured-merge-diff/v4/typed" +) + +func Parser() *typed.Parser { + parserOnce.Do(func() { + var err error + parser, err = typed.NewParser(schemaYAML) + if err != nil { + panic(fmt.Sprintf("Failed to parse schema: %v", err)) + } + }) + return parser +} + +var parserOnce sync.Once +var parser *typed.Parser +var schemaYAML = typed.YAMLObject(`types: +- name: com.github.openshift.api.machineconfiguration.v1.ContainerRuntimeConfig + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_deduced_ + elementRelationship: separable +- name: com.github.openshift.api.machineconfiguration.v1.ControllerConfig + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_deduced_ + elementRelationship: separable +- name: com.github.openshift.api.machineconfiguration.v1.KubeletConfig + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_deduced_ + elementRelationship: separable +- name: com.github.openshift.api.machineconfiguration.v1.MachineConfig + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_deduced_ + elementRelationship: separable +- name: com.github.openshift.api.machineconfiguration.v1.MachineConfigPool + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_deduced_ + elementRelationship: separable +- name: com.github.openshift.api.machineconfiguration.v1alpha1.MCOObjectReference + map: + fields: + - name: name + type: + scalar: string + default: "" +- name: com.github.openshift.api.machineconfiguration.v1alpha1.MachineConfigNode + map: + fields: + - name: apiVersion + type: + scalar: string + - name: kind + type: + scalar: string + - name: metadata + type: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta + default: {} + - name: spec + type: + namedType: com.github.openshift.api.machineconfiguration.v1alpha1.MachineConfigNodeSpec + default: {} + - name: status + type: + namedType: com.github.openshift.api.machineconfiguration.v1alpha1.MachineConfigNodeStatus + default: {} +- name: com.github.openshift.api.machineconfiguration.v1alpha1.MachineConfigNodeSpec + map: + fields: + - name: configVersion + type: + namedType: com.github.openshift.api.machineconfiguration.v1alpha1.MachineConfigNodeSpecMachineConfigVersion + default: {} + - name: node + type: + namedType: com.github.openshift.api.machineconfiguration.v1alpha1.MCOObjectReference + default: {} + - name: pool + type: + namedType: com.github.openshift.api.machineconfiguration.v1alpha1.MCOObjectReference + default: {} +- name: com.github.openshift.api.machineconfiguration.v1alpha1.MachineConfigNodeSpecMachineConfigVersion + map: + fields: + - name: desired + type: + scalar: string + default: "" +- name: com.github.openshift.api.machineconfiguration.v1alpha1.MachineConfigNodeStatus + map: + fields: + - name: conditions + type: + list: + elementType: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.Condition + elementRelationship: associative + keys: + - type + - name: configVersion + type: + namedType: com.github.openshift.api.machineconfiguration.v1alpha1.MachineConfigNodeStatusMachineConfigVersion + default: {} + - name: observedGeneration + type: + scalar: numeric +- name: com.github.openshift.api.machineconfiguration.v1alpha1.MachineConfigNodeStatusMachineConfigVersion + map: + fields: + - name: current + type: + scalar: string + default: "" + - name: desired + type: + scalar: string + default: "" +- name: io.k8s.apimachinery.pkg.apis.meta.v1.Condition + map: + fields: + - name: lastTransitionTime + type: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.Time + default: {} + - name: message + type: + scalar: string + default: "" + - name: observedGeneration + type: + scalar: numeric + - name: reason + type: + scalar: string + default: "" + - name: status + type: + scalar: string + default: "" + - name: type + type: + scalar: string + default: "" +- name: io.k8s.apimachinery.pkg.apis.meta.v1.FieldsV1 + map: + elementType: + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_deduced_ + elementRelationship: separable +- name: io.k8s.apimachinery.pkg.apis.meta.v1.ManagedFieldsEntry + map: + fields: + - name: apiVersion + type: + scalar: string + - name: fieldsType + type: + scalar: string + - name: fieldsV1 + type: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.FieldsV1 + - name: manager + type: + scalar: string + - name: operation + type: + scalar: string + - name: subresource + type: + scalar: string + - name: time + type: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.Time +- name: io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta + map: + fields: + - name: annotations + type: + map: + elementType: + scalar: string + - name: creationTimestamp + type: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.Time + default: {} + - name: deletionGracePeriodSeconds + type: + scalar: numeric + - name: deletionTimestamp + type: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.Time + - name: finalizers + type: + list: + elementType: + scalar: string + elementRelationship: associative + - name: generateName + type: + scalar: string + - name: generation + type: + scalar: numeric + - name: labels + type: + map: + elementType: + scalar: string + - name: managedFields + type: + list: + elementType: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.ManagedFieldsEntry + elementRelationship: atomic + - name: name + type: + scalar: string + - name: namespace + type: + scalar: string + - name: ownerReferences + type: + list: + elementType: + namedType: io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference + elementRelationship: associative + keys: + - uid + - name: resourceVersion + type: + scalar: string + - name: selfLink + type: + scalar: string + - name: uid + type: + scalar: string +- name: io.k8s.apimachinery.pkg.apis.meta.v1.OwnerReference + map: + fields: + - name: apiVersion + type: + scalar: string + default: "" + - name: blockOwnerDeletion + type: + scalar: boolean + - name: controller + type: + scalar: boolean + - name: kind + type: + scalar: string + default: "" + - name: name + type: + scalar: string + default: "" + - name: uid + type: + scalar: string + default: "" + elementRelationship: atomic +- name: io.k8s.apimachinery.pkg.apis.meta.v1.Time + scalar: untyped +- name: __untyped_atomic_ + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic +- name: __untyped_deduced_ + scalar: untyped + list: + elementType: + namedType: __untyped_atomic_ + elementRelationship: atomic + map: + elementType: + namedType: __untyped_deduced_ + elementRelationship: separable +`) diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/certexpiry.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/certexpiry.go new file mode 100644 index 0000000000..f48af82559 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/certexpiry.go @@ -0,0 +1,45 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// CertExpiryApplyConfiguration represents an declarative configuration of the CertExpiry type for use +// with apply. +type CertExpiryApplyConfiguration struct { + Bundle *string `json:"bundle,omitempty"` + Subject *string `json:"subject,omitempty"` + Expiry *v1.Time `json:"expiry,omitempty"` +} + +// CertExpiryApplyConfiguration constructs an declarative configuration of the CertExpiry type for use with +// apply. +func CertExpiry() *CertExpiryApplyConfiguration { + return &CertExpiryApplyConfiguration{} +} + +// WithBundle sets the Bundle field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Bundle field is set to the value of the last call. +func (b *CertExpiryApplyConfiguration) WithBundle(value string) *CertExpiryApplyConfiguration { + b.Bundle = &value + return b +} + +// WithSubject sets the Subject field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Subject field is set to the value of the last call. +func (b *CertExpiryApplyConfiguration) WithSubject(value string) *CertExpiryApplyConfiguration { + b.Subject = &value + return b +} + +// WithExpiry sets the Expiry field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Expiry field is set to the value of the last call. +func (b *CertExpiryApplyConfiguration) WithExpiry(value v1.Time) *CertExpiryApplyConfiguration { + b.Expiry = &value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfig.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfig.go new file mode 100644 index 0000000000..6c63049f6b --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfig.go @@ -0,0 +1,240 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + apimachineconfigurationv1 "github.com/openshift/api/machineconfiguration/v1" + internal "github.com/openshift/client-go/machineconfiguration/applyconfigurations/internal" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// ContainerRuntimeConfigApplyConfiguration represents an declarative configuration of the ContainerRuntimeConfig type for use +// with apply. +type ContainerRuntimeConfigApplyConfiguration struct { + v1.TypeMetaApplyConfiguration `json:",inline"` + *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + Spec *ContainerRuntimeConfigSpecApplyConfiguration `json:"spec,omitempty"` + Status *ContainerRuntimeConfigStatusApplyConfiguration `json:"status,omitempty"` +} + +// ContainerRuntimeConfig constructs an declarative configuration of the ContainerRuntimeConfig type for use with +// apply. +func ContainerRuntimeConfig(name string) *ContainerRuntimeConfigApplyConfiguration { + b := &ContainerRuntimeConfigApplyConfiguration{} + b.WithName(name) + b.WithKind("ContainerRuntimeConfig") + b.WithAPIVersion("machineconfiguration.openshift.io/v1") + return b +} + +// ExtractContainerRuntimeConfig extracts the applied configuration owned by fieldManager from +// containerRuntimeConfig. If no managedFields are found in containerRuntimeConfig for fieldManager, a +// ContainerRuntimeConfigApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// containerRuntimeConfig must be a unmodified ContainerRuntimeConfig API object that was retrieved from the Kubernetes API. +// ExtractContainerRuntimeConfig provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +// Experimental! +func ExtractContainerRuntimeConfig(containerRuntimeConfig *apimachineconfigurationv1.ContainerRuntimeConfig, fieldManager string) (*ContainerRuntimeConfigApplyConfiguration, error) { + return extractContainerRuntimeConfig(containerRuntimeConfig, fieldManager, "") +} + +// ExtractContainerRuntimeConfigStatus is the same as ExtractContainerRuntimeConfig except +// that it extracts the status subresource applied configuration. +// Experimental! +func ExtractContainerRuntimeConfigStatus(containerRuntimeConfig *apimachineconfigurationv1.ContainerRuntimeConfig, fieldManager string) (*ContainerRuntimeConfigApplyConfiguration, error) { + return extractContainerRuntimeConfig(containerRuntimeConfig, fieldManager, "status") +} + +func extractContainerRuntimeConfig(containerRuntimeConfig *apimachineconfigurationv1.ContainerRuntimeConfig, fieldManager string, subresource string) (*ContainerRuntimeConfigApplyConfiguration, error) { + b := &ContainerRuntimeConfigApplyConfiguration{} + err := managedfields.ExtractInto(containerRuntimeConfig, internal.Parser().Type("com.github.openshift.api.machineconfiguration.v1.ContainerRuntimeConfig"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(containerRuntimeConfig.Name) + + b.WithKind("ContainerRuntimeConfig") + b.WithAPIVersion("machineconfiguration.openshift.io/v1") + return b, nil +} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *ContainerRuntimeConfigApplyConfiguration) WithKind(value string) *ContainerRuntimeConfigApplyConfiguration { + b.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *ContainerRuntimeConfigApplyConfiguration) WithAPIVersion(value string) *ContainerRuntimeConfigApplyConfiguration { + b.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *ContainerRuntimeConfigApplyConfiguration) WithName(value string) *ContainerRuntimeConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *ContainerRuntimeConfigApplyConfiguration) WithGenerateName(value string) *ContainerRuntimeConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *ContainerRuntimeConfigApplyConfiguration) WithNamespace(value string) *ContainerRuntimeConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *ContainerRuntimeConfigApplyConfiguration) WithUID(value types.UID) *ContainerRuntimeConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *ContainerRuntimeConfigApplyConfiguration) WithResourceVersion(value string) *ContainerRuntimeConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *ContainerRuntimeConfigApplyConfiguration) WithGeneration(value int64) *ContainerRuntimeConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *ContainerRuntimeConfigApplyConfiguration) WithCreationTimestamp(value metav1.Time) *ContainerRuntimeConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *ContainerRuntimeConfigApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *ContainerRuntimeConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *ContainerRuntimeConfigApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *ContainerRuntimeConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *ContainerRuntimeConfigApplyConfiguration) WithLabels(entries map[string]string) *ContainerRuntimeConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *ContainerRuntimeConfigApplyConfiguration) WithAnnotations(entries map[string]string) *ContainerRuntimeConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *ContainerRuntimeConfigApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *ContainerRuntimeConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.OwnerReferences = append(b.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *ContainerRuntimeConfigApplyConfiguration) WithFinalizers(values ...string) *ContainerRuntimeConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.Finalizers = append(b.Finalizers, values[i]) + } + return b +} + +func (b *ContainerRuntimeConfigApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *ContainerRuntimeConfigApplyConfiguration) WithSpec(value *ContainerRuntimeConfigSpecApplyConfiguration) *ContainerRuntimeConfigApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *ContainerRuntimeConfigApplyConfiguration) WithStatus(value *ContainerRuntimeConfigStatusApplyConfiguration) *ContainerRuntimeConfigApplyConfiguration { + b.Status = value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfigcondition.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfigcondition.go new file mode 100644 index 0000000000..910ea5cbd1 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfigcondition.go @@ -0,0 +1,65 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/machineconfiguration/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// ContainerRuntimeConfigConditionApplyConfiguration represents an declarative configuration of the ContainerRuntimeConfigCondition type for use +// with apply. +type ContainerRuntimeConfigConditionApplyConfiguration struct { + Type *v1.ContainerRuntimeConfigStatusConditionType `json:"type,omitempty"` + Status *corev1.ConditionStatus `json:"status,omitempty"` + LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"` + Reason *string `json:"reason,omitempty"` + Message *string `json:"message,omitempty"` +} + +// ContainerRuntimeConfigConditionApplyConfiguration constructs an declarative configuration of the ContainerRuntimeConfigCondition type for use with +// apply. +func ContainerRuntimeConfigCondition() *ContainerRuntimeConfigConditionApplyConfiguration { + return &ContainerRuntimeConfigConditionApplyConfiguration{} +} + +// WithType sets the Type field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Type field is set to the value of the last call. +func (b *ContainerRuntimeConfigConditionApplyConfiguration) WithType(value v1.ContainerRuntimeConfigStatusConditionType) *ContainerRuntimeConfigConditionApplyConfiguration { + b.Type = &value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *ContainerRuntimeConfigConditionApplyConfiguration) WithStatus(value corev1.ConditionStatus) *ContainerRuntimeConfigConditionApplyConfiguration { + b.Status = &value + return b +} + +// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LastTransitionTime field is set to the value of the last call. +func (b *ContainerRuntimeConfigConditionApplyConfiguration) WithLastTransitionTime(value metav1.Time) *ContainerRuntimeConfigConditionApplyConfiguration { + b.LastTransitionTime = &value + return b +} + +// WithReason sets the Reason field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Reason field is set to the value of the last call. +func (b *ContainerRuntimeConfigConditionApplyConfiguration) WithReason(value string) *ContainerRuntimeConfigConditionApplyConfiguration { + b.Reason = &value + return b +} + +// WithMessage sets the Message field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Message field is set to the value of the last call. +func (b *ContainerRuntimeConfigConditionApplyConfiguration) WithMessage(value string) *ContainerRuntimeConfigConditionApplyConfiguration { + b.Message = &value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfigspec.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfigspec.go new file mode 100644 index 0000000000..ed85982d03 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfigspec.go @@ -0,0 +1,36 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// ContainerRuntimeConfigSpecApplyConfiguration represents an declarative configuration of the ContainerRuntimeConfigSpec type for use +// with apply. +type ContainerRuntimeConfigSpecApplyConfiguration struct { + MachineConfigPoolSelector *v1.LabelSelector `json:"machineConfigPoolSelector,omitempty"` + ContainerRuntimeConfig *ContainerRuntimeConfigurationApplyConfiguration `json:"containerRuntimeConfig,omitempty"` +} + +// ContainerRuntimeConfigSpecApplyConfiguration constructs an declarative configuration of the ContainerRuntimeConfigSpec type for use with +// apply. +func ContainerRuntimeConfigSpec() *ContainerRuntimeConfigSpecApplyConfiguration { + return &ContainerRuntimeConfigSpecApplyConfiguration{} +} + +// WithMachineConfigPoolSelector sets the MachineConfigPoolSelector field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the MachineConfigPoolSelector field is set to the value of the last call. +func (b *ContainerRuntimeConfigSpecApplyConfiguration) WithMachineConfigPoolSelector(value v1.LabelSelector) *ContainerRuntimeConfigSpecApplyConfiguration { + b.MachineConfigPoolSelector = &value + return b +} + +// WithContainerRuntimeConfig sets the ContainerRuntimeConfig field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ContainerRuntimeConfig field is set to the value of the last call. +func (b *ContainerRuntimeConfigSpecApplyConfiguration) WithContainerRuntimeConfig(value *ContainerRuntimeConfigurationApplyConfiguration) *ContainerRuntimeConfigSpecApplyConfiguration { + b.ContainerRuntimeConfig = value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfigstatus.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfigstatus.go new file mode 100644 index 0000000000..4f5811f601 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfigstatus.go @@ -0,0 +1,37 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// ContainerRuntimeConfigStatusApplyConfiguration represents an declarative configuration of the ContainerRuntimeConfigStatus type for use +// with apply. +type ContainerRuntimeConfigStatusApplyConfiguration struct { + ObservedGeneration *int64 `json:"observedGeneration,omitempty"` + Conditions []ContainerRuntimeConfigConditionApplyConfiguration `json:"conditions,omitempty"` +} + +// ContainerRuntimeConfigStatusApplyConfiguration constructs an declarative configuration of the ContainerRuntimeConfigStatus type for use with +// apply. +func ContainerRuntimeConfigStatus() *ContainerRuntimeConfigStatusApplyConfiguration { + return &ContainerRuntimeConfigStatusApplyConfiguration{} +} + +// WithObservedGeneration sets the ObservedGeneration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ObservedGeneration field is set to the value of the last call. +func (b *ContainerRuntimeConfigStatusApplyConfiguration) WithObservedGeneration(value int64) *ContainerRuntimeConfigStatusApplyConfiguration { + b.ObservedGeneration = &value + return b +} + +// WithConditions adds the given value to the Conditions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Conditions field. +func (b *ContainerRuntimeConfigStatusApplyConfiguration) WithConditions(values ...*ContainerRuntimeConfigConditionApplyConfiguration) *ContainerRuntimeConfigStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithConditions") + } + b.Conditions = append(b.Conditions, *values[i]) + } + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfiguration.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfiguration.go new file mode 100644 index 0000000000..8af4f5cffb --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/containerruntimeconfiguration.go @@ -0,0 +1,64 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/machineconfiguration/v1" + resource "k8s.io/apimachinery/pkg/api/resource" +) + +// ContainerRuntimeConfigurationApplyConfiguration represents an declarative configuration of the ContainerRuntimeConfiguration type for use +// with apply. +type ContainerRuntimeConfigurationApplyConfiguration struct { + PidsLimit *int64 `json:"pidsLimit,omitempty"` + LogLevel *string `json:"logLevel,omitempty"` + LogSizeMax *resource.Quantity `json:"logSizeMax,omitempty"` + OverlaySize *resource.Quantity `json:"overlaySize,omitempty"` + DefaultRuntime *v1.ContainerRuntimeDefaultRuntime `json:"defaultRuntime,omitempty"` +} + +// ContainerRuntimeConfigurationApplyConfiguration constructs an declarative configuration of the ContainerRuntimeConfiguration type for use with +// apply. +func ContainerRuntimeConfiguration() *ContainerRuntimeConfigurationApplyConfiguration { + return &ContainerRuntimeConfigurationApplyConfiguration{} +} + +// WithPidsLimit sets the PidsLimit field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PidsLimit field is set to the value of the last call. +func (b *ContainerRuntimeConfigurationApplyConfiguration) WithPidsLimit(value int64) *ContainerRuntimeConfigurationApplyConfiguration { + b.PidsLimit = &value + return b +} + +// WithLogLevel sets the LogLevel field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LogLevel field is set to the value of the last call. +func (b *ContainerRuntimeConfigurationApplyConfiguration) WithLogLevel(value string) *ContainerRuntimeConfigurationApplyConfiguration { + b.LogLevel = &value + return b +} + +// WithLogSizeMax sets the LogSizeMax field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LogSizeMax field is set to the value of the last call. +func (b *ContainerRuntimeConfigurationApplyConfiguration) WithLogSizeMax(value resource.Quantity) *ContainerRuntimeConfigurationApplyConfiguration { + b.LogSizeMax = &value + return b +} + +// WithOverlaySize sets the OverlaySize field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the OverlaySize field is set to the value of the last call. +func (b *ContainerRuntimeConfigurationApplyConfiguration) WithOverlaySize(value resource.Quantity) *ContainerRuntimeConfigurationApplyConfiguration { + b.OverlaySize = &value + return b +} + +// WithDefaultRuntime sets the DefaultRuntime field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DefaultRuntime field is set to the value of the last call. +func (b *ContainerRuntimeConfigurationApplyConfiguration) WithDefaultRuntime(value v1.ContainerRuntimeDefaultRuntime) *ContainerRuntimeConfigurationApplyConfiguration { + b.DefaultRuntime = &value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllercertificate.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllercertificate.go new file mode 100644 index 0000000000..cfb8a76d78 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllercertificate.go @@ -0,0 +1,63 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// ControllerCertificateApplyConfiguration represents an declarative configuration of the ControllerCertificate type for use +// with apply. +type ControllerCertificateApplyConfiguration struct { + Subject *string `json:"subject,omitempty"` + Signer *string `json:"signer,omitempty"` + NotBefore *v1.Time `json:"notBefore,omitempty"` + NotAfter *v1.Time `json:"notAfter,omitempty"` + BundleFile *string `json:"bundleFile,omitempty"` +} + +// ControllerCertificateApplyConfiguration constructs an declarative configuration of the ControllerCertificate type for use with +// apply. +func ControllerCertificate() *ControllerCertificateApplyConfiguration { + return &ControllerCertificateApplyConfiguration{} +} + +// WithSubject sets the Subject field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Subject field is set to the value of the last call. +func (b *ControllerCertificateApplyConfiguration) WithSubject(value string) *ControllerCertificateApplyConfiguration { + b.Subject = &value + return b +} + +// WithSigner sets the Signer field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Signer field is set to the value of the last call. +func (b *ControllerCertificateApplyConfiguration) WithSigner(value string) *ControllerCertificateApplyConfiguration { + b.Signer = &value + return b +} + +// WithNotBefore sets the NotBefore field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NotBefore field is set to the value of the last call. +func (b *ControllerCertificateApplyConfiguration) WithNotBefore(value v1.Time) *ControllerCertificateApplyConfiguration { + b.NotBefore = &value + return b +} + +// WithNotAfter sets the NotAfter field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NotAfter field is set to the value of the last call. +func (b *ControllerCertificateApplyConfiguration) WithNotAfter(value v1.Time) *ControllerCertificateApplyConfiguration { + b.NotAfter = &value + return b +} + +// WithBundleFile sets the BundleFile field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the BundleFile field is set to the value of the last call. +func (b *ControllerCertificateApplyConfiguration) WithBundleFile(value string) *ControllerCertificateApplyConfiguration { + b.BundleFile = &value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllerconfig.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllerconfig.go new file mode 100644 index 0000000000..76d4e9e4d4 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllerconfig.go @@ -0,0 +1,240 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + apimachineconfigurationv1 "github.com/openshift/api/machineconfiguration/v1" + internal "github.com/openshift/client-go/machineconfiguration/applyconfigurations/internal" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// ControllerConfigApplyConfiguration represents an declarative configuration of the ControllerConfig type for use +// with apply. +type ControllerConfigApplyConfiguration struct { + v1.TypeMetaApplyConfiguration `json:",inline"` + *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + Spec *ControllerConfigSpecApplyConfiguration `json:"spec,omitempty"` + Status *ControllerConfigStatusApplyConfiguration `json:"status,omitempty"` +} + +// ControllerConfig constructs an declarative configuration of the ControllerConfig type for use with +// apply. +func ControllerConfig(name string) *ControllerConfigApplyConfiguration { + b := &ControllerConfigApplyConfiguration{} + b.WithName(name) + b.WithKind("ControllerConfig") + b.WithAPIVersion("machineconfiguration.openshift.io/v1") + return b +} + +// ExtractControllerConfig extracts the applied configuration owned by fieldManager from +// controllerConfig. If no managedFields are found in controllerConfig for fieldManager, a +// ControllerConfigApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// controllerConfig must be a unmodified ControllerConfig API object that was retrieved from the Kubernetes API. +// ExtractControllerConfig provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +// Experimental! +func ExtractControllerConfig(controllerConfig *apimachineconfigurationv1.ControllerConfig, fieldManager string) (*ControllerConfigApplyConfiguration, error) { + return extractControllerConfig(controllerConfig, fieldManager, "") +} + +// ExtractControllerConfigStatus is the same as ExtractControllerConfig except +// that it extracts the status subresource applied configuration. +// Experimental! +func ExtractControllerConfigStatus(controllerConfig *apimachineconfigurationv1.ControllerConfig, fieldManager string) (*ControllerConfigApplyConfiguration, error) { + return extractControllerConfig(controllerConfig, fieldManager, "status") +} + +func extractControllerConfig(controllerConfig *apimachineconfigurationv1.ControllerConfig, fieldManager string, subresource string) (*ControllerConfigApplyConfiguration, error) { + b := &ControllerConfigApplyConfiguration{} + err := managedfields.ExtractInto(controllerConfig, internal.Parser().Type("com.github.openshift.api.machineconfiguration.v1.ControllerConfig"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(controllerConfig.Name) + + b.WithKind("ControllerConfig") + b.WithAPIVersion("machineconfiguration.openshift.io/v1") + return b, nil +} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *ControllerConfigApplyConfiguration) WithKind(value string) *ControllerConfigApplyConfiguration { + b.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *ControllerConfigApplyConfiguration) WithAPIVersion(value string) *ControllerConfigApplyConfiguration { + b.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *ControllerConfigApplyConfiguration) WithName(value string) *ControllerConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *ControllerConfigApplyConfiguration) WithGenerateName(value string) *ControllerConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *ControllerConfigApplyConfiguration) WithNamespace(value string) *ControllerConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *ControllerConfigApplyConfiguration) WithUID(value types.UID) *ControllerConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *ControllerConfigApplyConfiguration) WithResourceVersion(value string) *ControllerConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *ControllerConfigApplyConfiguration) WithGeneration(value int64) *ControllerConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *ControllerConfigApplyConfiguration) WithCreationTimestamp(value metav1.Time) *ControllerConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *ControllerConfigApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *ControllerConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *ControllerConfigApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *ControllerConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *ControllerConfigApplyConfiguration) WithLabels(entries map[string]string) *ControllerConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *ControllerConfigApplyConfiguration) WithAnnotations(entries map[string]string) *ControllerConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *ControllerConfigApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *ControllerConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.OwnerReferences = append(b.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *ControllerConfigApplyConfiguration) WithFinalizers(values ...string) *ControllerConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.Finalizers = append(b.Finalizers, values[i]) + } + return b +} + +func (b *ControllerConfigApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *ControllerConfigApplyConfiguration) WithSpec(value *ControllerConfigSpecApplyConfiguration) *ControllerConfigApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *ControllerConfigApplyConfiguration) WithStatus(value *ControllerConfigStatusApplyConfiguration) *ControllerConfigApplyConfiguration { + b.Status = value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllerconfigspec.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllerconfigspec.go new file mode 100644 index 0000000000..b58ba32161 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllerconfigspec.go @@ -0,0 +1,253 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + configv1 "github.com/openshift/api/config/v1" + machineconfigurationv1 "github.com/openshift/api/machineconfiguration/v1" + corev1 "k8s.io/client-go/applyconfigurations/core/v1" +) + +// ControllerConfigSpecApplyConfiguration represents an declarative configuration of the ControllerConfigSpec type for use +// with apply. +type ControllerConfigSpecApplyConfiguration struct { + ClusterDNSIP *string `json:"clusterDNSIP,omitempty"` + CloudProviderConfig *string `json:"cloudProviderConfig,omitempty"` + Platform *string `json:"platform,omitempty"` + EtcdDiscoveryDomain *string `json:"etcdDiscoveryDomain,omitempty"` + KubeAPIServerServingCAData []byte `json:"kubeAPIServerServingCAData,omitempty"` + RootCAData []byte `json:"rootCAData,omitempty"` + CloudProviderCAData []byte `json:"cloudProviderCAData,omitempty"` + AdditionalTrustBundle []byte `json:"additionalTrustBundle,omitempty"` + ImageRegistryBundleUserData []ImageRegistryBundleApplyConfiguration `json:"imageRegistryBundleUserData,omitempty"` + ImageRegistryBundleData []ImageRegistryBundleApplyConfiguration `json:"imageRegistryBundleData,omitempty"` + PullSecret *corev1.ObjectReferenceApplyConfiguration `json:"pullSecret,omitempty"` + InternalRegistryPullSecret []byte `json:"internalRegistryPullSecret,omitempty"` + Images map[string]string `json:"images,omitempty"` + BaseOSContainerImage *string `json:"baseOSContainerImage,omitempty"` + BaseOSExtensionsContainerImage *string `json:"baseOSExtensionsContainerImage,omitempty"` + OSImageURL *string `json:"osImageURL,omitempty"` + ReleaseImage *string `json:"releaseImage,omitempty"` + Proxy *configv1.ProxyStatus `json:"proxy,omitempty"` + Infra *configv1.Infrastructure `json:"infra,omitempty"` + DNS *configv1.DNS `json:"dns,omitempty"` + IPFamilies *machineconfigurationv1.IPFamiliesType `json:"ipFamilies,omitempty"` + NetworkType *string `json:"networkType,omitempty"` + Network *NetworkInfoApplyConfiguration `json:"network,omitempty"` +} + +// ControllerConfigSpecApplyConfiguration constructs an declarative configuration of the ControllerConfigSpec type for use with +// apply. +func ControllerConfigSpec() *ControllerConfigSpecApplyConfiguration { + return &ControllerConfigSpecApplyConfiguration{} +} + +// WithClusterDNSIP sets the ClusterDNSIP field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ClusterDNSIP field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithClusterDNSIP(value string) *ControllerConfigSpecApplyConfiguration { + b.ClusterDNSIP = &value + return b +} + +// WithCloudProviderConfig sets the CloudProviderConfig field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CloudProviderConfig field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithCloudProviderConfig(value string) *ControllerConfigSpecApplyConfiguration { + b.CloudProviderConfig = &value + return b +} + +// WithPlatform sets the Platform field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Platform field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithPlatform(value string) *ControllerConfigSpecApplyConfiguration { + b.Platform = &value + return b +} + +// WithEtcdDiscoveryDomain sets the EtcdDiscoveryDomain field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the EtcdDiscoveryDomain field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithEtcdDiscoveryDomain(value string) *ControllerConfigSpecApplyConfiguration { + b.EtcdDiscoveryDomain = &value + return b +} + +// WithKubeAPIServerServingCAData adds the given value to the KubeAPIServerServingCAData field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the KubeAPIServerServingCAData field. +func (b *ControllerConfigSpecApplyConfiguration) WithKubeAPIServerServingCAData(values ...byte) *ControllerConfigSpecApplyConfiguration { + for i := range values { + b.KubeAPIServerServingCAData = append(b.KubeAPIServerServingCAData, values[i]) + } + return b +} + +// WithRootCAData adds the given value to the RootCAData field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the RootCAData field. +func (b *ControllerConfigSpecApplyConfiguration) WithRootCAData(values ...byte) *ControllerConfigSpecApplyConfiguration { + for i := range values { + b.RootCAData = append(b.RootCAData, values[i]) + } + return b +} + +// WithCloudProviderCAData adds the given value to the CloudProviderCAData field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the CloudProviderCAData field. +func (b *ControllerConfigSpecApplyConfiguration) WithCloudProviderCAData(values ...byte) *ControllerConfigSpecApplyConfiguration { + for i := range values { + b.CloudProviderCAData = append(b.CloudProviderCAData, values[i]) + } + return b +} + +// WithAdditionalTrustBundle adds the given value to the AdditionalTrustBundle field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the AdditionalTrustBundle field. +func (b *ControllerConfigSpecApplyConfiguration) WithAdditionalTrustBundle(values ...byte) *ControllerConfigSpecApplyConfiguration { + for i := range values { + b.AdditionalTrustBundle = append(b.AdditionalTrustBundle, values[i]) + } + return b +} + +// WithImageRegistryBundleUserData adds the given value to the ImageRegistryBundleUserData field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the ImageRegistryBundleUserData field. +func (b *ControllerConfigSpecApplyConfiguration) WithImageRegistryBundleUserData(values ...*ImageRegistryBundleApplyConfiguration) *ControllerConfigSpecApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithImageRegistryBundleUserData") + } + b.ImageRegistryBundleUserData = append(b.ImageRegistryBundleUserData, *values[i]) + } + return b +} + +// WithImageRegistryBundleData adds the given value to the ImageRegistryBundleData field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the ImageRegistryBundleData field. +func (b *ControllerConfigSpecApplyConfiguration) WithImageRegistryBundleData(values ...*ImageRegistryBundleApplyConfiguration) *ControllerConfigSpecApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithImageRegistryBundleData") + } + b.ImageRegistryBundleData = append(b.ImageRegistryBundleData, *values[i]) + } + return b +} + +// WithPullSecret sets the PullSecret field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the PullSecret field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithPullSecret(value *corev1.ObjectReferenceApplyConfiguration) *ControllerConfigSpecApplyConfiguration { + b.PullSecret = value + return b +} + +// WithInternalRegistryPullSecret adds the given value to the InternalRegistryPullSecret field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the InternalRegistryPullSecret field. +func (b *ControllerConfigSpecApplyConfiguration) WithInternalRegistryPullSecret(values ...byte) *ControllerConfigSpecApplyConfiguration { + for i := range values { + b.InternalRegistryPullSecret = append(b.InternalRegistryPullSecret, values[i]) + } + return b +} + +// WithImages puts the entries into the Images field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Images field, +// overwriting an existing map entries in Images field with the same key. +func (b *ControllerConfigSpecApplyConfiguration) WithImages(entries map[string]string) *ControllerConfigSpecApplyConfiguration { + if b.Images == nil && len(entries) > 0 { + b.Images = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Images[k] = v + } + return b +} + +// WithBaseOSContainerImage sets the BaseOSContainerImage field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the BaseOSContainerImage field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithBaseOSContainerImage(value string) *ControllerConfigSpecApplyConfiguration { + b.BaseOSContainerImage = &value + return b +} + +// WithBaseOSExtensionsContainerImage sets the BaseOSExtensionsContainerImage field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the BaseOSExtensionsContainerImage field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithBaseOSExtensionsContainerImage(value string) *ControllerConfigSpecApplyConfiguration { + b.BaseOSExtensionsContainerImage = &value + return b +} + +// WithOSImageURL sets the OSImageURL field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the OSImageURL field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithOSImageURL(value string) *ControllerConfigSpecApplyConfiguration { + b.OSImageURL = &value + return b +} + +// WithReleaseImage sets the ReleaseImage field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ReleaseImage field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithReleaseImage(value string) *ControllerConfigSpecApplyConfiguration { + b.ReleaseImage = &value + return b +} + +// WithProxy sets the Proxy field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Proxy field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithProxy(value configv1.ProxyStatus) *ControllerConfigSpecApplyConfiguration { + b.Proxy = &value + return b +} + +// WithInfra sets the Infra field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Infra field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithInfra(value configv1.Infrastructure) *ControllerConfigSpecApplyConfiguration { + b.Infra = &value + return b +} + +// WithDNS sets the DNS field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DNS field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithDNS(value configv1.DNS) *ControllerConfigSpecApplyConfiguration { + b.DNS = &value + return b +} + +// WithIPFamilies sets the IPFamilies field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the IPFamilies field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithIPFamilies(value machineconfigurationv1.IPFamiliesType) *ControllerConfigSpecApplyConfiguration { + b.IPFamilies = &value + return b +} + +// WithNetworkType sets the NetworkType field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NetworkType field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithNetworkType(value string) *ControllerConfigSpecApplyConfiguration { + b.NetworkType = &value + return b +} + +// WithNetwork sets the Network field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Network field is set to the value of the last call. +func (b *ControllerConfigSpecApplyConfiguration) WithNetwork(value *NetworkInfoApplyConfiguration) *ControllerConfigSpecApplyConfiguration { + b.Network = value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllerconfigstatus.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllerconfigstatus.go new file mode 100644 index 0000000000..7d9a2be8ba --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllerconfigstatus.go @@ -0,0 +1,51 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// ControllerConfigStatusApplyConfiguration represents an declarative configuration of the ControllerConfigStatus type for use +// with apply. +type ControllerConfigStatusApplyConfiguration struct { + ObservedGeneration *int64 `json:"observedGeneration,omitempty"` + Conditions []ControllerConfigStatusConditionApplyConfiguration `json:"conditions,omitempty"` + ControllerCertificates []ControllerCertificateApplyConfiguration `json:"controllerCertificates,omitempty"` +} + +// ControllerConfigStatusApplyConfiguration constructs an declarative configuration of the ControllerConfigStatus type for use with +// apply. +func ControllerConfigStatus() *ControllerConfigStatusApplyConfiguration { + return &ControllerConfigStatusApplyConfiguration{} +} + +// WithObservedGeneration sets the ObservedGeneration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ObservedGeneration field is set to the value of the last call. +func (b *ControllerConfigStatusApplyConfiguration) WithObservedGeneration(value int64) *ControllerConfigStatusApplyConfiguration { + b.ObservedGeneration = &value + return b +} + +// WithConditions adds the given value to the Conditions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Conditions field. +func (b *ControllerConfigStatusApplyConfiguration) WithConditions(values ...*ControllerConfigStatusConditionApplyConfiguration) *ControllerConfigStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithConditions") + } + b.Conditions = append(b.Conditions, *values[i]) + } + return b +} + +// WithControllerCertificates adds the given value to the ControllerCertificates field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the ControllerCertificates field. +func (b *ControllerConfigStatusApplyConfiguration) WithControllerCertificates(values ...*ControllerCertificateApplyConfiguration) *ControllerConfigStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithControllerCertificates") + } + b.ControllerCertificates = append(b.ControllerCertificates, *values[i]) + } + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllerconfigstatuscondition.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllerconfigstatuscondition.go new file mode 100644 index 0000000000..d2fc0fa459 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/controllerconfigstatuscondition.go @@ -0,0 +1,65 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/machineconfiguration/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// ControllerConfigStatusConditionApplyConfiguration represents an declarative configuration of the ControllerConfigStatusCondition type for use +// with apply. +type ControllerConfigStatusConditionApplyConfiguration struct { + Type *v1.ControllerConfigStatusConditionType `json:"type,omitempty"` + Status *corev1.ConditionStatus `json:"status,omitempty"` + LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"` + Reason *string `json:"reason,omitempty"` + Message *string `json:"message,omitempty"` +} + +// ControllerConfigStatusConditionApplyConfiguration constructs an declarative configuration of the ControllerConfigStatusCondition type for use with +// apply. +func ControllerConfigStatusCondition() *ControllerConfigStatusConditionApplyConfiguration { + return &ControllerConfigStatusConditionApplyConfiguration{} +} + +// WithType sets the Type field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Type field is set to the value of the last call. +func (b *ControllerConfigStatusConditionApplyConfiguration) WithType(value v1.ControllerConfigStatusConditionType) *ControllerConfigStatusConditionApplyConfiguration { + b.Type = &value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *ControllerConfigStatusConditionApplyConfiguration) WithStatus(value corev1.ConditionStatus) *ControllerConfigStatusConditionApplyConfiguration { + b.Status = &value + return b +} + +// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LastTransitionTime field is set to the value of the last call. +func (b *ControllerConfigStatusConditionApplyConfiguration) WithLastTransitionTime(value metav1.Time) *ControllerConfigStatusConditionApplyConfiguration { + b.LastTransitionTime = &value + return b +} + +// WithReason sets the Reason field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Reason field is set to the value of the last call. +func (b *ControllerConfigStatusConditionApplyConfiguration) WithReason(value string) *ControllerConfigStatusConditionApplyConfiguration { + b.Reason = &value + return b +} + +// WithMessage sets the Message field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Message field is set to the value of the last call. +func (b *ControllerConfigStatusConditionApplyConfiguration) WithMessage(value string) *ControllerConfigStatusConditionApplyConfiguration { + b.Message = &value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/imageregistrybundle.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/imageregistrybundle.go new file mode 100644 index 0000000000..8166e3695b --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/imageregistrybundle.go @@ -0,0 +1,34 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// ImageRegistryBundleApplyConfiguration represents an declarative configuration of the ImageRegistryBundle type for use +// with apply. +type ImageRegistryBundleApplyConfiguration struct { + File *string `json:"file,omitempty"` + Data []byte `json:"data,omitempty"` +} + +// ImageRegistryBundleApplyConfiguration constructs an declarative configuration of the ImageRegistryBundle type for use with +// apply. +func ImageRegistryBundle() *ImageRegistryBundleApplyConfiguration { + return &ImageRegistryBundleApplyConfiguration{} +} + +// WithFile sets the File field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the File field is set to the value of the last call. +func (b *ImageRegistryBundleApplyConfiguration) WithFile(value string) *ImageRegistryBundleApplyConfiguration { + b.File = &value + return b +} + +// WithData adds the given value to the Data field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Data field. +func (b *ImageRegistryBundleApplyConfiguration) WithData(values ...byte) *ImageRegistryBundleApplyConfiguration { + for i := range values { + b.Data = append(b.Data, values[i]) + } + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/kubeletconfig.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/kubeletconfig.go new file mode 100644 index 0000000000..d84c8264d2 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/kubeletconfig.go @@ -0,0 +1,240 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + apimachineconfigurationv1 "github.com/openshift/api/machineconfiguration/v1" + internal "github.com/openshift/client-go/machineconfiguration/applyconfigurations/internal" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// KubeletConfigApplyConfiguration represents an declarative configuration of the KubeletConfig type for use +// with apply. +type KubeletConfigApplyConfiguration struct { + v1.TypeMetaApplyConfiguration `json:",inline"` + *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + Spec *KubeletConfigSpecApplyConfiguration `json:"spec,omitempty"` + Status *KubeletConfigStatusApplyConfiguration `json:"status,omitempty"` +} + +// KubeletConfig constructs an declarative configuration of the KubeletConfig type for use with +// apply. +func KubeletConfig(name string) *KubeletConfigApplyConfiguration { + b := &KubeletConfigApplyConfiguration{} + b.WithName(name) + b.WithKind("KubeletConfig") + b.WithAPIVersion("machineconfiguration.openshift.io/v1") + return b +} + +// ExtractKubeletConfig extracts the applied configuration owned by fieldManager from +// kubeletConfig. If no managedFields are found in kubeletConfig for fieldManager, a +// KubeletConfigApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// kubeletConfig must be a unmodified KubeletConfig API object that was retrieved from the Kubernetes API. +// ExtractKubeletConfig provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +// Experimental! +func ExtractKubeletConfig(kubeletConfig *apimachineconfigurationv1.KubeletConfig, fieldManager string) (*KubeletConfigApplyConfiguration, error) { + return extractKubeletConfig(kubeletConfig, fieldManager, "") +} + +// ExtractKubeletConfigStatus is the same as ExtractKubeletConfig except +// that it extracts the status subresource applied configuration. +// Experimental! +func ExtractKubeletConfigStatus(kubeletConfig *apimachineconfigurationv1.KubeletConfig, fieldManager string) (*KubeletConfigApplyConfiguration, error) { + return extractKubeletConfig(kubeletConfig, fieldManager, "status") +} + +func extractKubeletConfig(kubeletConfig *apimachineconfigurationv1.KubeletConfig, fieldManager string, subresource string) (*KubeletConfigApplyConfiguration, error) { + b := &KubeletConfigApplyConfiguration{} + err := managedfields.ExtractInto(kubeletConfig, internal.Parser().Type("com.github.openshift.api.machineconfiguration.v1.KubeletConfig"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(kubeletConfig.Name) + + b.WithKind("KubeletConfig") + b.WithAPIVersion("machineconfiguration.openshift.io/v1") + return b, nil +} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *KubeletConfigApplyConfiguration) WithKind(value string) *KubeletConfigApplyConfiguration { + b.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *KubeletConfigApplyConfiguration) WithAPIVersion(value string) *KubeletConfigApplyConfiguration { + b.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *KubeletConfigApplyConfiguration) WithName(value string) *KubeletConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *KubeletConfigApplyConfiguration) WithGenerateName(value string) *KubeletConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *KubeletConfigApplyConfiguration) WithNamespace(value string) *KubeletConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *KubeletConfigApplyConfiguration) WithUID(value types.UID) *KubeletConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *KubeletConfigApplyConfiguration) WithResourceVersion(value string) *KubeletConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *KubeletConfigApplyConfiguration) WithGeneration(value int64) *KubeletConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *KubeletConfigApplyConfiguration) WithCreationTimestamp(value metav1.Time) *KubeletConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *KubeletConfigApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *KubeletConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *KubeletConfigApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *KubeletConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *KubeletConfigApplyConfiguration) WithLabels(entries map[string]string) *KubeletConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *KubeletConfigApplyConfiguration) WithAnnotations(entries map[string]string) *KubeletConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *KubeletConfigApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *KubeletConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.OwnerReferences = append(b.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *KubeletConfigApplyConfiguration) WithFinalizers(values ...string) *KubeletConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.Finalizers = append(b.Finalizers, values[i]) + } + return b +} + +func (b *KubeletConfigApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *KubeletConfigApplyConfiguration) WithSpec(value *KubeletConfigSpecApplyConfiguration) *KubeletConfigApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *KubeletConfigApplyConfiguration) WithStatus(value *KubeletConfigStatusApplyConfiguration) *KubeletConfigApplyConfiguration { + b.Status = value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/kubeletconfigcondition.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/kubeletconfigcondition.go new file mode 100644 index 0000000000..f4903c845e --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/kubeletconfigcondition.go @@ -0,0 +1,65 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/machineconfiguration/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// KubeletConfigConditionApplyConfiguration represents an declarative configuration of the KubeletConfigCondition type for use +// with apply. +type KubeletConfigConditionApplyConfiguration struct { + Type *v1.KubeletConfigStatusConditionType `json:"type,omitempty"` + Status *corev1.ConditionStatus `json:"status,omitempty"` + LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"` + Reason *string `json:"reason,omitempty"` + Message *string `json:"message,omitempty"` +} + +// KubeletConfigConditionApplyConfiguration constructs an declarative configuration of the KubeletConfigCondition type for use with +// apply. +func KubeletConfigCondition() *KubeletConfigConditionApplyConfiguration { + return &KubeletConfigConditionApplyConfiguration{} +} + +// WithType sets the Type field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Type field is set to the value of the last call. +func (b *KubeletConfigConditionApplyConfiguration) WithType(value v1.KubeletConfigStatusConditionType) *KubeletConfigConditionApplyConfiguration { + b.Type = &value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *KubeletConfigConditionApplyConfiguration) WithStatus(value corev1.ConditionStatus) *KubeletConfigConditionApplyConfiguration { + b.Status = &value + return b +} + +// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LastTransitionTime field is set to the value of the last call. +func (b *KubeletConfigConditionApplyConfiguration) WithLastTransitionTime(value metav1.Time) *KubeletConfigConditionApplyConfiguration { + b.LastTransitionTime = &value + return b +} + +// WithReason sets the Reason field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Reason field is set to the value of the last call. +func (b *KubeletConfigConditionApplyConfiguration) WithReason(value string) *KubeletConfigConditionApplyConfiguration { + b.Reason = &value + return b +} + +// WithMessage sets the Message field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Message field is set to the value of the last call. +func (b *KubeletConfigConditionApplyConfiguration) WithMessage(value string) *KubeletConfigConditionApplyConfiguration { + b.Message = &value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/kubeletconfigspec.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/kubeletconfigspec.go new file mode 100644 index 0000000000..bec5f4de96 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/kubeletconfigspec.go @@ -0,0 +1,65 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + configv1 "github.com/openshift/api/config/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// KubeletConfigSpecApplyConfiguration represents an declarative configuration of the KubeletConfigSpec type for use +// with apply. +type KubeletConfigSpecApplyConfiguration struct { + AutoSizingReserved *bool `json:"autoSizingReserved,omitempty"` + LogLevel *int32 `json:"logLevel,omitempty"` + MachineConfigPoolSelector *v1.LabelSelector `json:"machineConfigPoolSelector,omitempty"` + KubeletConfig *runtime.RawExtension `json:"kubeletConfig,omitempty"` + TLSSecurityProfile *configv1.TLSSecurityProfile `json:"tlsSecurityProfile,omitempty"` +} + +// KubeletConfigSpecApplyConfiguration constructs an declarative configuration of the KubeletConfigSpec type for use with +// apply. +func KubeletConfigSpec() *KubeletConfigSpecApplyConfiguration { + return &KubeletConfigSpecApplyConfiguration{} +} + +// WithAutoSizingReserved sets the AutoSizingReserved field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the AutoSizingReserved field is set to the value of the last call. +func (b *KubeletConfigSpecApplyConfiguration) WithAutoSizingReserved(value bool) *KubeletConfigSpecApplyConfiguration { + b.AutoSizingReserved = &value + return b +} + +// WithLogLevel sets the LogLevel field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LogLevel field is set to the value of the last call. +func (b *KubeletConfigSpecApplyConfiguration) WithLogLevel(value int32) *KubeletConfigSpecApplyConfiguration { + b.LogLevel = &value + return b +} + +// WithMachineConfigPoolSelector sets the MachineConfigPoolSelector field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the MachineConfigPoolSelector field is set to the value of the last call. +func (b *KubeletConfigSpecApplyConfiguration) WithMachineConfigPoolSelector(value v1.LabelSelector) *KubeletConfigSpecApplyConfiguration { + b.MachineConfigPoolSelector = &value + return b +} + +// WithKubeletConfig sets the KubeletConfig field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the KubeletConfig field is set to the value of the last call. +func (b *KubeletConfigSpecApplyConfiguration) WithKubeletConfig(value runtime.RawExtension) *KubeletConfigSpecApplyConfiguration { + b.KubeletConfig = &value + return b +} + +// WithTLSSecurityProfile sets the TLSSecurityProfile field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the TLSSecurityProfile field is set to the value of the last call. +func (b *KubeletConfigSpecApplyConfiguration) WithTLSSecurityProfile(value configv1.TLSSecurityProfile) *KubeletConfigSpecApplyConfiguration { + b.TLSSecurityProfile = &value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/kubeletconfigstatus.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/kubeletconfigstatus.go new file mode 100644 index 0000000000..68a2ae773b --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/kubeletconfigstatus.go @@ -0,0 +1,37 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// KubeletConfigStatusApplyConfiguration represents an declarative configuration of the KubeletConfigStatus type for use +// with apply. +type KubeletConfigStatusApplyConfiguration struct { + ObservedGeneration *int64 `json:"observedGeneration,omitempty"` + Conditions []KubeletConfigConditionApplyConfiguration `json:"conditions,omitempty"` +} + +// KubeletConfigStatusApplyConfiguration constructs an declarative configuration of the KubeletConfigStatus type for use with +// apply. +func KubeletConfigStatus() *KubeletConfigStatusApplyConfiguration { + return &KubeletConfigStatusApplyConfiguration{} +} + +// WithObservedGeneration sets the ObservedGeneration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ObservedGeneration field is set to the value of the last call. +func (b *KubeletConfigStatusApplyConfiguration) WithObservedGeneration(value int64) *KubeletConfigStatusApplyConfiguration { + b.ObservedGeneration = &value + return b +} + +// WithConditions adds the given value to the Conditions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Conditions field. +func (b *KubeletConfigStatusApplyConfiguration) WithConditions(values ...*KubeletConfigConditionApplyConfiguration) *KubeletConfigStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithConditions") + } + b.Conditions = append(b.Conditions, *values[i]) + } + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfig.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfig.go new file mode 100644 index 0000000000..16f1ffbd16 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfig.go @@ -0,0 +1,223 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + apimachineconfigurationv1 "github.com/openshift/api/machineconfiguration/v1" + internal "github.com/openshift/client-go/machineconfiguration/applyconfigurations/internal" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// MachineConfigApplyConfiguration represents an declarative configuration of the MachineConfig type for use +// with apply. +type MachineConfigApplyConfiguration struct { + v1.TypeMetaApplyConfiguration `json:",inline"` + *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + Spec *MachineConfigSpecApplyConfiguration `json:"spec,omitempty"` +} + +// MachineConfig constructs an declarative configuration of the MachineConfig type for use with +// apply. +func MachineConfig(name string) *MachineConfigApplyConfiguration { + b := &MachineConfigApplyConfiguration{} + b.WithName(name) + b.WithKind("MachineConfig") + b.WithAPIVersion("machineconfiguration.openshift.io/v1") + return b +} + +// ExtractMachineConfig extracts the applied configuration owned by fieldManager from +// machineConfig. If no managedFields are found in machineConfig for fieldManager, a +// MachineConfigApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// machineConfig must be a unmodified MachineConfig API object that was retrieved from the Kubernetes API. +// ExtractMachineConfig provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +// Experimental! +func ExtractMachineConfig(machineConfig *apimachineconfigurationv1.MachineConfig, fieldManager string) (*MachineConfigApplyConfiguration, error) { + return extractMachineConfig(machineConfig, fieldManager, "") +} +func extractMachineConfig(machineConfig *apimachineconfigurationv1.MachineConfig, fieldManager string, subresource string) (*MachineConfigApplyConfiguration, error) { + b := &MachineConfigApplyConfiguration{} + err := managedfields.ExtractInto(machineConfig, internal.Parser().Type("com.github.openshift.api.machineconfiguration.v1.MachineConfig"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(machineConfig.Name) + + b.WithKind("MachineConfig") + b.WithAPIVersion("machineconfiguration.openshift.io/v1") + return b, nil +} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *MachineConfigApplyConfiguration) WithKind(value string) *MachineConfigApplyConfiguration { + b.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *MachineConfigApplyConfiguration) WithAPIVersion(value string) *MachineConfigApplyConfiguration { + b.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *MachineConfigApplyConfiguration) WithName(value string) *MachineConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *MachineConfigApplyConfiguration) WithGenerateName(value string) *MachineConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *MachineConfigApplyConfiguration) WithNamespace(value string) *MachineConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *MachineConfigApplyConfiguration) WithUID(value types.UID) *MachineConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *MachineConfigApplyConfiguration) WithResourceVersion(value string) *MachineConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *MachineConfigApplyConfiguration) WithGeneration(value int64) *MachineConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *MachineConfigApplyConfiguration) WithCreationTimestamp(value metav1.Time) *MachineConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *MachineConfigApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *MachineConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *MachineConfigApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *MachineConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *MachineConfigApplyConfiguration) WithLabels(entries map[string]string) *MachineConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *MachineConfigApplyConfiguration) WithAnnotations(entries map[string]string) *MachineConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *MachineConfigApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *MachineConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.OwnerReferences = append(b.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *MachineConfigApplyConfiguration) WithFinalizers(values ...string) *MachineConfigApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.Finalizers = append(b.Finalizers, values[i]) + } + return b +} + +func (b *MachineConfigApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *MachineConfigApplyConfiguration) WithSpec(value *MachineConfigSpecApplyConfiguration) *MachineConfigApplyConfiguration { + b.Spec = value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpool.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpool.go new file mode 100644 index 0000000000..1192d23962 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpool.go @@ -0,0 +1,240 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + apimachineconfigurationv1 "github.com/openshift/api/machineconfiguration/v1" + internal "github.com/openshift/client-go/machineconfiguration/applyconfigurations/internal" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// MachineConfigPoolApplyConfiguration represents an declarative configuration of the MachineConfigPool type for use +// with apply. +type MachineConfigPoolApplyConfiguration struct { + v1.TypeMetaApplyConfiguration `json:",inline"` + *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + Spec *MachineConfigPoolSpecApplyConfiguration `json:"spec,omitempty"` + Status *MachineConfigPoolStatusApplyConfiguration `json:"status,omitempty"` +} + +// MachineConfigPool constructs an declarative configuration of the MachineConfigPool type for use with +// apply. +func MachineConfigPool(name string) *MachineConfigPoolApplyConfiguration { + b := &MachineConfigPoolApplyConfiguration{} + b.WithName(name) + b.WithKind("MachineConfigPool") + b.WithAPIVersion("machineconfiguration.openshift.io/v1") + return b +} + +// ExtractMachineConfigPool extracts the applied configuration owned by fieldManager from +// machineConfigPool. If no managedFields are found in machineConfigPool for fieldManager, a +// MachineConfigPoolApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// machineConfigPool must be a unmodified MachineConfigPool API object that was retrieved from the Kubernetes API. +// ExtractMachineConfigPool provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +// Experimental! +func ExtractMachineConfigPool(machineConfigPool *apimachineconfigurationv1.MachineConfigPool, fieldManager string) (*MachineConfigPoolApplyConfiguration, error) { + return extractMachineConfigPool(machineConfigPool, fieldManager, "") +} + +// ExtractMachineConfigPoolStatus is the same as ExtractMachineConfigPool except +// that it extracts the status subresource applied configuration. +// Experimental! +func ExtractMachineConfigPoolStatus(machineConfigPool *apimachineconfigurationv1.MachineConfigPool, fieldManager string) (*MachineConfigPoolApplyConfiguration, error) { + return extractMachineConfigPool(machineConfigPool, fieldManager, "status") +} + +func extractMachineConfigPool(machineConfigPool *apimachineconfigurationv1.MachineConfigPool, fieldManager string, subresource string) (*MachineConfigPoolApplyConfiguration, error) { + b := &MachineConfigPoolApplyConfiguration{} + err := managedfields.ExtractInto(machineConfigPool, internal.Parser().Type("com.github.openshift.api.machineconfiguration.v1.MachineConfigPool"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(machineConfigPool.Name) + + b.WithKind("MachineConfigPool") + b.WithAPIVersion("machineconfiguration.openshift.io/v1") + return b, nil +} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *MachineConfigPoolApplyConfiguration) WithKind(value string) *MachineConfigPoolApplyConfiguration { + b.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *MachineConfigPoolApplyConfiguration) WithAPIVersion(value string) *MachineConfigPoolApplyConfiguration { + b.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *MachineConfigPoolApplyConfiguration) WithName(value string) *MachineConfigPoolApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *MachineConfigPoolApplyConfiguration) WithGenerateName(value string) *MachineConfigPoolApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *MachineConfigPoolApplyConfiguration) WithNamespace(value string) *MachineConfigPoolApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *MachineConfigPoolApplyConfiguration) WithUID(value types.UID) *MachineConfigPoolApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *MachineConfigPoolApplyConfiguration) WithResourceVersion(value string) *MachineConfigPoolApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *MachineConfigPoolApplyConfiguration) WithGeneration(value int64) *MachineConfigPoolApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *MachineConfigPoolApplyConfiguration) WithCreationTimestamp(value metav1.Time) *MachineConfigPoolApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *MachineConfigPoolApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *MachineConfigPoolApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *MachineConfigPoolApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *MachineConfigPoolApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *MachineConfigPoolApplyConfiguration) WithLabels(entries map[string]string) *MachineConfigPoolApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *MachineConfigPoolApplyConfiguration) WithAnnotations(entries map[string]string) *MachineConfigPoolApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *MachineConfigPoolApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *MachineConfigPoolApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.OwnerReferences = append(b.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *MachineConfigPoolApplyConfiguration) WithFinalizers(values ...string) *MachineConfigPoolApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.Finalizers = append(b.Finalizers, values[i]) + } + return b +} + +func (b *MachineConfigPoolApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *MachineConfigPoolApplyConfiguration) WithSpec(value *MachineConfigPoolSpecApplyConfiguration) *MachineConfigPoolApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *MachineConfigPoolApplyConfiguration) WithStatus(value *MachineConfigPoolStatusApplyConfiguration) *MachineConfigPoolApplyConfiguration { + b.Status = value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpoolcondition.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpoolcondition.go new file mode 100644 index 0000000000..e31bc17a8f --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpoolcondition.go @@ -0,0 +1,65 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/machineconfiguration/v1" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// MachineConfigPoolConditionApplyConfiguration represents an declarative configuration of the MachineConfigPoolCondition type for use +// with apply. +type MachineConfigPoolConditionApplyConfiguration struct { + Type *v1.MachineConfigPoolConditionType `json:"type,omitempty"` + Status *corev1.ConditionStatus `json:"status,omitempty"` + LastTransitionTime *metav1.Time `json:"lastTransitionTime,omitempty"` + Reason *string `json:"reason,omitempty"` + Message *string `json:"message,omitempty"` +} + +// MachineConfigPoolConditionApplyConfiguration constructs an declarative configuration of the MachineConfigPoolCondition type for use with +// apply. +func MachineConfigPoolCondition() *MachineConfigPoolConditionApplyConfiguration { + return &MachineConfigPoolConditionApplyConfiguration{} +} + +// WithType sets the Type field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Type field is set to the value of the last call. +func (b *MachineConfigPoolConditionApplyConfiguration) WithType(value v1.MachineConfigPoolConditionType) *MachineConfigPoolConditionApplyConfiguration { + b.Type = &value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *MachineConfigPoolConditionApplyConfiguration) WithStatus(value corev1.ConditionStatus) *MachineConfigPoolConditionApplyConfiguration { + b.Status = &value + return b +} + +// WithLastTransitionTime sets the LastTransitionTime field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the LastTransitionTime field is set to the value of the last call. +func (b *MachineConfigPoolConditionApplyConfiguration) WithLastTransitionTime(value metav1.Time) *MachineConfigPoolConditionApplyConfiguration { + b.LastTransitionTime = &value + return b +} + +// WithReason sets the Reason field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Reason field is set to the value of the last call. +func (b *MachineConfigPoolConditionApplyConfiguration) WithReason(value string) *MachineConfigPoolConditionApplyConfiguration { + b.Reason = &value + return b +} + +// WithMessage sets the Message field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Message field is set to the value of the last call. +func (b *MachineConfigPoolConditionApplyConfiguration) WithMessage(value string) *MachineConfigPoolConditionApplyConfiguration { + b.Message = &value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpoolspec.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpoolspec.go new file mode 100644 index 0000000000..9bef4e0171 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpoolspec.go @@ -0,0 +1,64 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + intstr "k8s.io/apimachinery/pkg/util/intstr" +) + +// MachineConfigPoolSpecApplyConfiguration represents an declarative configuration of the MachineConfigPoolSpec type for use +// with apply. +type MachineConfigPoolSpecApplyConfiguration struct { + MachineConfigSelector *v1.LabelSelector `json:"machineConfigSelector,omitempty"` + NodeSelector *v1.LabelSelector `json:"nodeSelector,omitempty"` + Paused *bool `json:"paused,omitempty"` + MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty"` + Configuration *MachineConfigPoolStatusConfigurationApplyConfiguration `json:"configuration,omitempty"` +} + +// MachineConfigPoolSpecApplyConfiguration constructs an declarative configuration of the MachineConfigPoolSpec type for use with +// apply. +func MachineConfigPoolSpec() *MachineConfigPoolSpecApplyConfiguration { + return &MachineConfigPoolSpecApplyConfiguration{} +} + +// WithMachineConfigSelector sets the MachineConfigSelector field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the MachineConfigSelector field is set to the value of the last call. +func (b *MachineConfigPoolSpecApplyConfiguration) WithMachineConfigSelector(value v1.LabelSelector) *MachineConfigPoolSpecApplyConfiguration { + b.MachineConfigSelector = &value + return b +} + +// WithNodeSelector sets the NodeSelector field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NodeSelector field is set to the value of the last call. +func (b *MachineConfigPoolSpecApplyConfiguration) WithNodeSelector(value v1.LabelSelector) *MachineConfigPoolSpecApplyConfiguration { + b.NodeSelector = &value + return b +} + +// WithPaused sets the Paused field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Paused field is set to the value of the last call. +func (b *MachineConfigPoolSpecApplyConfiguration) WithPaused(value bool) *MachineConfigPoolSpecApplyConfiguration { + b.Paused = &value + return b +} + +// WithMaxUnavailable sets the MaxUnavailable field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the MaxUnavailable field is set to the value of the last call. +func (b *MachineConfigPoolSpecApplyConfiguration) WithMaxUnavailable(value intstr.IntOrString) *MachineConfigPoolSpecApplyConfiguration { + b.MaxUnavailable = &value + return b +} + +// WithConfiguration sets the Configuration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Configuration field is set to the value of the last call. +func (b *MachineConfigPoolSpecApplyConfiguration) WithConfiguration(value *MachineConfigPoolStatusConfigurationApplyConfiguration) *MachineConfigPoolSpecApplyConfiguration { + b.Configuration = value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpoolstatus.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpoolstatus.go new file mode 100644 index 0000000000..95a8ebc4a6 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpoolstatus.go @@ -0,0 +1,105 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +// MachineConfigPoolStatusApplyConfiguration represents an declarative configuration of the MachineConfigPoolStatus type for use +// with apply. +type MachineConfigPoolStatusApplyConfiguration struct { + ObservedGeneration *int64 `json:"observedGeneration,omitempty"` + Configuration *MachineConfigPoolStatusConfigurationApplyConfiguration `json:"configuration,omitempty"` + MachineCount *int32 `json:"machineCount,omitempty"` + UpdatedMachineCount *int32 `json:"updatedMachineCount,omitempty"` + ReadyMachineCount *int32 `json:"readyMachineCount,omitempty"` + UnavailableMachineCount *int32 `json:"unavailableMachineCount,omitempty"` + DegradedMachineCount *int32 `json:"degradedMachineCount,omitempty"` + Conditions []MachineConfigPoolConditionApplyConfiguration `json:"conditions,omitempty"` + CertExpirys []CertExpiryApplyConfiguration `json:"certExpirys,omitempty"` +} + +// MachineConfigPoolStatusApplyConfiguration constructs an declarative configuration of the MachineConfigPoolStatus type for use with +// apply. +func MachineConfigPoolStatus() *MachineConfigPoolStatusApplyConfiguration { + return &MachineConfigPoolStatusApplyConfiguration{} +} + +// WithObservedGeneration sets the ObservedGeneration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ObservedGeneration field is set to the value of the last call. +func (b *MachineConfigPoolStatusApplyConfiguration) WithObservedGeneration(value int64) *MachineConfigPoolStatusApplyConfiguration { + b.ObservedGeneration = &value + return b +} + +// WithConfiguration sets the Configuration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Configuration field is set to the value of the last call. +func (b *MachineConfigPoolStatusApplyConfiguration) WithConfiguration(value *MachineConfigPoolStatusConfigurationApplyConfiguration) *MachineConfigPoolStatusApplyConfiguration { + b.Configuration = value + return b +} + +// WithMachineCount sets the MachineCount field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the MachineCount field is set to the value of the last call. +func (b *MachineConfigPoolStatusApplyConfiguration) WithMachineCount(value int32) *MachineConfigPoolStatusApplyConfiguration { + b.MachineCount = &value + return b +} + +// WithUpdatedMachineCount sets the UpdatedMachineCount field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UpdatedMachineCount field is set to the value of the last call. +func (b *MachineConfigPoolStatusApplyConfiguration) WithUpdatedMachineCount(value int32) *MachineConfigPoolStatusApplyConfiguration { + b.UpdatedMachineCount = &value + return b +} + +// WithReadyMachineCount sets the ReadyMachineCount field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ReadyMachineCount field is set to the value of the last call. +func (b *MachineConfigPoolStatusApplyConfiguration) WithReadyMachineCount(value int32) *MachineConfigPoolStatusApplyConfiguration { + b.ReadyMachineCount = &value + return b +} + +// WithUnavailableMachineCount sets the UnavailableMachineCount field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UnavailableMachineCount field is set to the value of the last call. +func (b *MachineConfigPoolStatusApplyConfiguration) WithUnavailableMachineCount(value int32) *MachineConfigPoolStatusApplyConfiguration { + b.UnavailableMachineCount = &value + return b +} + +// WithDegradedMachineCount sets the DegradedMachineCount field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DegradedMachineCount field is set to the value of the last call. +func (b *MachineConfigPoolStatusApplyConfiguration) WithDegradedMachineCount(value int32) *MachineConfigPoolStatusApplyConfiguration { + b.DegradedMachineCount = &value + return b +} + +// WithConditions adds the given value to the Conditions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Conditions field. +func (b *MachineConfigPoolStatusApplyConfiguration) WithConditions(values ...*MachineConfigPoolConditionApplyConfiguration) *MachineConfigPoolStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithConditions") + } + b.Conditions = append(b.Conditions, *values[i]) + } + return b +} + +// WithCertExpirys adds the given value to the CertExpirys field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the CertExpirys field. +func (b *MachineConfigPoolStatusApplyConfiguration) WithCertExpirys(values ...*CertExpiryApplyConfiguration) *MachineConfigPoolStatusApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithCertExpirys") + } + b.CertExpirys = append(b.CertExpirys, *values[i]) + } + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpoolstatusconfiguration.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpoolstatusconfiguration.go new file mode 100644 index 0000000000..6840c1f635 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigpoolstatusconfiguration.go @@ -0,0 +1,90 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + types "k8s.io/apimachinery/pkg/types" + v1 "k8s.io/client-go/applyconfigurations/core/v1" +) + +// MachineConfigPoolStatusConfigurationApplyConfiguration represents an declarative configuration of the MachineConfigPoolStatusConfiguration type for use +// with apply. +type MachineConfigPoolStatusConfigurationApplyConfiguration struct { + v1.ObjectReferenceApplyConfiguration `json:",inline"` + Source []v1.ObjectReferenceApplyConfiguration `json:"source,omitempty"` +} + +// MachineConfigPoolStatusConfigurationApplyConfiguration constructs an declarative configuration of the MachineConfigPoolStatusConfiguration type for use with +// apply. +func MachineConfigPoolStatusConfiguration() *MachineConfigPoolStatusConfigurationApplyConfiguration { + return &MachineConfigPoolStatusConfigurationApplyConfiguration{} +} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *MachineConfigPoolStatusConfigurationApplyConfiguration) WithKind(value string) *MachineConfigPoolStatusConfigurationApplyConfiguration { + b.Kind = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *MachineConfigPoolStatusConfigurationApplyConfiguration) WithNamespace(value string) *MachineConfigPoolStatusConfigurationApplyConfiguration { + b.Namespace = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *MachineConfigPoolStatusConfigurationApplyConfiguration) WithName(value string) *MachineConfigPoolStatusConfigurationApplyConfiguration { + b.Name = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *MachineConfigPoolStatusConfigurationApplyConfiguration) WithUID(value types.UID) *MachineConfigPoolStatusConfigurationApplyConfiguration { + b.UID = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *MachineConfigPoolStatusConfigurationApplyConfiguration) WithAPIVersion(value string) *MachineConfigPoolStatusConfigurationApplyConfiguration { + b.APIVersion = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *MachineConfigPoolStatusConfigurationApplyConfiguration) WithResourceVersion(value string) *MachineConfigPoolStatusConfigurationApplyConfiguration { + b.ResourceVersion = &value + return b +} + +// WithFieldPath sets the FieldPath field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the FieldPath field is set to the value of the last call. +func (b *MachineConfigPoolStatusConfigurationApplyConfiguration) WithFieldPath(value string) *MachineConfigPoolStatusConfigurationApplyConfiguration { + b.FieldPath = &value + return b +} + +// WithSource adds the given value to the Source field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Source field. +func (b *MachineConfigPoolStatusConfigurationApplyConfiguration) WithSource(values ...*v1.ObjectReferenceApplyConfiguration) *MachineConfigPoolStatusConfigurationApplyConfiguration { + for i := range values { + if values[i] == nil { + panic("nil value passed to WithSource") + } + b.Source = append(b.Source, *values[i]) + } + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigspec.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigspec.go new file mode 100644 index 0000000000..7ac9a761ab --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/machineconfigspec.go @@ -0,0 +1,85 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// MachineConfigSpecApplyConfiguration represents an declarative configuration of the MachineConfigSpec type for use +// with apply. +type MachineConfigSpecApplyConfiguration struct { + OSImageURL *string `json:"osImageURL,omitempty"` + BaseOSExtensionsContainerImage *string `json:"baseOSExtensionsContainerImage,omitempty"` + Config *runtime.RawExtension `json:"config,omitempty"` + KernelArguments []string `json:"kernelArguments,omitempty"` + Extensions []string `json:"extensions,omitempty"` + FIPS *bool `json:"fips,omitempty"` + KernelType *string `json:"kernelType,omitempty"` +} + +// MachineConfigSpecApplyConfiguration constructs an declarative configuration of the MachineConfigSpec type for use with +// apply. +func MachineConfigSpec() *MachineConfigSpecApplyConfiguration { + return &MachineConfigSpecApplyConfiguration{} +} + +// WithOSImageURL sets the OSImageURL field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the OSImageURL field is set to the value of the last call. +func (b *MachineConfigSpecApplyConfiguration) WithOSImageURL(value string) *MachineConfigSpecApplyConfiguration { + b.OSImageURL = &value + return b +} + +// WithBaseOSExtensionsContainerImage sets the BaseOSExtensionsContainerImage field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the BaseOSExtensionsContainerImage field is set to the value of the last call. +func (b *MachineConfigSpecApplyConfiguration) WithBaseOSExtensionsContainerImage(value string) *MachineConfigSpecApplyConfiguration { + b.BaseOSExtensionsContainerImage = &value + return b +} + +// WithConfig sets the Config field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Config field is set to the value of the last call. +func (b *MachineConfigSpecApplyConfiguration) WithConfig(value runtime.RawExtension) *MachineConfigSpecApplyConfiguration { + b.Config = &value + return b +} + +// WithKernelArguments adds the given value to the KernelArguments field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the KernelArguments field. +func (b *MachineConfigSpecApplyConfiguration) WithKernelArguments(values ...string) *MachineConfigSpecApplyConfiguration { + for i := range values { + b.KernelArguments = append(b.KernelArguments, values[i]) + } + return b +} + +// WithExtensions adds the given value to the Extensions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Extensions field. +func (b *MachineConfigSpecApplyConfiguration) WithExtensions(values ...string) *MachineConfigSpecApplyConfiguration { + for i := range values { + b.Extensions = append(b.Extensions, values[i]) + } + return b +} + +// WithFIPS sets the FIPS field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the FIPS field is set to the value of the last call. +func (b *MachineConfigSpecApplyConfiguration) WithFIPS(value bool) *MachineConfigSpecApplyConfiguration { + b.FIPS = &value + return b +} + +// WithKernelType sets the KernelType field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the KernelType field is set to the value of the last call. +func (b *MachineConfigSpecApplyConfiguration) WithKernelType(value string) *MachineConfigSpecApplyConfiguration { + b.KernelType = &value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/networkinfo.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/networkinfo.go new file mode 100644 index 0000000000..5029fc9ab7 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1/networkinfo.go @@ -0,0 +1,27 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "github.com/openshift/api/config/v1" +) + +// NetworkInfoApplyConfiguration represents an declarative configuration of the NetworkInfo type for use +// with apply. +type NetworkInfoApplyConfiguration struct { + MTUMigration *v1.MTUMigration `json:"mtuMigration,omitempty"` +} + +// NetworkInfoApplyConfiguration constructs an declarative configuration of the NetworkInfo type for use with +// apply. +func NetworkInfo() *NetworkInfoApplyConfiguration { + return &NetworkInfoApplyConfiguration{} +} + +// WithMTUMigration sets the MTUMigration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the MTUMigration field is set to the value of the last call. +func (b *NetworkInfoApplyConfiguration) WithMTUMigration(value v1.MTUMigration) *NetworkInfoApplyConfiguration { + b.MTUMigration = &value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignode.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignode.go new file mode 100644 index 0000000000..2f3cee6923 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignode.go @@ -0,0 +1,240 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + machineconfigurationv1alpha1 "github.com/openshift/api/machineconfiguration/v1alpha1" + internal "github.com/openshift/client-go/machineconfiguration/applyconfigurations/internal" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + managedfields "k8s.io/apimachinery/pkg/util/managedfields" + v1 "k8s.io/client-go/applyconfigurations/meta/v1" +) + +// MachineConfigNodeApplyConfiguration represents an declarative configuration of the MachineConfigNode type for use +// with apply. +type MachineConfigNodeApplyConfiguration struct { + v1.TypeMetaApplyConfiguration `json:",inline"` + *v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"` + Spec *MachineConfigNodeSpecApplyConfiguration `json:"spec,omitempty"` + Status *MachineConfigNodeStatusApplyConfiguration `json:"status,omitempty"` +} + +// MachineConfigNode constructs an declarative configuration of the MachineConfigNode type for use with +// apply. +func MachineConfigNode(name string) *MachineConfigNodeApplyConfiguration { + b := &MachineConfigNodeApplyConfiguration{} + b.WithName(name) + b.WithKind("MachineConfigNode") + b.WithAPIVersion("machineconfiguration.openshift.io/v1alpha1") + return b +} + +// ExtractMachineConfigNode extracts the applied configuration owned by fieldManager from +// machineConfigNode. If no managedFields are found in machineConfigNode for fieldManager, a +// MachineConfigNodeApplyConfiguration is returned with only the Name, Namespace (if applicable), +// APIVersion and Kind populated. It is possible that no managed fields were found for because other +// field managers have taken ownership of all the fields previously owned by fieldManager, or because +// the fieldManager never owned fields any fields. +// machineConfigNode must be a unmodified MachineConfigNode API object that was retrieved from the Kubernetes API. +// ExtractMachineConfigNode provides a way to perform a extract/modify-in-place/apply workflow. +// Note that an extracted apply configuration will contain fewer fields than what the fieldManager previously +// applied if another fieldManager has updated or force applied any of the previously applied fields. +// Experimental! +func ExtractMachineConfigNode(machineConfigNode *machineconfigurationv1alpha1.MachineConfigNode, fieldManager string) (*MachineConfigNodeApplyConfiguration, error) { + return extractMachineConfigNode(machineConfigNode, fieldManager, "") +} + +// ExtractMachineConfigNodeStatus is the same as ExtractMachineConfigNode except +// that it extracts the status subresource applied configuration. +// Experimental! +func ExtractMachineConfigNodeStatus(machineConfigNode *machineconfigurationv1alpha1.MachineConfigNode, fieldManager string) (*MachineConfigNodeApplyConfiguration, error) { + return extractMachineConfigNode(machineConfigNode, fieldManager, "status") +} + +func extractMachineConfigNode(machineConfigNode *machineconfigurationv1alpha1.MachineConfigNode, fieldManager string, subresource string) (*MachineConfigNodeApplyConfiguration, error) { + b := &MachineConfigNodeApplyConfiguration{} + err := managedfields.ExtractInto(machineConfigNode, internal.Parser().Type("com.github.openshift.api.machineconfiguration.v1alpha1.MachineConfigNode"), fieldManager, b, subresource) + if err != nil { + return nil, err + } + b.WithName(machineConfigNode.Name) + + b.WithKind("MachineConfigNode") + b.WithAPIVersion("machineconfiguration.openshift.io/v1alpha1") + return b, nil +} + +// WithKind sets the Kind field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Kind field is set to the value of the last call. +func (b *MachineConfigNodeApplyConfiguration) WithKind(value string) *MachineConfigNodeApplyConfiguration { + b.Kind = &value + return b +} + +// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the APIVersion field is set to the value of the last call. +func (b *MachineConfigNodeApplyConfiguration) WithAPIVersion(value string) *MachineConfigNodeApplyConfiguration { + b.APIVersion = &value + return b +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *MachineConfigNodeApplyConfiguration) WithName(value string) *MachineConfigNodeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Name = &value + return b +} + +// WithGenerateName sets the GenerateName field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the GenerateName field is set to the value of the last call. +func (b *MachineConfigNodeApplyConfiguration) WithGenerateName(value string) *MachineConfigNodeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.GenerateName = &value + return b +} + +// WithNamespace sets the Namespace field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Namespace field is set to the value of the last call. +func (b *MachineConfigNodeApplyConfiguration) WithNamespace(value string) *MachineConfigNodeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Namespace = &value + return b +} + +// WithUID sets the UID field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the UID field is set to the value of the last call. +func (b *MachineConfigNodeApplyConfiguration) WithUID(value types.UID) *MachineConfigNodeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.UID = &value + return b +} + +// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ResourceVersion field is set to the value of the last call. +func (b *MachineConfigNodeApplyConfiguration) WithResourceVersion(value string) *MachineConfigNodeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.ResourceVersion = &value + return b +} + +// WithGeneration sets the Generation field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Generation field is set to the value of the last call. +func (b *MachineConfigNodeApplyConfiguration) WithGeneration(value int64) *MachineConfigNodeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.Generation = &value + return b +} + +// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the CreationTimestamp field is set to the value of the last call. +func (b *MachineConfigNodeApplyConfiguration) WithCreationTimestamp(value metav1.Time) *MachineConfigNodeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.CreationTimestamp = &value + return b +} + +// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionTimestamp field is set to the value of the last call. +func (b *MachineConfigNodeApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *MachineConfigNodeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionTimestamp = &value + return b +} + +// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call. +func (b *MachineConfigNodeApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *MachineConfigNodeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + b.DeletionGracePeriodSeconds = &value + return b +} + +// WithLabels puts the entries into the Labels field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Labels field, +// overwriting an existing map entries in Labels field with the same key. +func (b *MachineConfigNodeApplyConfiguration) WithLabels(entries map[string]string) *MachineConfigNodeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Labels == nil && len(entries) > 0 { + b.Labels = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Labels[k] = v + } + return b +} + +// WithAnnotations puts the entries into the Annotations field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, the entries provided by each call will be put on the Annotations field, +// overwriting an existing map entries in Annotations field with the same key. +func (b *MachineConfigNodeApplyConfiguration) WithAnnotations(entries map[string]string) *MachineConfigNodeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + if b.Annotations == nil && len(entries) > 0 { + b.Annotations = make(map[string]string, len(entries)) + } + for k, v := range entries { + b.Annotations[k] = v + } + return b +} + +// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the OwnerReferences field. +func (b *MachineConfigNodeApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *MachineConfigNodeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + if values[i] == nil { + panic("nil value passed to WithOwnerReferences") + } + b.OwnerReferences = append(b.OwnerReferences, *values[i]) + } + return b +} + +// WithFinalizers adds the given value to the Finalizers field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Finalizers field. +func (b *MachineConfigNodeApplyConfiguration) WithFinalizers(values ...string) *MachineConfigNodeApplyConfiguration { + b.ensureObjectMetaApplyConfigurationExists() + for i := range values { + b.Finalizers = append(b.Finalizers, values[i]) + } + return b +} + +func (b *MachineConfigNodeApplyConfiguration) ensureObjectMetaApplyConfigurationExists() { + if b.ObjectMetaApplyConfiguration == nil { + b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{} + } +} + +// WithSpec sets the Spec field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Spec field is set to the value of the last call. +func (b *MachineConfigNodeApplyConfiguration) WithSpec(value *MachineConfigNodeSpecApplyConfiguration) *MachineConfigNodeApplyConfiguration { + b.Spec = value + return b +} + +// WithStatus sets the Status field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Status field is set to the value of the last call. +func (b *MachineConfigNodeApplyConfiguration) WithStatus(value *MachineConfigNodeStatusApplyConfiguration) *MachineConfigNodeApplyConfiguration { + b.Status = value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignodespec.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignodespec.go new file mode 100644 index 0000000000..ff7a6429dd --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignodespec.go @@ -0,0 +1,41 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha1 + +// MachineConfigNodeSpecApplyConfiguration represents an declarative configuration of the MachineConfigNodeSpec type for use +// with apply. +type MachineConfigNodeSpecApplyConfiguration struct { + Node *MCOObjectReferenceApplyConfiguration `json:"node,omitempty"` + Pool *MCOObjectReferenceApplyConfiguration `json:"pool,omitempty"` + ConfigVersion *MachineConfigNodeSpecMachineConfigVersionApplyConfiguration `json:"configVersion,omitempty"` +} + +// MachineConfigNodeSpecApplyConfiguration constructs an declarative configuration of the MachineConfigNodeSpec type for use with +// apply. +func MachineConfigNodeSpec() *MachineConfigNodeSpecApplyConfiguration { + return &MachineConfigNodeSpecApplyConfiguration{} +} + +// WithNode sets the Node field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Node field is set to the value of the last call. +func (b *MachineConfigNodeSpecApplyConfiguration) WithNode(value *MCOObjectReferenceApplyConfiguration) *MachineConfigNodeSpecApplyConfiguration { + b.Node = value + return b +} + +// WithPool sets the Pool field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Pool field is set to the value of the last call. +func (b *MachineConfigNodeSpecApplyConfiguration) WithPool(value *MCOObjectReferenceApplyConfiguration) *MachineConfigNodeSpecApplyConfiguration { + b.Pool = value + return b +} + +// WithConfigVersion sets the ConfigVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ConfigVersion field is set to the value of the last call. +func (b *MachineConfigNodeSpecApplyConfiguration) WithConfigVersion(value *MachineConfigNodeSpecMachineConfigVersionApplyConfiguration) *MachineConfigNodeSpecApplyConfiguration { + b.ConfigVersion = value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignodespecmachineconfigversion.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignodespecmachineconfigversion.go new file mode 100644 index 0000000000..f3190fa89a --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignodespecmachineconfigversion.go @@ -0,0 +1,23 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha1 + +// MachineConfigNodeSpecMachineConfigVersionApplyConfiguration represents an declarative configuration of the MachineConfigNodeSpecMachineConfigVersion type for use +// with apply. +type MachineConfigNodeSpecMachineConfigVersionApplyConfiguration struct { + Desired *string `json:"desired,omitempty"` +} + +// MachineConfigNodeSpecMachineConfigVersionApplyConfiguration constructs an declarative configuration of the MachineConfigNodeSpecMachineConfigVersion type for use with +// apply. +func MachineConfigNodeSpecMachineConfigVersion() *MachineConfigNodeSpecMachineConfigVersionApplyConfiguration { + return &MachineConfigNodeSpecMachineConfigVersionApplyConfiguration{} +} + +// WithDesired sets the Desired field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Desired field is set to the value of the last call. +func (b *MachineConfigNodeSpecMachineConfigVersionApplyConfiguration) WithDesired(value string) *MachineConfigNodeSpecMachineConfigVersionApplyConfiguration { + b.Desired = &value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignodestatus.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignodestatus.go new file mode 100644 index 0000000000..188c0352f8 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignodestatus.go @@ -0,0 +1,47 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// MachineConfigNodeStatusApplyConfiguration represents an declarative configuration of the MachineConfigNodeStatus type for use +// with apply. +type MachineConfigNodeStatusApplyConfiguration struct { + Conditions []v1.Condition `json:"conditions,omitempty"` + ObservedGeneration *int64 `json:"observedGeneration,omitempty"` + ConfigVersion *MachineConfigNodeStatusMachineConfigVersionApplyConfiguration `json:"configVersion,omitempty"` +} + +// MachineConfigNodeStatusApplyConfiguration constructs an declarative configuration of the MachineConfigNodeStatus type for use with +// apply. +func MachineConfigNodeStatus() *MachineConfigNodeStatusApplyConfiguration { + return &MachineConfigNodeStatusApplyConfiguration{} +} + +// WithConditions adds the given value to the Conditions field in the declarative configuration +// and returns the receiver, so that objects can be build by chaining "With" function invocations. +// If called multiple times, values provided by each call will be appended to the Conditions field. +func (b *MachineConfigNodeStatusApplyConfiguration) WithConditions(values ...v1.Condition) *MachineConfigNodeStatusApplyConfiguration { + for i := range values { + b.Conditions = append(b.Conditions, values[i]) + } + return b +} + +// WithObservedGeneration sets the ObservedGeneration field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ObservedGeneration field is set to the value of the last call. +func (b *MachineConfigNodeStatusApplyConfiguration) WithObservedGeneration(value int64) *MachineConfigNodeStatusApplyConfiguration { + b.ObservedGeneration = &value + return b +} + +// WithConfigVersion sets the ConfigVersion field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the ConfigVersion field is set to the value of the last call. +func (b *MachineConfigNodeStatusApplyConfiguration) WithConfigVersion(value *MachineConfigNodeStatusMachineConfigVersionApplyConfiguration) *MachineConfigNodeStatusApplyConfiguration { + b.ConfigVersion = value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignodestatusmachineconfigversion.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignodestatusmachineconfigversion.go new file mode 100644 index 0000000000..05b8110ed6 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/machineconfignodestatusmachineconfigversion.go @@ -0,0 +1,32 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha1 + +// MachineConfigNodeStatusMachineConfigVersionApplyConfiguration represents an declarative configuration of the MachineConfigNodeStatusMachineConfigVersion type for use +// with apply. +type MachineConfigNodeStatusMachineConfigVersionApplyConfiguration struct { + Current *string `json:"current,omitempty"` + Desired *string `json:"desired,omitempty"` +} + +// MachineConfigNodeStatusMachineConfigVersionApplyConfiguration constructs an declarative configuration of the MachineConfigNodeStatusMachineConfigVersion type for use with +// apply. +func MachineConfigNodeStatusMachineConfigVersion() *MachineConfigNodeStatusMachineConfigVersionApplyConfiguration { + return &MachineConfigNodeStatusMachineConfigVersionApplyConfiguration{} +} + +// WithCurrent sets the Current field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Current field is set to the value of the last call. +func (b *MachineConfigNodeStatusMachineConfigVersionApplyConfiguration) WithCurrent(value string) *MachineConfigNodeStatusMachineConfigVersionApplyConfiguration { + b.Current = &value + return b +} + +// WithDesired sets the Desired field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Desired field is set to the value of the last call. +func (b *MachineConfigNodeStatusMachineConfigVersionApplyConfiguration) WithDesired(value string) *MachineConfigNodeStatusMachineConfigVersionApplyConfiguration { + b.Desired = &value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/mcoobjectreference.go b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/mcoobjectreference.go new file mode 100644 index 0000000000..7b45ffdf73 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1/mcoobjectreference.go @@ -0,0 +1,23 @@ +// Code generated by applyconfiguration-gen. DO NOT EDIT. + +package v1alpha1 + +// MCOObjectReferenceApplyConfiguration represents an declarative configuration of the MCOObjectReference type for use +// with apply. +type MCOObjectReferenceApplyConfiguration struct { + Name *string `json:"name,omitempty"` +} + +// MCOObjectReferenceApplyConfiguration constructs an declarative configuration of the MCOObjectReference type for use with +// apply. +func MCOObjectReference() *MCOObjectReferenceApplyConfiguration { + return &MCOObjectReferenceApplyConfiguration{} +} + +// WithName sets the Name field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the Name field is set to the value of the last call. +func (b *MCOObjectReferenceApplyConfiguration) WithName(value string) *MCOObjectReferenceApplyConfiguration { + b.Name = &value + return b +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/clientset.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/clientset.go new file mode 100644 index 0000000000..f58c537850 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/clientset.go @@ -0,0 +1,117 @@ +// Code generated by client-gen. DO NOT EDIT. + +package versioned + +import ( + "fmt" + "net/http" + + machineconfigurationv1 "github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1" + machineconfigurationv1alpha1 "github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1" + discovery "k8s.io/client-go/discovery" + rest "k8s.io/client-go/rest" + flowcontrol "k8s.io/client-go/util/flowcontrol" +) + +type Interface interface { + Discovery() discovery.DiscoveryInterface + MachineconfigurationV1() machineconfigurationv1.MachineconfigurationV1Interface + MachineconfigurationV1alpha1() machineconfigurationv1alpha1.MachineconfigurationV1alpha1Interface +} + +// Clientset contains the clients for groups. +type Clientset struct { + *discovery.DiscoveryClient + machineconfigurationV1 *machineconfigurationv1.MachineconfigurationV1Client + machineconfigurationV1alpha1 *machineconfigurationv1alpha1.MachineconfigurationV1alpha1Client +} + +// MachineconfigurationV1 retrieves the MachineconfigurationV1Client +func (c *Clientset) MachineconfigurationV1() machineconfigurationv1.MachineconfigurationV1Interface { + return c.machineconfigurationV1 +} + +// MachineconfigurationV1alpha1 retrieves the MachineconfigurationV1alpha1Client +func (c *Clientset) MachineconfigurationV1alpha1() machineconfigurationv1alpha1.MachineconfigurationV1alpha1Interface { + return c.machineconfigurationV1alpha1 +} + +// Discovery retrieves the DiscoveryClient +func (c *Clientset) Discovery() discovery.DiscoveryInterface { + if c == nil { + return nil + } + return c.DiscoveryClient +} + +// NewForConfig creates a new Clientset for the given config. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfig will generate a rate-limiter in configShallowCopy. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). +func NewForConfig(c *rest.Config) (*Clientset, error) { + configShallowCopy := *c + + if configShallowCopy.UserAgent == "" { + configShallowCopy.UserAgent = rest.DefaultKubernetesUserAgent() + } + + // share the transport between all clients + httpClient, err := rest.HTTPClientFor(&configShallowCopy) + if err != nil { + return nil, err + } + + return NewForConfigAndClient(&configShallowCopy, httpClient) +} + +// NewForConfigAndClient creates a new Clientset for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +// If config's RateLimiter is not set and QPS and Burst are acceptable, +// NewForConfigAndClient will generate a rate-limiter in configShallowCopy. +func NewForConfigAndClient(c *rest.Config, httpClient *http.Client) (*Clientset, error) { + configShallowCopy := *c + if configShallowCopy.RateLimiter == nil && configShallowCopy.QPS > 0 { + if configShallowCopy.Burst <= 0 { + return nil, fmt.Errorf("burst is required to be greater than 0 when RateLimiter is not set and QPS is set to greater than 0") + } + configShallowCopy.RateLimiter = flowcontrol.NewTokenBucketRateLimiter(configShallowCopy.QPS, configShallowCopy.Burst) + } + + var cs Clientset + var err error + cs.machineconfigurationV1, err = machineconfigurationv1.NewForConfigAndClient(&configShallowCopy, httpClient) + if err != nil { + return nil, err + } + cs.machineconfigurationV1alpha1, err = machineconfigurationv1alpha1.NewForConfigAndClient(&configShallowCopy, httpClient) + if err != nil { + return nil, err + } + + cs.DiscoveryClient, err = discovery.NewDiscoveryClientForConfigAndClient(&configShallowCopy, httpClient) + if err != nil { + return nil, err + } + return &cs, nil +} + +// NewForConfigOrDie creates a new Clientset for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *Clientset { + cs, err := NewForConfig(c) + if err != nil { + panic(err) + } + return cs +} + +// New creates a new Clientset for the given RESTClient. +func New(c rest.Interface) *Clientset { + var cs Clientset + cs.machineconfigurationV1 = machineconfigurationv1.New(c) + cs.machineconfigurationV1alpha1 = machineconfigurationv1alpha1.New(c) + + cs.DiscoveryClient = discovery.NewDiscoveryClient(c) + return &cs +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme/doc.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme/doc.go new file mode 100644 index 0000000000..14db57a58f --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package contains the scheme of the automatically generated clientset. +package scheme diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme/register.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme/register.go new file mode 100644 index 0000000000..9bda95eacb --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme/register.go @@ -0,0 +1,42 @@ +// Code generated by client-gen. DO NOT EDIT. + +package scheme + +import ( + machineconfigurationv1 "github.com/openshift/api/machineconfiguration/v1" + machineconfigurationv1alpha1 "github.com/openshift/api/machineconfiguration/v1alpha1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + schema "k8s.io/apimachinery/pkg/runtime/schema" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" +) + +var Scheme = runtime.NewScheme() +var Codecs = serializer.NewCodecFactory(Scheme) +var ParameterCodec = runtime.NewParameterCodec(Scheme) +var localSchemeBuilder = runtime.SchemeBuilder{ + machineconfigurationv1.AddToScheme, + machineconfigurationv1alpha1.AddToScheme, +} + +// AddToScheme adds all types of this clientset into the given scheme. This allows composition +// of clientsets, like in: +// +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) +// +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// +// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types +// correctly. +var AddToScheme = localSchemeBuilder.AddToScheme + +func init() { + v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) + utilruntime.Must(AddToScheme(Scheme)) +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/containerruntimeconfig.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/containerruntimeconfig.go new file mode 100644 index 0000000000..3e1204ca4e --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/containerruntimeconfig.go @@ -0,0 +1,227 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + json "encoding/json" + "fmt" + "time" + + v1 "github.com/openshift/api/machineconfiguration/v1" + machineconfigurationv1 "github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1" + scheme "github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ContainerRuntimeConfigsGetter has a method to return a ContainerRuntimeConfigInterface. +// A group's client should implement this interface. +type ContainerRuntimeConfigsGetter interface { + ContainerRuntimeConfigs() ContainerRuntimeConfigInterface +} + +// ContainerRuntimeConfigInterface has methods to work with ContainerRuntimeConfig resources. +type ContainerRuntimeConfigInterface interface { + Create(ctx context.Context, containerRuntimeConfig *v1.ContainerRuntimeConfig, opts metav1.CreateOptions) (*v1.ContainerRuntimeConfig, error) + Update(ctx context.Context, containerRuntimeConfig *v1.ContainerRuntimeConfig, opts metav1.UpdateOptions) (*v1.ContainerRuntimeConfig, error) + UpdateStatus(ctx context.Context, containerRuntimeConfig *v1.ContainerRuntimeConfig, opts metav1.UpdateOptions) (*v1.ContainerRuntimeConfig, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ContainerRuntimeConfig, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ContainerRuntimeConfigList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ContainerRuntimeConfig, err error) + Apply(ctx context.Context, containerRuntimeConfig *machineconfigurationv1.ContainerRuntimeConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.ContainerRuntimeConfig, err error) + ApplyStatus(ctx context.Context, containerRuntimeConfig *machineconfigurationv1.ContainerRuntimeConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.ContainerRuntimeConfig, err error) + ContainerRuntimeConfigExpansion +} + +// containerRuntimeConfigs implements ContainerRuntimeConfigInterface +type containerRuntimeConfigs struct { + client rest.Interface +} + +// newContainerRuntimeConfigs returns a ContainerRuntimeConfigs +func newContainerRuntimeConfigs(c *MachineconfigurationV1Client) *containerRuntimeConfigs { + return &containerRuntimeConfigs{ + client: c.RESTClient(), + } +} + +// Get takes name of the containerRuntimeConfig, and returns the corresponding containerRuntimeConfig object, and an error if there is any. +func (c *containerRuntimeConfigs) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ContainerRuntimeConfig, err error) { + result = &v1.ContainerRuntimeConfig{} + err = c.client.Get(). + Resource("containerruntimeconfigs"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ContainerRuntimeConfigs that match those selectors. +func (c *containerRuntimeConfigs) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ContainerRuntimeConfigList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ContainerRuntimeConfigList{} + err = c.client.Get(). + Resource("containerruntimeconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested containerRuntimeConfigs. +func (c *containerRuntimeConfigs) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("containerruntimeconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a containerRuntimeConfig and creates it. Returns the server's representation of the containerRuntimeConfig, and an error, if there is any. +func (c *containerRuntimeConfigs) Create(ctx context.Context, containerRuntimeConfig *v1.ContainerRuntimeConfig, opts metav1.CreateOptions) (result *v1.ContainerRuntimeConfig, err error) { + result = &v1.ContainerRuntimeConfig{} + err = c.client.Post(). + Resource("containerruntimeconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(containerRuntimeConfig). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a containerRuntimeConfig and updates it. Returns the server's representation of the containerRuntimeConfig, and an error, if there is any. +func (c *containerRuntimeConfigs) Update(ctx context.Context, containerRuntimeConfig *v1.ContainerRuntimeConfig, opts metav1.UpdateOptions) (result *v1.ContainerRuntimeConfig, err error) { + result = &v1.ContainerRuntimeConfig{} + err = c.client.Put(). + Resource("containerruntimeconfigs"). + Name(containerRuntimeConfig.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(containerRuntimeConfig). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *containerRuntimeConfigs) UpdateStatus(ctx context.Context, containerRuntimeConfig *v1.ContainerRuntimeConfig, opts metav1.UpdateOptions) (result *v1.ContainerRuntimeConfig, err error) { + result = &v1.ContainerRuntimeConfig{} + err = c.client.Put(). + Resource("containerruntimeconfigs"). + Name(containerRuntimeConfig.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(containerRuntimeConfig). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the containerRuntimeConfig and deletes it. Returns an error if one occurs. +func (c *containerRuntimeConfigs) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("containerruntimeconfigs"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *containerRuntimeConfigs) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("containerruntimeconfigs"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched containerRuntimeConfig. +func (c *containerRuntimeConfigs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ContainerRuntimeConfig, err error) { + result = &v1.ContainerRuntimeConfig{} + err = c.client.Patch(pt). + Resource("containerruntimeconfigs"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied containerRuntimeConfig. +func (c *containerRuntimeConfigs) Apply(ctx context.Context, containerRuntimeConfig *machineconfigurationv1.ContainerRuntimeConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.ContainerRuntimeConfig, err error) { + if containerRuntimeConfig == nil { + return nil, fmt.Errorf("containerRuntimeConfig provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(containerRuntimeConfig) + if err != nil { + return nil, err + } + name := containerRuntimeConfig.Name + if name == nil { + return nil, fmt.Errorf("containerRuntimeConfig.Name must be provided to Apply") + } + result = &v1.ContainerRuntimeConfig{} + err = c.client.Patch(types.ApplyPatchType). + Resource("containerruntimeconfigs"). + Name(*name). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *containerRuntimeConfigs) ApplyStatus(ctx context.Context, containerRuntimeConfig *machineconfigurationv1.ContainerRuntimeConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.ContainerRuntimeConfig, err error) { + if containerRuntimeConfig == nil { + return nil, fmt.Errorf("containerRuntimeConfig provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(containerRuntimeConfig) + if err != nil { + return nil, err + } + + name := containerRuntimeConfig.Name + if name == nil { + return nil, fmt.Errorf("containerRuntimeConfig.Name must be provided to Apply") + } + + result = &v1.ContainerRuntimeConfig{} + err = c.client.Patch(types.ApplyPatchType). + Resource("containerruntimeconfigs"). + Name(*name). + SubResource("status"). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/controllerconfig.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/controllerconfig.go new file mode 100644 index 0000000000..33afaaea16 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/controllerconfig.go @@ -0,0 +1,227 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + json "encoding/json" + "fmt" + "time" + + v1 "github.com/openshift/api/machineconfiguration/v1" + machineconfigurationv1 "github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1" + scheme "github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// ControllerConfigsGetter has a method to return a ControllerConfigInterface. +// A group's client should implement this interface. +type ControllerConfigsGetter interface { + ControllerConfigs() ControllerConfigInterface +} + +// ControllerConfigInterface has methods to work with ControllerConfig resources. +type ControllerConfigInterface interface { + Create(ctx context.Context, controllerConfig *v1.ControllerConfig, opts metav1.CreateOptions) (*v1.ControllerConfig, error) + Update(ctx context.Context, controllerConfig *v1.ControllerConfig, opts metav1.UpdateOptions) (*v1.ControllerConfig, error) + UpdateStatus(ctx context.Context, controllerConfig *v1.ControllerConfig, opts metav1.UpdateOptions) (*v1.ControllerConfig, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.ControllerConfig, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.ControllerConfigList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ControllerConfig, err error) + Apply(ctx context.Context, controllerConfig *machineconfigurationv1.ControllerConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.ControllerConfig, err error) + ApplyStatus(ctx context.Context, controllerConfig *machineconfigurationv1.ControllerConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.ControllerConfig, err error) + ControllerConfigExpansion +} + +// controllerConfigs implements ControllerConfigInterface +type controllerConfigs struct { + client rest.Interface +} + +// newControllerConfigs returns a ControllerConfigs +func newControllerConfigs(c *MachineconfigurationV1Client) *controllerConfigs { + return &controllerConfigs{ + client: c.RESTClient(), + } +} + +// Get takes name of the controllerConfig, and returns the corresponding controllerConfig object, and an error if there is any. +func (c *controllerConfigs) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.ControllerConfig, err error) { + result = &v1.ControllerConfig{} + err = c.client.Get(). + Resource("controllerconfigs"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of ControllerConfigs that match those selectors. +func (c *controllerConfigs) List(ctx context.Context, opts metav1.ListOptions) (result *v1.ControllerConfigList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.ControllerConfigList{} + err = c.client.Get(). + Resource("controllerconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested controllerConfigs. +func (c *controllerConfigs) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("controllerconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a controllerConfig and creates it. Returns the server's representation of the controllerConfig, and an error, if there is any. +func (c *controllerConfigs) Create(ctx context.Context, controllerConfig *v1.ControllerConfig, opts metav1.CreateOptions) (result *v1.ControllerConfig, err error) { + result = &v1.ControllerConfig{} + err = c.client.Post(). + Resource("controllerconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(controllerConfig). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a controllerConfig and updates it. Returns the server's representation of the controllerConfig, and an error, if there is any. +func (c *controllerConfigs) Update(ctx context.Context, controllerConfig *v1.ControllerConfig, opts metav1.UpdateOptions) (result *v1.ControllerConfig, err error) { + result = &v1.ControllerConfig{} + err = c.client.Put(). + Resource("controllerconfigs"). + Name(controllerConfig.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(controllerConfig). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *controllerConfigs) UpdateStatus(ctx context.Context, controllerConfig *v1.ControllerConfig, opts metav1.UpdateOptions) (result *v1.ControllerConfig, err error) { + result = &v1.ControllerConfig{} + err = c.client.Put(). + Resource("controllerconfigs"). + Name(controllerConfig.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(controllerConfig). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the controllerConfig and deletes it. Returns an error if one occurs. +func (c *controllerConfigs) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("controllerconfigs"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *controllerConfigs) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("controllerconfigs"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched controllerConfig. +func (c *controllerConfigs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.ControllerConfig, err error) { + result = &v1.ControllerConfig{} + err = c.client.Patch(pt). + Resource("controllerconfigs"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied controllerConfig. +func (c *controllerConfigs) Apply(ctx context.Context, controllerConfig *machineconfigurationv1.ControllerConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.ControllerConfig, err error) { + if controllerConfig == nil { + return nil, fmt.Errorf("controllerConfig provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(controllerConfig) + if err != nil { + return nil, err + } + name := controllerConfig.Name + if name == nil { + return nil, fmt.Errorf("controllerConfig.Name must be provided to Apply") + } + result = &v1.ControllerConfig{} + err = c.client.Patch(types.ApplyPatchType). + Resource("controllerconfigs"). + Name(*name). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *controllerConfigs) ApplyStatus(ctx context.Context, controllerConfig *machineconfigurationv1.ControllerConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.ControllerConfig, err error) { + if controllerConfig == nil { + return nil, fmt.Errorf("controllerConfig provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(controllerConfig) + if err != nil { + return nil, err + } + + name := controllerConfig.Name + if name == nil { + return nil, fmt.Errorf("controllerConfig.Name must be provided to Apply") + } + + result = &v1.ControllerConfig{} + err = c.client.Patch(types.ApplyPatchType). + Resource("controllerconfigs"). + Name(*name). + SubResource("status"). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/doc.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/doc.go new file mode 100644 index 0000000000..225e6b2be3 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/generated_expansion.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/generated_expansion.go new file mode 100644 index 0000000000..cce54d166a --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/generated_expansion.go @@ -0,0 +1,13 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +type ContainerRuntimeConfigExpansion interface{} + +type ControllerConfigExpansion interface{} + +type KubeletConfigExpansion interface{} + +type MachineConfigExpansion interface{} + +type MachineConfigPoolExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/kubeletconfig.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/kubeletconfig.go new file mode 100644 index 0000000000..51ad742ff8 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/kubeletconfig.go @@ -0,0 +1,227 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + json "encoding/json" + "fmt" + "time" + + v1 "github.com/openshift/api/machineconfiguration/v1" + machineconfigurationv1 "github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1" + scheme "github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// KubeletConfigsGetter has a method to return a KubeletConfigInterface. +// A group's client should implement this interface. +type KubeletConfigsGetter interface { + KubeletConfigs() KubeletConfigInterface +} + +// KubeletConfigInterface has methods to work with KubeletConfig resources. +type KubeletConfigInterface interface { + Create(ctx context.Context, kubeletConfig *v1.KubeletConfig, opts metav1.CreateOptions) (*v1.KubeletConfig, error) + Update(ctx context.Context, kubeletConfig *v1.KubeletConfig, opts metav1.UpdateOptions) (*v1.KubeletConfig, error) + UpdateStatus(ctx context.Context, kubeletConfig *v1.KubeletConfig, opts metav1.UpdateOptions) (*v1.KubeletConfig, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.KubeletConfig, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.KubeletConfigList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.KubeletConfig, err error) + Apply(ctx context.Context, kubeletConfig *machineconfigurationv1.KubeletConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.KubeletConfig, err error) + ApplyStatus(ctx context.Context, kubeletConfig *machineconfigurationv1.KubeletConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.KubeletConfig, err error) + KubeletConfigExpansion +} + +// kubeletConfigs implements KubeletConfigInterface +type kubeletConfigs struct { + client rest.Interface +} + +// newKubeletConfigs returns a KubeletConfigs +func newKubeletConfigs(c *MachineconfigurationV1Client) *kubeletConfigs { + return &kubeletConfigs{ + client: c.RESTClient(), + } +} + +// Get takes name of the kubeletConfig, and returns the corresponding kubeletConfig object, and an error if there is any. +func (c *kubeletConfigs) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.KubeletConfig, err error) { + result = &v1.KubeletConfig{} + err = c.client.Get(). + Resource("kubeletconfigs"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of KubeletConfigs that match those selectors. +func (c *kubeletConfigs) List(ctx context.Context, opts metav1.ListOptions) (result *v1.KubeletConfigList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.KubeletConfigList{} + err = c.client.Get(). + Resource("kubeletconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested kubeletConfigs. +func (c *kubeletConfigs) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("kubeletconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a kubeletConfig and creates it. Returns the server's representation of the kubeletConfig, and an error, if there is any. +func (c *kubeletConfigs) Create(ctx context.Context, kubeletConfig *v1.KubeletConfig, opts metav1.CreateOptions) (result *v1.KubeletConfig, err error) { + result = &v1.KubeletConfig{} + err = c.client.Post(). + Resource("kubeletconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(kubeletConfig). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a kubeletConfig and updates it. Returns the server's representation of the kubeletConfig, and an error, if there is any. +func (c *kubeletConfigs) Update(ctx context.Context, kubeletConfig *v1.KubeletConfig, opts metav1.UpdateOptions) (result *v1.KubeletConfig, err error) { + result = &v1.KubeletConfig{} + err = c.client.Put(). + Resource("kubeletconfigs"). + Name(kubeletConfig.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(kubeletConfig). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *kubeletConfigs) UpdateStatus(ctx context.Context, kubeletConfig *v1.KubeletConfig, opts metav1.UpdateOptions) (result *v1.KubeletConfig, err error) { + result = &v1.KubeletConfig{} + err = c.client.Put(). + Resource("kubeletconfigs"). + Name(kubeletConfig.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(kubeletConfig). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the kubeletConfig and deletes it. Returns an error if one occurs. +func (c *kubeletConfigs) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("kubeletconfigs"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *kubeletConfigs) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("kubeletconfigs"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched kubeletConfig. +func (c *kubeletConfigs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.KubeletConfig, err error) { + result = &v1.KubeletConfig{} + err = c.client.Patch(pt). + Resource("kubeletconfigs"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied kubeletConfig. +func (c *kubeletConfigs) Apply(ctx context.Context, kubeletConfig *machineconfigurationv1.KubeletConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.KubeletConfig, err error) { + if kubeletConfig == nil { + return nil, fmt.Errorf("kubeletConfig provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(kubeletConfig) + if err != nil { + return nil, err + } + name := kubeletConfig.Name + if name == nil { + return nil, fmt.Errorf("kubeletConfig.Name must be provided to Apply") + } + result = &v1.KubeletConfig{} + err = c.client.Patch(types.ApplyPatchType). + Resource("kubeletconfigs"). + Name(*name). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *kubeletConfigs) ApplyStatus(ctx context.Context, kubeletConfig *machineconfigurationv1.KubeletConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.KubeletConfig, err error) { + if kubeletConfig == nil { + return nil, fmt.Errorf("kubeletConfig provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(kubeletConfig) + if err != nil { + return nil, err + } + + name := kubeletConfig.Name + if name == nil { + return nil, fmt.Errorf("kubeletConfig.Name must be provided to Apply") + } + + result = &v1.KubeletConfig{} + err = c.client.Patch(types.ApplyPatchType). + Resource("kubeletconfigs"). + Name(*name). + SubResource("status"). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/machineconfig.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/machineconfig.go new file mode 100644 index 0000000000..46c390c792 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/machineconfig.go @@ -0,0 +1,181 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + json "encoding/json" + "fmt" + "time" + + v1 "github.com/openshift/api/machineconfiguration/v1" + machineconfigurationv1 "github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1" + scheme "github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// MachineConfigsGetter has a method to return a MachineConfigInterface. +// A group's client should implement this interface. +type MachineConfigsGetter interface { + MachineConfigs() MachineConfigInterface +} + +// MachineConfigInterface has methods to work with MachineConfig resources. +type MachineConfigInterface interface { + Create(ctx context.Context, machineConfig *v1.MachineConfig, opts metav1.CreateOptions) (*v1.MachineConfig, error) + Update(ctx context.Context, machineConfig *v1.MachineConfig, opts metav1.UpdateOptions) (*v1.MachineConfig, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.MachineConfig, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.MachineConfigList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.MachineConfig, err error) + Apply(ctx context.Context, machineConfig *machineconfigurationv1.MachineConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.MachineConfig, err error) + MachineConfigExpansion +} + +// machineConfigs implements MachineConfigInterface +type machineConfigs struct { + client rest.Interface +} + +// newMachineConfigs returns a MachineConfigs +func newMachineConfigs(c *MachineconfigurationV1Client) *machineConfigs { + return &machineConfigs{ + client: c.RESTClient(), + } +} + +// Get takes name of the machineConfig, and returns the corresponding machineConfig object, and an error if there is any. +func (c *machineConfigs) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.MachineConfig, err error) { + result = &v1.MachineConfig{} + err = c.client.Get(). + Resource("machineconfigs"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of MachineConfigs that match those selectors. +func (c *machineConfigs) List(ctx context.Context, opts metav1.ListOptions) (result *v1.MachineConfigList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.MachineConfigList{} + err = c.client.Get(). + Resource("machineconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested machineConfigs. +func (c *machineConfigs) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("machineconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a machineConfig and creates it. Returns the server's representation of the machineConfig, and an error, if there is any. +func (c *machineConfigs) Create(ctx context.Context, machineConfig *v1.MachineConfig, opts metav1.CreateOptions) (result *v1.MachineConfig, err error) { + result = &v1.MachineConfig{} + err = c.client.Post(). + Resource("machineconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(machineConfig). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a machineConfig and updates it. Returns the server's representation of the machineConfig, and an error, if there is any. +func (c *machineConfigs) Update(ctx context.Context, machineConfig *v1.MachineConfig, opts metav1.UpdateOptions) (result *v1.MachineConfig, err error) { + result = &v1.MachineConfig{} + err = c.client.Put(). + Resource("machineconfigs"). + Name(machineConfig.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(machineConfig). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the machineConfig and deletes it. Returns an error if one occurs. +func (c *machineConfigs) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("machineconfigs"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *machineConfigs) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("machineconfigs"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched machineConfig. +func (c *machineConfigs) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.MachineConfig, err error) { + result = &v1.MachineConfig{} + err = c.client.Patch(pt). + Resource("machineconfigs"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied machineConfig. +func (c *machineConfigs) Apply(ctx context.Context, machineConfig *machineconfigurationv1.MachineConfigApplyConfiguration, opts metav1.ApplyOptions) (result *v1.MachineConfig, err error) { + if machineConfig == nil { + return nil, fmt.Errorf("machineConfig provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(machineConfig) + if err != nil { + return nil, err + } + name := machineConfig.Name + if name == nil { + return nil, fmt.Errorf("machineConfig.Name must be provided to Apply") + } + result = &v1.MachineConfig{} + err = c.client.Patch(types.ApplyPatchType). + Resource("machineconfigs"). + Name(*name). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/machineconfigpool.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/machineconfigpool.go new file mode 100644 index 0000000000..359ec94908 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/machineconfigpool.go @@ -0,0 +1,227 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "context" + json "encoding/json" + "fmt" + "time" + + v1 "github.com/openshift/api/machineconfiguration/v1" + machineconfigurationv1 "github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1" + scheme "github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// MachineConfigPoolsGetter has a method to return a MachineConfigPoolInterface. +// A group's client should implement this interface. +type MachineConfigPoolsGetter interface { + MachineConfigPools() MachineConfigPoolInterface +} + +// MachineConfigPoolInterface has methods to work with MachineConfigPool resources. +type MachineConfigPoolInterface interface { + Create(ctx context.Context, machineConfigPool *v1.MachineConfigPool, opts metav1.CreateOptions) (*v1.MachineConfigPool, error) + Update(ctx context.Context, machineConfigPool *v1.MachineConfigPool, opts metav1.UpdateOptions) (*v1.MachineConfigPool, error) + UpdateStatus(ctx context.Context, machineConfigPool *v1.MachineConfigPool, opts metav1.UpdateOptions) (*v1.MachineConfigPool, error) + Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error + Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1.MachineConfigPool, error) + List(ctx context.Context, opts metav1.ListOptions) (*v1.MachineConfigPoolList, error) + Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.MachineConfigPool, err error) + Apply(ctx context.Context, machineConfigPool *machineconfigurationv1.MachineConfigPoolApplyConfiguration, opts metav1.ApplyOptions) (result *v1.MachineConfigPool, err error) + ApplyStatus(ctx context.Context, machineConfigPool *machineconfigurationv1.MachineConfigPoolApplyConfiguration, opts metav1.ApplyOptions) (result *v1.MachineConfigPool, err error) + MachineConfigPoolExpansion +} + +// machineConfigPools implements MachineConfigPoolInterface +type machineConfigPools struct { + client rest.Interface +} + +// newMachineConfigPools returns a MachineConfigPools +func newMachineConfigPools(c *MachineconfigurationV1Client) *machineConfigPools { + return &machineConfigPools{ + client: c.RESTClient(), + } +} + +// Get takes name of the machineConfigPool, and returns the corresponding machineConfigPool object, and an error if there is any. +func (c *machineConfigPools) Get(ctx context.Context, name string, options metav1.GetOptions) (result *v1.MachineConfigPool, err error) { + result = &v1.MachineConfigPool{} + err = c.client.Get(). + Resource("machineconfigpools"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of MachineConfigPools that match those selectors. +func (c *machineConfigPools) List(ctx context.Context, opts metav1.ListOptions) (result *v1.MachineConfigPoolList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.MachineConfigPoolList{} + err = c.client.Get(). + Resource("machineconfigpools"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested machineConfigPools. +func (c *machineConfigPools) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("machineconfigpools"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a machineConfigPool and creates it. Returns the server's representation of the machineConfigPool, and an error, if there is any. +func (c *machineConfigPools) Create(ctx context.Context, machineConfigPool *v1.MachineConfigPool, opts metav1.CreateOptions) (result *v1.MachineConfigPool, err error) { + result = &v1.MachineConfigPool{} + err = c.client.Post(). + Resource("machineconfigpools"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(machineConfigPool). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a machineConfigPool and updates it. Returns the server's representation of the machineConfigPool, and an error, if there is any. +func (c *machineConfigPools) Update(ctx context.Context, machineConfigPool *v1.MachineConfigPool, opts metav1.UpdateOptions) (result *v1.MachineConfigPool, err error) { + result = &v1.MachineConfigPool{} + err = c.client.Put(). + Resource("machineconfigpools"). + Name(machineConfigPool.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(machineConfigPool). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *machineConfigPools) UpdateStatus(ctx context.Context, machineConfigPool *v1.MachineConfigPool, opts metav1.UpdateOptions) (result *v1.MachineConfigPool, err error) { + result = &v1.MachineConfigPool{} + err = c.client.Put(). + Resource("machineconfigpools"). + Name(machineConfigPool.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(machineConfigPool). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the machineConfigPool and deletes it. Returns an error if one occurs. +func (c *machineConfigPools) Delete(ctx context.Context, name string, opts metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("machineconfigpools"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *machineConfigPools) DeleteCollection(ctx context.Context, opts metav1.DeleteOptions, listOpts metav1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("machineconfigpools"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched machineConfigPool. +func (c *machineConfigPools) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts metav1.PatchOptions, subresources ...string) (result *v1.MachineConfigPool, err error) { + result = &v1.MachineConfigPool{} + err = c.client.Patch(pt). + Resource("machineconfigpools"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied machineConfigPool. +func (c *machineConfigPools) Apply(ctx context.Context, machineConfigPool *machineconfigurationv1.MachineConfigPoolApplyConfiguration, opts metav1.ApplyOptions) (result *v1.MachineConfigPool, err error) { + if machineConfigPool == nil { + return nil, fmt.Errorf("machineConfigPool provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(machineConfigPool) + if err != nil { + return nil, err + } + name := machineConfigPool.Name + if name == nil { + return nil, fmt.Errorf("machineConfigPool.Name must be provided to Apply") + } + result = &v1.MachineConfigPool{} + err = c.client.Patch(types.ApplyPatchType). + Resource("machineconfigpools"). + Name(*name). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *machineConfigPools) ApplyStatus(ctx context.Context, machineConfigPool *machineconfigurationv1.MachineConfigPoolApplyConfiguration, opts metav1.ApplyOptions) (result *v1.MachineConfigPool, err error) { + if machineConfigPool == nil { + return nil, fmt.Errorf("machineConfigPool provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(machineConfigPool) + if err != nil { + return nil, err + } + + name := machineConfigPool.Name + if name == nil { + return nil, fmt.Errorf("machineConfigPool.Name must be provided to Apply") + } + + result = &v1.MachineConfigPool{} + err = c.client.Patch(types.ApplyPatchType). + Resource("machineconfigpools"). + Name(*name). + SubResource("status"). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/machineconfiguration_client.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/machineconfiguration_client.go new file mode 100644 index 0000000000..6bc99dd14a --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1/machineconfiguration_client.go @@ -0,0 +1,111 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "net/http" + + v1 "github.com/openshift/api/machineconfiguration/v1" + "github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type MachineconfigurationV1Interface interface { + RESTClient() rest.Interface + ContainerRuntimeConfigsGetter + ControllerConfigsGetter + KubeletConfigsGetter + MachineConfigsGetter + MachineConfigPoolsGetter +} + +// MachineconfigurationV1Client is used to interact with features provided by the machineconfiguration.openshift.io group. +type MachineconfigurationV1Client struct { + restClient rest.Interface +} + +func (c *MachineconfigurationV1Client) ContainerRuntimeConfigs() ContainerRuntimeConfigInterface { + return newContainerRuntimeConfigs(c) +} + +func (c *MachineconfigurationV1Client) ControllerConfigs() ControllerConfigInterface { + return newControllerConfigs(c) +} + +func (c *MachineconfigurationV1Client) KubeletConfigs() KubeletConfigInterface { + return newKubeletConfigs(c) +} + +func (c *MachineconfigurationV1Client) MachineConfigs() MachineConfigInterface { + return newMachineConfigs(c) +} + +func (c *MachineconfigurationV1Client) MachineConfigPools() MachineConfigPoolInterface { + return newMachineConfigPools(c) +} + +// NewForConfig creates a new MachineconfigurationV1Client for the given config. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). +func NewForConfig(c *rest.Config) (*MachineconfigurationV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + httpClient, err := rest.HTTPClientFor(&config) + if err != nil { + return nil, err + } + return NewForConfigAndClient(&config, httpClient) +} + +// NewForConfigAndClient creates a new MachineconfigurationV1Client for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +func NewForConfigAndClient(c *rest.Config, h *http.Client) (*MachineconfigurationV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientForConfigAndClient(&config, h) + if err != nil { + return nil, err + } + return &MachineconfigurationV1Client{client}, nil +} + +// NewForConfigOrDie creates a new MachineconfigurationV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *MachineconfigurationV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new MachineconfigurationV1Client for the given RESTClient. +func New(c rest.Interface) *MachineconfigurationV1Client { + return &MachineconfigurationV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *MachineconfigurationV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1/doc.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1/doc.go new file mode 100644 index 0000000000..93a7ca4e0e --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1/doc.go @@ -0,0 +1,4 @@ +// Code generated by client-gen. DO NOT EDIT. + +// This package has the automatically generated typed clients. +package v1alpha1 diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1/generated_expansion.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1/generated_expansion.go new file mode 100644 index 0000000000..37de120197 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1/generated_expansion.go @@ -0,0 +1,5 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +type MachineConfigNodeExpansion interface{} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1/machineconfignode.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1/machineconfignode.go new file mode 100644 index 0000000000..cd4117043a --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1/machineconfignode.go @@ -0,0 +1,227 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "context" + json "encoding/json" + "fmt" + "time" + + v1alpha1 "github.com/openshift/api/machineconfiguration/v1alpha1" + machineconfigurationv1alpha1 "github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1" + scheme "github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + rest "k8s.io/client-go/rest" +) + +// MachineConfigNodesGetter has a method to return a MachineConfigNodeInterface. +// A group's client should implement this interface. +type MachineConfigNodesGetter interface { + MachineConfigNodes() MachineConfigNodeInterface +} + +// MachineConfigNodeInterface has methods to work with MachineConfigNode resources. +type MachineConfigNodeInterface interface { + Create(ctx context.Context, machineConfigNode *v1alpha1.MachineConfigNode, opts v1.CreateOptions) (*v1alpha1.MachineConfigNode, error) + Update(ctx context.Context, machineConfigNode *v1alpha1.MachineConfigNode, opts v1.UpdateOptions) (*v1alpha1.MachineConfigNode, error) + UpdateStatus(ctx context.Context, machineConfigNode *v1alpha1.MachineConfigNode, opts v1.UpdateOptions) (*v1alpha1.MachineConfigNode, error) + Delete(ctx context.Context, name string, opts v1.DeleteOptions) error + DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error + Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.MachineConfigNode, error) + List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.MachineConfigNodeList, error) + Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) + Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.MachineConfigNode, err error) + Apply(ctx context.Context, machineConfigNode *machineconfigurationv1alpha1.MachineConfigNodeApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.MachineConfigNode, err error) + ApplyStatus(ctx context.Context, machineConfigNode *machineconfigurationv1alpha1.MachineConfigNodeApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.MachineConfigNode, err error) + MachineConfigNodeExpansion +} + +// machineConfigNodes implements MachineConfigNodeInterface +type machineConfigNodes struct { + client rest.Interface +} + +// newMachineConfigNodes returns a MachineConfigNodes +func newMachineConfigNodes(c *MachineconfigurationV1alpha1Client) *machineConfigNodes { + return &machineConfigNodes{ + client: c.RESTClient(), + } +} + +// Get takes name of the machineConfigNode, and returns the corresponding machineConfigNode object, and an error if there is any. +func (c *machineConfigNodes) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.MachineConfigNode, err error) { + result = &v1alpha1.MachineConfigNode{} + err = c.client.Get(). + Resource("machineconfignodes"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(ctx). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of MachineConfigNodes that match those selectors. +func (c *machineConfigNodes) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.MachineConfigNodeList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1alpha1.MachineConfigNodeList{} + err = c.client.Get(). + Resource("machineconfignodes"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(ctx). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested machineConfigNodes. +func (c *machineConfigNodes) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + return c.client.Get(). + Resource("machineconfignodes"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch(ctx) +} + +// Create takes the representation of a machineConfigNode and creates it. Returns the server's representation of the machineConfigNode, and an error, if there is any. +func (c *machineConfigNodes) Create(ctx context.Context, machineConfigNode *v1alpha1.MachineConfigNode, opts v1.CreateOptions) (result *v1alpha1.MachineConfigNode, err error) { + result = &v1alpha1.MachineConfigNode{} + err = c.client.Post(). + Resource("machineconfignodes"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(machineConfigNode). + Do(ctx). + Into(result) + return +} + +// Update takes the representation of a machineConfigNode and updates it. Returns the server's representation of the machineConfigNode, and an error, if there is any. +func (c *machineConfigNodes) Update(ctx context.Context, machineConfigNode *v1alpha1.MachineConfigNode, opts v1.UpdateOptions) (result *v1alpha1.MachineConfigNode, err error) { + result = &v1alpha1.MachineConfigNode{} + err = c.client.Put(). + Resource("machineconfignodes"). + Name(machineConfigNode.Name). + VersionedParams(&opts, scheme.ParameterCodec). + Body(machineConfigNode). + Do(ctx). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). +func (c *machineConfigNodes) UpdateStatus(ctx context.Context, machineConfigNode *v1alpha1.MachineConfigNode, opts v1.UpdateOptions) (result *v1alpha1.MachineConfigNode, err error) { + result = &v1alpha1.MachineConfigNode{} + err = c.client.Put(). + Resource("machineconfignodes"). + Name(machineConfigNode.Name). + SubResource("status"). + VersionedParams(&opts, scheme.ParameterCodec). + Body(machineConfigNode). + Do(ctx). + Into(result) + return +} + +// Delete takes name of the machineConfigNode and deletes it. Returns an error if one occurs. +func (c *machineConfigNodes) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error { + return c.client.Delete(). + Resource("machineconfignodes"). + Name(name). + Body(&opts). + Do(ctx). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *machineConfigNodes) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error { + var timeout time.Duration + if listOpts.TimeoutSeconds != nil { + timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("machineconfignodes"). + VersionedParams(&listOpts, scheme.ParameterCodec). + Timeout(timeout). + Body(&opts). + Do(ctx). + Error() +} + +// Patch applies the patch and returns the patched machineConfigNode. +func (c *machineConfigNodes) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.MachineConfigNode, err error) { + result = &v1alpha1.MachineConfigNode{} + err = c.client.Patch(pt). + Resource("machineconfignodes"). + Name(name). + SubResource(subresources...). + VersionedParams(&opts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// Apply takes the given apply declarative configuration, applies it and returns the applied machineConfigNode. +func (c *machineConfigNodes) Apply(ctx context.Context, machineConfigNode *machineconfigurationv1alpha1.MachineConfigNodeApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.MachineConfigNode, err error) { + if machineConfigNode == nil { + return nil, fmt.Errorf("machineConfigNode provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(machineConfigNode) + if err != nil { + return nil, err + } + name := machineConfigNode.Name + if name == nil { + return nil, fmt.Errorf("machineConfigNode.Name must be provided to Apply") + } + result = &v1alpha1.MachineConfigNode{} + err = c.client.Patch(types.ApplyPatchType). + Resource("machineconfignodes"). + Name(*name). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} + +// ApplyStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating ApplyStatus(). +func (c *machineConfigNodes) ApplyStatus(ctx context.Context, machineConfigNode *machineconfigurationv1alpha1.MachineConfigNodeApplyConfiguration, opts v1.ApplyOptions) (result *v1alpha1.MachineConfigNode, err error) { + if machineConfigNode == nil { + return nil, fmt.Errorf("machineConfigNode provided to Apply must not be nil") + } + patchOpts := opts.ToPatchOptions() + data, err := json.Marshal(machineConfigNode) + if err != nil { + return nil, err + } + + name := machineConfigNode.Name + if name == nil { + return nil, fmt.Errorf("machineConfigNode.Name must be provided to Apply") + } + + result = &v1alpha1.MachineConfigNode{} + err = c.client.Patch(types.ApplyPatchType). + Resource("machineconfignodes"). + Name(*name). + SubResource("status"). + VersionedParams(&patchOpts, scheme.ParameterCodec). + Body(data). + Do(ctx). + Into(result) + return +} diff --git a/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1/machineconfiguration_client.go b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1/machineconfiguration_client.go new file mode 100644 index 0000000000..1b717606f3 --- /dev/null +++ b/vendor/github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1/machineconfiguration_client.go @@ -0,0 +1,91 @@ +// Code generated by client-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + "net/http" + + v1alpha1 "github.com/openshift/api/machineconfiguration/v1alpha1" + "github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme" + rest "k8s.io/client-go/rest" +) + +type MachineconfigurationV1alpha1Interface interface { + RESTClient() rest.Interface + MachineConfigNodesGetter +} + +// MachineconfigurationV1alpha1Client is used to interact with features provided by the machineconfiguration.openshift.io group. +type MachineconfigurationV1alpha1Client struct { + restClient rest.Interface +} + +func (c *MachineconfigurationV1alpha1Client) MachineConfigNodes() MachineConfigNodeInterface { + return newMachineConfigNodes(c) +} + +// NewForConfig creates a new MachineconfigurationV1alpha1Client for the given config. +// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient), +// where httpClient was generated with rest.HTTPClientFor(c). +func NewForConfig(c *rest.Config) (*MachineconfigurationV1alpha1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + httpClient, err := rest.HTTPClientFor(&config) + if err != nil { + return nil, err + } + return NewForConfigAndClient(&config, httpClient) +} + +// NewForConfigAndClient creates a new MachineconfigurationV1alpha1Client for the given config and http client. +// Note the http client provided takes precedence over the configured transport values. +func NewForConfigAndClient(c *rest.Config, h *http.Client) (*MachineconfigurationV1alpha1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientForConfigAndClient(&config, h) + if err != nil { + return nil, err + } + return &MachineconfigurationV1alpha1Client{client}, nil +} + +// NewForConfigOrDie creates a new MachineconfigurationV1alpha1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *MachineconfigurationV1alpha1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new MachineconfigurationV1alpha1Client for the given RESTClient. +func New(c rest.Interface) *MachineconfigurationV1alpha1Client { + return &MachineconfigurationV1alpha1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1alpha1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *MachineconfigurationV1alpha1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 9a1d92a3ad..5c935c5768 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -609,6 +609,8 @@ github.com/openshift/api/machine github.com/openshift/api/machine/v1 github.com/openshift/api/machine/v1alpha1 github.com/openshift/api/machine/v1beta1 +github.com/openshift/api/machineconfiguration/v1 +github.com/openshift/api/machineconfiguration/v1alpha1 github.com/openshift/api/monitoring github.com/openshift/api/monitoring/v1alpha1 github.com/openshift/api/network @@ -697,6 +699,13 @@ github.com/openshift/client-go/image/clientset/versioned/fake github.com/openshift/client-go/image/clientset/versioned/scheme github.com/openshift/client-go/image/clientset/versioned/typed/image/v1 github.com/openshift/client-go/image/clientset/versioned/typed/image/v1/fake +github.com/openshift/client-go/machineconfiguration/applyconfigurations/internal +github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1 +github.com/openshift/client-go/machineconfiguration/applyconfigurations/machineconfiguration/v1alpha1 +github.com/openshift/client-go/machineconfiguration/clientset/versioned +github.com/openshift/client-go/machineconfiguration/clientset/versioned/scheme +github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1 +github.com/openshift/client-go/machineconfiguration/clientset/versioned/typed/machineconfiguration/v1alpha1 github.com/openshift/client-go/network/applyconfigurations/internal github.com/openshift/client-go/network/applyconfigurations/network/v1 github.com/openshift/client-go/network/clientset/versioned/scheme