Skip to content

Commit e463d61

Browse files
authored
Merge branch 'master' into lsierant/multi-cloud-qa
2 parents 973fbda + febd854 commit e463d61

File tree

12 files changed

+287
-19
lines changed

12 files changed

+287
-19
lines changed

.evergreen-tasks.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1266,6 +1266,16 @@ tasks:
12661266
commands:
12671267
- func: e2e_test
12681268

1269+
- name: e2e_multi_cluster_oidc_m2m_group
1270+
tags: [ "patch-run" ]
1271+
commands:
1272+
- func: e2e_test
1273+
1274+
- name: e2e_multi_cluster_oidc_m2m_user
1275+
tags: [ "patch-run" ]
1276+
commands:
1277+
- func: e2e_test
1278+
12691279
- name: e2e_search_community_basic
12701280
tags: ["patch-run"]
12711281
commands:

.evergreen.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -911,6 +911,10 @@ task_groups:
911911
- e2e_tls_x509_configure_all_options_sc
912912
- e2e_tls_x509_sc
913913
- e2e_meko_mck_upgrade
914+
- e2e_sharded_cluster_oidc_m2m_group
915+
- e2e_sharded_cluster_oidc_m2m_user
916+
- e2e_multi_cluster_oidc_m2m_group
917+
- e2e_multi_cluster_oidc_m2m_user
914918

915919
<<: *teardown_group
916920

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

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -427,12 +427,7 @@ def set_oidc_provider_configs(self, oidc_provider_configs: Dict):
427427
def append_oidc_provider_config(self, new_config: Dict):
428428
if "oidcProviderConfigs" not in self["spec"]["security"]["authentication"]:
429429
self["spec"]["security"]["authentication"]["oidcProviderConfigs"] = []
430-
431-
oidc_configs = self["spec"]["security"]["authentication"]["oidcProviderConfigs"]
432-
433-
oidc_configs.append(new_config)
434-
435-
self["spec"]["security"]["authentication"]["oidcProviderConfigs"] = oidc_configs
430+
self["spec"]["security"]["authentication"]["oidcProviderConfigs"].append(new_config)
436431

437432
return self
438433

docker/mongodb-kubernetes-tests/tests/authentication/sharded_cluster_oidc_m2m_group.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@
44
from kubetester.automation_config_tester import AutomationConfigTester
55
from kubetester.kubetester import KubernetesTester, ensure_ent_version
66
from kubetester.kubetester import fixture as load_fixture
7+
from kubetester.kubetester import is_multi_cluster, skip_if_multi_cluster
78
from kubetester.mongodb import MongoDB
89
from kubetester.mongotester import ShardedClusterTester
910
from kubetester.phase import Phase
1011
from pytest import fixture
12+
from tests.shardedcluster.conftest import (
13+
enable_multi_cluster_deployment,
14+
get_mongos_service_names,
15+
)
1116

1217
MDB_RESOURCE = "oidc-sharded-cluster-replica-set"
1318

@@ -26,17 +31,28 @@ def sharded_cluster(namespace: str, custom_mdb_version: str) -> MongoDB:
2631

2732
resource.set_oidc_provider_configs(oidc_provider_configs)
2833

34+
if is_multi_cluster():
35+
enable_multi_cluster_deployment(
36+
resource=resource,
37+
shard_members_array=[1, 1, 1],
38+
mongos_members_array=[1, 1, None],
39+
configsrv_members_array=[1, 1, 1],
40+
)
41+
2942
return resource.update()
3043

3144

3245
@pytest.mark.e2e_sharded_cluster_oidc_m2m_group
3346
class TestCreateOIDCShardedCluster(KubernetesTester):
3447

3548
def test_create_sharded_cluster(self, sharded_cluster: MongoDB):
36-
sharded_cluster.assert_reaches_phase(Phase.Running, timeout=600)
49+
sharded_cluster.assert_reaches_phase(Phase.Running, timeout=800)
3750

3851
def test_assert_connectivity(self, sharded_cluster: MongoDB):
39-
tester = ShardedClusterTester(MDB_RESOURCE, 2)
52+
service_names = None
53+
if is_multi_cluster():
54+
service_names = get_mongos_service_names(sharded_cluster)
55+
tester = sharded_cluster.tester(service_names=service_names)
4056
tester.assert_oidc_authentication()
4157

4258
def test_ops_manager_state_updated_correctly(self, sharded_cluster: MongoDB):
@@ -75,6 +91,8 @@ def test_ops_manager_state_updated_correctly(self, sharded_cluster: MongoDB):
7591
tester.assert_oidc_configuration(expected_oidc_configs)
7692

7793

94+
# Skipping the test for multi-cluster setups as we want to focus on testing only connectivity for OIDC in multi-cluster setups.
95+
@skip_if_multi_cluster()
7896
@pytest.mark.e2e_sharded_cluster_oidc_m2m_group
7997
class TestAddNewOIDCProviderAndRole(KubernetesTester):
8098
def test_add_oidc_provider_and_role(self, sharded_cluster: MongoDB):

docker/mongodb-kubernetes-tests/tests/authentication/sharded_cluster_oidc_m2m_user.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@
44
from kubetester.automation_config_tester import AutomationConfigTester
55
from kubetester.kubetester import KubernetesTester, ensure_ent_version
66
from kubetester.kubetester import fixture as load_fixture
7+
from kubetester.kubetester import is_multi_cluster
78
from kubetester.mongodb import MongoDB
89
from kubetester.mongodb_user import MongoDBUser
910
from kubetester.mongotester import ShardedClusterTester
1011
from kubetester.phase import Phase
1112
from pytest import fixture
13+
from tests.shardedcluster.conftest import (
14+
enable_multi_cluster_deployment,
15+
get_mongos_service_names,
16+
)
1217

1318
MDB_RESOURCE = "oidc-sharded-cluster-replica-set"
1419

@@ -25,6 +30,14 @@ def sharded_cluster(namespace: str, custom_mdb_version: str) -> MongoDB:
2530

2631
resource.set_oidc_provider_configs(oidc_provider_configs)
2732

33+
if is_multi_cluster():
34+
enable_multi_cluster_deployment(
35+
resource=resource,
36+
shard_members_array=[1, 1, 1],
37+
mongos_members_array=[1, 1, None],
38+
configsrv_members_array=[1, 1, 1],
39+
)
40+
2841
if try_load(resource):
2942
return resource
3043

@@ -44,13 +57,16 @@ def oidc_user(namespace) -> MongoDBUser:
4457
@pytest.mark.e2e_sharded_cluster_oidc_m2m_user
4558
class TestCreateOIDCShardedCluster(KubernetesTester):
4659
def test_create_sharded_cluster(self, sharded_cluster: MongoDB):
47-
sharded_cluster.assert_reaches_phase(Phase.Running, timeout=600)
60+
sharded_cluster.assert_reaches_phase(Phase.Running, timeout=800)
4861

4962
def test_create_user(self, oidc_user: MongoDBUser):
5063
oidc_user.assert_reaches_phase(Phase.Updated, timeout=400)
5164

5265
def test_assert_connectivity(self, sharded_cluster: MongoDB):
53-
tester = ShardedClusterTester(MDB_RESOURCE, 2)
66+
service_names = None
67+
if is_multi_cluster():
68+
service_names = get_mongos_service_names(sharded_cluster)
69+
tester = sharded_cluster.tester(service_names=service_names)
5470
tester.assert_oidc_authentication()
5571

5672
def test_ops_manager_state_updated_correctly(self, sharded_cluster: MongoDB):
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
---
2+
apiVersion: mongodb.com/v1
3+
kind: MongoDBMultiCluster
4+
metadata:
5+
name: oidc-multi-replica-set
6+
spec:
7+
version: 7.0.5-ent
8+
type: ReplicaSet
9+
duplicateServiceObjects: false
10+
credentials: my-credentials
11+
opsManager:
12+
configMapRef:
13+
name: my-project
14+
clusterSpecList:
15+
- clusterName: kind-e2e-cluster-1
16+
members: 1
17+
- clusterName: kind-e2e-cluster-2
18+
members: 1
19+
- clusterName: kind-e2e-cluster-3
20+
members: 2
21+
security:
22+
authentication:
23+
agents:
24+
mode: SCRAM
25+
enabled: true
26+
modes:
27+
- SCRAM
28+
- OIDC
29+
oidcProviderConfigs:
30+
- audience: "<filled-in-test>"
31+
clientId: "<filled-in-test>"
32+
issuerURI: "<filled-in-test>"
33+
requestedScopes: [ ]
34+
userClaim: "sub"
35+
groupsClaim: "cognito:groups"
36+
authorizationMethod: "WorkloadIdentityFederation"
37+
authorizationType: "GroupMembership"
38+
configurationName: "OIDC-test"
39+
roles:
40+
- role: "OIDC-test/test"
41+
db: "admin"
42+
roles:
43+
- role: "readWriteAnyDatabase"
44+
db: "admin"
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
---
2+
apiVersion: mongodb.com/v1
3+
kind: MongoDBMultiCluster
4+
metadata:
5+
name: oidc-multi-replica-set
6+
spec:
7+
version: 7.0.5-ent
8+
type: ReplicaSet
9+
duplicateServiceObjects: false
10+
credentials: my-credentials
11+
opsManager:
12+
configMapRef:
13+
name: my-project
14+
clusterSpecList:
15+
- clusterName: kind-e2e-cluster-1
16+
members: 1
17+
- clusterName: kind-e2e-cluster-2
18+
members: 1
19+
- clusterName: kind-e2e-cluster-3
20+
members: 2
21+
security:
22+
authentication:
23+
agents:
24+
mode: SCRAM
25+
enabled: true
26+
modes:
27+
- SCRAM
28+
- OIDC
29+
oidcProviderConfigs:
30+
- audience: "<filled-in-test>"
31+
clientId: "<filled-in-test>"
32+
issuerURI: "<filled-in-test>"
33+
requestedScopes: [ ]
34+
userClaim: "sub"
35+
authorizationMethod: "WorkloadIdentityFederation"
36+
authorizationType: "UserID"
37+
configurationName: "OIDC-test-user"
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
apiVersion: mongodb.com/v1
3+
kind: MongoDBUser
4+
metadata:
5+
name: oidc-user-1
6+
spec:
7+
username: "<filled-in-test>"
8+
db: "$external"
9+
mongodbResourceRef:
10+
name: oidc-multi-replica-set
11+
roles:
12+
- db: "admin"
13+
name: "readWriteAnyDatabase"
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import kubernetes
2+
import kubetester.oidc as oidc
3+
import pytest
4+
from kubetester import try_load
5+
from kubetester.automation_config_tester import AutomationConfigTester
6+
from kubetester.kubetester import KubernetesTester, ensure_ent_version
7+
from kubetester.kubetester import fixture as yaml_fixture
8+
from kubetester.mongodb import MongoDB, Phase
9+
from kubetester.mongodb_multi import MongoDBMulti, MultiClusterClient
10+
from kubetester.mongotester import ReplicaSetTester
11+
from kubetester.operator import Operator
12+
from pytest import fixture
13+
14+
MDB_RESOURCE = "oidc-multi-replica-set"
15+
16+
17+
@fixture(scope="module")
18+
def mongodb_multi(
19+
central_cluster_client: kubernetes.client.ApiClient,
20+
namespace: str,
21+
member_cluster_names,
22+
custom_mdb_version: str,
23+
) -> MongoDBMulti:
24+
resource = MongoDBMulti.from_yaml(yaml_fixture("oidc/mongodb-multi-m2m-group.yaml"), MDB_RESOURCE, namespace)
25+
if try_load(resource):
26+
return resource
27+
28+
oidc_provider_configs = resource.get_oidc_provider_configs()
29+
30+
oidc_provider_configs[0]["clientId"] = oidc.get_cognito_workload_client_id()
31+
oidc_provider_configs[0]["audience"] = oidc.get_cognito_workload_client_id()
32+
oidc_provider_configs[0]["issuerURI"] = oidc.get_cognito_workload_url()
33+
34+
resource.set_oidc_provider_configs(oidc_provider_configs)
35+
36+
resource.api = kubernetes.client.CustomObjectsApi(central_cluster_client)
37+
38+
return resource.update()
39+
40+
41+
@pytest.mark.e2e_multi_cluster_oidc_m2m_group
42+
class TestOIDCMultiCluster(KubernetesTester):
43+
def test_deploy_operator(self, multi_cluster_operator: Operator):
44+
multi_cluster_operator.assert_is_running()
45+
46+
def test_create_oidc_replica_set(self, mongodb_multi: MongoDBMulti):
47+
mongodb_multi.assert_reaches_phase(Phase.Running, timeout=800)
48+
49+
def test_assert_connectivity(self, mongodb_multi: MongoDBMulti):
50+
tester = mongodb_multi.tester()
51+
tester.assert_oidc_authentication()
52+
53+
def test_ops_manager_state_updated_correctly(self, mongodb_multi: MongoDBMulti):
54+
tester = mongodb_multi.get_automation_config_tester()
55+
tester.assert_authentication_mechanism_enabled("MONGODB-OIDC", active_auth_mechanism=False)
56+
tester.assert_authentication_enabled(2)
57+
tester.assert_expected_users(0)
58+
tester.assert_authoritative_set(True)
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import kubernetes
2+
import kubetester.oidc as oidc
3+
import pytest
4+
from kubetester import try_load
5+
from kubetester.automation_config_tester import AutomationConfigTester
6+
from kubetester.kubetester import KubernetesTester, ensure_ent_version
7+
from kubetester.kubetester import fixture as yaml_fixture
8+
from kubetester.mongodb import MongoDB, Phase
9+
from kubetester.mongodb_multi import MongoDBMulti
10+
from kubetester.mongodb_user import MongoDBUser
11+
from kubetester.mongotester import ReplicaSetTester
12+
from kubetester.operator import Operator
13+
from pytest import fixture
14+
15+
MDB_RESOURCE = "oidc-multi-replica-set"
16+
17+
18+
@fixture(scope="module")
19+
def mongodb_multi(
20+
central_cluster_client: kubernetes.client.ApiClient,
21+
namespace: str,
22+
member_cluster_names,
23+
custom_mdb_version: str,
24+
) -> MongoDBMulti:
25+
resource = MongoDBMulti.from_yaml(yaml_fixture("oidc/mongodb-multi-m2m-user.yaml"), MDB_RESOURCE, namespace)
26+
if try_load(resource):
27+
return resource
28+
29+
oidc_provider_configs = resource.get_oidc_provider_configs()
30+
31+
oidc_provider_configs[0]["clientId"] = oidc.get_cognito_workload_client_id()
32+
oidc_provider_configs[0]["audience"] = oidc.get_cognito_workload_client_id()
33+
oidc_provider_configs[0]["issuerURI"] = oidc.get_cognito_workload_url()
34+
35+
resource.set_oidc_provider_configs(oidc_provider_configs)
36+
37+
resource.api = kubernetes.client.CustomObjectsApi(central_cluster_client)
38+
39+
return resource.update()
40+
41+
42+
@fixture(scope="module")
43+
def oidc_user(namespace) -> MongoDBUser:
44+
resource = MongoDBUser.from_yaml(yaml_fixture("oidc/oidc-user-multi.yaml"), namespace=namespace)
45+
46+
resource["spec"]["username"] = f"OIDC-test-user/{oidc.get_cognito_workload_user_id()}"
47+
resource["spec"]["mongodbResourceRef"]["name"] = MDB_RESOURCE
48+
49+
return resource.update()
50+
51+
52+
@pytest.mark.e2e_multi_cluster_oidc_m2m_user
53+
class TestOIDCMultiCluster(KubernetesTester):
54+
def test_deploy_operator(self, multi_cluster_operator: Operator):
55+
multi_cluster_operator.assert_is_running()
56+
57+
def test_create_oidc_replica_set(self, mongodb_multi: MongoDBMulti):
58+
mongodb_multi.assert_reaches_phase(Phase.Running, timeout=800)
59+
60+
def test_create_user(self, oidc_user: MongoDBUser):
61+
oidc_user.assert_reaches_phase(Phase.Updated, timeout=800)
62+
63+
def test_assert_connectivity(self, mongodb_multi: MongoDBMulti):
64+
tester = mongodb_multi.tester()
65+
tester.assert_oidc_authentication()
66+
67+
def test_ops_manager_state_updated_correctly(self, mongodb_multi: MongoDBMulti):
68+
tester = mongodb_multi.get_automation_config_tester()
69+
tester.assert_authentication_mechanism_enabled("MONGODB-OIDC", active_auth_mechanism=False)
70+
tester.assert_authentication_enabled(2)
71+
tester.assert_expected_users(1)
72+
tester.assert_authoritative_set(True)

docs/mongodbcommunity/users.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ You cannot disable SCRAM authentication.
4444
| `spec.users.roles.role.db` | string | Database that the role applies to. | Yes |
4545
| `spec.users.connectionStringSecretAnnotations` | object | Annotations of the secret object created by the operator which exposes the connection strings for the user. | No |
4646

47-
4847
```yaml
4948
---
5049
apiVersion: mongodbcommunity.mongodb.com/v1

0 commit comments

Comments
 (0)