Skip to content

Commit 1593e4c

Browse files
authored
Enable customized configuration (#1585)
for OperandConfig resources[*] array field Signed-off-by: Daniel Fan <[email protected]>
1 parent 528c348 commit 1593e4c

13 files changed

+373
-245
lines changed

api/v3/commonservice_types.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,9 @@ type ExtensionWithMarker struct {
4949

5050
type ServiceConfig struct {
5151
Name string `json:"name"`
52-
Spec map[string]ExtensionWithMarker `json:"spec"`
52+
Spec map[string]ExtensionWithMarker `json:"spec,omitempty"`
5353
ManagementStrategy string `json:"managementStrategy,omitempty"`
54+
Resources []ExtensionWithMarker `json:"resources,omitempty"`
5455
}
5556

5657
// CommonServiceSpec defines the desired state of CommonService

api/v3/zz_generated.deepcopy.go

+7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bundle.Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/
77
LABEL operators.operatorframework.io.bundle.package.v1=ibm-common-service-operator
88
LABEL operators.operatorframework.io.bundle.channels.v1=v4.3
99
LABEL operators.operatorframework.io.bundle.channel.default.v1=v4.3
10-
LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.28.0+git
10+
LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.31.0
1111
LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1
1212
LABEL operators.operatorframework.io.metrics.project_layout=go.kubebuilder.io/v3
1313

bundle/manifests/ibm-common-service-operator.clusterserviceversion.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ metadata:
2222
]
2323
capabilities: Seamless Upgrades
2424
containerImage: icr.io/cpopen/common-service-operator:latest
25-
createdAt: "2023-09-20T20:40:14Z"
25+
createdAt: "2023-11-06T04:32:47Z"
2626
description: The IBM Common Service Operator is used to deploy IBM Common Services
2727
nss.operator.ibm.com/managed-operators: ibm-common-service-operator
2828
nss.operator.ibm.com/managed-webhooks: ""
@@ -249,8 +249,8 @@ spec:
249249
app.kubernetes.io/instance: ibm-common-service-operator
250250
app.kubernetes.io/managed-by: ibm-common-service-operator
251251
app.kubernetes.io/name: ibm-common-service-operator
252-
productName: IBM_Cloud_Platform_Common_Services
253252
name: ibm-common-service-operator
253+
productName: IBM_Cloud_Platform_Common_Services
254254
spec:
255255
affinity:
256256
nodeAffinity:

bundle/manifests/operator.ibm.com_commonservices.yaml

+6-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1
22
kind: CustomResourceDefinition
33
metadata:
44
annotations:
5-
controller-gen.kubebuilder.io/version: v0.5.0
5+
controller-gen.kubebuilder.io/version: v0.6.1
66
creationTimestamp: null
77
labels:
88
app.kubernetes.io/instance: ibm-common-service-operator
@@ -133,14 +133,18 @@ spec:
133133
type: string
134134
name:
135135
type: string
136+
resources:
137+
items:
138+
type: object
139+
x-kubernetes-preserve-unknown-fields: true
140+
type: array
136141
spec:
137142
additionalProperties:
138143
type: object
139144
x-kubernetes-preserve-unknown-fields: true
140145
type: object
141146
required:
142147
- name
143-
- spec
144148
type: object
145149
type: array
146150
servicesNamespace:

bundle/metadata/annotations.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ annotations:
66
operators.operatorframework.io.bundle.package.v1: ibm-common-service-operator
77
operators.operatorframework.io.bundle.channels.v1: v4.3
88
operators.operatorframework.io.bundle.channel.default.v1: v4.3
9-
operators.operatorframework.io.metrics.builder: operator-sdk-v1.28.0+git
9+
operators.operatorframework.io.metrics.builder: operator-sdk-v1.31.0
1010
operators.operatorframework.io.metrics.mediatype.v1: metrics+v1
1111
operators.operatorframework.io.metrics.project_layout: go.kubebuilder.io/v3
1212

config/crd/bases/operator.ibm.com_commonservices.yaml

+7-3
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,9 @@ spec:
8686
labels:
8787
additionalProperties:
8888
type: string
89-
description: Labels describes foundational services will use this labels to labels their corresponding resources
89+
description: Labels describes foundational services will use this
90+
labels to labels their corresponding resources
9091
type: object
91-
type: array
9292
license:
9393
description: LicenseList defines the license specification in CSV
9494
properties:
@@ -131,14 +131,18 @@ spec:
131131
type: string
132132
name:
133133
type: string
134+
resources:
135+
items:
136+
type: object
137+
x-kubernetes-preserve-unknown-fields: true
138+
type: array
134139
spec:
135140
additionalProperties:
136141
type: object
137142
x-kubernetes-preserve-unknown-fields: true
138143
type: object
139144
required:
140145
- name
141-
- spec
142146
type: object
143147
type: array
144148
servicesNamespace:

config/manager/manager.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ metadata:
77
app.kubernetes.io/instance: "ibm-common-service-operator"
88
app.kubernetes.io/managed-by: "ibm-common-service-operator"
99
app.kubernetes.io/name: "ibm-common-service-operator"
10+
productName: IBM_Cloud_Platform_Common_Services
1011
spec:
1112
strategy:
1213
type: Recreate
@@ -21,6 +22,7 @@ spec:
2122
app.kubernetes.io/instance: ibm-common-service-operator
2223
app.kubernetes.io/managed-by: "ibm-common-service-operator"
2324
app.kubernetes.io/name: "ibm-common-service-operator"
25+
productName: IBM_Cloud_Platform_Common_Services
2426
annotations:
2527
productName: "IBM Cloud Platform Common Services"
2628
productID: "068a62892a1e4db39641342e592daa25"

controllers/bootstrap/init.go

+22-101
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,7 @@ import (
5555
)
5656

5757
var (
58-
placeholder = "placeholder"
59-
OdlmNamespacedSubResource = "odlmNamespacedSubscription"
60-
OdlmClusterSubResource = "odlmClusterSubscription"
61-
RegistryCrResources = "csV3OperandRegistry"
62-
RegistrySaasCrResources = "csV3SaasOperandRegistry"
63-
ConfigCrResources = "csV3OperandConfig"
64-
ConfigSaasCrResources = "csV3SaasOperandConfig"
65-
CSOperatorVersions = map[string]string{
66-
"operand-deployment-lifecycle-manager-app": "1.5.0",
67-
"ibm-cert-manager-operator": "3.9.0",
68-
}
58+
placeholder = "placeholder"
6959
)
7060

7161
var ctx = context.Background()
@@ -636,129 +626,60 @@ func (b *Bootstrap) InstallOrUpdateOpreg(forceUpdateODLMCRs bool, installPlanApp
636626
}
637627
}
638628

639-
var err error
640-
constant.CSV3OperandRegistry, err = constant.ConcatenateRegistries(constant.CSV2OpReg, constant.CSV3OpReg, b.CSData)
641-
if err != nil {
642-
klog.Errorf("failed to concatenate registries CSV3OperandRegistry: %v", err)
643-
}
644-
// Append CP3 Operators into CP3 OperandRegistry
629+
var baseReg string
645630
registries := []string{
631+
constant.CSV3OpReg,
646632
constant.MongoDBOpReg,
647633
constant.IMOpReg,
648634
constant.IdpConfigUIOpReg,
649635
constant.PlatformUIOpReg,
650636
constant.KeyCloakOpReg,
651637
}
652-
653-
for _, reg := range registries {
654-
constant.CSV3OperandRegistry, err = constant.ConcatenateRegistries(constant.CSV3OperandRegistry, reg, b.CSData)
655-
if err != nil {
656-
klog.Errorf("failed to append CP3 operators into OperandRegistry: %v", err)
657-
}
658-
}
659-
660-
constant.CSV3SaasOperandRegistry, err = constant.ConcatenateRegistries(constant.CSV2SaasOpReg, constant.CSV3SaasOpReg, b.CSData)
661-
if err != nil {
662-
klog.Errorf("failed to concatenate registries CSV3SaasOperandRegistry: %v", err)
663-
}
664-
665-
// Append CP3 operators into CP3 SaaS OperandRegistry
666-
Saasregistries := []string{
667-
constant.MongoDBOpReg,
668-
constant.IMOpReg,
669-
constant.PlatformUIOpReg,
670-
constant.KeyCloakOpReg,
671-
}
672-
673-
for _, reg := range Saasregistries {
674-
constant.CSV3SaasOperandRegistry, err = constant.ConcatenateRegistries(constant.CSV3SaasOperandRegistry, reg, b.CSData)
675-
if err != nil {
676-
klog.Errorf("failed to append CP3 operators into SaaS OperandRegistry: %v", err)
677-
}
678-
}
679-
680-
var obj []*unstructured.Unstructured
681638
if b.SaasEnable {
682-
// OperandRegistry for SaaS deployment
683-
obj, err = b.GetObjs(constant.CSV3SaasOperandRegistry, b.CSData)
639+
baseReg = constant.CSV2SaasOpReg
684640
} else {
685-
// OperandRegistry for on-prem deployment
686-
obj, err = b.GetObjs(constant.CSV3OperandRegistry, b.CSData)
641+
baseReg = constant.CSV2OpReg
687642
}
643+
644+
concatenatedReg, err := constant.ConcatenateRegistries(baseReg, registries, b.CSData)
688645
if err != nil {
689-
klog.Error(err)
646+
klog.Errorf("failed to concatenate OperandRegistry: %v", err)
690647
return err
691648
}
692649

693-
objInCluster, err := b.GetObject(obj[0])
694-
if errors.IsNotFound(err) {
695-
klog.Infof("Creating resource with name: %s, namespace: %s, kind: %s, apiversion: %s\n", obj[0].GetName(), obj[0].GetNamespace(), obj[0].GetKind(), obj[0].GetAPIVersion())
696-
if err := b.CreateObject(obj[0]); err != nil {
697-
klog.Error(err)
698-
return err
699-
}
700-
} else if err != nil {
701-
klog.Error(err)
650+
if err := b.renderTemplate(concatenatedReg, b.CSData, forceUpdateODLMCRs); err != nil {
702651
return err
703-
} else {
704-
klog.Infof("Updating resource with name: %s, namespace: %s, kind: %s, apiversion: %s\n", obj[0].GetName(), obj[0].GetNamespace(), obj[0].GetKind(), obj[0].GetAPIVersion())
705-
resourceVersion := objInCluster.GetResourceVersion()
706-
obj[0].SetResourceVersion(resourceVersion)
707-
v1IsLarger, convertErr := util.CompareVersion(obj[0].GetAnnotations()["version"], objInCluster.GetAnnotations()["version"])
708-
if convertErr != nil {
709-
return convertErr
710-
}
711-
if v1IsLarger || forceUpdateODLMCRs {
712-
if err := b.UpdateObject(obj[0]); err != nil {
713-
klog.Error(err)
714-
return err
715-
}
716-
}
717652
}
718-
719653
return nil
720654
}
721655

722656
// InstallOrUpdateOpcon will install or update OperandConfig when Opcon CRD is existent
723657
func (b *Bootstrap) InstallOrUpdateOpcon(forceUpdateODLMCRs bool) error {
724-
var err error
725658

726-
// Append CP3 Services with suffix into CP3 and SaaS OperandConfig
727-
Configs := []string{
659+
var baseCon string
660+
configs := []string{
728661
constant.MongoDBOpCon,
729662
constant.IMOpCon,
730663
constant.IdpConfigUIOpCon,
731664
constant.PlatformUIOpCon,
732665
constant.KeyCloakOpCon,
733666
}
734667

735-
constant.CSV3OperandConfig = constant.CSV3OpCon
736-
constant.CSV3SaasOperandConfig = constant.CSV3SaasOpCon
737-
for _, con := range Configs {
738-
constant.CSV3OperandConfig, err = constant.ConcatenateConfigs(constant.CSV3OperandConfig, con, b.CSData)
739-
if err != nil {
740-
klog.Errorf("failed to append CP3 services into OperandConfig: %v", err)
741-
return err
742-
}
743-
constant.CSV3SaasOperandConfig, err = constant.ConcatenateConfigs(constant.CSV3SaasOperandConfig, con, b.CSData)
744-
if err != nil {
745-
klog.Errorf("failed to append CP3 services into SaaS OperandConfig: %v", err)
746-
return err
747-
}
748-
}
749-
750668
if b.SaasEnable {
751-
// OperandConfig for SaaS deployment
752-
if err := b.renderTemplate(constant.CSV3SaasOperandConfig, b.CSData, forceUpdateODLMCRs); err != nil {
753-
return err
754-
}
669+
baseCon = constant.CSV3SaasOpCon
755670
} else {
756-
// OperandConfig for on-prem deployment
757-
if err := b.renderTemplate(constant.CSV3OperandConfig, b.CSData, forceUpdateODLMCRs); err != nil {
758-
return err
759-
}
671+
baseCon = constant.CSV3OpCon
760672
}
761673

674+
concatenatedCon, err := constant.ConcatenateConfigs(baseCon, configs, b.CSData)
675+
if err != nil {
676+
klog.Errorf("failed to concatenate OperandConfig: %v", err)
677+
return err
678+
}
679+
680+
if err := b.renderTemplate(concatenatedCon, b.CSData, forceUpdateODLMCRs); err != nil {
681+
return err
682+
}
762683
return nil
763684
}
764685

controllers/commonservice_controller.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ func (r *CommonServiceReconciler) ReconcileMasterCR(ctx context.Context, instanc
218218
klog.Errorf("Fail to reconcile %s/%s: %v", instance.Namespace, instance.Name, err)
219219
return ctrl.Result{}, err
220220
}
221-
newConfigs, serviceControllerMapping, err := r.getNewConfigs(cs, true)
221+
newConfigs, serviceControllerMapping, err := r.getNewConfigs(cs)
222222
if err != nil {
223223
if err := r.updatePhase(ctx, instance, CRFailed); err != nil {
224224
klog.Error(err)
@@ -306,7 +306,7 @@ func (r *CommonServiceReconciler) ReconcileGeneralCR(ctx context.Context, instan
306306
return ctrl.Result{}, err
307307
}
308308

309-
newConfigs, serviceControllerMapping, err := r.getNewConfigs(cs, true)
309+
newConfigs, serviceControllerMapping, err := r.getNewConfigs(cs)
310310
if err != nil {
311311
if err := r.updatePhase(ctx, instance, CRFailed); err != nil {
312312
klog.Error(err)

0 commit comments

Comments
 (0)