github.com/GoogleCloudPlatform/terraformer@v0.8.18/providers/aws/docdb.go (about) 1 // Copyright 2019 The Terraformer Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package aws 16 17 import ( 18 "context" 19 "log" 20 21 "github.com/GoogleCloudPlatform/terraformer/terraformutils" 22 "github.com/aws/aws-sdk-go-v2/service/docdb" 23 ) 24 25 var docDBAllowEmptyValues = []string{"tags."} 26 27 type DocDBGenerator struct { 28 AWSService 29 } 30 31 func (g *DocDBGenerator) InitResources() error { 32 config, e := g.generateConfig() 33 if e != nil { 34 return e 35 } 36 svc := docdb.NewFromConfig(config) 37 38 if err := g.getClusters(svc); err != nil { 39 log.Println(err) 40 } 41 42 if err := g.getSubnetGroups(svc); err != nil { 43 log.Println(err) 44 } 45 46 if err := g.getParameterGroups(svc); err != nil { 47 log.Println(err) 48 } 49 50 return nil 51 } 52 53 func (g *DocDBGenerator) getClusters(svc *docdb.Client) error { 54 clusterPaginator := docdb.NewDescribeDBClustersPaginator(svc, &docdb.DescribeDBClustersInput{}) 55 for clusterPaginator.HasMorePages() { 56 page, err := clusterPaginator.NextPage(context.TODO()) 57 if err != nil { 58 return err 59 } 60 61 for _, cluster := range page.DBClusters { 62 63 resourceName := StringValue(cluster.DBClusterIdentifier) 64 65 g.Resources = append(g.Resources, terraformutils.NewSimpleResource( 66 resourceName, 67 resourceName, 68 "aws_docdb_cluster", 69 "aws", 70 docDBAllowEmptyValues)) 71 72 for _, member := range cluster.DBClusterMembers { 73 instanceName := StringValue(member.DBInstanceIdentifier) 74 g.Resources = append(g.Resources, terraformutils.NewSimpleResource( 75 instanceName, 76 instanceName, 77 "aws_docdb_cluster_instance", 78 "aws", 79 docDBAllowEmptyValues)) 80 } 81 82 } 83 } 84 85 return nil 86 } 87 88 func (g *DocDBGenerator) getSubnetGroups(svc *docdb.Client) error { 89 subnetGroupPaginator := docdb.NewDescribeDBSubnetGroupsPaginator(svc, &docdb.DescribeDBSubnetGroupsInput{}) 90 91 for subnetGroupPaginator.HasMorePages() { 92 page, err := subnetGroupPaginator.NextPage(context.TODO()) 93 if err != nil { 94 return err 95 } 96 97 for _, subnetGroup := range page.DBSubnetGroups { 98 resourceName := StringValue(subnetGroup.DBSubnetGroupName) 99 100 g.Resources = append(g.Resources, terraformutils.NewSimpleResource( 101 resourceName, 102 resourceName, 103 "aws_docdb_subnet_group", 104 "aws", 105 docDBAllowEmptyValues)) 106 107 } 108 } 109 110 return nil 111 } 112 113 func (g *DocDBGenerator) getParameterGroups(svc *docdb.Client) error { 114 parameterGroupPaginator := docdb.NewDescribeDBClusterParameterGroupsPaginator(svc, &docdb.DescribeDBClusterParameterGroupsInput{}) 115 116 for parameterGroupPaginator.HasMorePages() { 117 page, err := parameterGroupPaginator.NextPage(context.TODO()) 118 if err != nil { 119 return err 120 } 121 122 for _, parameterGroup := range page.DBClusterParameterGroups { 123 resourceName := StringValue(parameterGroup.DBClusterParameterGroupName) 124 125 g.Resources = append(g.Resources, terraformutils.NewSimpleResource( 126 resourceName, 127 resourceName, 128 "aws_docdb_cluster_parameter_group", 129 "aws", 130 docDBAllowEmptyValues)) 131 132 } 133 } 134 135 return nil 136 } 137 138 // PostConvertHook for add policy json as heredoc 139 func (g *DocDBGenerator) PostConvertHook() error { 140 return nil 141 }