Skip to content

Commit 0e1d7bc

Browse files
add config map service account
1 parent c293d03 commit 0e1d7bc

2 files changed

Lines changed: 43 additions & 3 deletions

File tree

pkg/controller/bundle/bundle_unpacker.go

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,7 @@ type ConfigMapUnpacker struct {
337337
podLister listerscorev1.PodLister
338338
roleLister listersrbacv1.RoleLister
339339
rbLister listersrbacv1.RoleBindingLister
340+
saLister listerscorev1.ServiceAccountLister
340341
loader *configmap.BundleLoader
341342
now func() metav1.Time
342343
unpackTimeout time.Duration
@@ -424,6 +425,12 @@ func WithRoleBindingLister(rbLister listersrbacv1.RoleBindingLister) ConfigMapUn
424425
}
425426
}
426427

428+
func WithServiceAccountLister(saLister listerscorev1.ServiceAccountLister) ConfigMapUnpackerOption {
429+
return func(unpacker *ConfigMapUnpacker) {
430+
unpacker.saLister = saLister
431+
}
432+
}
433+
427434
func WithNow(now func() metav1.Time) ConfigMapUnpackerOption {
428435
return func(unpacker *ConfigMapUnpacker) {
429436
unpacker.now = now
@@ -536,6 +543,11 @@ func (c *ConfigMapUnpacker) UnpackBundle(lookup *operatorsv1alpha1.BundleLookup,
536543
return
537544
}
538545

546+
_, err = c.ensureServiceAccount(cmRef)
547+
if err != nil {
548+
return
549+
}
550+
539551
_, err = c.ensureRoleBinding(cmRef)
540552
if err != nil {
541553
return
@@ -791,13 +803,39 @@ func (c *ConfigMapUnpacker) ensureRole(cmRef *corev1.ObjectReference) (role *rba
791803
return
792804
}
793805

806+
func (c *ConfigMapUnpacker) ensureServiceAccount(cmRef *corev1.ObjectReference) (serviceAccount *corev1.ServiceAccount, err error) {
807+
808+
fresh := &corev1.ServiceAccount{
809+
ObjectMeta: metav1.ObjectMeta{
810+
Name: cmRef.Name,
811+
Namespace: cmRef.Namespace,
812+
},
813+
}
814+
815+
fresh.SetNamespace(cmRef.Namespace)
816+
fresh.SetName(cmRef.Name)
817+
fresh.SetOwnerReferences([]metav1.OwnerReference{ownerRef(cmRef)})
818+
fresh.SetLabels(map[string]string{install.OLMManagedLabelKey: install.OLMManagedLabelValue})
819+
820+
serviceAccount, err = c.saLister.ServiceAccounts(fresh.GetNamespace()).Get(fresh.GetName())
821+
822+
if err != nil {
823+
if apierrors.IsNotFound(err) {
824+
serviceAccount, err = c.client.CoreV1().ServiceAccounts(fresh.GetNamespace()).Create(context.TODO(), fresh, metav1.CreateOptions{})
825+
}
826+
return
827+
}
828+
829+
return
830+
}
831+
794832
func (c *ConfigMapUnpacker) ensureRoleBinding(cmRef *corev1.ObjectReference) (roleBinding *rbacv1.RoleBinding, err error) {
795833
fresh := &rbacv1.RoleBinding{
796834
Subjects: []rbacv1.Subject{
797835
{
798836
Kind: "ServiceAccount",
799837
APIGroup: "",
800-
Name: "default",
838+
Name: cmRef.Name,
801839
Namespace: cmRef.Namespace,
802840
},
803841
},

pkg/controller/bundle/bundle_unpacker_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ func TestConfigMapUnpacker(t *testing.T) {
450450
{
451451
Kind: "ServiceAccount",
452452
APIGroup: "",
453-
Name: "default",
453+
Name: pathHash,
454454
Namespace: "ns-a",
455455
},
456456
},
@@ -941,7 +941,7 @@ func TestConfigMapUnpacker(t *testing.T) {
941941
{
942942
Kind: "ServiceAccount",
943943
APIGroup: "",
944-
Name: "default",
944+
Name: digestHash,
945945
Namespace: "ns-a",
946946
},
947947
},
@@ -1618,6 +1618,7 @@ func TestConfigMapUnpacker(t *testing.T) {
16181618
podLister := factory.Core().V1().Pods().Lister()
16191619
roleLister := factory.Rbac().V1().Roles().Lister()
16201620
rbLister := factory.Rbac().V1().RoleBindings().Lister()
1621+
saLister := factory.Core().V1().ServiceAccounts().Lister()
16211622

16221623
stop := make(chan struct{})
16231624
defer close(stop)
@@ -1639,6 +1640,7 @@ func TestConfigMapUnpacker(t *testing.T) {
16391640
WithPodLister(podLister),
16401641
WithRoleLister(roleLister),
16411642
WithRoleBindingLister(rbLister),
1643+
WithServiceAccountLister(saLister),
16421644
WithOPMImage(opmImage),
16431645
WithUtilImage(utilImage),
16441646
WithNow(now),

0 commit comments

Comments
 (0)