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 }