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 }