github.com/erriapo/terraform@v0.6.12-0.20160203182612-0340ea72354f/builtin/providers/aws/resource_aws_ecr_repository.go (about)

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