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 { if _, ok2 := d.GetOk("no_gateway"); ok2 { return fmt.Errorf("Both gateway_ip and no_gateway cannot be set.") } } var updateOpts subnets.UpdateOpts if d.HasChange("name") { updateOpts.Name = d.Get("name").(string) } if d.HasChange("gateway_ip") { updateOpts.GatewayIP = d.Get("gateway_ip").(string) } if d.HasChange("no_gateway") { updateOpts.NoGateway = d.Get("no_gateway").(bool) } 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) }
func TestCRUD(t *testing.T) { Setup(t) defer Teardown() // Setup network t.Log("Setting up network") n, err := networks.Create(Client, networks.CreateOpts{Name: "tmp_network", AdminStateUp: networks.Up}).Extract() th.AssertNoErr(t, err) networkID := n.ID defer networks.Delete(Client, networkID) // Create subnet t.Log("Create subnet") enable := false opts := subnets.CreateOpts{ NetworkID: networkID, CIDR: "192.168.199.0/24", IPVersion: subnets.IPv4, Name: "my_subnet", EnableDHCP: &enable, } s, err := subnets.Create(Client, opts).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.NetworkID, networkID) th.AssertEquals(t, s.CIDR, "192.168.199.0/24") th.AssertEquals(t, s.IPVersion, 4) th.AssertEquals(t, s.Name, "my_subnet") th.AssertEquals(t, s.EnableDHCP, false) subnetID := s.ID // Get subnet t.Log("Getting subnet") s, err = subnets.Get(Client, subnetID).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.ID, subnetID) // Update subnet t.Log("Update subnet") s, err = subnets.Update(Client, subnetID, subnets.UpdateOpts{Name: "new_subnet_name"}).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.Name, "new_subnet_name") // Delete subnet t.Log("Delete subnet") res := subnets.Delete(Client, subnetID) th.AssertNoErr(t, res.Err) }
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) } var updateOpts subnets.UpdateOpts if d.HasChange("name") { updateOpts.Name = d.Get("name").(string) } if d.HasChange("gateway_ip") { updateOpts.GatewayIP = d.Get("gateway_ip").(string) } if d.HasChange("dns_nameservers") { updateOpts.DNSNameservers = resourceSubnetDNSNameserversV2(d) } if d.HasChange("host_routes") { updateOpts.HostRoutes = resourceSubnetHostRoutesV2(d) } if d.HasChange("enable_dhcp") { edRaw := d.Get("enable_dhcp").(string) if edRaw != "" { ed, err := strconv.ParseBool(edRaw) if err != nil { return fmt.Errorf("enable_dhcp, if provided, must be either 'true' or 'false'") } updateOpts.EnableDHCP = &ed } } 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) }
func TestSubnetCRUD(t *testing.T) { Setup(t) defer Teardown() // Setup network t.Log("Setting up network") n, err := networks.Create(Client, networks.CreateOpts{Name: "tmp_network", AdminStateUp: networks.Up}).Extract() th.AssertNoErr(t, err) networkID := n.ID defer networks.Delete(Client, networkID) // Create subnet t.Log("Create subnet") enable := false opts := subnets.CreateOpts{ NetworkID: networkID, CIDR: "192.168.199.0/24", IPVersion: subnets.IPv4, Name: "my_subnet", EnableDHCP: &enable, } s, err := subnets.Create(Client, opts).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.NetworkID, networkID) th.AssertEquals(t, s.CIDR, "192.168.199.0/24") th.AssertEquals(t, s.IPVersion, 4) th.AssertEquals(t, s.Name, "my_subnet") th.AssertEquals(t, s.EnableDHCP, false) th.AssertEquals(t, s.GatewayIP, "192.168.199.1") subnetID := s.ID // Get subnet t.Log("Getting subnet") s, err = subnets.Get(Client, subnetID).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.ID, subnetID) // Update subnet t.Log("Update subnet") s, err = subnets.Update(Client, subnetID, subnets.UpdateOpts{Name: "new_subnet_name"}).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.Name, "new_subnet_name") // Delete subnet t.Log("Delete subnet") res := subnets.Delete(Client, subnetID) th.AssertNoErr(t, res.Err) // Create subnet with no gateway t.Log("Create subnet with no gateway") opts = subnets.CreateOpts{ NetworkID: networkID, CIDR: "192.168.199.0/24", IPVersion: subnets.IPv4, Name: "my_subnet", EnableDHCP: &enable, NoGateway: true, } s, err = subnets.Create(Client, opts).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.NetworkID, networkID) th.AssertEquals(t, s.CIDR, "192.168.199.0/24") th.AssertEquals(t, s.IPVersion, 4) th.AssertEquals(t, s.Name, "my_subnet") th.AssertEquals(t, s.EnableDHCP, false) th.AssertEquals(t, s.GatewayIP, "") subnetID = s.ID // Get subnet t.Log("Getting subnet with no gateway") s, err = subnets.Get(Client, subnetID).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.ID, subnetID) // Update subnet t.Log("Update subnet with no gateway") s, err = subnets.Update(Client, subnetID, subnets.UpdateOpts{Name: "new_subnet_name"}).Extract() th.AssertNoErr(t, err) th.AssertEquals(t, s.Name, "new_subnet_name") // Delete subnet t.Log("Delete subnet with no gateway") res = subnets.Delete(Client, subnetID) th.AssertNoErr(t, res.Err) // Create subnet with invalid gateway configuration t.Log("Create subnet with invalid gateway configuration") opts = subnets.CreateOpts{ NetworkID: networkID, CIDR: "192.168.199.0/24", IPVersion: subnets.IPv4, Name: "my_subnet", EnableDHCP: &enable, NoGateway: true, GatewayIP: "192.168.199.1", } _, err = subnets.Create(Client, opts).Extract() if err == nil { t.Fatalf("Expected an error, got none") } }
// Update accepts a UpdateOpts struct and updates an existing subnet using the // values provided. func Update(c *gophercloud.ServiceClient, networkID string, opts os.UpdateOptsBuilder) os.UpdateResult { return os.Update(c, networkID, opts) }