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

     1  package packet
     2  
     3  import (
     4  	"github.com/hashicorp/terraform/helper/schema"
     5  	"github.com/packethost/packngo"
     6  )
     7  
     8  func resourcePacketProject() *schema.Resource {
     9  	return &schema.Resource{
    10  		Create: resourcePacketProjectCreate,
    11  		Read:   resourcePacketProjectRead,
    12  		Update: resourcePacketProjectUpdate,
    13  		Delete: resourcePacketProjectDelete,
    14  
    15  		Schema: map[string]*schema.Schema{
    16  			"id": &schema.Schema{
    17  				Type:     schema.TypeString,
    18  				Computed: true,
    19  			},
    20  
    21  			"name": &schema.Schema{
    22  				Type:     schema.TypeString,
    23  				Required: true,
    24  			},
    25  
    26  			"payment_method": &schema.Schema{
    27  				Type:     schema.TypeString,
    28  				Optional: true,
    29  			},
    30  
    31  			"created": &schema.Schema{
    32  				Type:     schema.TypeString,
    33  				Computed: true,
    34  			},
    35  
    36  			"updated": &schema.Schema{
    37  				Type:     schema.TypeString,
    38  				Computed: true,
    39  			},
    40  		},
    41  	}
    42  }
    43  
    44  func resourcePacketProjectCreate(d *schema.ResourceData, meta interface{}) error {
    45  	client := meta.(*packngo.Client)
    46  
    47  	createRequest := &packngo.ProjectCreateRequest{
    48  		Name:          d.Get("name").(string),
    49  		PaymentMethod: d.Get("payment_method").(string),
    50  	}
    51  
    52  	project, _, err := client.Projects.Create(createRequest)
    53  	if err != nil {
    54  		return friendlyError(err)
    55  	}
    56  
    57  	d.SetId(project.ID)
    58  
    59  	return resourcePacketProjectRead(d, meta)
    60  }
    61  
    62  func resourcePacketProjectRead(d *schema.ResourceData, meta interface{}) error {
    63  	client := meta.(*packngo.Client)
    64  
    65  	key, _, err := client.Projects.Get(d.Id())
    66  	if err != nil {
    67  		err = friendlyError(err)
    68  
    69  		// If the project somehow already destroyed, mark as succesfully gone.
    70  		if isNotFound(err) {
    71  			d.SetId("")
    72  
    73  			return nil
    74  		}
    75  
    76  		return err
    77  	}
    78  
    79  	d.Set("id", key.ID)
    80  	d.Set("name", key.Name)
    81  	d.Set("created", key.Created)
    82  	d.Set("updated", key.Updated)
    83  
    84  	return nil
    85  }
    86  
    87  func resourcePacketProjectUpdate(d *schema.ResourceData, meta interface{}) error {
    88  	client := meta.(*packngo.Client)
    89  
    90  	updateRequest := &packngo.ProjectUpdateRequest{
    91  		ID:   d.Get("id").(string),
    92  		Name: d.Get("name").(string),
    93  	}
    94  
    95  	if attr, ok := d.GetOk("payment_method"); ok {
    96  		updateRequest.PaymentMethod = attr.(string)
    97  	}
    98  
    99  	_, _, err := client.Projects.Update(updateRequest)
   100  	if err != nil {
   101  		return friendlyError(err)
   102  	}
   103  
   104  	return resourcePacketProjectRead(d, meta)
   105  }
   106  
   107  func resourcePacketProjectDelete(d *schema.ResourceData, meta interface{}) error {
   108  	client := meta.(*packngo.Client)
   109  
   110  	_, err := client.Projects.Delete(d.Id())
   111  	if err != nil {
   112  		return friendlyError(err)
   113  	}
   114  
   115  	d.SetId("")
   116  	return nil
   117  }