github.com/tarrant/terraform@v0.3.8-0.20150402012457-f68c9eee638e/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: envDefaultFunc("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  			},
    41  			"tenant_id": &schema.Schema{
    42  				Type:     schema.TypeString,
    43  				Optional: true,
    44  				ForceNew: true,
    45  			},
    46  		},
    47  	}
    48  }
    49  
    50  func resourceNetworkingNetworkV2Create(d *schema.ResourceData, meta interface{}) error {
    51  	config := meta.(*Config)
    52  	networkingClient, err := config.networkingV2Client(d.Get("region").(string))
    53  	if err != nil {
    54  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
    55  	}
    56  
    57  	createOpts := networks.CreateOpts{
    58  		Name:     d.Get("name").(string),
    59  		TenantID: d.Get("tenant_id").(string),
    60  	}
    61  
    62  	asuRaw := d.Get("admin_state_up").(string)
    63  	if asuRaw != "" {
    64  		asu, err := strconv.ParseBool(asuRaw)
    65  		if err != nil {
    66  			return fmt.Errorf("admin_state_up, if provided, must be either 'true' or 'false'")
    67  		}
    68  		createOpts.AdminStateUp = &asu
    69  	}
    70  
    71  	sharedRaw := d.Get("shared").(string)
    72  	if sharedRaw != "" {
    73  		shared, err := strconv.ParseBool(sharedRaw)
    74  		if err != nil {
    75  			return fmt.Errorf("shared, if provided, must be either 'true' or 'false': %v", err)
    76  		}
    77  		createOpts.Shared = &shared
    78  	}
    79  
    80  	log.Printf("[DEBUG] Create Options: %#v", createOpts)
    81  	n, err := networks.Create(networkingClient, createOpts).Extract()
    82  	if err != nil {
    83  		return fmt.Errorf("Error creating OpenStack Neutron network: %s", err)
    84  	}
    85  	log.Printf("[INFO] Network ID: %s", n.ID)
    86  
    87  	d.SetId(n.ID)
    88  
    89  	return resourceNetworkingNetworkV2Read(d, meta)
    90  }
    91  
    92  func resourceNetworkingNetworkV2Read(d *schema.ResourceData, meta interface{}) error {
    93  	config := meta.(*Config)
    94  	networkingClient, err := config.networkingV2Client(d.Get("region").(string))
    95  	if err != nil {
    96  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
    97  	}
    98  
    99  	n, err := networks.Get(networkingClient, d.Id()).Extract()
   100  	if err != nil {
   101  		return CheckDeleted(d, err, "network")
   102  	}
   103  
   104  	log.Printf("[DEBUG] Retreived Network %s: %+v", d.Id(), n)
   105  
   106  	d.Set("name", n.Name)
   107  	d.Set("admin_state_up", strconv.FormatBool(n.AdminStateUp))
   108  	d.Set("shared", strconv.FormatBool(n.Shared))
   109  	d.Set("tenant_id", n.TenantID)
   110  
   111  	return nil
   112  }
   113  
   114  func resourceNetworkingNetworkV2Update(d *schema.ResourceData, meta interface{}) error {
   115  	config := meta.(*Config)
   116  	networkingClient, err := config.networkingV2Client(d.Get("region").(string))
   117  	if err != nil {
   118  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
   119  	}
   120  
   121  	var updateOpts networks.UpdateOpts
   122  	if d.HasChange("name") {
   123  		updateOpts.Name = d.Get("name").(string)
   124  	}
   125  	if d.HasChange("admin_state_up") {
   126  		asuRaw := d.Get("admin_state_up").(string)
   127  		if asuRaw != "" {
   128  			asu, err := strconv.ParseBool(asuRaw)
   129  			if err != nil {
   130  				return fmt.Errorf("admin_state_up, if provided, must be either 'true' or 'false'")
   131  			}
   132  			updateOpts.AdminStateUp = &asu
   133  		}
   134  	}
   135  	if d.HasChange("shared") {
   136  		sharedRaw := d.Get("shared").(string)
   137  		if sharedRaw != "" {
   138  			shared, err := strconv.ParseBool(sharedRaw)
   139  			if err != nil {
   140  				return fmt.Errorf("shared, if provided, must be either 'true' or 'false': %v", err)
   141  			}
   142  			updateOpts.Shared = &shared
   143  		}
   144  	}
   145  
   146  	log.Printf("[DEBUG] Updating Network %s with options: %+v", d.Id(), updateOpts)
   147  
   148  	_, err = networks.Update(networkingClient, d.Id(), updateOpts).Extract()
   149  	if err != nil {
   150  		return fmt.Errorf("Error updating OpenStack Neutron Network: %s", err)
   151  	}
   152  
   153  	return resourceNetworkingNetworkV2Read(d, meta)
   154  }
   155  
   156  func resourceNetworkingNetworkV2Delete(d *schema.ResourceData, meta interface{}) error {
   157  	config := meta.(*Config)
   158  	networkingClient, err := config.networkingV2Client(d.Get("region").(string))
   159  	if err != nil {
   160  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
   161  	}
   162  
   163  	err = networks.Delete(networkingClient, d.Id()).ExtractErr()
   164  	if err != nil {
   165  		return fmt.Errorf("Error deleting OpenStack Neutron Network: %s", err)
   166  	}
   167  
   168  	d.SetId("")
   169  	return nil
   170  }