kasOperatorYaml := testdata.MustAsset("test/extended/testdata/apiserver/operator-kube-apiserver-cr.yaml")
unstructuredKasOperatorManifest := resourceread.ReadUnstructuredOrDie(kasOperatorYaml)
manifest, _ := json.Marshal(unstructuredKasOperatorManifest)
framework.Logf("JSONPATCH: unstructuredKasOperatorManifest %s", string(manifest))
/*
"apiVersion":"operator.openshift.io/v1",
"kind":"KubeAPIServer",
"metadata":{"generateName":"test-apiserver-"},
"spec":{"managementState":"Managed"},
"status":{"nodeStatuses":[{"nodeName":"master-1"},{"nodeName":"master-2"}]}}
*/
unstructuredKasOperator, err := resourceClient.Create(ctx, unstructuredKasOperatorManifest, metav1.CreateOptions{})
o.Expect(err).NotTo(o.HaveOccurred())
manifest2, _ := json.Marshal(unstructuredKasOperator)
framework.Logf("JSONPATCH: unstructuredKasOperator %s", string(manifest2))
/*
"apiVersion":"operator.openshift.io/v1",
"kind":"KubeAPIServer",
"metadata":{"creationTimestamp":"2025-02-18T08:41:18Z","generateName":"test-apiserver-","generation":1,"managedFields":[{"apiVersion":"operator.openshift.io/v1","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:generateName":{}},"f:spec":{".":{},"f:logLevel":{},"f:managementState":{},"f:operatorLogLevel":{}}},"manager":"openshift-tests","operation":"Update","time":"2025-02-18T08:41:18Z"}],"name":"test-apiserver-2sc47","resourceVersion":"202804","uid":"fde5fdff-a246-49d1-b8e5-469f69ad4f6e"},
"spec":{"logLevel":"Normal","managementState":"Managed","operatorLogLevel":"Normal"}}
*/
kasOperator := unstructuredToKubeAPIServerOperator(unstructuredKasOperator.Object)
manifest3, _ := json.Marshal(kasOperator)
framework.Logf("JSONPATCH: kasOperator %s", string(manifest3))
/*
"kind":"KubeAPIServer",
"apiVersion":"operator.openshift.io/v1",
"metadata":{"name":"test-apiserver-2sc47","generateName":"test-apiserver-","uid":"fde5fdff-a246-49d1-b8e5-469f69ad4f6e","resourceVersion":"202804","generation":1,"creationTimestamp":"2025-02-18T08:41:18Z","managedFields":[{"manager":"openshift-tests","operation":"Update","apiVersion":"operator.openshift.io/v1","time":"2025-02-18T08:41:18Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:generateName":{}},"f:spec":{".":{},"f:logLevel":{},"f:managementState":{},"f:operatorLogLevel":{}}}}]},
"spec":{"managementState":"Managed","logLevel":"Normal","operatorLogLevel":"Normal","unsupportedConfigOverrides":null,"observedConfig":null,"forceRedeploymentReason":""},
"status":{"readyReplicas":0}}
*/
kasOperatorFromManifest := unstructuredToKubeAPIServerOperator(unstructuredKasOperatorManifest.Object)
manifest4, _ := json.Marshal(kasOperatorFromManifest)
framework.Logf("JSONPATCH: kasOperatorFromManifest %s", string(manifest4))
/*
"kind":"KubeAPIServer",
"apiVersion":"operator.openshift.io/v1",
"metadata":{"generateName":"test-apiserver-","creationTimestamp":null},
"spec":{"managementState":"Managed","unsupportedConfigOverrides":null,"observedConfig":null,"forceRedeploymentReason":""},
----->> "status":{"readyReplicas":0,"nodeStatuses":[{"nodeName":"master-1","currentRevision":0},{"nodeName":"master-2","currentRevision":0}]}}
*/
kasOperator.Status = kasOperatorFromManifest.Status
manifest5, _ := json.Marshal(kasOperator)
framework.Logf("JSONPATCH: kasOperator with status %s", string(manifest5))
/*
"kind":"KubeAPIServer",
"apiVersion":"operator.openshift.io/v1",
"metadata":{"name":"test-apiserver-2sc47","generateName":"test-apiserver-","uid":"fde5fdff-a246-49d1-b8e5-469f69ad4f6e","resourceVersion":"202804","generation":1,"creationTimestamp":"2025-02-18T08:41:18Z","managedFields":[{"manager":"openshift-tests","operation":"Update","apiVersion":"operator.openshift.io/v1","time":"2025-02-18T08:41:18Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:generateName":{}},"f:spec":{".":{},"f:logLevel":{},"f:managementState":{},"f:operatorLogLevel":{}}}}]},
"spec":{"managementState":"Managed","logLevel":"Normal","operatorLogLevel":"Normal","unsupportedConfigOverrides":null,"observedConfig":null,"forceRedeploymentReason":""},
"status":{"readyReplicas":0,"nodeStatuses":[{"nodeName":"master-1","currentRevision":0},{"nodeName":"master-2","currentRevision":0}]}}
*/
unstructuredKasOperator, err = resourceClient.UpdateStatus(ctx, kubeAPIServerOperatorToUnstructured(kasOperator), metav1.UpdateOptions{})
o.Expect(err).NotTo(o.HaveOccurred())
kasOperator = unstructuredToKubeAPIServerOperator(unstructuredKasOperator.Object)
o.Expect(kasOperator.Status.NodeStatuses).To(o.Equal([]operatorv1.NodeStatus{
{NodeName: "master-1"},
{NodeName: "master-2"},
}))
According to my initial investigations (I'll do tomorrow extensively), I reached to the same conclusions similar to rh-ee-bpalmer.
(I'd like to note that I saw `targetRevision is the generation of the deployment we're trying to apply. Can not be set on creation of a nodeStatus.` error which has been added by https://github.com/openshift/api/pull/2208/ and it prevented that installer_controller incorrectly creates new nodestatus.)