@@ -4,12 +4,16 @@ import (
44 "context"
55 "encoding/json"
66 "fmt"
7+ "os"
8+
79 mdbv1 "github.com/mongodb/mongodb-kubernetes-operator/pkg/apis/mongodb/v1"
810 "github.com/mongodb/mongodb-kubernetes-operator/pkg/automationconfig"
911 mdbClient "github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/client"
1012 "github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/configmap"
13+ "github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/resourcerequirements"
1114 "github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/statefulset"
1215 "go.uber.org/zap"
16+ appsv1 "k8s.io/api/apps/v1"
1317 corev1 "k8s.io/api/core/v1"
1418 "k8s.io/apimachinery/pkg/api/errors"
1519 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -22,7 +26,9 @@ import (
2226)
2327
2428const (
25- automationConfigKey = "automation-config"
29+ automationConfigKey = "automation-config"
30+ agentName = "mongodb-agent"
31+ agentImageEnvVariable = "AGENT_IMAGE"
2632)
2733
2834// Add creates a new MongoDB Controller and adds it to the Manager. The Manager will set fields on the Controller
@@ -92,32 +98,20 @@ func (r *ReplicaSetReconciler) Reconcile(request reconcile.Request) (reconcile.R
9298 // TODO: Read current automation config version from config map
9399
94100 if err := r .ensureAutomationConfig (mdb ); err != nil {
95- log .Errorf ("failed creating config map: %s" , err )
101+ log .Warnf ("failed creating config map: %s" , err )
96102 return reconcile.Result {}, err
97103 }
98104
99105 // TODO: Create the service for the MDB resource
100106
101- labels := map [string ]string {
102- "dummy" : "label" ,
107+ sts , err := buildStatefulSet (mdb )
108+ if err != nil {
109+ log .Warnf ("error building StatefulSet: %s" , err )
110+ return reconcile.Result {}, nil
103111 }
104112
105- sts , err := statefulset .NewBuilder ().
106- SetPodTemplateSpec (corev1.PodTemplateSpec {
107- ObjectMeta : metav1.ObjectMeta {
108- Labels : labels ,
109- },
110- Spec : corev1.PodSpec {},
111- }).
112- SetNamespace (request .NamespacedName .Namespace ).
113- SetName (request .NamespacedName .Name ).
114- SetReplicas (mdb .Spec .Members ).
115- SetLabels (labels ).
116- SetMatchLabels (labels ).
117- Build ()
118-
119113 if err = r .client .CreateOrUpdate (& sts ); err != nil {
120- log .Errorf ("error creating/updating StatefulSet: %s" , err )
114+ log .Warnf ("error creating/updating StatefulSet: %s" , err )
121115 return reconcile.Result {}, err
122116 }
123117
@@ -162,6 +156,40 @@ func buildAutomationConfigConfigMap(mdb mdbv1.MongoDB) (corev1.ConfigMap, error)
162156 Build (), nil
163157}
164158
159+ // buildStatefulSet takes a MongoDB resource and converts it into
160+ // the corresponding stateful set
161+ func buildStatefulSet (mdb mdbv1.MongoDB ) (appsv1.StatefulSet , error ) {
162+ labels := map [string ]string {
163+ "dummy" : "label" ,
164+ }
165+ agentContainer := corev1.Container {
166+ Name : agentName ,
167+ Image : os .Getenv (agentImageEnvVariable ),
168+ Resources : resourcerequirements .Defaults (),
169+ Command : []string {"agent/mongodb-agent" , "-cluster=/var/lib/automation/config/automation-config.json" },
170+ }
171+
172+ podSpecTemplate := corev1.PodTemplateSpec {
173+ ObjectMeta : metav1.ObjectMeta {
174+ Labels : labels ,
175+ },
176+ Spec : corev1.PodSpec {
177+ Containers : []corev1.Container {
178+ agentContainer ,
179+ },
180+ },
181+ }
182+
183+ return statefulset .NewBuilder ().
184+ SetPodTemplateSpec (podSpecTemplate ).
185+ SetNamespace (mdb .Namespace ).
186+ SetName (mdb .Name ).
187+ SetReplicas (mdb .Spec .Members ).
188+ SetLabels (labels ).
189+ SetMatchLabels (labels ).
190+ Build ()
191+ }
192+
165193func getDomain (service , namespace , clusterName string ) string {
166194 if clusterName == "" {
167195 clusterName = "cluster.local"
0 commit comments