Skip to content

Commit 04688f8

Browse files
Merge pull request #20 from oreillymedia/cl-724-add-codedeploy-deployment-configs
cl-724 Adding support for codedeploy deployment configs and codepipeline custom action types and webhooks
2 parents eed354e + f34717f commit 04688f8

File tree

4 files changed

+289
-0
lines changed

4 files changed

+289
-0
lines changed
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package resources
2+
3+
import (
4+
"fmt"
5+
"strings"
6+
7+
"github.com/aws/aws-sdk-go/aws/session"
8+
"github.com/aws/aws-sdk-go/service/codedeploy"
9+
"github.com/rebuy-de/aws-nuke/v2/pkg/types"
10+
)
11+
12+
type CodeDeployDeploymentConfig struct {
13+
svc *codedeploy.CodeDeploy
14+
deploymentConfigName *string
15+
}
16+
17+
func init() {
18+
register("CodeDeployDeploymentConfig", ListCodeDeployDeploymentConfigs, mapCloudControl("AWS::CodeDeploy::DeploymentConfig"))
19+
}
20+
21+
func ListCodeDeployDeploymentConfigs(sess *session.Session) ([]Resource, error) {
22+
svc := codedeploy.New(sess)
23+
resources := []Resource{}
24+
25+
params := &codedeploy.ListDeploymentConfigsInput{}
26+
27+
for {
28+
resp, err := svc.ListDeploymentConfigs(params)
29+
if err != nil {
30+
return nil, err
31+
}
32+
33+
for _, config := range resp.DeploymentConfigsList {
34+
resources = append(resources, &CodeDeployDeploymentConfig{
35+
svc: svc,
36+
deploymentConfigName: config,
37+
})
38+
}
39+
40+
if resp.NextToken == nil {
41+
break
42+
}
43+
44+
params.NextToken = resp.NextToken
45+
}
46+
47+
return resources, nil
48+
}
49+
50+
func (f *CodeDeployDeploymentConfig) Filter() error {
51+
if strings.HasPrefix(*f.deploymentConfigName, "CodeDeployDefault") {
52+
return fmt.Errorf("cannot delete default codedeploy config")
53+
}
54+
return nil
55+
}
56+
57+
func (f *CodeDeployDeploymentConfig) Remove() error {
58+
_, err := f.svc.DeleteDeploymentConfig(&codedeploy.DeleteDeploymentConfigInput{
59+
DeploymentConfigName: f.deploymentConfigName,
60+
})
61+
62+
return err
63+
}
64+
65+
func (f *CodeDeployDeploymentConfig) Properties() types.Properties {
66+
properties := types.NewProperties()
67+
properties.Set("DeploymentConfigName", f.deploymentConfigName)
68+
return properties
69+
}
70+
71+
func (f *CodeDeployDeploymentConfig) String() string {
72+
return *f.deploymentConfigName
73+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package resources
2+
3+
import (
4+
"github.com/aws/aws-sdk-go/aws/session"
5+
"github.com/aws/aws-sdk-go/service/codedeploy"
6+
"github.com/rebuy-de/aws-nuke/v2/pkg/types"
7+
)
8+
9+
type CodeDeployDeploymentGroup struct {
10+
svc *codedeploy.CodeDeploy
11+
deploymentGroupName *string
12+
applicationName *string
13+
}
14+
15+
func init() {
16+
register("CodeDeployDeploymentGroup", ListCodeDeployDeploymentGroups)
17+
}
18+
19+
func ListCodeDeployDeploymentGroups(sess *session.Session) ([]Resource, error) {
20+
svc := codedeploy.New(sess)
21+
resources := []Resource{}
22+
23+
appParams := &codedeploy.ListApplicationsInput{}
24+
appResp, err := svc.ListApplications(appParams)
25+
if err != nil {
26+
return nil, err
27+
}
28+
29+
for _, appName := range appResp.Applications {
30+
// For each application, list deployment groups
31+
deploymentGroupParams := &codedeploy.ListDeploymentGroupsInput{
32+
ApplicationName: appName,
33+
}
34+
deploymentGroupResp, err := svc.ListDeploymentGroups(deploymentGroupParams)
35+
if err != nil {
36+
return nil, err
37+
}
38+
39+
for _, group := range deploymentGroupResp.DeploymentGroups {
40+
resources = append(resources, &CodeDeployDeploymentGroup{
41+
svc: svc,
42+
deploymentGroupName: group,
43+
applicationName: appName,
44+
})
45+
}
46+
}
47+
48+
return resources, nil
49+
}
50+
51+
func (f *CodeDeployDeploymentGroup) Remove() error {
52+
_, err := f.svc.DeleteDeploymentGroup(&codedeploy.DeleteDeploymentGroupInput{
53+
ApplicationName: f.applicationName,
54+
DeploymentGroupName: f.deploymentGroupName,
55+
})
56+
57+
return err
58+
}
59+
60+
func (f *CodeDeployDeploymentGroup) Properties() types.Properties {
61+
properties := types.NewProperties()
62+
properties.Set("DeploymentGroupName", f.deploymentGroupName)
63+
properties.Set("ApplicationName", f.applicationName)
64+
return properties
65+
}
66+
67+
func (f *CodeDeployDeploymentGroup) String() string {
68+
return *f.deploymentGroupName
69+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package resources
2+
3+
import (
4+
"fmt"
5+
"strings"
6+
7+
"github.com/aws/aws-sdk-go/aws/session"
8+
"github.com/aws/aws-sdk-go/service/codepipeline"
9+
"github.com/rebuy-de/aws-nuke/v2/pkg/types"
10+
)
11+
12+
type CodePipelineCustomActionType struct {
13+
svc *codepipeline.CodePipeline
14+
owner *string
15+
category *string
16+
provider *string
17+
version *string
18+
}
19+
20+
func init() {
21+
register("CodePipelineCustomActionType", ListCodePipelineCustomActionTypes, mapCloudControl("AWS::CodePipeline::CustomActionType"))
22+
}
23+
24+
func ListCodePipelineCustomActionTypes(sess *session.Session) ([]Resource, error) {
25+
svc := codepipeline.New(sess)
26+
resources := []Resource{}
27+
28+
params := &codepipeline.ListActionTypesInput{}
29+
30+
for {
31+
resp, err := svc.ListActionTypes(params)
32+
if err != nil {
33+
return nil, err
34+
}
35+
36+
for _, actionTypes := range resp.ActionTypes {
37+
resources = append(resources, &CodePipelineCustomActionType{
38+
svc: svc,
39+
owner: actionTypes.Id.Owner,
40+
category: actionTypes.Id.Category,
41+
provider: actionTypes.Id.Provider,
42+
version: actionTypes.Id.Version,
43+
})
44+
}
45+
46+
if resp.NextToken == nil {
47+
break
48+
}
49+
50+
params.NextToken = resp.NextToken
51+
}
52+
53+
return resources, nil
54+
}
55+
56+
func (f *CodePipelineCustomActionType) Filter() error {
57+
if !strings.HasPrefix(*f.owner, "Custom") {
58+
return fmt.Errorf("cannot delete default codepipeline custom action type")
59+
}
60+
return nil
61+
}
62+
63+
func (f *CodePipelineCustomActionType) Remove() error {
64+
_, err := f.svc.DeleteCustomActionType(&codepipeline.DeleteCustomActionTypeInput{
65+
Category: f.category,
66+
Provider: f.provider,
67+
Version: f.version,
68+
})
69+
70+
return err
71+
}
72+
73+
func (f *CodePipelineCustomActionType) Properties() types.Properties {
74+
properties := types.NewProperties()
75+
properties.Set("Category", f.category)
76+
properties.Set("Owner", f.owner)
77+
properties.Set("Provider", f.provider)
78+
properties.Set("Version", f.version)
79+
return properties
80+
}
81+
82+
func (f *CodePipelineCustomActionType) String() string {
83+
return *f.owner
84+
}

resources/codepipeline-webhooks.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package resources
2+
3+
import (
4+
"github.com/aws/aws-sdk-go/aws/session"
5+
"github.com/aws/aws-sdk-go/service/codepipeline"
6+
"github.com/rebuy-de/aws-nuke/v2/pkg/types"
7+
)
8+
9+
type CodePipelineWebhook struct {
10+
svc *codepipeline.CodePipeline
11+
name *string
12+
}
13+
14+
func init() {
15+
register("CodePipelineWebhook", ListCodePipelineWebhooks)
16+
}
17+
18+
func ListCodePipelineWebhooks(sess *session.Session) ([]Resource, error) {
19+
svc := codepipeline.New(sess)
20+
resources := []Resource{}
21+
22+
params := &codepipeline.ListWebhooksInput{}
23+
24+
for {
25+
resp, err := svc.ListWebhooks(params)
26+
if err != nil {
27+
return nil, err
28+
}
29+
30+
for _, webHooks := range resp.Webhooks {
31+
resources = append(resources, &CodePipelineWebhook{
32+
svc: svc,
33+
name: webHooks.Definition.Name,
34+
})
35+
}
36+
37+
if resp.NextToken == nil {
38+
break
39+
}
40+
41+
params.NextToken = resp.NextToken
42+
}
43+
44+
return resources, nil
45+
}
46+
47+
func (f *CodePipelineWebhook) Remove() error {
48+
_, err := f.svc.DeleteWebhook(&codepipeline.DeleteWebhookInput{
49+
Name: f.name,
50+
})
51+
52+
return err
53+
}
54+
55+
func (f *CodePipelineWebhook) Properties() types.Properties {
56+
properties := types.NewProperties()
57+
properties.Set("Name", f.name)
58+
return properties
59+
}
60+
61+
func (f *CodePipelineWebhook) String() string {
62+
return *f.name
63+
}

0 commit comments

Comments
 (0)