Skip to content

Commit 799d414

Browse files
Merge pull request #238 from stlaz/server_cert_fails
Bug 2026860: ocp provider: don't fail client creation if oauth-server cert is not present
2 parents d347e1a + 02cabcc commit 799d414

File tree

2 files changed

+34
-14
lines changed

2 files changed

+34
-14
lines changed

providers/openshift/provider.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727

2828
authenticationv1 "k8s.io/api/authentication/v1"
2929
authorizationv1 "k8s.io/api/authorization/v1"
30+
apierrors "k8s.io/apimachinery/pkg/api/errors"
3031
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3132
"k8s.io/apimachinery/pkg/fields"
3233
"k8s.io/apimachinery/pkg/util/wait"
@@ -157,12 +158,16 @@ func (p *OpenShiftProvider) newOpenShiftClient() (*http.Client, error) {
157158
return nil, err
158159
}
159160

161+
cachedKey := metadataHash
162+
160163
oauthServerCert, err := p.configMapLister.ConfigMaps("openshift-config-managed").Get("oauth-serving-cert")
161-
if err != nil {
164+
if err != nil && !apierrors.IsNotFound(err) {
162165
return nil, err
163166
}
167+
if oauthServerCert != nil {
168+
cachedKey += oauthServerCert.ResourceVersion
169+
}
164170

165-
cachedKey := metadataHash + oauthServerCert.ResourceVersion
166171
if httpClient, ok := p.httpClientCache.Load(cachedKey); ok {
167172
return httpClient.(*http.Client), nil
168173
}
@@ -173,8 +178,10 @@ func (p *OpenShiftProvider) newOpenShiftClient() (*http.Client, error) {
173178
return nil, err
174179
}
175180

176-
if ok := pool.AppendCertsFromPEM([]byte(oauthServerCert.Data["ca-bundle.crt"])); !ok {
177-
log.Println("failed to add the oauth-server certificate to the OpenShift client CA bundle")
181+
if oauthServerCert != nil {
182+
if ok := pool.AppendCertsFromPEM([]byte(oauthServerCert.Data["ca-bundle.crt"])); !ok {
183+
log.Println("failed to add the oauth-server certificate to the OpenShift client CA bundle")
184+
}
178185
}
179186

180187
httpClient := &http.Client{

providers/openshift/provider_test.go

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -154,14 +154,6 @@ func TestNewOpenShiftClient(t *testing.T) {
154154
}
155155

156156
indexer := cache.NewIndexer(cache.MetaNamespaceKeyFunc, cache.Indexers{})
157-
err = indexer.Add(&corev1.ConfigMap{
158-
ObjectMeta: metav1.ObjectMeta{
159-
Name: "oauth-serving-cert",
160-
Namespace: "openshift-config-managed",
161-
},
162-
})
163-
require.NoError(t, err)
164-
165157
p := &OpenShiftProvider{
166158
configMapLister: corev1listers.NewConfigMapLister(indexer),
167159
}
@@ -171,14 +163,35 @@ func TestNewOpenShiftClient(t *testing.T) {
171163
p.authorizer = &mockAuthorizer{}
172164
p.SetReviewCAs([]string{tmpfile.Name()})
173165

166+
// missing oauth serving cert should not cause failures
167+
noServerCertClient, err := p.newOpenShiftClient()
168+
if err != nil {
169+
t.Fatalf("failed to create an OpenShift Client: %v", err)
170+
}
171+
172+
err = indexer.Add(&corev1.ConfigMap{
173+
ObjectMeta: metav1.ObjectMeta{
174+
ResourceVersion: "someVersion",
175+
Name: "oauth-serving-cert",
176+
Namespace: "openshift-config-managed",
177+
},
178+
})
179+
require.NoError(t, err)
180+
p.configMapLister = corev1listers.NewConfigMapLister(indexer)
181+
174182
client, err := p.newOpenShiftClient()
175183
if err != nil {
176-
t.Fatalf("failed to create an OpenShift Client")
184+
t.Fatalf("failed to create an OpenShift Client: %v", err)
185+
}
186+
187+
if noServerCertClient == client {
188+
p.httpClientCache.Range(func(key, _ interface{}) bool { t.Logf("%s", key); return true })
189+
t.Fatalf("clients should be different when the oauth-server cert is present compared to when it isn't")
177190
}
178191

179192
newClient, err := p.newOpenShiftClient()
180193
if err != nil {
181-
t.Fatalf("failed to create a new OpenShift Client")
194+
t.Fatalf("failed to create a new OpenShift Client: %v", err)
182195
}
183196

184197
// caching should make sure the clients are the same

0 commit comments

Comments
 (0)