Skip to content

Commit 162ecfd

Browse files
authored
feat: Add per project ephemeral environment deprovisioning (#376)
1 parent 01f4f4d commit 162ecfd

File tree

3 files changed

+81
-0
lines changed

3 files changed

+81
-0
lines changed

pkg/environments/v2/ephemeralenvironments/ephemeral_environment_service.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,18 @@ type CreateEnvironmentCommand struct {
2929
ProjectID string `uri:"projectId"`
3030
}
3131

32+
type DeprovisionEphemeralEnvironmentProjectCommand struct {
33+
}
34+
35+
type DeprovisionEphemeralEnvironmentProjectResponse struct {
36+
DeprovisioningRun DeprovisioningRunbookRun `json:"DeprovisioningRunbookRuns"`
37+
}
38+
39+
type DeprovisioningRunbookRun struct {
40+
RunbookRunID string `json:"RunbookRunId"`
41+
TaskId string `json:"TaskId"`
42+
}
43+
3244
func Add(client newclient.Client, spaceID string, projectID string, environmentName string) (*CreateEnvironmentResponse, error) {
3345
body := &CreateEnvironmentCommand{
3446
EnvironmentName: environmentName,
@@ -47,3 +59,19 @@ func Add(client newclient.Client, spaceID string, projectID string, environmentN
4759

4860
return newclient.Add[CreateEnvironmentResponse](client, path, spaceID, body)
4961
}
62+
63+
func DeprovisionForProject(client newclient.Client, spaceID string, environmentId string, projectId string) (*DeprovisionEphemeralEnvironmentProjectResponse, error) {
64+
body := &DeprovisionEphemeralEnvironmentProjectCommand{}
65+
66+
path, err := client.URITemplateCache().Expand(v2.DeprovisionEphemeralEnvironmentForProjectTemplate, map[string]any{
67+
"id": environmentId,
68+
"projectId": projectId,
69+
"spaceId": spaceID,
70+
})
71+
72+
if err != nil {
73+
return nil, err
74+
}
75+
76+
return newclient.Add[DeprovisionEphemeralEnvironmentProjectResponse](client, path, spaceID, body)
77+
}

pkg/environments/v2/route.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ package v2
22

33
const Template = "/api/{spaceId}/environments/v2{/id}{?name,skip,ids,take,partialName,type}"
44
const CreateEphemeralEnvironmentTemplate = "/api/{spaceId}/projects/{projectId}/environments/ephemeral"
5+
const DeprovisionEphemeralEnvironmentForProjectTemplate = "/api/{spaceId}/projects/{projectId}/environments/ephemeral/{id}/deprovision"

test/e2e/ephemeral_environment_service_test.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,45 @@ func TestEnvironmentServiceCreateEphemeralEnvironment(t *testing.T) {
4848
require.Equal(t, createdEnvironmentId, environments.Items[0].ID)
4949
}
5050

51+
func TestEnvironmentServiceDeprovisionEphemeralEnvironmentForProject(t *testing.T) {
52+
client := getOctopusClient()
53+
require.NotNil(t, client)
54+
55+
space := GetDefaultSpace(t, client)
56+
require.NotNil(t, space)
57+
58+
lifecycle := CreateTestLifecycle(t, client)
59+
require.NotNil(t, lifecycle)
60+
defer DeleteTestLifecycle(t, client, lifecycle)
61+
62+
projectGroup := CreateTestProjectGroup(t, client)
63+
require.NotNil(t, projectGroup)
64+
defer DeleteTestProjectGroup(t, client, projectGroup)
65+
66+
project := CreateTestProject(t, client, space, lifecycle, projectGroup)
67+
require.NotNil(t, project)
68+
defer DeleteTestProject(t, client, project)
69+
70+
runbook := CreateTestRunbook(t, client, lifecycle, projectGroup, project)
71+
require.NotNil(t, runbook)
72+
defer DeleteTestRunbook(t, client, runbook)
73+
74+
parentEnvironment := CreateParentEnvironment(t, client)
75+
require.NotNil(t, parentEnvironment)
76+
defer DeleteParentEnvironment(t, client, parentEnvironment)
77+
78+
ephemeralChannel := CreateEphemeralTestChannel(t, client, project, parentEnvironment)
79+
require.NotNil(t, ephemeralChannel)
80+
defer DeleteTestChannel(t, client, ephemeralChannel)
81+
82+
createdEnvironmentId := CreateEphemeralEnvironment(t, client, project)
83+
DeprovisionEphemeralEnvironmentForProject(t, client, &createdEnvironmentId, project)
84+
85+
environments, err := ephemeralenvironments.GetAll(client, client.GetSpaceID())
86+
require.NoError(t, err)
87+
require.NotNil(t, environments)
88+
}
89+
5190
func CreateEphemeralEnvironment(t *testing.T, client *client.Client, project *projects.Project) string {
5291
if client == nil {
5392
client = getOctopusClient()
@@ -63,3 +102,16 @@ func CreateEphemeralEnvironment(t *testing.T, client *client.Client, project *pr
63102

64103
return createdEnvironment.Id
65104
}
105+
106+
func DeprovisionEphemeralEnvironmentForProject(t *testing.T, client *client.Client, environmentId *string, project *projects.Project) ephemeralenvironments.DeprovisioningRunbookRun {
107+
if client == nil {
108+
client = getOctopusClient()
109+
}
110+
require.NotNil(t, client)
111+
112+
deprovisionResponse, err := ephemeralenvironments.DeprovisionForProject(client, client.GetSpaceID(), *environmentId, project.GetID())
113+
require.NoError(t, err)
114+
require.NotNil(t, deprovisionResponse)
115+
116+
return deprovisionResponse.DeprovisioningRun
117+
}

0 commit comments

Comments
 (0)