github.com/andresvia/terraform@v0.6.15-0.20160412045437-d51c75946785/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 20 Schema: map[string]*schema.Schema{ 21 "name": &schema.Schema{ 22 Type: schema.TypeString, 23 Required: true, 24 ForceNew: true, 25 }, 26 "arn": &schema.Schema{ 27 Type: schema.TypeString, 28 Computed: true, 29 }, 30 "registry_id": &schema.Schema{ 31 Type: schema.TypeString, 32 Computed: true, 33 }, 34 "repository_url": &schema.Schema{ 35 Type: schema.TypeString, 36 Computed: true, 37 }, 38 }, 39 } 40 } 41 42 func resourceAwsEcrRepositoryCreate(d *schema.ResourceData, meta interface{}) error { 43 conn := meta.(*AWSClient).ecrconn 44 45 input := ecr.CreateRepositoryInput{ 46 RepositoryName: aws.String(d.Get("name").(string)), 47 } 48 49 log.Printf("[DEBUG] Creating ECR resository: %s", input) 50 out, err := conn.CreateRepository(&input) 51 if err != nil { 52 return err 53 } 54 55 repository := *out.Repository 56 57 log.Printf("[DEBUG] ECR repository created: %q", *repository.RepositoryArn) 58 59 d.SetId(*repository.RepositoryName) 60 d.Set("arn", *repository.RepositoryArn) 61 d.Set("registry_id", *repository.RegistryId) 62 63 return resourceAwsEcrRepositoryRead(d, meta) 64 } 65 66 func resourceAwsEcrRepositoryRead(d *schema.ResourceData, meta interface{}) error { 67 conn := meta.(*AWSClient).ecrconn 68 69 log.Printf("[DEBUG] Reading repository %s", d.Id()) 70 out, err := conn.DescribeRepositories(&ecr.DescribeRepositoriesInput{ 71 RegistryId: aws.String(d.Get("registry_id").(string)), 72 RepositoryNames: []*string{aws.String(d.Id())}, 73 }) 74 if err != nil { 75 if ecrerr, ok := err.(awserr.Error); ok && ecrerr.Code() == "RepositoryNotFoundException" { 76 d.SetId("") 77 return nil 78 } 79 return err 80 } 81 82 repository := out.Repositories[0] 83 84 log.Printf("[DEBUG] Received repository %s", out) 85 86 d.SetId(*repository.RepositoryName) 87 d.Set("arn", *repository.RepositoryArn) 88 d.Set("registry_id", *repository.RegistryId) 89 90 repositoryUrl := buildRepositoryUrl(repository, meta.(*AWSClient).region) 91 log.Printf("[INFO] Setting the repository url to be %s", repositoryUrl) 92 d.Set("repository_url", repositoryUrl) 93 94 return nil 95 } 96 97 func buildRepositoryUrl(repo *ecr.Repository, region string) string { 98 return fmt.Sprintf("https://%s.dkr.ecr.%s.amazonaws.com/%s", *repo.RegistryId, region, *repo.RepositoryName) 99 } 100 101 func resourceAwsEcrRepositoryDelete(d *schema.ResourceData, meta interface{}) error { 102 conn := meta.(*AWSClient).ecrconn 103 104 _, err := conn.DeleteRepository(&ecr.DeleteRepositoryInput{ 105 RepositoryName: aws.String(d.Id()), 106 RegistryId: aws.String(d.Get("registry_id").(string)), 107 Force: aws.Bool(true), 108 }) 109 if err != nil { 110 if ecrerr, ok := err.(awserr.Error); ok && ecrerr.Code() == "RepositoryNotFoundException" { 111 d.SetId("") 112 return nil 113 } 114 return err 115 } 116 117 log.Printf("[DEBUG] repository %q deleted.", d.Get("arn").(string)) 118 119 return nil 120 }