func TestUpdate(t *testing.T) { th.SetupHTTP() defer th.TeardownHTTP() th.Mux.HandleFunc("/v2.0/subnets/08eae331-0402-425a-923c-34f7cfe39c1b", func(w http.ResponseWriter, r *http.Request) { th.TestMethod(t, r, "PUT") th.TestHeader(t, r, "X-Auth-Token", fake.TokenID) th.TestHeader(t, r, "Content-Type", "application/json") th.TestHeader(t, r, "Accept", "application/json") th.TestJSONRequest(t, r, ` { "subnet": { "name": "my_new_subnet", "dns_nameservers": ["foo"], "host_routes": [{"destination":"","nexthop": "bar"}] } } `) w.Header().Add("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) fmt.Fprintf(w, ` { "subnet": { "name": "my_new_subnet", "enable_dhcp": true, "network_id": "db193ab3-96e3-4cb3-8fc5-05f4296d0324", "tenant_id": "26a7980765d0414dbc1fc1f88cdb7e6e", "dns_nameservers": [], "allocation_pools": [ { "start": "10.0.0.2", "end": "10.0.0.254" } ], "host_routes": [], "ip_version": 4, "gateway_ip": "10.0.0.1", "cidr": "10.0.0.0/24", "id": "08eae331-0402-425a-923c-34f7cfe39c1b" } } `) }) opts := subnets.UpdateOpts{ Name: "my_new_subnet", DNSNameservers: []string{"foo"}, HostRoutes: []subnets.HostRoute{ {NextHop: "bar"}, }, } s, err := subnets.Update(fake.ServiceClient(), "08eae331-0402-425a-923c-34f7cfe39c1b", opts).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.Name, "my_new_subnet") th.AssertEquals(t, s.ID, "08eae331-0402-425a-923c-34f7cfe39c1b") }
func TestSubnetsNoGateway(t *testing.T) { client, err := clients.NewNetworkV2Client() if err != nil { t.Fatalf("Unable to create a network client: %v", err) } // Create Network network, err := CreateNetwork(t, client) if err != nil { t.Fatalf("Unable to create network: %v", err) } defer DeleteNetwork(t, client, network.ID) // Create Subnet subnet, err := CreateSubnetWithNoGateway(t, client, network.ID) if err != nil { t.Fatalf("Unable to create subnet: %v", err) } defer DeleteSubnet(t, client, subnet.ID) PrintSubnet(t, subnet) if subnet.GatewayIP != "" { t.Fatalf("A gateway exists when it shouldn't.") } subnetParts := strings.Split(subnet.CIDR, ".") newGateway := fmt.Sprintf("%s.%s.%s.1", subnetParts[0], subnetParts[1], subnetParts[2]) updateOpts := subnets.UpdateOpts{ GatewayIP: &newGateway, } newSubnet, err := subnets.Update(client, subnet.ID, updateOpts).Extract() if err != nil { t.Fatalf("Unable to update subnet") } if newSubnet.GatewayIP == "" { t.Fatalf("Gateway was not updated correctly") } }
func TestSubnetsDefaultGateway(t *testing.T) { client, err := clients.NewNetworkV2Client() if err != nil { t.Fatalf("Unable to create a network client: %v", err) } // Create Network network, err := CreateNetwork(t, client) if err != nil { t.Fatalf("Unable to create network: %v", err) } defer DeleteNetwork(t, client, network.ID) // Create Subnet subnet, err := CreateSubnetWithDefaultGateway(t, client, network.ID) if err != nil { t.Fatalf("Unable to create subnet: %v", err) } defer DeleteSubnet(t, client, subnet.ID) PrintSubnet(t, subnet) if subnet.GatewayIP == "" { t.Fatalf("A default gateway was not created.") } var noGateway = "" updateOpts := subnets.UpdateOpts{ GatewayIP: &noGateway, } newSubnet, err := subnets.Update(client, subnet.ID, updateOpts).Extract() if err != nil { t.Fatalf("Unable to update subnet") } if newSubnet.GatewayIP != "" { t.Fatalf("Gateway was not updated correctly") } }
func TestSubnetCRUD(t *testing.T) { client, err := clients.NewNetworkV2Client() if err != nil { t.Fatalf("Unable to create a network client: %v", err) } // Create Network network, err := CreateNetwork(t, client) if err != nil { t.Fatalf("Unable to create network: %v", err) } defer DeleteNetwork(t, client, network.ID) // Create Subnet subnet, err := CreateSubnet(t, client, network.ID) if err != nil { t.Fatalf("Unable to create subnet: %v", err) } defer DeleteSubnet(t, client, subnet.ID) PrintSubnet(t, subnet) // Update Subnet newSubnetName := tools.RandomString("TESTACC-", 8) updateOpts := subnets.UpdateOpts{ Name: newSubnetName, } _, err = subnets.Update(client, subnet.ID, updateOpts).Extract() if err != nil { t.Fatalf("Unable to update subnet: %v", err) } // Get subnet newSubnet, err := subnets.Get(client, subnet.ID).Extract() if err != nil { t.Fatalf("Unable to get subnet: %v", err) } PrintSubnet(t, newSubnet) }
func resourceNetworkingSubnetV2Update(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) networkingClient, err := config.networkingV2Client(d.Get("region").(string)) if err != nil { return fmt.Errorf("Error creating OpenStack networking client: %s", err) } // Check if both gateway_ip and no_gateway are set if _, ok := d.GetOk("gateway_ip"); ok { noGateway := d.Get("no_gateway").(bool) if noGateway { return fmt.Errorf("Both gateway_ip and no_gateway cannot be set.") } } var updateOpts subnets.UpdateOpts noGateway := d.Get("no_gateway").(bool) gatewayIP := d.Get("gateway_ip").(string) if gatewayIP != "" && noGateway { return fmt.Errorf("Both gateway_ip and no_gateway cannot be set") } if d.HasChange("name") { updateOpts.Name = d.Get("name").(string) } if d.HasChange("gateway_ip") { updateOpts.GatewayIP = nil if v, ok := d.GetOk("gateway_ip"); ok { gatewayIP := v.(string) updateOpts.GatewayIP = &gatewayIP } } if d.HasChange("no_gateway") { if d.Get("no_gateway").(bool) { gatewayIP := "" updateOpts.GatewayIP = &gatewayIP } } if d.HasChange("dns_nameservers") { updateOpts.DNSNameservers = resourceSubnetDNSNameserversV2(d) } if d.HasChange("host_routes") { updateOpts.HostRoutes = resourceSubnetHostRoutesV2(d) } if d.HasChange("enable_dhcp") { v := d.Get("enable_dhcp").(bool) updateOpts.EnableDHCP = &v } log.Printf("[DEBUG] Updating Subnet %s with options: %+v", d.Id(), updateOpts) _, err = subnets.Update(networkingClient, d.Id(), updateOpts).Extract() if err != nil { return fmt.Errorf("Error updating OpenStack Neutron Subnet: %s", err) } return resourceNetworkingSubnetV2Read(d, meta) }