Skip to content

Commit

Permalink
Bug 1704874: Create ConfigMap for Registry CA
Browse files Browse the repository at this point in the history
Create a ConfigMap that the openshift-controller-manager can use to hold the registry's CA.
Use the service.beta.openshift.io/inject-cabundle annotation to have the service-ca-operator
dynamically inject the internal registry's certificate authority.
  • Loading branch information
adambkaplan committed May 2, 2019
1 parent da380be commit d9f4a99
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 1 deletion.
@@ -0,0 +1,8 @@
kind: ConfigMap
apiVersion: v1
metadata:
name: openshift-service-ca
namespace: openshift-controller-manager
annotations:
service.beta.openshift.io/inject-cabundle: "true"
data: {}
40 changes: 39 additions & 1 deletion pkg/operator/sync_openshiftcontrollermanager_v311_00.go
Expand Up @@ -8,6 +8,7 @@ import (
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/equality"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/client-go/kubernetes"
Expand Down Expand Up @@ -72,8 +73,13 @@ func syncOpenShiftControllerManager_v311_00_to_latest(c OpenShiftControllerManag
errors = append(errors, fmt.Errorf("%q: %v", "client-ca", err))
}

_, serviceCAModified, err := manageOpenShiftServiceCAConfigMap_v311_00_to_latest(c.kubeClient, c.kubeClient.CoreV1(), c.recorder)
if err != nil {
errors = append(errors, fmt.Errorf("%q: %v", "openshift-service-ca", err))
}

forceRollout = forceRollout || operatorConfig.ObjectMeta.Generation != operatorConfig.Status.ObservedGeneration
forceRollout = forceRollout || configMapModified || clientCAModified
forceRollout = forceRollout || configMapModified || clientCAModified || serviceCAModified

// our configmaps and secrets are in order, now it is time to create the DS
// TODO check basic preconditions here
Expand Down Expand Up @@ -189,6 +195,38 @@ func manageOpenShiftControllerManagerConfigMap_v311_00_to_latest(kubeClient kube
return resourceapply.ApplyConfigMap(client, recorder, requiredConfigMap)
}

func manageOpenShiftServiceCAConfigMap_v311_00_to_latest(kubeClient kubernetes.Interface, client coreclientv1.ConfigMapsGetter, recorder events.Recorder) (*corev1.ConfigMap, bool, error) {
configMap := resourceread.ReadConfigMapV1OrDie(v311_00_assets.MustAsset("v3.11.0/openshift-controller-manager/openshift-service-ca-cm.yaml"))
existing, err := client.ConfigMaps(util.TargetNamespace).Get("openshift-service-ca", metav1.GetOptions{})
// Ensure we create the ConfigMap for the registry CA, and that it has the right annotations
// Lifted from library-go for the most part
if apierrors.IsNotFound(err) {
new, err := client.ConfigMaps(util.TargetNamespace).Create(configMap)
if err != nil {
recorder.Eventf("ConfigMapCreateFailed", "Failed to create %s%s/%s%s: %v", "configmap", "", "openshift-service-ca", "-n openshift-controller-manager", err)
return nil, true, err
}
recorder.Eventf("ConfigMapCreated", "Created %s%s/%s%s because it was missing", "configmap", "", "openshift-service-ca", "-n openshift-controller-manager")
return new, true, nil
}

// Ensure the openshift-service-ca ConfigMap has the service.beta.openshift.io/inject-cabundle annotation
// Otherwise ignore the contents of the ConfigMap
modified := resourcemerge.BoolPtr(false)
existingCopy := existing.DeepCopy()
resourcemerge.EnsureObjectMeta(modified, &existingCopy.ObjectMeta, configMap.ObjectMeta)
if !*modified {
return existing, false, nil
}
updated, err := client.ConfigMaps(util.TargetNamespace).Update(existingCopy)
if err != nil {
recorder.Eventf("ConfigMapUpdateFailed", "Failed to update %s%s/%s%s: %v", "configmap", "", "openshift-service-ca", "-n openshift-controller-manager", err)
return nil, true, err
}
recorder.Eventf("ConfigMapUpdated", "Updated %s%s/%s%s", "configmap", "", "openshift-service-ca", "-n openshift-controller-manager")
return updated, true, nil
}

func manageOpenShiftControllerManagerDeployment_v311_00_to_latest(client appsclientv1.DaemonSetsGetter, recorder events.Recorder, options *operatorapiv1.OpenShiftControllerManager, imagePullSpec string, generationStatus []operatorapiv1.GenerationStatus, forceRollout bool) (*appsv1.DaemonSet, bool, error) {
required := resourceread.ReadDaemonSetV1OrDie(v311_00_assets.MustAsset("v3.11.0/openshift-controller-manager/ds.yaml"))

Expand Down
28 changes: 28 additions & 0 deletions pkg/operator/v311_00_assets/bindata.go
Expand Up @@ -9,6 +9,7 @@
// bindata/v3.11.0/openshift-controller-manager/leader-rolebinding.yaml
// bindata/v3.11.0/openshift-controller-manager/old-leader-role.yaml
// bindata/v3.11.0/openshift-controller-manager/old-leader-rolebinding.yaml
// bindata/v3.11.0/openshift-controller-manager/openshift-service-ca-cm.yaml
// bindata/v3.11.0/openshift-controller-manager/sa.yaml
// bindata/v3.11.0/openshift-controller-manager/separate-sa-role.yaml
// bindata/v3.11.0/openshift-controller-manager/separate-sa-rolebinding.yaml
Expand Down Expand Up @@ -398,6 +399,31 @@ func v3110OpenshiftControllerManagerOldLeaderRolebindingYaml() (*asset, error) {
return a, nil
}

var _v3110OpenshiftControllerManagerOpenshiftServiceCaCmYaml = []byte(`kind: ConfigMap
apiVersion: v1
metadata:
name: openshift-service-ca
namespace: openshift-controller-manager
annotations:
service.beta.openshift.io/inject-cabundle: "true"
data: {}
`)

func v3110OpenshiftControllerManagerOpenshiftServiceCaCmYamlBytes() ([]byte, error) {
return _v3110OpenshiftControllerManagerOpenshiftServiceCaCmYaml, nil
}

func v3110OpenshiftControllerManagerOpenshiftServiceCaCmYaml() (*asset, error) {
bytes, err := v3110OpenshiftControllerManagerOpenshiftServiceCaCmYamlBytes()
if err != nil {
return nil, err
}

info := bindataFileInfo{name: "v3.11.0/openshift-controller-manager/openshift-service-ca-cm.yaml", size: 0, mode: os.FileMode(0), modTime: time.Unix(0, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}

var _v3110OpenshiftControllerManagerSaYaml = []byte(`apiVersion: v1
kind: ServiceAccount
metadata:
Expand Down Expand Up @@ -709,6 +735,7 @@ var _bindata = map[string]func() (*asset, error){
"v3.11.0/openshift-controller-manager/leader-rolebinding.yaml": v3110OpenshiftControllerManagerLeaderRolebindingYaml,
"v3.11.0/openshift-controller-manager/old-leader-role.yaml": v3110OpenshiftControllerManagerOldLeaderRoleYaml,
"v3.11.0/openshift-controller-manager/old-leader-rolebinding.yaml": v3110OpenshiftControllerManagerOldLeaderRolebindingYaml,
"v3.11.0/openshift-controller-manager/openshift-service-ca-cm.yaml": v3110OpenshiftControllerManagerOpenshiftServiceCaCmYaml,
"v3.11.0/openshift-controller-manager/sa.yaml": v3110OpenshiftControllerManagerSaYaml,
"v3.11.0/openshift-controller-manager/separate-sa-role.yaml": v3110OpenshiftControllerManagerSeparateSaRoleYaml,
"v3.11.0/openshift-controller-manager/separate-sa-rolebinding.yaml": v3110OpenshiftControllerManagerSeparateSaRolebindingYaml,
Expand Down Expand Up @@ -771,6 +798,7 @@ var _bintree = &bintree{nil, map[string]*bintree{
"leader-rolebinding.yaml": {v3110OpenshiftControllerManagerLeaderRolebindingYaml, map[string]*bintree{}},
"old-leader-role.yaml": {v3110OpenshiftControllerManagerOldLeaderRoleYaml, map[string]*bintree{}},
"old-leader-rolebinding.yaml": {v3110OpenshiftControllerManagerOldLeaderRolebindingYaml, map[string]*bintree{}},
"openshift-service-ca-cm.yaml": {v3110OpenshiftControllerManagerOpenshiftServiceCaCmYaml, map[string]*bintree{}},
"sa.yaml": {v3110OpenshiftControllerManagerSaYaml, map[string]*bintree{}},
"separate-sa-role.yaml": {v3110OpenshiftControllerManagerSeparateSaRoleYaml, map[string]*bintree{}},
"separate-sa-rolebinding.yaml": {v3110OpenshiftControllerManagerSeparateSaRolebindingYaml, map[string]*bintree{}},
Expand Down

0 comments on commit d9f4a99

Please sign in to comment.