/
mongo_factory.go
64 lines (54 loc) · 2.1 KB
/
mongo_factory.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
Copyright 2021 IBM.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package mongo
import (
fivegv1alpha1 "github.com/5GZORRO/issm-mec-cnmp-5g-operator/api/v1alpha1"
common "github.com/5GZORRO/issm-mec-cnmp-5g-operator/pkg/common"
mongov13 "github.com/5GZORRO/issm-mec-cnmp-5g-operator/pkg/reconcilers/mongo/v13"
corev1 "k8s.io/api/core/v1"
"sigs.k8s.io/controller-runtime/pkg/client"
)
// MongoReconcilerFactory factory class to get MongoReconciler for required installation version
type MongoReconcilerFactory struct {
K8sUtils *common.K8sUtils
Client client.Client
}
// Reconciler get a FiveGReconciler to reconcile the required version of Mongo
func (f MongoReconcilerFactory) Reconciler() common.FiveGReconciler {
// use cr.Spec.version to determine which version to install
// use cr.Status.versions.reconciled to determine which version is currently installed
mongo := NewMongo(f.K8sUtils, f.K8sUtils, f.Client)
reconcileBuilder := f.version13ReconcileBuilder()
return common.FiveGReconcilerFacade{
ReconcileFunc: reconcileBuilder.Reconcile,
UpdateStatusFunc: mongo.UpdateStatus,
FinalizeFunc: mongo.Finalize,
}
}
func (f MongoReconcilerFactory) version13ReconcileBuilder() common.FiveGReconcileFuncBuilder {
return common.FiveGReconcileFuncBuilder{
K8sUtils: f.K8sUtils,
PodFuncs: []common.ReconcilePod{
func(instance interface{}) *corev1.Pod {
cr := instance.(*fivegv1alpha1.Mongo)
return mongov13.MongoPod(cr)
},
},
ServiceFuncs: []common.ReconcileService{
func(instance interface{}) *corev1.Service {
cr := instance.(*fivegv1alpha1.Mongo)
return mongov13.MongoService(cr)
},
},
}
}