Skip to content

Commit 6b76b5a

Browse files
authored
Removed dependency on version manifest (#335)
1 parent e7c6368 commit 6b76b5a

File tree

13 files changed

+112
-143
lines changed

13 files changed

+112
-143
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ BUNDLE_METADATA_OPTS ?= $(BUNDLE_CHANNELS) $(BUNDLE_DEFAULT_CHANNEL)
3131
BUNDLE_IMG ?= controller-bundle:$(VERSION)
3232

3333
# Image URL to use all building/pushing image targets
34-
IMG ?= quay.io/mongodb/mongodb-kubernetes-operator:0.5.0 # replace with localhost:5000/mongodb-kubernetes-operator locally
34+
IMG ?= <operator-registry>/mongodb-kubernetes-operator
3535
DOCKERFILE ?= operator
3636
# Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
3737
CRD_OPTIONS ?= "crd:trivialVersions=true,preserveUnknownFields=true,crdVersions=v1beta1"

agent/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ RUN apt-get -qq update \
1111
&& rm -rf /var/lib/apt/lists/*
1212

1313
RUN mkdir -p agent \
14-
&& curl --fail --retry 3 --silent https://s3.amazonaws.com/mciuploads/mms-automation/mongodb-mms-build-agent/builds/automation-agent/prod/mongodb-mms-automation-agent-${agent_version}.rhel7_x86_64.tar.gz -o agent/mongodb-agent.tar.gz \
14+
&& curl --fail --retry 3 --silent https://mciuploads.s3.amazonaws.com/mms-automation/mongodb-mms-build-agent/builds/automation-agent/prod/mongodb-mms-automation-agent-${agent_version}.rhel7_x86_64.tar.gz -o agent/mongodb-agent.tar.gz \
1515
&& tar xfz agent/mongodb-agent.tar.gz \
1616
&& mv mongodb-mms-automation-agent-*/mongodb-mms-automation-agent agent/mongodb-agent \
1717
&& chmod +x agent/mongodb-agent \

cmd/manager/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ func main() {
9696
}
9797

9898
// Setup Controller.
99-
if err = controllers.NewReconciler(mgr, nil).SetupWithManager(mgr); err != nil {
99+
if err = controllers.NewReconciler(mgr).SetupWithManager(mgr); err != nil {
100100
setupLog.Error(err, "Unable to create controller")
101101
os.Exit(1)
102102
}

config/manager/manager.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ spec:
3232
- name: OPERATOR_NAME
3333
value: "mongodb-kubernetes-operator"
3434
- name: AGENT_IMAGE # The MongoDB Agent the operator will deploy to manage MongoDB deployments
35-
value: quay.io/mongodb/mongodb-agent:10.19.0.6562-1
35+
value: quay.io/mongodb/mongodb-agent:10.27.0.6772-1
3636
- name: VERSION_UPGRADE_HOOK_IMAGE
3737
value: quay.io/mongodb/mongodb-kubernetes-operator-version-upgrade-post-start-hook:1.0.2
3838
- name: MONGODB_IMAGE

controllers/mongodb_tls_test.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ func TestStatefulSet_IsCorrectlyConfiguredWithTLS(t *testing.T) {
2626
err := createTLSSecretAndConfigMap(mgr.GetClient(), mdb)
2727
assert.NoError(t, err)
2828

29-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
29+
r := NewReconciler(mgr)
3030
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: mdb.Namespace, Name: mdb.Name}})
3131
assertReconciliationSuccessful(t, res, err)
3232

@@ -85,14 +85,10 @@ func TestAutomationConfig_IsCorrectlyConfiguredWithTLS(t *testing.T) {
8585
err := createTLSSecretAndConfigMap(client, mdb)
8686
assert.NoError(t, err)
8787

88-
manifest, err := mockManifestProvider(mdb.Spec.Version)()
89-
assert.NoError(t, err)
90-
versionConfig := manifest.BuildsForVersion(mdb.Spec.Version)
91-
9288
tlsModification, err := getTLSConfigModification(client, mdb)
9389
assert.NoError(t, err)
9490

95-
ac, err := buildAutomationConfig(mdb, versionConfig, automationconfig.AutomationConfig{}, tlsModification)
91+
ac, err := buildAutomationConfig(mdb, automationconfig.AutomationConfig{}, tlsModification)
9692
assert.NoError(t, err)
9793

9894
return ac

controllers/replica_set_controller.go

Lines changed: 10 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"context"
66
"encoding/json"
77
"fmt"
8-
"io/ioutil"
98
"os"
109
"strings"
1110

@@ -69,7 +68,6 @@ const (
6968
mongodbName = "mongod"
7069
versionUpgradeHookName = "mongod-posthook"
7170
dataVolumeName = "data-volume"
72-
versionManifestFilePath = "/usr/local/version_manifest.json"
7371
readinessProbePath = "/var/lib/mongodb-mms-automation/probes/readinessprobe"
7472
clusterFilePath = "/var/lib/automation/config/cluster-config.json"
7573
operatorServiceAccountName = "mongodb-kubernetes-operator"
@@ -94,25 +92,15 @@ func init() {
9492
zap.ReplaceGlobals(logger)
9593
}
9694

97-
// ManifestProvider is a function which returns the VersionManifest which
98-
// contains the list of all available MongoDB versions
99-
type ManifestProvider func() (automationconfig.VersionManifest, error)
100-
101-
func NewReconciler(mgr manager.Manager, manifestProvider ManifestProvider) *ReplicaSetReconciler {
95+
func NewReconciler(mgr manager.Manager) *ReplicaSetReconciler {
10296
mgrClient := mgr.GetClient()
10397
secretWatcher := watch.New()
10498

105-
mp := manifestProvider
106-
if mp == nil {
107-
mp = readVersionManifestFromDisk
108-
}
109-
11099
return &ReplicaSetReconciler{
111-
client: kubernetesClient.NewClient(mgrClient),
112-
scheme: mgr.GetScheme(),
113-
manifestProvider: mp,
114-
log: zap.S(),
115-
secretWatcher: &secretWatcher,
100+
client: kubernetesClient.NewClient(mgrClient),
101+
scheme: mgr.GetScheme(),
102+
log: zap.S(),
103+
secretWatcher: &secretWatcher,
116104
}
117105
}
118106

@@ -129,11 +117,10 @@ func (r *ReplicaSetReconciler) SetupWithManager(mgr ctrl.Manager) error {
129117
type ReplicaSetReconciler struct {
130118
// This client, initialized using mgr.Client() above, is a split client
131119
// that reads objects from the cache and writes to the apiserver
132-
client kubernetesClient.Client
133-
scheme *runtime.Scheme
134-
manifestProvider func() (automationconfig.VersionManifest, error)
135-
log *zap.SugaredLogger
136-
secretWatcher *watch.ResourceWatcher
120+
client kubernetesClient.Client
121+
scheme *runtime.Scheme
122+
log *zap.SugaredLogger
123+
secretWatcher *watch.ResourceWatcher
137124
}
138125

139126
// +kubebuilder:rbac:groups=mongodbcommunity.mongodb.com,resources=mongodbcommunity,verbs=get;list;watch;create;update;patch;delete
@@ -446,7 +433,7 @@ func (r ReplicaSetReconciler) ensureAutomationConfig(mdb mdbv1.MongoDBCommunity)
446433
return secret.CreateOrUpdate(r.client, s)
447434
}
448435

449-
func buildAutomationConfig(mdb mdbv1.MongoDBCommunity, mdbVersionConfig automationconfig.MongoDbVersionConfig, currentAc automationconfig.AutomationConfig, modifications ...automationconfig.Modification) (automationconfig.AutomationConfig, error) {
436+
func buildAutomationConfig(mdb mdbv1.MongoDBCommunity, currentAc automationconfig.AutomationConfig, modifications ...automationconfig.Modification) (automationconfig.AutomationConfig, error) {
450437
domain := getDomain(mdb.ServiceName(), mdb.Namespace, os.Getenv(clusterDNSName))
451438
zap.S().Debugw("AutomationConfigMembersThisReconciliation", "mdb.AutomationConfigMembersThisReconciliation()", mdb.AutomationConfigMembersThisReconciliation())
452439

@@ -459,7 +446,6 @@ func buildAutomationConfig(mdb mdbv1.MongoDBCommunity, mdbVersionConfig automati
459446
SetPreviousAutomationConfig(currentAc).
460447
SetMongoDBVersion(mdb.Spec.Version).
461448
SetFCV(mdb.GetFCV()).
462-
AddVersion(mdbVersionConfig).
463449
AddModifications(getMongodConfigModification(mdb)).
464450
AddModifications(modifications...)
465451
newAc, err := builder.Build()
@@ -470,22 +456,6 @@ func buildAutomationConfig(mdb mdbv1.MongoDBCommunity, mdbVersionConfig automati
470456
return newAc, nil
471457
}
472458

473-
func readVersionManifestFromDisk() (automationconfig.VersionManifest, error) {
474-
versionManifestBytes, err := ioutil.ReadFile(versionManifestFilePath)
475-
if err != nil {
476-
return automationconfig.VersionManifest{}, err
477-
}
478-
return versionManifestFromBytes(versionManifestBytes)
479-
}
480-
481-
func versionManifestFromBytes(bytes []byte) (automationconfig.VersionManifest, error) {
482-
versionManifest := automationconfig.VersionManifest{}
483-
if err := json.Unmarshal(bytes, &versionManifest); err != nil {
484-
return automationconfig.VersionManifest{}, err
485-
}
486-
return versionManifest, nil
487-
}
488-
489459
// buildService creates a Service that will be used for the Replica Set StatefulSet
490460
// that allows all the members of the STS to see each other.
491461
// TODO: Make sure this Service is as minimal as possible, to not interfere with
@@ -550,12 +520,6 @@ func getCustomRolesModification(mdb mdbv1.MongoDBCommunity) (automationconfig.Mo
550520
}
551521

552522
func (r ReplicaSetReconciler) buildAutomationConfigSecret(mdb mdbv1.MongoDBCommunity) (corev1.Secret, error) {
553-
554-
manifest, err := r.manifestProvider()
555-
if err != nil {
556-
return corev1.Secret{}, errors.Errorf("could not read version manifest from disk: %s", err)
557-
}
558-
559523
authModification, err := scram.EnsureScram(r.client, mdb.ScramCredentialsNamespacedName(), mdb)
560524
if err != nil {
561525
return corev1.Secret{}, errors.Errorf("could not ensure scram credentials: %s", err)
@@ -578,7 +542,6 @@ func (r ReplicaSetReconciler) buildAutomationConfigSecret(mdb mdbv1.MongoDBCommu
578542

579543
ac, err := buildAutomationConfig(
580544
mdb,
581-
manifest.BuildsForVersion(mdb.Spec.Version),
582545
currentAC,
583546
authModification,
584547
tlsModification,

controllers/replicaset_controller_test.go

Lines changed: 13 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -100,34 +100,12 @@ func newTestReplicaSetWithTLS() mdbv1.MongoDBCommunity {
100100
}
101101
}
102102

103-
func mockManifestProvider(version string) func() (automationconfig.VersionManifest, error) {
104-
return func() (automationconfig.VersionManifest, error) {
105-
return automationconfig.VersionManifest{
106-
Updated: 0,
107-
Versions: []automationconfig.MongoDbVersionConfig{
108-
{
109-
Name: version,
110-
Builds: []automationconfig.BuildConfig{{
111-
Platform: "platform",
112-
Url: "url",
113-
GitVersion: "gitVersion",
114-
Architecture: "arch",
115-
Flavor: "flavor",
116-
MinOsVersion: "0",
117-
MaxOsVersion: "10",
118-
Modules: []string{},
119-
}},
120-
}},
121-
}, nil
122-
}
123-
}
124-
125103
func TestKubernetesResources_AreCreated(t *testing.T) {
126104
// TODO: Create builder/yaml fixture of some type to construct MDB objects for unit tests
127105
mdb := newTestReplicaSet()
128106

129107
mgr := client.NewManager(&mdb)
130-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
108+
r := NewReconciler(mgr)
131109

132110
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: mdb.Namespace, Name: mdb.Name}})
133111
assertReconciliationSuccessful(t, res, err)
@@ -147,7 +125,7 @@ func TestStatefulSet_IsCorrectlyConfigured(t *testing.T) {
147125

148126
mdb := newTestReplicaSet()
149127
mgr := client.NewManager(&mdb)
150-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
128+
r := NewReconciler(mgr)
151129
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: mdb.Namespace, Name: mdb.Name}})
152130
assertReconciliationSuccessful(t, res, err)
153131

@@ -189,7 +167,7 @@ func TestChangingVersion_ResultsInRollingUpdateStrategyType(t *testing.T) {
189167
mdb := newTestReplicaSet()
190168
mgr := client.NewManager(&mdb)
191169
mgrClient := mgr.GetClient()
192-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
170+
r := NewReconciler(mgr)
193171
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: mdb.NamespacedName()})
194172
assertReconciliationSuccessful(t, res, err)
195173

@@ -269,7 +247,7 @@ func TestService_isCorrectlyCreatedAndUpdated(t *testing.T) {
269247
mdb := newTestReplicaSet()
270248

271249
mgr := client.NewManager(&mdb)
272-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
250+
r := NewReconciler(mgr)
273251
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: mdb.Namespace, Name: mdb.Name}})
274252
assertReconciliationSuccessful(t, res, err)
275253

@@ -289,7 +267,7 @@ func TestAutomationConfig_versionIsBumpedOnChange(t *testing.T) {
289267
mdb := newTestReplicaSet()
290268

291269
mgr := client.NewManager(&mdb)
292-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
270+
r := NewReconciler(mgr)
293271
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: mdb.Namespace, Name: mdb.Name}})
294272
assertReconciliationSuccessful(t, res, err)
295273

@@ -313,7 +291,7 @@ func TestAutomationConfig_versionIsNotBumpedWithNoChanges(t *testing.T) {
313291
mdb := newTestReplicaSet()
314292

315293
mgr := client.NewManager(&mdb)
316-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
294+
r := NewReconciler(mgr)
317295
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: mdb.Namespace, Name: mdb.Name}})
318296
assertReconciliationSuccessful(t, res, err)
319297

@@ -339,7 +317,7 @@ func TestAutomationConfig_CustomMongodConfig(t *testing.T) {
339317
mdb.Spec.AdditionalMongodConfig.Object = mongodConfig
340318

341319
mgr := client.NewManager(&mdb)
342-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
320+
r := NewReconciler(mgr)
343321
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: mdb.Namespace, Name: mdb.Name}})
344322
assertReconciliationSuccessful(t, res, err)
345323

@@ -377,7 +355,7 @@ func TestExistingPasswordAndKeyfile_AreUsedWhenTheSecretExists(t *testing.T) {
377355
)
378356
assert.NoError(t, err)
379357

380-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
358+
r := NewReconciler(mgr)
381359
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: mdb.Namespace, Name: mdb.Name}})
382360
assertReconciliationSuccessful(t, res, err)
383361

@@ -405,7 +383,7 @@ func TestReplicaSet_IsScaledDown_OneMember_AtATime_WhenItAlreadyExists(t *testin
405383
mdb.Spec.Members = 5
406384

407385
mgr := client.NewManager(&mdb)
408-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
386+
r := NewReconciler(mgr)
409387
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: mdb.Namespace, Name: mdb.Name}})
410388
assertReconciliationSuccessful(t, res, err)
411389

@@ -449,7 +427,7 @@ func TestReplicaSet_IsScaledUp_OneMember_AtATime_WhenItAlreadyExists(t *testing.
449427
mdb := newTestReplicaSet()
450428

451429
mgr := client.NewManager(&mdb)
452-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
430+
r := NewReconciler(mgr)
453431
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: mdb.Namespace, Name: mdb.Name}})
454432
assertReconciliationSuccessful(t, res, err)
455433

@@ -492,7 +470,7 @@ func TestReplicaSet_IsScaledUp_OneMember_AtATime_WhenItAlreadyExists(t *testing.
492470

493471
func assertReplicaSetIsConfiguredWithScram(t *testing.T, mdb mdbv1.MongoDBCommunity) {
494472
mgr := client.NewManager(&mdb)
495-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
473+
r := NewReconciler(mgr)
496474
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: mdb.Namespace, Name: mdb.Name}})
497475
assertReconciliationSuccessful(t, res, err)
498476

@@ -517,7 +495,7 @@ func TestReplicaSet_IsScaledUpToDesiredMembers_WhenFirstCreated(t *testing.T) {
517495
mdb := newTestReplicaSet()
518496

519497
mgr := client.NewManager(&mdb)
520-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
498+
r := NewReconciler(mgr)
521499
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: types.NamespacedName{Namespace: mdb.Namespace, Name: mdb.Name}})
522500
assertReconciliationSuccessful(t, res, err)
523501

@@ -595,7 +573,7 @@ func performReconciliationAndGetStatefulSet(t *testing.T, filePath string) appsv
595573
assert.NoError(t, err)
596574
mgr := client.NewManager(&mdb)
597575
assert.NoError(t, generatePasswordsForAllUsers(mdb, mgr.Client))
598-
r := NewReconciler(mgr, mockManifestProvider(mdb.Spec.Version))
576+
r := NewReconciler(mgr)
599577
res, err := r.Reconcile(context.TODO(), reconcile.Request{NamespacedName: mdb.NamespacedName()})
600578
assertReconciliationSuccessful(t, res, err)
601579

deploy/openshift/operator_openshift.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,6 @@ spec:
3333
- name: OPERATOR_NAME
3434
value: "mongodb-kubernetes-operator"
3535
- name: AGENT_IMAGE # The MongoDB Agent the operator will deploy to manage MongoDB deployments
36-
value: quay.io/mongodb/mongodb-agent:10.19.0.6562-1
36+
value: quay.io/mongodb/mongodb-agent:10.27.0.6772-1
3737
- name: VERSION_UPGRADE_HOOK_IMAGE
3838
value: quay.io/mongodb/mongodb-kubernetes-operator-version-upgrade-post-start-hook:1.0.2

pkg/automationconfig/automation_config.go

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -224,23 +224,6 @@ type VersionManifest struct {
224224
Versions []MongoDbVersionConfig `json:"versions"`
225225
}
226226

227-
// BuildsForVersion returns the MongoDbVersionConfig containing all of the version informatioon
228-
// for the given mongodb version provided
229-
func (v VersionManifest) BuildsForVersion(version string) MongoDbVersionConfig {
230-
var builds []BuildConfig
231-
for _, versionConfig := range v.Versions {
232-
if versionConfig.Name != version {
233-
continue
234-
}
235-
builds = versionConfig.Builds
236-
break
237-
}
238-
return MongoDbVersionConfig{
239-
Name: version,
240-
Builds: builds,
241-
}
242-
}
243-
244227
type BuildConfig struct {
245228
Platform string `json:"platform"`
246229
Url string `json:"url"`

pkg/automationconfig/automation_config_builder.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,10 @@ func (b *Builder) Build() (AutomationConfig, error) {
137137
auth = b.enabler.EnableAuth(auth)
138138
}
139139

140+
if len(b.versions) == 0 {
141+
b.versions = append(b.versions, buildDummyMongoDbVersionConfig(b.mongodbVersion))
142+
}
143+
140144
currentAc := AutomationConfig{
141145
Version: b.previousAC.Version,
142146
Processes: processes,
@@ -191,3 +195,26 @@ func withFCV(fcv string) func(*Process) {
191195
process.FeatureCompatibilityVersion = fcv
192196
}
193197
}
198+
199+
// buildDummyMongoDbVersionConfig create a MongoDbVersionConfig which
200+
// will be valid for any version of MongoDB. This is used as a default if no
201+
// versions are manually specified.
202+
func buildDummyMongoDbVersionConfig(version string) MongoDbVersionConfig {
203+
return MongoDbVersionConfig{
204+
Name: version,
205+
Builds: []BuildConfig{
206+
{
207+
Platform: "linux",
208+
Architecture: "amd64",
209+
Flavor: "rhel",
210+
Modules: []string{},
211+
},
212+
{
213+
Platform: "linux",
214+
Architecture: "amd64",
215+
Flavor: "ubuntu",
216+
Modules: []string{},
217+
},
218+
},
219+
}
220+
}

0 commit comments

Comments
 (0)