github.com/bendemaree/terraform@v0.5.4-0.20150613200311-f50d97d6eee6/builtin/providers/openstack/resource_openstack_networking_network_v2.go (about)

     1  package openstack
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"strconv"
     7  
     8  	"github.com/hashicorp/terraform/helper/schema"
     9  	"github.com/rackspace/gophercloud/openstack/networking/v2/networks"
    10  )
    11  
    12  func resourceNetworkingNetworkV2() *schema.Resource {
    13  	return &schema.Resource{
    14  		Create: resourceNetworkingNetworkV2Create,
    15  		Read:   resourceNetworkingNetworkV2Read,
    16  		Update: resourceNetworkingNetworkV2Update,
    17  		Delete: resourceNetworkingNetworkV2Delete,
    18  
    19  		Schema: map[string]*schema.Schema{
    20  			"region": &schema.Schema{
    21  				Type:        schema.TypeString,
    22  				Required:    true,
    23  				ForceNew:    true,
    24  				DefaultFunc: envDefaultFuncAllowMissing("OS_REGION_NAME"),
    25  			},
    26  			"name": &schema.Schema{
    27  				Type:     schema.TypeString,
    28  				Optional: true,
    29  				ForceNew: false,
    30  			},
    31  			"admin_state_up": &schema.Schema{
    32  				Type:     schema.TypeString,
    33  				Optional: true,
    34  				ForceNew: false,
    35  			},
    36  			"shared": &schema.Schema{
    37  				Type:     schema.TypeString,
    38  				Optional: true,
    39  				ForceNew: false,
    40  				Computed: true,
    41  			},
    42  			"tenant_id": &schema.Schema{
    43  				Type:     schema.TypeString,
    44  				Optional: true,
    45  				ForceNew: true,
    46  				Computed: true,
    47  			},
    48  		},
    49  	}
    50  }
    51  
    52  func resourceNetworkingNetworkV2Create(d *schema.ResourceData, meta interface{}) error {
    53  	config := meta.(*Config)
    54  	networkingClient, err := config.networkingV2Client(d.Get("region").(string))
    55  	if err != nil {
    56  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
    57  	}
    58  
    59  	createOpts := networks.CreateOpts{
    60  		Name:     d.Get("name").(string),
    61  		TenantID: d.Get("tenant_id").(string),
    62  	}
    63  
    64  	asuRaw := d.Get("admin_state_up").(string)
    65  	if asuRaw != "" {
    66  		asu, err := strconv.ParseBool(asuRaw)
    67  		if err != nil {
    68  			return fmt.Errorf("admin_state_up, if provided, must be either 'true' or 'false'")
    69  		}
    70  		createOpts.AdminStateUp = &asu
    71  	}
    72  
    73  	sharedRaw := d.Get("shared").(string)
    74  	if sharedRaw != "" {
    75  		shared, err := strconv.ParseBool(sharedRaw)
    76  		if err != nil {
    77  			return fmt.Errorf("shared, if provided, must be either 'true' or 'false': %v", err)
    78  		}
    79  		createOpts.Shared = &shared
    80  	}
    81  
    82  	log.Printf("[DEBUG] Create Options: %#v", createOpts)
    83  	n, err := networks.Create(networkingClient, createOpts).Extract()
    84  	if err != nil {
    85  		return fmt.Errorf("Error creating OpenStack Neutron network: %s", err)
    86  	}
    87  	log.Printf("[INFO] Network ID: %s", n.ID)
    88  
    89  	d.SetId(n.ID)
    90  
    91  	return resourceNetworkingNetworkV2Read(d, meta)
    92  }
    93  
    94  func resourceNetworkingNetworkV2Read(d *schema.ResourceData, meta interface{}) error {
    95  	config := meta.(*Config)
    96  	networkingClient, err := config.networkingV2Client(d.Get("region").(string))
    97  	if err != nil {
    98  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
    99  	}
   100  
   101  	n, err := networks.Get(networkingClient, d.Id()).Extract()
   102  	if err != nil {
   103  		return CheckDeleted(d, err, "network")
   104  	}
   105  
   106  	log.Printf("[DEBUG] Retreived Network %s: %+v", d.Id(), n)
   107  
   108  	d.Set("name", n.Name)
   109  	d.Set("admin_state_up", strconv.FormatBool(n.AdminStateUp))
   110  	d.Set("shared", strconv.FormatBool(n.Shared))
   111  	d.Set("tenant_id", n.TenantID)
   112  
   113  	return nil
   114  }
   115  
   116  func resourceNetworkingNetworkV2Update(d *schema.ResourceData, meta interface{}) error {
   117  	config := meta.(*Config)
   118  	networkingClient, err := config.networkingV2Client(d.Get("region").(string))
   119  	if err != nil {
   120  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
   121  	}
   122  
   123  	var updateOpts networks.UpdateOpts
   124  	if d.HasChange("name") {
   125  		updateOpts.Name = d.Get("name").(string)
   126  	}
   127  	if d.HasChange("admin_state_up") {
   128  		asuRaw := d.Get("admin_state_up").(string)
   129  		if asuRaw != "" {
   130  			asu, err := strconv.ParseBool(asuRaw)
   131  			if err != nil {
   132  				return fmt.Errorf("admin_state_up, if provided, must be either 'true' or 'false'")
   133  			}
   134  			updateOpts.AdminStateUp = &asu
   135  		}
   136  	}
   137  	if d.HasChange("shared") {
   138  		sharedRaw := d.Get("shared").(string)
   139  		if sharedRaw != "" {
   140  			shared, err := strconv.ParseBool(sharedRaw)
   141  			if err != nil {
   142  				return fmt.Errorf("shared, if provided, must be either 'true' or 'false': %v", err)
   143  			}
   144  			updateOpts.Shared = &shared
   145  		}
   146  	}
   147  
   148  	log.Printf("[DEBUG] Updating Network %s with options: %+v", d.Id(), updateOpts)
   149  
   150  	_, err = networks.Update(networkingClient, d.Id(), updateOpts).Extract()
   151  	if err != nil {
   152  		return fmt.Errorf("Error updating OpenStack Neutron Network: %s", err)
   153  	}
   154  
   155  	return resourceNetworkingNetworkV2Read(d, meta)
   156  }
   157  
   158  func resourceNetworkingNetworkV2Delete(d *schema.ResourceData, meta interface{}) error {
   159  	config := meta.(*Config)
   160  	networkingClient, err := config.networkingV2Client(d.Get("region").(string))
   161  	if err != nil {
   162  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
   163  	}
   164  
   165  	err = networks.Delete(networkingClient, d.Id()).ExtractErr()
   166  	if err != nil {
   167  		return fmt.Errorf("Error deleting OpenStack Neutron Network: %s", err)
   168  	}
   169  
   170  	d.SetId("")
   171  	return nil
   172  }