Skip to content

Commit db23821

Browse files
committed
Migration to 8.2
1 parent de06308 commit db23821

File tree

4 files changed

+104
-62
lines changed

4 files changed

+104
-62
lines changed

docker/mongodb-kubernetes-init-database/content/agent-launcher-lib.sh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ download_agent() {
138138
script_log "Error while downloading the Mongodb agent"
139139
exit 1
140140
fi
141-
json_log 'agent-launcher-script' <"${MMS_LOG_DIR}/curl.log" >>"${MDB_LOG_FILE_AGENT_LAUNCHER_SCRIPT}"
141+
142+
grep -v -E "bytes data\]|\[no content\]" "${MMS_LOG_DIR}/curl.log" | json_log 'agent-launcher-script' >>"${MDB_LOG_FILE_AGENT_LAUNCHER_SCRIPT}"
142143
rm "${MMS_LOG_DIR}/curl.log" 2>/dev/null || true
143144

144145
script_log "The Mongodb Agent binary downloaded, unpacking"

docker/mongodb-kubernetes-tests/kubetester/mongodb.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,9 @@ def configure_cloud_qa(
269269

270270
if src_project_config_map_name is None and "cloudManager" in self["spec"]:
271271
src_project_config_map_name = self["spec"]["cloudManager"]["configMapRef"]["name"]
272+
else:
273+
# my-project cm and my-credentials secret are created by scripts/evergreen/e2e/configure_operator.sh
274+
src_project_config_map_name = "my-project"
272275

273276
try:
274277
src_cm = read_configmap(self.namespace, src_project_config_map_name, api_client=api_client)

docker/mongodb-kubernetes-tests/tests/search/fixtures/enterprise-replicaset-sample-mflix.yaml

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,15 @@ spec:
1919
- SCRAM
2020
agent:
2121
logLevel: DEBUG
22-
statefulSet:
23-
spec:
24-
template:
25-
spec:
26-
containers:
27-
- name: mongodb-enterprise-database
28-
resources:
29-
limits:
30-
cpu: "2"
31-
memory: 2Gi
32-
requests:
33-
cpu: "1"
34-
memory: 1Gi
22+
podSpec:
23+
podTemplate:
24+
spec:
25+
containers:
26+
- name: mongodb-enterprise-database
27+
resources:
28+
limits:
29+
cpu: "2"
30+
memory: 2Gi
31+
requests:
32+
cpu: "1"
33+
memory: 1Gi

docker/mongodb-kubernetes-tests/tests/search/search_enterprise_tls.py

Lines changed: 87 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,21 @@
1-
from typing import Optional
2-
31
import pymongo
42
import yaml
3+
from pytest import fixture, mark
4+
55
from kubetester import create_or_update_secret, try_load
66
from kubetester.certs import create_mongodb_tls_certs, create_tls_certs
7-
from kubetester.kubetester import KubernetesTester, is_multi_cluster
7+
from kubetester.kubetester import KubernetesTester
88
from kubetester.kubetester import fixture as yaml_fixture
99
from kubetester.mongodb import MongoDB
1010
from kubetester.mongodb_search import MongoDBSearch
1111
from kubetester.mongodb_user import MongoDBUser
1212
from kubetester.omtester import skip_if_cloud_manager
13-
from kubetester.opsmanager import MongoDBOpsManager
1413
from kubetester.phase import Phase
15-
from pytest import fixture, mark
1614
from tests import test_logger
17-
from tests.common.ops_manager.cloud_manager import is_cloud_qa
1815
from tests.common.search import movies_search_helper
19-
from tests.common.search.movies_search_helper import SampleMoviesSearchHelper
2016
from tests.common.search.search_tester import SearchTester
21-
from tests.conftest import get_default_operator
22-
from tests.opsmanager.withMonitoredAppDB.conftest import enable_multi_cluster_deployment
17+
from tests.conftest import get_default_operator, get_issuer_ca_filepath
18+
from tests.opsmanager.conftest import custom_om_prev_version
2319
from tests.search.om_deployment import get_ops_manager
2420

2521
logger = test_logger.get_test_logger(__name__)
@@ -38,6 +34,9 @@
3834
# MongoDBSearch TLS configuration
3935
MDBS_TLS_SECRET_NAME = "mdbs-tls-secret"
4036

37+
MDB_VERSION_WITHOUT_BUILT_IN_ROLE = "8.0.10-ent"
38+
MDB_VERSION_WITH_BUILT_IN_ROLE = "8.2.0-ent"
39+
4140

4241
@fixture(scope="function")
4342
def mdb(namespace: str, issuer_ca_configmap: str) -> MongoDB:
@@ -47,6 +46,7 @@ def mdb(namespace: str, issuer_ca_configmap: str) -> MongoDB:
4746
namespace=namespace,
4847
)
4948
resource.configure(om=get_ops_manager(namespace), project_name=MDB_RESOURCE_NAME)
49+
resource.set_version(MDB_VERSION_WITHOUT_BUILT_IN_ROLE)
5050

5151
if try_load(resource):
5252
return resource
@@ -81,6 +81,7 @@ def admin_user(namespace: str) -> MongoDBUser:
8181
if try_load(resource):
8282
return resource
8383

84+
resource["spec"]["mongodbResourceRef"]["name"] = MDB_RESOURCE_NAME
8485
resource["spec"]["username"] = resource.name
8586
resource["spec"]["passwordSecretKeyRef"]["name"] = f"{resource.name}-password"
8687

@@ -94,6 +95,7 @@ def user(namespace: str) -> MongoDBUser:
9495
if try_load(resource):
9596
return resource
9697

98+
resource["spec"]["mongodbResourceRef"]["name"] = MDB_RESOURCE_NAME
9799
resource["spec"]["username"] = resource.name
98100
resource["spec"]["passwordSecretKeyRef"]["name"] = f"{resource.name}-password"
99101

@@ -111,6 +113,7 @@ def mongot_user(namespace: str, mdbs: MongoDBSearch) -> MongoDBUser:
111113
if try_load(resource):
112114
return resource
113115

116+
resource["spec"]["mongodbResourceRef"]["name"] = MDB_RESOURCE_NAME
114117
resource["spec"]["username"] = MONGOT_USER_NAME
115118
resource["spec"]["passwordSecretKeyRef"]["name"] = f"{resource.name}-password"
116119

@@ -162,19 +165,19 @@ def test_create_users(
162165
create_or_update_secret(
163166
namespace, name=admin_user["spec"]["passwordSecretKeyRef"]["name"], data={"password": ADMIN_USER_PASSWORD}
164167
)
165-
admin_user.create()
168+
admin_user.update()
166169
admin_user.assert_reaches_phase(Phase.Updated, timeout=300)
167170

168171
create_or_update_secret(
169172
namespace, name=user["spec"]["passwordSecretKeyRef"]["name"], data={"password": USER_PASSWORD}
170173
)
171-
user.create()
174+
user.update()
172175
user.assert_reaches_phase(Phase.Updated, timeout=300)
173176

174177
create_or_update_secret(
175178
namespace, name=mongot_user["spec"]["passwordSecretKeyRef"]["name"], data={"password": MONGOT_USER_PASSWORD}
176179
)
177-
mongot_user.create()
180+
mongot_user.update()
178181
# we deliberately don't wait for this user to be ready, because to be reconciled successfully it needs the searchCoordinator role
179182
# which the ReplicaSet reconciler will only define in the automation config after the MongoDBSearch resource is created.
180183

@@ -187,7 +190,6 @@ def test_create_search_resource(mdbs: MongoDBSearch):
187190

188191
@mark.e2e_search_enterprise_tls
189192
def test_wait_for_database_resource_ready(mdb: MongoDB):
190-
mdb.assert_abandons_phase(Phase.Running, timeout=300)
191193
mdb.assert_reaches_phase(Phase.Running, timeout=300)
192194

193195
for idx in range(mdb.get_members()):
@@ -196,18 +198,85 @@ def test_wait_for_database_resource_ready(mdb: MongoDB):
196198
f"{mdb.name}-{idx}", mdb.namespace, ["cat", "/data/automation-mongod.conf"]
197199
)
198200
)
199-
setParameter = mongod_config.get("setParameter", {})
201+
set_parameter = mongod_config.get("setParameter", {})
200202
assert (
201-
"mongotHost" in setParameter and "searchIndexManagementHostAndPort" in setParameter
203+
"mongotHost" in set_parameter and "searchIndexManagementHostAndPort" in set_parameter
202204
), "mongot parameters not found in mongod config"
203205

204206

205207
@mark.e2e_search_enterprise_tls
206-
def test_validate_tls_connections(mdb: MongoDB, mdbs: MongoDBSearch, namespace: str, issuer_ca_filepath: str):
208+
def test_validate_tls_connections(mdb: MongoDB, mdbs: MongoDBSearch, namespace: str):
209+
validate_tls_connections(mdb, mdbs, namespace)
210+
211+
212+
@mark.e2e_search_enterprise_tls
213+
def test_search_restore_sample_database(mdb: MongoDB):
214+
get_admin_sample_movies_helper(mdb).restore_sample_database()
215+
216+
217+
@mark.e2e_search_enterprise_tls
218+
def test_search_create_search_index(mdb: MongoDB):
219+
get_user_sample_movies_helper(mdb).create_search_index()
220+
221+
222+
@mark.e2e_search_enterprise_tls
223+
def test_search_assert_search_query(mdb: MongoDB):
224+
get_user_sample_movies_helper(mdb).assert_search_query(retry_timeout=60)
225+
226+
227+
@mark.e2e_search_enterprise_tls
228+
class TestUpgradeMongod:
229+
def test_check_polyfilled_role_in_ac(self, mdb: MongoDB):
230+
custom_roles = mdb.get_automation_config_tester().automation_config.get("roles", [])
231+
assert (len(custom_roles) > 0)
232+
assert ("searchCoordinator" in [role["role"] for role in custom_roles])
233+
234+
def test_mongod_version(self, mdb: MongoDB):
235+
mdb.tester(ca_path=get_issuer_ca_filepath(), use_ssl=True).assert_version(MDB_VERSION_WITHOUT_BUILT_IN_ROLE)
236+
237+
def test_upgrade_to_mongo_8_2(self, mdb: MongoDB):
238+
mdb.set_version(MDB_VERSION_WITH_BUILT_IN_ROLE)
239+
mdb.update()
240+
mdb.assert_reaches_phase(Phase.Running, timeout=600)
241+
242+
def test_check_polyfilled_role_not_in_ac(self, mdb: MongoDB):
243+
custom_roles = mdb.get_automation_config_tester().automation_config.get("roles", [])
244+
assert (len(custom_roles) >= 0)
245+
assert ("searchCoordinator" not in [role["role"] for role in custom_roles])
246+
247+
def test_mongod_version_after_upgrade(self, mdb: MongoDB):
248+
mdb_tester = mdb.tester(ca_path=get_issuer_ca_filepath(), use_ssl=True)
249+
mdb_tester.assert_scram_sha_authentication(ADMIN_USER_NAME, ADMIN_USER_PASSWORD, "SCRAM-SHA-256", 1, ssl=True, tlsCAFile=get_issuer_ca_filepath())
250+
# TODO check why assert version works without auth for 8.0 and not for 8.2
251+
mdb_tester.assert_version(MDB_VERSION_WITH_BUILT_IN_ROLE)
252+
253+
254+
@mark.e2e_search_enterprise_tlssh
255+
def test_search_assert_search_query_2(mdb: MongoDB):
256+
get_user_sample_movies_helper(mdb).assert_search_query(retry_timeout=60)
257+
258+
259+
def get_connection_string(mdb: MongoDB, user_name: str, user_password: str) -> str:
260+
return f"mongodb://{user_name}:{user_password}@{mdb.name}-0.{mdb.name}-svc.{mdb.namespace}.svc.cluster.local:27017/?replicaSet={mdb.name}"
261+
262+
263+
def get_admin_sample_movies_helper(mdb):
264+
return movies_search_helper.SampleMoviesSearchHelper(
265+
SearchTester(get_connection_string(mdb, ADMIN_USER_NAME, ADMIN_USER_PASSWORD), use_ssl=True, ca_path=get_issuer_ca_filepath())
266+
)
267+
268+
269+
def get_user_sample_movies_helper(mdb):
270+
return movies_search_helper.SampleMoviesSearchHelper(
271+
SearchTester(get_connection_string(mdb, USER_NAME, USER_PASSWORD), use_ssl=True, ca_path=get_issuer_ca_filepath())
272+
)
273+
274+
275+
def validate_tls_connections(mdb: MongoDB, mdbs: MongoDBSearch, namespace: str):
207276
with pymongo.MongoClient(
208277
f"mongodb://{mdb.name}-0.{mdb.name}-svc.{namespace}.svc.cluster.local:27017/?replicaSet={mdb.name}",
209278
tls=True,
210-
tlsCAFile=issuer_ca_filepath,
279+
tlsCAFile=get_issuer_ca_filepath(),
211280
tlsAllowInvalidHostnames=False,
212281
serverSelectionTimeoutMS=30000,
213282
connectTimeoutMS=20000,
@@ -218,40 +287,10 @@ def test_validate_tls_connections(mdb: MongoDB, mdbs: MongoDBSearch, namespace:
218287
with pymongo.MongoClient(
219288
f"mongodb://{mdbs.name}-search-svc.{namespace}.svc.cluster.local:27027",
220289
tls=True,
221-
tlsCAFile=issuer_ca_filepath,
290+
tlsCAFile=get_issuer_ca_filepath(),
222291
tlsAllowInvalidHostnames=False,
223292
serverSelectionTimeoutMS=10000,
224293
connectTimeoutMS=10000,
225294
) as search_client:
226295
search_info = search_client.admin.command("hello")
227296
assert search_info.get("ok") == 1, "MongoDBSearch connection failed"
228-
229-
230-
@mark.e2e_search_enterprise_tls
231-
def test_search_restore_sample_database(mdb: MongoDB, issuer_ca_filepath: str):
232-
sample_movies_helper = movies_search_helper.SampleMoviesSearchHelper(
233-
SearchTester(
234-
get_connection_string(mdb, ADMIN_USER_NAME, ADMIN_USER_PASSWORD), use_ssl=True, ca_path=issuer_ca_filepath
235-
)
236-
)
237-
sample_movies_helper.restore_sample_database()
238-
239-
240-
@mark.e2e_search_enterprise_tls
241-
def test_search_create_search_index(mdb: MongoDB, issuer_ca_filepath: str):
242-
sample_movies_helper = movies_search_helper.SampleMoviesSearchHelper(
243-
SearchTester(get_connection_string(mdb, USER_NAME, USER_PASSWORD), use_ssl=True, ca_path=issuer_ca_filepath)
244-
)
245-
sample_movies_helper.create_search_index()
246-
247-
248-
@mark.e2e_search_enterprise_tls
249-
def test_search_assert_search_query(mdb: MongoDB, issuer_ca_filepath: str):
250-
sample_movies_helper = movies_search_helper.SampleMoviesSearchHelper(
251-
SearchTester(get_connection_string(mdb, USER_NAME, USER_PASSWORD), use_ssl=True, ca_path=issuer_ca_filepath)
252-
)
253-
sample_movies_helper.assert_search_query(retry_timeout=60)
254-
255-
256-
def get_connection_string(mdb: MongoDB, user_name: str, user_password: str) -> str:
257-
return f"mongodb://{user_name}:{user_password}@{mdb.name}-0.{mdb.name}-svc.{mdb.namespace}.svc.cluster.local:27017/?replicaSet={mdb.name}"

0 commit comments

Comments
 (0)