github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/aws/resource_aws_codecommit_trigger.go (about)

     1  package aws
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/aws/aws-sdk-go/aws"
     8  	"github.com/aws/aws-sdk-go/service/codecommit"
     9  	"github.com/hashicorp/terraform/helper/schema"
    10  )
    11  
    12  func resourceAwsCodeCommitTrigger() *schema.Resource {
    13  	return &schema.Resource{
    14  		Create: resourceAwsCodeCommitTriggerCreate,
    15  		Read:   resourceAwsCodeCommitTriggerRead,
    16  		Delete: resourceAwsCodeCommitTriggerDelete,
    17  
    18  		Schema: map[string]*schema.Schema{
    19  			"repository_name": &schema.Schema{
    20  				Type:     schema.TypeString,
    21  				ForceNew: true,
    22  				Required: true,
    23  			},
    24  			"configuration_id": &schema.Schema{
    25  				Type:     schema.TypeString,
    26  				Computed: true,
    27  			},
    28  			"trigger": &schema.Schema{
    29  				Type:     schema.TypeSet,
    30  				ForceNew: true,
    31  				Required: true,
    32  				MaxItems: 10,
    33  				Elem: &schema.Resource{
    34  					Schema: map[string]*schema.Schema{
    35  						"name": &schema.Schema{
    36  							Type:     schema.TypeString,
    37  							Required: true,
    38  							ForceNew: true,
    39  						},
    40  
    41  						"destination_arn": &schema.Schema{
    42  							Type:     schema.TypeString,
    43  							Required: true,
    44  							ForceNew: true,
    45  						},
    46  
    47  						"custom_data": &schema.Schema{
    48  							Type:     schema.TypeString,
    49  							Optional: true,
    50  							ForceNew: true,
    51  						},
    52  
    53  						"branches": &schema.Schema{
    54  							Type:     schema.TypeList,
    55  							Optional: true,
    56  							ForceNew: true,
    57  							Elem:     &schema.Schema{Type: schema.TypeString},
    58  						},
    59  
    60  						"events": &schema.Schema{
    61  							Type:     schema.TypeList,
    62  							Required: true,
    63  							ForceNew: true,
    64  							Elem:     &schema.Schema{Type: schema.TypeString},
    65  						},
    66  					},
    67  				},
    68  			},
    69  		},
    70  	}
    71  }
    72  
    73  func resourceAwsCodeCommitTriggerCreate(d *schema.ResourceData, meta interface{}) error {
    74  	conn := meta.(*AWSClient).codecommitconn
    75  
    76  	// Expand the "trigger" set to aws-sdk-go compat []*codecommit.RepositoryTrigger
    77  	triggers := expandAwsCodeCommitTriggers(d.Get("trigger").(*schema.Set).List())
    78  
    79  	input := &codecommit.PutRepositoryTriggersInput{
    80  		RepositoryName: aws.String(d.Get("repository_name").(string)),
    81  		Triggers:       triggers,
    82  	}
    83  
    84  	resp, err := conn.PutRepositoryTriggers(input)
    85  	if err != nil {
    86  		return fmt.Errorf("Error creating CodeCommit Trigger: %s", err)
    87  	}
    88  
    89  	log.Printf("[INFO] Code Commit Trigger Created %s input %s", resp, input)
    90  
    91  	d.SetId(d.Get("repository_name").(string))
    92  	d.Set("configuration_id", resp.ConfigurationId)
    93  
    94  	return resourceAwsCodeCommitTriggerRead(d, meta)
    95  }
    96  
    97  func resourceAwsCodeCommitTriggerRead(d *schema.ResourceData, meta interface{}) error {
    98  	conn := meta.(*AWSClient).codecommitconn
    99  
   100  	input := &codecommit.GetRepositoryTriggersInput{
   101  		RepositoryName: aws.String(d.Id()),
   102  	}
   103  
   104  	resp, err := conn.GetRepositoryTriggers(input)
   105  	if err != nil {
   106  		return fmt.Errorf("Error reading CodeCommit Trigger: %s", err.Error())
   107  	}
   108  
   109  	log.Printf("[DEBUG] CodeCommit Trigger: %s", resp)
   110  
   111  	return nil
   112  }
   113  
   114  func resourceAwsCodeCommitTriggerDelete(d *schema.ResourceData, meta interface{}) error {
   115  
   116  	conn := meta.(*AWSClient).codecommitconn
   117  
   118  	log.Printf("[DEBUG] Deleting Trigger: %q", d.Id())
   119  
   120  	input := &codecommit.PutRepositoryTriggersInput{
   121  		RepositoryName: aws.String(d.Get("repository_name").(string)),
   122  		Triggers:       []*codecommit.RepositoryTrigger{},
   123  	}
   124  
   125  	_, err := conn.PutRepositoryTriggers(input)
   126  
   127  	if err != nil {
   128  		return err
   129  	}
   130  
   131  	return nil
   132  }
   133  
   134  func expandAwsCodeCommitTriggers(configured []interface{}) []*codecommit.RepositoryTrigger {
   135  	triggers := make([]*codecommit.RepositoryTrigger, 0, len(configured))
   136  	// Loop over our configured triggers and create
   137  	// an array of aws-sdk-go compatabile objects
   138  	for _, lRaw := range configured {
   139  		data := lRaw.(map[string]interface{})
   140  		t := &codecommit.RepositoryTrigger{
   141  			CustomData:     aws.String(data["custom_data"].(string)),
   142  			DestinationArn: aws.String(data["destination_arn"].(string)),
   143  			Name:           aws.String(data["name"].(string)),
   144  		}
   145  
   146  		branches := make([]*string, len(data["branches"].([]interface{})))
   147  		for i, vv := range data["branches"].([]interface{}) {
   148  			str := vv.(string)
   149  			branches[i] = aws.String(str)
   150  		}
   151  		t.Branches = branches
   152  
   153  		events := make([]*string, len(data["events"].([]interface{})))
   154  		for i, vv := range data["events"].([]interface{}) {
   155  			str := vv.(string)
   156  			events[i] = aws.String(str)
   157  		}
   158  		t.Events = events
   159  
   160  		triggers = append(triggers, t)
   161  	}
   162  	return triggers
   163  }