Skip to content

Commit d610822

Browse files
committed
Convert Patterns Operator config functions to PatternReconciler methods
1 parent 09af5a0 commit d610822

3 files changed

Lines changed: 41 additions & 70 deletions

File tree

cmd/main.go

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,10 @@ import (
2929
// to ensure that exec-entrypoint and run can make use of them.
3030
_ "k8s.io/client-go/plugin/pkg/client/auth"
3131

32-
"k8s.io/apimachinery/pkg/api/errors"
3332
k8sruntime "k8s.io/apimachinery/pkg/runtime"
3433
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
3534
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
3635
ctrl "sigs.k8s.io/controller-runtime"
37-
crclient "sigs.k8s.io/controller-runtime/pkg/client"
3836
"sigs.k8s.io/controller-runtime/pkg/healthz"
3937
"sigs.k8s.io/controller-runtime/pkg/log/zap"
4038
"sigs.k8s.io/controller-runtime/pkg/manager"
@@ -46,9 +44,6 @@ import (
4644
"github.com/hybrid-cloud-patterns/patterns-operator/version"
4745
consolev1 "github.com/openshift/api/console/v1"
4846
operatorv1 "github.com/openshift/api/operator/v1"
49-
corev1 "k8s.io/api/core/v1"
50-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
51-
"k8s.io/client-go/kubernetes"
5247
//+kubebuilder:scaffold:imports
5348
)
5449

@@ -85,12 +80,6 @@ func main() {
8580

8681
setupLog.Info("detected operator namespace", "namespace", controllers.DetectOperatorNamespace())
8782

88-
// Create initial config map for gitops
89-
err := createPatternsOperatorConfigMap()
90-
if err != nil {
91-
setupLog.Error(err, "unable to create config map")
92-
}
93-
9483
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
9584
Scheme: scheme,
9685
HealthProbeBindAddress: probeAddr,
@@ -162,44 +151,6 @@ func printVersion() {
162151
setupLog.Info(fmt.Sprintf("Build Date: %s", version.BuildDate))
163152
}
164153

165-
// Creates the patterns operator configmap
166-
// This will include configuration parameters that
167-
// will allow operator configuration
168-
func createPatternsOperatorConfigMap() error {
169-
config, err := ctrl.GetConfig()
170-
if err != nil {
171-
return fmt.Errorf("failed to get config: %s", err)
172-
}
173-
clientset, err := kubernetes.NewForConfig(config)
174-
if err != nil {
175-
return fmt.Errorf("failed to call NewForConfig: %s", err)
176-
}
177-
178-
configMap := corev1.ConfigMap{
179-
TypeMeta: metav1.TypeMeta{
180-
Kind: "ConfigMap",
181-
APIVersion: "v1",
182-
},
183-
ObjectMeta: metav1.ObjectMeta{
184-
Name: controllers.OperatorConfigMap,
185-
Namespace: controllers.DetectOperatorNamespace(),
186-
},
187-
}
188-
189-
_, err = clientset.CoreV1().ConfigMaps(controllers.DetectOperatorNamespace()).Get(context.Background(), controllers.OperatorConfigMap, metav1.GetOptions{})
190-
if err != nil && errors.IsNotFound(err) {
191-
// if the configmap does not exist we create an empty one
192-
_, err = clientset.CoreV1().ConfigMaps(controllers.DetectOperatorNamespace()).Create(context.Background(), &configMap, metav1.CreateOptions{})
193-
if err != nil {
194-
return err
195-
}
196-
} else {
197-
// if we had an error that is not IsNotFound we need to return it
198-
return err
199-
}
200-
return nil
201-
}
202-
203154
func registerComponentOrExit(mgr manager.Manager, f func(*k8sruntime.Scheme) error) {
204155
// Setup Scheme for all resources
205156
if err := f(mgr.GetScheme()); err != nil {

internal/controller/pattern_controller.go

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import (
3434
"github.com/go-logr/logr"
3535
"github.com/hybrid-cloud-patterns/patterns-operator/internal/controller/console"
3636

37+
corev1 "k8s.io/api/core/v1"
3738
kerrors "k8s.io/apimachinery/pkg/api/errors"
3839
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3940
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -149,14 +150,19 @@ func (r *PatternReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ct
149150
return reconcile.Result{}, err
150151
}
151152

153+
// Set Patterns Operator config to defaults
152154
patternsOperatorConfig := DefaultPatternsOperatorConfig
153155

154-
configCM, err := GetPatternsOperatorConfigMap()
155-
// If we hit an error that is not related to the configmap not existing bubble it up
156-
if err != nil && !kerrors.IsNotFound(err) {
156+
// We try to get the configuration ConfigMap. The method getPatternsOperatorConfigMap returns nil, nil if the ConfigMap doesn't exist
157+
configCM, err := r.getPatternsOperatorConfigMap()
158+
if err != nil {
157159
return r.actionPerformed(instance, "failed to get the configuration ConfigMap", err)
158160
}
159-
if configCM != nil {
161+
if configCM == nil { // If the ConfigMap doesn't exist, we create it
162+
if err = r.createPatternsOperatorConfigMap(instance); err != nil {
163+
return r.actionPerformed(instance, "failed to create the configuration ConfigMap", err)
164+
}
165+
} else { // If the ConfigMap exists, we get the configuration from Data
160166
patternsOperatorConfig = configCM.Data
161167
}
162168

@@ -398,8 +404,8 @@ func (r *PatternReconciler) reconcileGitOpsSubscription(qualifiedInstance *api.P
398404
if err := controllerutil.RemoveOwnerReference(qualifiedInstance, currentSub, r.Scheme); err == nil {
399405
changed = true
400406
}
401-
operatorConfigMap, cmErr := GetPatternsOperatorConfigMap()
402-
if cmErr == nil {
407+
operatorConfigMap, cmErr := r.getPatternsOperatorConfigMap()
408+
if cmErr == nil && operatorConfigMap != nil {
403409
if err := controllerutil.RemoveOwnerReference(operatorConfigMap, currentSub, r.Scheme); err == nil {
404410
changed = true
405411
}
@@ -1325,6 +1331,35 @@ func (r *PatternReconciler) getLocalGit(p *api.Pattern) (string, error) {
13251331
return "", nil
13261332
}
13271333

1334+
func (r *PatternReconciler) createPatternsOperatorConfigMap(p *api.Pattern) error {
1335+
configMap := corev1.ConfigMap{
1336+
TypeMeta: metav1.TypeMeta{
1337+
Kind: "ConfigMap",
1338+
APIVersion: "v1",
1339+
},
1340+
ObjectMeta: metav1.ObjectMeta{
1341+
Name: OperatorConfigMap,
1342+
Namespace: DetectOperatorNamespace(),
1343+
},
1344+
}
1345+
if _, err := r.fullClient.CoreV1().ConfigMaps(DetectOperatorNamespace()).Create(context.Background(), &configMap, metav1.CreateOptions{}); err != nil {
1346+
return err
1347+
}
1348+
return nil
1349+
}
1350+
1351+
func (r *PatternReconciler) getPatternsOperatorConfigMap() (*corev1.ConfigMap, error) {
1352+
cm, err := r.fullClient.CoreV1().ConfigMaps(DetectOperatorNamespace()).Get(context.Background(), OperatorConfigMap, metav1.GetOptions{})
1353+
if err != nil {
1354+
if kerrors.IsNotFound(err) {
1355+
return nil, nil
1356+
} else {
1357+
return nil, err
1358+
}
1359+
}
1360+
return cm, nil
1361+
}
1362+
13281363
func DropLocalGitPaths() error {
13291364
// If there is a completely new local folder, let's remove the old one
13301365
// User changed the target repo

internal/controller/utils.go

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ import (
4141
kerrors "k8s.io/apimachinery/pkg/api/errors"
4242
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4343
"k8s.io/client-go/kubernetes"
44-
ctrl "sigs.k8s.io/controller-runtime"
4544

4645
configv1 "github.com/openshift/api/config/v1"
4746
)
@@ -449,17 +448,3 @@ func IntOrZero(secret map[string][]byte, key string) (int64, error) {
449448

450449
return strconv.ParseInt(string(val), 10, 64)
451450
}
452-
453-
// Gets the configmap for the Patterns Operator. (Used as an owner reference for the operator itself.)
454-
func GetPatternsOperatorConfigMap() (*corev1.ConfigMap, error) {
455-
config, err := ctrl.GetConfig()
456-
if err != nil {
457-
return nil, fmt.Errorf("failed to get config: %s", err)
458-
}
459-
clientset, err := kubernetes.NewForConfig(config)
460-
if err != nil {
461-
return nil, fmt.Errorf("failed to call NewForConfig: %s", err)
462-
}
463-
464-
return clientset.CoreV1().ConfigMaps(DetectOperatorNamespace()).Get(context.Background(), OperatorConfigMap, metav1.GetOptions{})
465-
}

0 commit comments

Comments
 (0)