github.com/terraform-modules-krish/terratest@v0.29.0/modules/aws/ecs.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/aws/aws-sdk-go/aws"
     7  	"github.com/aws/aws-sdk-go/service/ecs"
     8  	"github.com/terraform-modules-krish/terratest/modules/testing"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  // GetEcsCluster fetches information about specified ECS cluster.
    13  func GetEcsCluster(t testing.TestingT, region string, name string) *ecs.Cluster {
    14  	cluster, err := GetEcsClusterE(t, region, name)
    15  	require.NoError(t, err)
    16  	return cluster
    17  }
    18  
    19  // GetEcsClusterE fetches information about specified ECS cluster.
    20  func GetEcsClusterE(t testing.TestingT, region string, name string) (*ecs.Cluster, error) {
    21  	client, err := NewEcsClientE(t, region)
    22  	if err != nil {
    23  		return nil, err
    24  	}
    25  	input := &ecs.DescribeClustersInput{
    26  		Clusters: []*string{
    27  			aws.String(name),
    28  		},
    29  	}
    30  	output, err := client.DescribeClusters(input)
    31  	if err != nil {
    32  		return nil, err
    33  	}
    34  
    35  	numClusters := len(output.Clusters)
    36  	if numClusters != 1 {
    37  		return nil, fmt.Errorf("Expected to find 1 ECS cluster named '%s' in region '%v', but found '%d'",
    38  			name, region, numClusters)
    39  	}
    40  
    41  	return output.Clusters[0], nil
    42  }
    43  
    44  // GetDefaultEcsClusterE fetches information about default ECS cluster.
    45  func GetDefaultEcsClusterE(t testing.TestingT, region string) (*ecs.Cluster, error) {
    46  	return GetEcsClusterE(t, region, "default")
    47  }
    48  
    49  // GetDefaultEcsCluster fetches information about default ECS cluster.
    50  func GetDefaultEcsCluster(t testing.TestingT, region string) *ecs.Cluster {
    51  	return GetEcsCluster(t, region, "default")
    52  }
    53  
    54  // CreateEcsCluster creates ECS cluster in the given region under the given name.
    55  func CreateEcsCluster(t testing.TestingT, region string, name string) *ecs.Cluster {
    56  	cluster, err := CreateEcsClusterE(t, region, name)
    57  	require.NoError(t, err)
    58  	return cluster
    59  }
    60  
    61  // CreateEcsClusterE creates ECS cluster in the given region under the given name.
    62  func CreateEcsClusterE(t testing.TestingT, region string, name string) (*ecs.Cluster, error) {
    63  	client := NewEcsClient(t, region)
    64  	cluster, err := client.CreateCluster(&ecs.CreateClusterInput{
    65  		ClusterName: aws.String(name),
    66  	})
    67  	if err != nil {
    68  		return nil, err
    69  	}
    70  	return cluster.Cluster, nil
    71  }
    72  
    73  func DeleteEcsCluster(t testing.TestingT, region string, cluster *ecs.Cluster) {
    74  	err := DeleteEcsClusterE(t, region, cluster)
    75  	require.NoError(t, err)
    76  }
    77  
    78  // DeleteEcsClusterE deletes existing ECS cluster in the given region.
    79  func DeleteEcsClusterE(t testing.TestingT, region string, cluster *ecs.Cluster) error {
    80  	client := NewEcsClient(t, region)
    81  	_, err := client.DeleteCluster(&ecs.DeleteClusterInput{
    82  		Cluster: aws.String(*cluster.ClusterName),
    83  	})
    84  	return err
    85  }
    86  
    87  // GetEcsService fetches information about specified ECS service.
    88  func GetEcsService(t testing.TestingT, region string, clusterName string, serviceName string) *ecs.Service {
    89  	service, err := GetEcsServiceE(t, region, clusterName, serviceName)
    90  	require.NoError(t, err)
    91  	return service
    92  }
    93  
    94  // GetEcsServiceE fetches information about specified ECS service.
    95  func GetEcsServiceE(t testing.TestingT, region string, clusterName string, serviceName string) (*ecs.Service, error) {
    96  	output, err := NewEcsClient(t, region).DescribeServices(&ecs.DescribeServicesInput{
    97  		Cluster: aws.String(clusterName),
    98  		Services: []*string{
    99  			aws.String(serviceName),
   100  		},
   101  	})
   102  	if err != nil {
   103  		return nil, err
   104  	}
   105  
   106  	numServices := len(output.Services)
   107  	if numServices != 1 {
   108  		return nil, fmt.Errorf(
   109  			"Expected to find 1 ECS service named '%s' in cluster '%s' in region '%v', but found '%d'",
   110  			serviceName, clusterName, region, numServices)
   111  	}
   112  	return output.Services[0], nil
   113  }
   114  
   115  // GetEcsTaskDefinition fetches information about specified ECS task definition.
   116  func GetEcsTaskDefinition(t testing.TestingT, region string, taskDefinition string) *ecs.TaskDefinition {
   117  	task, err := GetEcsTaskDefinitionE(t, region, taskDefinition)
   118  	require.NoError(t, err)
   119  	return task
   120  }
   121  
   122  // GetEcsTaskDefinitionE fetches information about specified ECS task definition.
   123  func GetEcsTaskDefinitionE(t testing.TestingT, region string, taskDefinition string) (*ecs.TaskDefinition, error) {
   124  	output, err := NewEcsClient(t, region).DescribeTaskDefinition(&ecs.DescribeTaskDefinitionInput{
   125  		TaskDefinition: aws.String(taskDefinition),
   126  	})
   127  	if err != nil {
   128  		return nil, err
   129  	}
   130  	return output.TaskDefinition, nil
   131  }
   132  
   133  // NewEcsClient creates en ECS client.
   134  func NewEcsClient(t testing.TestingT, region string) *ecs.ECS {
   135  	client, err := NewEcsClientE(t, region)
   136  	require.NoError(t, err)
   137  	return client
   138  }
   139  
   140  // NewEcsClientE creates an ECS client.
   141  func NewEcsClientE(t testing.TestingT, region string) (*ecs.ECS, error) {
   142  	sess, err := NewAuthenticatedSession(region)
   143  	if err != nil {
   144  		return nil, err
   145  	}
   146  	return ecs.New(sess), nil
   147  }