Skip to content

Commit 4d280bd

Browse files
committed
externaloidc: return errors when node statuses cannot be used to determine oidc state
1 parent 215805c commit 4d280bd

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

pkg/controllers/common/external_oidc.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,26 @@ func (c *AuthConfigChecker) OIDCAvailable() (bool, error) {
6767
return false, fmt.Errorf("getting kubeapiservers.operator.openshift.io/cluster: %v", err)
6868
}
6969

70+
if len(kas.Status.NodeStatuses) == 0 {
71+
return false, fmt.Errorf("determining observed revisions in kubeapiservers.operator.openshift.io/cluster; no node statuses found")
72+
}
73+
7074
observedRevisions := sets.New[int32]()
75+
nodesWithEmptyRevision := false
7176
for _, nodeStatus := range kas.Status.NodeStatuses {
72-
observedRevisions.Insert(nodeStatus.CurrentRevision)
77+
if nodeStatus.CurrentRevision > 0 {
78+
observedRevisions.Insert(nodeStatus.CurrentRevision)
79+
} else {
80+
nodesWithEmptyRevision = true
81+
}
82+
}
83+
84+
if nodesWithEmptyRevision {
85+
return false, fmt.Errorf("determining observed revisions in kubeapiservers.operator.openshift.io/cluster; some nodes do not have a valid CurrentRevision")
7386
}
7487

7588
if observedRevisions.Len() == 0 {
76-
return false, nil
89+
return false, fmt.Errorf("determining observed revisions in kubeapiservers.operator.openshift.io/cluster; no observed revisions found")
7790
}
7891

7992
for _, revision := range observedRevisions.UnsortedList() {

pkg/controllers/common/external_oidc_test.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,29 @@ func TestExternalOIDCConfigAvailable(t *testing.T) {
3232
name: "no node statuses observed",
3333
authType: configv1.AuthenticationTypeOIDC,
3434
expectAvailable: false,
35-
expectError: false,
35+
expectError: true,
36+
},
37+
{
38+
name: "some node revisions are zero",
39+
authType: configv1.AuthenticationTypeOIDC,
40+
nodeStatuses: []operatorv1.NodeStatus{
41+
{CurrentRevision: 10},
42+
{CurrentRevision: 10},
43+
{CurrentRevision: 0},
44+
},
45+
expectAvailable: false,
46+
expectError: true,
47+
},
48+
{
49+
name: "node revisions are zero",
50+
authType: configv1.AuthenticationTypeOIDC,
51+
nodeStatuses: []operatorv1.NodeStatus{
52+
{CurrentRevision: 0},
53+
{CurrentRevision: 0},
54+
{CurrentRevision: 0},
55+
},
56+
expectAvailable: false,
57+
expectError: true,
3658
},
3759
{
3860
name: "oidc disabled, no rollout",

0 commit comments

Comments
 (0)