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

     1  package rabbitmq
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/michaelklishin/rabbit-hole"
     8  
     9  	"github.com/hashicorp/terraform/helper/schema"
    10  )
    11  
    12  func resourceVhost() *schema.Resource {
    13  	return &schema.Resource{
    14  		Create: CreateVhost,
    15  		Read:   ReadVhost,
    16  		Delete: DeleteVhost,
    17  		Importer: &schema.ResourceImporter{
    18  			State: schema.ImportStatePassthrough,
    19  		},
    20  
    21  		Schema: map[string]*schema.Schema{
    22  			"name": &schema.Schema{
    23  				Type:     schema.TypeString,
    24  				Required: true,
    25  				ForceNew: true,
    26  			},
    27  		},
    28  	}
    29  }
    30  
    31  func CreateVhost(d *schema.ResourceData, meta interface{}) error {
    32  	rmqc := meta.(*rabbithole.Client)
    33  
    34  	vhost := d.Get("name").(string)
    35  
    36  	log.Printf("[DEBUG] RabbitMQ: Attempting to create vhost %s", vhost)
    37  
    38  	resp, err := rmqc.PutVhost(vhost, rabbithole.VhostSettings{})
    39  	log.Printf("[DEBUG] RabbitMQ: vhost creation response: %#v", resp)
    40  	if err != nil {
    41  		return err
    42  	}
    43  
    44  	d.SetId(vhost)
    45  
    46  	return ReadVhost(d, meta)
    47  }
    48  
    49  func ReadVhost(d *schema.ResourceData, meta interface{}) error {
    50  	rmqc := meta.(*rabbithole.Client)
    51  
    52  	vhost, err := rmqc.GetVhost(d.Id())
    53  	if err != nil {
    54  		return checkDeleted(d, err)
    55  	}
    56  
    57  	log.Printf("[DEBUG] RabbitMQ: Vhost retrieved: %#v", vhost)
    58  
    59  	d.Set("name", vhost.Name)
    60  
    61  	return nil
    62  }
    63  
    64  func DeleteVhost(d *schema.ResourceData, meta interface{}) error {
    65  	rmqc := meta.(*rabbithole.Client)
    66  
    67  	log.Printf("[DEBUG] RabbitMQ: Attempting to delete vhost %s", d.Id())
    68  
    69  	resp, err := rmqc.DeleteVhost(d.Id())
    70  	log.Printf("[DEBUG] RabbitMQ: vhost deletion response: %#v", resp)
    71  	if err != nil {
    72  		return err
    73  	}
    74  
    75  	if resp.StatusCode == 404 {
    76  		// the vhost was automatically deleted
    77  		return nil
    78  	}
    79  
    80  	if resp.StatusCode >= 400 {
    81  		return fmt.Errorf("Error deleting RabbitMQ user: %s", resp.Status)
    82  	}
    83  
    84  	return nil
    85  }