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  }