github.com/armen/terraform@v0.5.2-0.20150529052519-caa8117a08f1/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 }