github.com/gabrielperezs/terraform@v0.7.0-rc2.0.20160715084931-f7da2612946f/builtin/providers/aws/resource_aws_ecr_repository.go (about) 1 package aws 2 3 import ( 4 "log" 5 6 "fmt" 7 8 "github.com/aws/aws-sdk-go/aws" 9 "github.com/aws/aws-sdk-go/aws/awserr" 10 "github.com/aws/aws-sdk-go/service/ecr" 11 "github.com/hashicorp/terraform/helper/schema" 12 ) 13 14 func resourceAwsEcrRepository() *schema.Resource { 15 return &schema.Resource{ 16 Create: resourceAwsEcrRepositoryCreate, 17 Read: resourceAwsEcrRepositoryRead, 18 Delete: resourceAwsEcrRepositoryDelete, 19 Importer: &schema.ResourceImporter{ 20 State: schema.ImportStatePassthrough, 21 }, 22 23 Schema: map[string]*schema.Schema{ 24 "name": &schema.Schema{ 25 Type: schema.TypeString, 26 Required: true, 27 ForceNew: true, 28 }, 29 "arn": &schema.Schema{ 30 Type: schema.TypeString, 31 Computed: true, 32 }, 33 "registry_id": &schema.Schema{ 34 Type: schema.TypeString, 35 Computed: true, 36 }, 37 "repository_url": &schema.Schema{ 38 Type: schema.TypeString, 39 Computed: true, 40 }, 41 }, 42 } 43 } 44 45 func resourceAwsEcrRepositoryCreate(d *schema.ResourceData, meta interface{}) error { 46 conn := meta.(*AWSClient).ecrconn 47 48 input := ecr.CreateRepositoryInput{ 49 RepositoryName: aws.String(d.Get("name").(string)), 50 } 51 52 log.Printf("[DEBUG] Creating ECR resository: %s", input) 53 out, err := conn.CreateRepository(&input) 54 if err != nil { 55 return err 56 } 57 58 repository := *out.Repository 59 60 log.Printf("[DEBUG] ECR repository created: %q", *repository.RepositoryArn) 61 62 d.SetId(*repository.RepositoryName) 63 d.Set("arn", *repository.RepositoryArn) 64 d.Set("registry_id", *repository.RegistryId) 65 66 return resourceAwsEcrRepositoryRead(d, meta) 67 } 68 69 func resourceAwsEcrRepositoryRead(d *schema.ResourceData, meta interface{}) error { 70 conn := meta.(*AWSClient).ecrconn 71 72 log.Printf("[DEBUG] Reading repository %s", d.Id()) 73 out, err := conn.DescribeRepositories(&ecr.DescribeRepositoriesInput{ 74 RepositoryNames: []*string{aws.String(d.Id())}, 75 }) 76 if err != nil { 77 if ecrerr, ok := err.(awserr.Error); ok && ecrerr.Code() == "RepositoryNotFoundException" { 78 d.SetId("") 79 return nil 80 } 81 return err 82 } 83 84 repository := out.Repositories[0] 85 86 log.Printf("[DEBUG] Received repository %s", out) 87 88 d.SetId(*repository.RepositoryName) 89 d.Set("arn", *repository.RepositoryArn) 90 d.Set("registry_id", *repository.RegistryId) 91 d.Set("name", repository.RepositoryName) 92 93 repositoryUrl := buildRepositoryUrl(repository, meta.(*AWSClient).region) 94 log.Printf("[INFO] Setting the repository url to be %s", repositoryUrl) 95 d.Set("repository_url", repositoryUrl) 96 97 return nil 98 } 99 100 func buildRepositoryUrl(repo *ecr.Repository, region string) string { 101 return fmt.Sprintf("https://%s.dkr.ecr.%s.amazonaws.com/%s", *repo.RegistryId, region, *repo.RepositoryName) 102 } 103 104 func resourceAwsEcrRepositoryDelete(d *schema.ResourceData, meta interface{}) error { 105 conn := meta.(*AWSClient).ecrconn 106 107 _, err := conn.DeleteRepository(&ecr.DeleteRepositoryInput{ 108 RepositoryName: aws.String(d.Id()), 109 RegistryId: aws.String(d.Get("registry_id").(string)), 110 Force: aws.Bool(true), 111 }) 112 if err != nil { 113 if ecrerr, ok := err.(awserr.Error); ok && ecrerr.Code() == "RepositoryNotFoundException" { 114 d.SetId("") 115 return nil 116 } 117 return err 118 } 119 120 log.Printf("[DEBUG] repository %q deleted.", d.Get("arn").(string)) 121 122 return nil 123 }