Skip to content

Commit f9555c4

Browse files
authored
CLOUDP-90601: test pe AWS (#365)
1 parent c7cdbbf commit f9555c4

24 files changed

+711
-178
lines changed

pkg/api/v1/status/atlasproject.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@ type AtlasProjectStatus struct {
3232
ExpiredIPAccessList []project.IPAccessList `json:"expiredIpAccessList,omitempty"`
3333

3434
// The list of private endpoints configured for current project
35-
PrivateEndpoints []PrivateEndpoint `json:"privateEndpoints,omitempty"`
35+
PrivateEndpoints []ProjectPrivateEndpoint `json:"privateEndpoints,omitempty"`
3636
}

pkg/api/v1/status/zz_generated.deepcopy.go

Lines changed: 2 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/e2e/actions/actions.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
. "github.com/onsi/gomega/gbytes"
1212

1313
appclient "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/appclient"
14-
kube "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/kube"
14+
kubecli "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/kubecli"
1515
mongocli "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/mongocli"
1616
"github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/model"
1717
"github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/utils"
@@ -24,8 +24,8 @@ func UpdateCluster(newData *model.TestDataProvider) {
2424
newData.Resources.Clusters[0].ClusterFileName(newData.Resources),
2525
utils.JSONToYAMLConvert(newData.Resources.Clusters[0]),
2626
)
27-
generation, _ = strconv.Atoi(kube.GetGeneration(newData.Resources.Namespace, newData.Resources.Clusters[0].GetClusterNameResource()))
28-
kube.Apply(newData.Resources.Clusters[0].ClusterFileName(newData.Resources), "-n", newData.Resources.Namespace)
27+
generation, _ = strconv.Atoi(kubecli.GetGeneration(newData.Resources.Namespace, newData.Resources.Clusters[0].GetClusterNameResource()))
28+
kubecli.Apply(newData.Resources.Clusters[0].ClusterFileName(newData.Resources), "-n", newData.Resources.Namespace)
2929
generation++
3030
})
3131

@@ -84,13 +84,13 @@ func ReactivateCluster(data *model.TestDataProvider) {
8484

8585
func DeleteFirstUser(data *model.TestDataProvider) {
8686
By("User can delete Database User", func() {
87-
// data.Resources.ProjectID = kube.GetProjectResource(data.Resources.Namespace, data.Resources.K8sFullProjectName).Status.ID
87+
// data.Resources.ProjectID = kube.GetProjectResource(data.Resources.Namespace, data.Resources.GetAtlasProjectFullKubeName()).Status.ID
8888
// since it is could be several users, we should
8989
// - delete k8s resource
9090
// - delete one user from the list,
9191
// - check Atlas doesn't have the initial user and have the rest
9292
By("Delete k8s resources")
93-
Eventually(kube.Delete(data.Resources.GetResourceFolder()+"/user/user-"+data.Resources.Users[0].ObjectMeta.Name+".yaml", "-n", data.Resources.Namespace)).Should(Say("deleted"))
93+
Eventually(kubecli.Delete(data.Resources.GetResourceFolder()+"/user/user-"+data.Resources.Users[0].ObjectMeta.Name+".yaml", "-n", data.Resources.Namespace)).Should(Say("deleted"))
9494
Eventually(CheckIfUserExist(data.Resources.Users[0].Spec.Username, data.Resources.ProjectID)).Should(BeFalse())
9595

9696
// the rest users should be still there

test/e2e/actions/cloud/aws.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package cloud
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
7+
"github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status"
8+
aws "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/api/aws"
9+
)
10+
11+
type awsAction struct{}
12+
13+
func (awsAction *awsAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (string, error) {
14+
fmt.Print("create AWS LINK")
15+
session := aws.SessionAWS(pe.Region)
16+
vpcID, err := session.GetVPCID()
17+
if err != nil {
18+
return "", err
19+
}
20+
subnetID, err := session.GetSubnetID()
21+
if err != nil {
22+
return "", err
23+
}
24+
25+
privateEndpointID, err := session.CreatePrivateEndpoint(vpcID, subnetID, pe.ServiceName, privatelinkName)
26+
if err != nil {
27+
return "", err
28+
}
29+
30+
return privateEndpointID, nil
31+
}
32+
33+
func (awsAction *awsAction) deletePrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkID string) error {
34+
fmt.Print("DELETE AWS LINK")
35+
session := aws.SessionAWS(pe.Region)
36+
err := session.DeletePrivateLink(privatelinkID)
37+
if err != nil {
38+
return err
39+
}
40+
status, err := session.DescribePrivateEndpointStatus(privatelinkID)
41+
if err != nil {
42+
return err
43+
}
44+
if status != "deleting" {
45+
return errors.New("AWS PE status is NOT 'deleting'. Actual status: " + status)
46+
}
47+
return nil
48+
}
49+
50+
func (awsAction *awsAction) statusPrivateEndpointPending(region, privateID string) bool {
51+
fmt.Print("check AWS LINK status: ")
52+
session := aws.SessionAWS(region)
53+
status, err := session.DescribePrivateEndpointStatus(privateID)
54+
if err != nil {
55+
fmt.Print(err)
56+
return false
57+
}
58+
fmt.Println(status)
59+
return (status == "pendingAcceptance")
60+
}
61+
62+
func (awsAction *awsAction) statusPrivateEndpointAvailable(region, privateID string) bool {
63+
fmt.Print("check AWS LINK status: ")
64+
session := aws.SessionAWS(region)
65+
status, err := session.DescribePrivateEndpointStatus(privateID)
66+
if err != nil {
67+
fmt.Print(err)
68+
return false
69+
}
70+
fmt.Println(status)
71+
return (status == "available")
72+
}

test/e2e/actions/cloud/azure.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package cloud
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status"
7+
)
8+
9+
type azureAction struct{}
10+
11+
func (azure *azureAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (string, error) {
12+
fmt.Print("NOT IMPLEMENTED create AZURE LINK")
13+
return "some test", nil
14+
}
15+
16+
func (azure *azureAction) deletePrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) error {
17+
fmt.Print("NOT IMPLEMENTED delete AZURE LINK")
18+
return nil
19+
}
20+
21+
func (azure *azureAction) statusPrivateEndpointPending(region, privateID string) bool {
22+
fmt.Print("NOT IMPLEMENTED delete AZURE LINK")
23+
return true
24+
}
25+
26+
func (azure *azureAction) statusPrivateEndpointAvailable(region, privateID string) bool {
27+
fmt.Print("NOT IMPLEMENTED delete AZURE LINK")
28+
return true
29+
}

test/e2e/actions/cloud/cloud.go

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package cloud
2+
3+
import (
4+
"errors"
5+
6+
"github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/provider"
7+
"github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status"
8+
)
9+
10+
type CloudActions interface {
11+
createPrivateEndpoint(pe status.ProjectPrivateEndpoint, name string) (string, error)
12+
deletePrivateEndpoint(pe status.ProjectPrivateEndpoint, name string) error
13+
statusPrivateEndpointPending(region, privateID string) bool
14+
statusPrivateEndpointAvailable(region, privateID string) bool
15+
}
16+
17+
type PEActions struct {
18+
CloudActions CloudActions
19+
PrivateEndpoint status.ProjectPrivateEndpoint
20+
}
21+
22+
func CreatePEActions(pe status.ProjectPrivateEndpoint) PEActions {
23+
return PEActions{PrivateEndpoint: pe}
24+
}
25+
26+
func (peActions *PEActions) CreatePrivateEndpoint(name string) (string, error) {
27+
switch peActions.PrivateEndpoint.Provider {
28+
case provider.ProviderAWS:
29+
peActions.CloudActions = &awsAction{}
30+
return peActions.CloudActions.createPrivateEndpoint(peActions.PrivateEndpoint, name)
31+
case provider.ProviderAzure:
32+
peActions.CloudActions = &azureAction{}
33+
return peActions.CloudActions.createPrivateEndpoint(peActions.PrivateEndpoint, name)
34+
case provider.ProviderGCP:
35+
peActions.CloudActions = &gcpAction{}
36+
return peActions.CloudActions.createPrivateEndpoint(peActions.PrivateEndpoint, name)
37+
}
38+
return "", errors.New("Check Provider")
39+
}
40+
41+
func (peActions *PEActions) DeletePrivateEndpoint(name string) error {
42+
switch peActions.PrivateEndpoint.Provider {
43+
case provider.ProviderAWS:
44+
peActions.CloudActions = &awsAction{}
45+
return peActions.CloudActions.deletePrivateEndpoint(peActions.PrivateEndpoint, name)
46+
case provider.ProviderAzure:
47+
peActions.CloudActions = &azureAction{}
48+
return peActions.CloudActions.deletePrivateEndpoint(peActions.PrivateEndpoint, name)
49+
case provider.ProviderGCP:
50+
peActions.CloudActions = &gcpAction{}
51+
return peActions.CloudActions.deletePrivateEndpoint(peActions.PrivateEndpoint, name)
52+
}
53+
return errors.New("Check Provider")
54+
}
55+
56+
func (peActions *PEActions) IsStatusPrivateEndpointPending(privateID string) bool {
57+
switch peActions.PrivateEndpoint.Provider {
58+
case provider.ProviderAWS:
59+
peActions.CloudActions = &awsAction{}
60+
return peActions.CloudActions.statusPrivateEndpointPending(peActions.PrivateEndpoint.Region, privateID)
61+
case provider.ProviderAzure:
62+
peActions.CloudActions = &azureAction{}
63+
return peActions.CloudActions.statusPrivateEndpointPending(peActions.PrivateEndpoint.Region, privateID)
64+
case provider.ProviderGCP:
65+
peActions.CloudActions = &gcpAction{}
66+
return peActions.CloudActions.statusPrivateEndpointPending(peActions.PrivateEndpoint.Region, privateID)
67+
}
68+
return false
69+
}
70+
71+
func (peActions *PEActions) IsStatusPrivateEndpointAvailable(privateID string) bool {
72+
switch peActions.PrivateEndpoint.Provider {
73+
case provider.ProviderAWS:
74+
peActions.CloudActions = &awsAction{}
75+
return peActions.CloudActions.statusPrivateEndpointAvailable(peActions.PrivateEndpoint.Region, privateID)
76+
case provider.ProviderAzure:
77+
peActions.CloudActions = &azureAction{}
78+
return peActions.CloudActions.statusPrivateEndpointAvailable(peActions.PrivateEndpoint.Region, privateID)
79+
case provider.ProviderGCP:
80+
peActions.CloudActions = &gcpAction{}
81+
return peActions.CloudActions.statusPrivateEndpointAvailable(peActions.PrivateEndpoint.Region, privateID)
82+
}
83+
return false
84+
}

test/e2e/actions/cloud/gcp.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package cloud
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1/status"
7+
)
8+
9+
type gcpAction struct{}
10+
11+
func (gcp *gcpAction) createPrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) (string, error) {
12+
fmt.Print("NOT IMPLEMENTED create GCP LINK")
13+
return "some test", nil
14+
}
15+
16+
func (gcp *gcpAction) deletePrivateEndpoint(pe status.ProjectPrivateEndpoint, privatelinkName string) error {
17+
fmt.Print("NOT IMPLEMENTED delete GCP LINK")
18+
return nil
19+
}
20+
21+
func (gcp *gcpAction) statusPrivateEndpointPending(region, privateID string) bool {
22+
fmt.Print("NOT IMPLEMENTED delete GCP LINK")
23+
return true
24+
}
25+
26+
func (gcp *gcpAction) statusPrivateEndpointAvailable(region, privateID string) bool {
27+
fmt.Print("NOT IMPLEMENTED delete GCP LINK")
28+
return true
29+
}

test/e2e/actions/deploy/deploy_operator.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
. "github.com/onsi/ginkgo"
1010
. "github.com/onsi/gomega"
1111

12-
"github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/kube"
12+
kubecli "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/kubecli"
1313
"github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/kustomize"
1414
"github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/config"
1515
"github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/model"
@@ -81,9 +81,9 @@ func prepareMultiNamespaceOperatorResources(input model.UserInputs, watchedNames
8181
func NamespacedOperator(data *model.TestDataProvider) {
8282
prepareNamespaceOperatorResources(data.Resources)
8383
By("Deploy namespaced Operator\n", func() {
84-
kube.Apply("-k", data.Resources.GetOperatorFolder())
84+
kubecli.Apply("-k", data.Resources.GetOperatorFolder())
8585
Eventually(
86-
kube.GetPodStatus(data.Resources.Namespace),
86+
kubecli.GetPodStatus(data.Resources.Namespace),
8787
"5m", "3s",
8888
).Should(Equal("Running"), "The operator should successfully run")
8989
})
@@ -92,9 +92,9 @@ func NamespacedOperator(data *model.TestDataProvider) {
9292
func ClusterWideOperator(data *model.TestDataProvider) {
9393
prepareWideOperatorResources(data.Resources)
9494
By("Deploy clusterwide Operator \n", func() {
95-
kube.Apply("-k", data.Resources.GetOperatorFolder())
95+
kubecli.Apply("-k", data.Resources.GetOperatorFolder())
9696
Eventually(
97-
kube.GetPodStatus(config.DefaultOperatorNS),
97+
kubecli.GetPodStatus(config.DefaultOperatorNS),
9898
"5m", "3s",
9999
).Should(Equal("Running"), "The operator should successfully run")
100100
})
@@ -105,9 +105,9 @@ func MultiNamespaceOperator(data *model.TestDataProvider, watchNamespace []strin
105105
By("Deploy multinamespaced Operator \n", func() {
106106
kustomOperatorPath := data.Resources.GetOperatorFolder() + "/final.yaml"
107107
utils.SaveToFile(kustomOperatorPath, kustomize.Build(data.Resources.GetOperatorFolder()))
108-
kube.Apply(kustomOperatorPath)
108+
kubecli.Apply(kustomOperatorPath)
109109
Eventually(
110-
kube.GetPodStatus(config.DefaultOperatorNS),
110+
kubecli.GetPodStatus(config.DefaultOperatorNS),
111111
"5m", "3s",
112112
).Should(Equal("Running"), "The operator should successfully run")
113113
})

test/e2e/actions/helm_related.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
. "github.com/onsi/gomega"
88

99
helm "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/helm"
10-
kube "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/kube"
10+
kubecli "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/kubecli"
1111
mongocli "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/mongocli"
1212

1313
"github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/model"
@@ -21,8 +21,8 @@ func HelmDefaultUpgradeResouces(data *model.TestDataProvider) {
2121
data.Resources.Clusters[0].Spec.ProviderBackupEnabled = &enabled
2222
data.Resources.Users[0].DeleteAllRoles()
2323
data.Resources.Users[0].AddBuildInAdminRole()
24-
data.Resources.Users[0].Spec.Project.Name = data.Resources.K8sFullProjectName
25-
generation, _ := strconv.Atoi(kube.GetGeneration(data.Resources.Namespace, data.Resources.Clusters[0].GetClusterNameResource()))
24+
data.Resources.Users[0].Spec.Project.Name = data.Resources.GetAtlasProjectFullKubeName()
25+
generation, _ := strconv.Atoi(kubecli.GetGeneration(data.Resources.Namespace, data.Resources.Clusters[0].GetClusterNameResource()))
2626
helm.UpgradeAtlasClusterChart(data.Resources)
2727

2828
By("Wait project creation", func() {
@@ -66,13 +66,13 @@ func HelmUpgradeDeleteFirstUser(data *model.TestDataProvider) {
6666
// HelmUpgradeChartVersions upgrade chart version of crd, operator, and
6767
func HelmUpgradeChartVersions(data *model.TestDataProvider) {
6868
By("User update helm chart (used main-branch)", func() {
69-
generation, _ := strconv.Atoi(kube.GetGeneration(data.Resources.Namespace, data.Resources.Clusters[0].GetClusterNameResource()))
69+
generation, _ := strconv.Atoi(kubecli.GetGeneration(data.Resources.Namespace, data.Resources.Clusters[0].GetClusterNameResource()))
7070
helm.UpgradeOperatorChart(data.Resources)
7171

7272
// TODO temporary.
73-
kube.Annotate(data.Resources.K8sFullProjectName, "helm.sh/hook-", data.Resources.Namespace)
74-
kube.Annotate(data.Resources.K8sFullProjectName, "meta.helm.sh/release-name="+data.Resources.Clusters[0].Spec.Name, data.Resources.Namespace)
75-
kube.Annotate(data.Resources.K8sFullProjectName, "meta.helm.sh/release-namespace="+data.Resources.Namespace, data.Resources.Namespace)
73+
kubecli.Annotate(data.Resources.GetAtlasProjectFullKubeName(), "helm.sh/hook-", data.Resources.Namespace)
74+
kubecli.Annotate(data.Resources.GetAtlasProjectFullKubeName(), "meta.helm.sh/release-name="+data.Resources.Clusters[0].Spec.Name, data.Resources.Namespace)
75+
kubecli.Annotate(data.Resources.GetAtlasProjectFullKubeName(), "meta.helm.sh/release-namespace="+data.Resources.Namespace, data.Resources.Namespace)
7676

7777
helm.UpgradeAtlasClusterChartDev(data.Resources)
7878

test/e2e/actions/kube/resources.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package kube
2+
3+
import (
4+
"encoding/json"
5+
6+
v1 "github.com/mongodb/mongodb-atlas-kubernetes/pkg/api/v1"
7+
kubecli "github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/cli/kubecli"
8+
"github.com/mongodb/mongodb-atlas-kubernetes/test/e2e/model"
9+
)
10+
11+
func GetProjectResource(data *model.TestDataProvider) (v1.AtlasProject, error) {
12+
rawData := kubecli.GetProjectResource(data.Resources.Namespace, data.Resources.GetAtlasProjectFullKubeName())
13+
var project v1.AtlasProject
14+
err := json.Unmarshal(rawData, &project)
15+
if err != nil {
16+
return v1.AtlasProject{}, err
17+
}
18+
return project, nil
19+
}

0 commit comments

Comments
 (0)