func resourceNetworkingSubnetV2Create(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) } createOpts := subnets.CreateOpts{ NetworkID: d.Get("network_id").(string), CIDR: d.Get("cidr").(string), Name: d.Get("name").(string), TenantID: d.Get("tenant_id").(string), AllocationPools: resourceSubnetAllocationPoolsV2(d), GatewayIP: d.Get("gateway_ip").(string), IPVersion: d.Get("ip_version").(int), DNSNameservers: resourceSubnetDNSNameserversV2(d), HostRoutes: resourceSubnetHostRoutesV2(d), } if raw, ok := d.GetOk("enable_dhcp"); ok { value := raw.(bool) createOpts.EnableDHCP = &value } log.Printf("[DEBUG] Create Options: %#v", createOpts) s, err := subnets.Create(networkingClient, createOpts).Extract() if err != nil { return fmt.Errorf("Error creating OpenStack Neutron subnet: %s", err) } log.Printf("[INFO] Subnet ID: %s", s.ID) d.SetId(s.ID) return resourceNetworkingSubnetV2Read(d, meta) }
func createSubnet(networkID string) (string, error) { s, err := subnets.Create(Client, subnets.CreateOpts{ NetworkID: networkID, CIDR: "192.168.199.0/24", IPVersion: subnets.IPv4, Name: "my_subnet", EnableDHCP: subnets.Down, }).Extract() return s.ID, err }
func resourceNetworkingSubnetV2Create(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) } 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.") } } enableDHCP := d.Get("enable_dhcp").(bool) createOpts := SubnetCreateOpts{ NetworkID: d.Get("network_id").(string), CIDR: d.Get("cidr").(string), Name: d.Get("name").(string), TenantID: d.Get("tenant_id").(string), AllocationPools: resourceSubnetAllocationPoolsV2(d), GatewayIP: d.Get("gateway_ip").(string), NoGateway: d.Get("no_gateway").(bool), IPVersion: d.Get("ip_version").(int), DNSNameservers: resourceSubnetDNSNameserversV2(d), HostRoutes: resourceSubnetHostRoutesV2(d), EnableDHCP: &enableDHCP, ValueSpecs: subnetValueSpecs(d), } log.Printf("[DEBUG] Create Options: %#v", createOpts) s, err := subnets.Create(networkingClient, createOpts).Extract() if err != nil { return fmt.Errorf("Error creating OpenStack Neutron subnet: %s", err) } log.Printf("[INFO] Subnet ID: %s", s.ID) log.Printf("[DEBUG] Waiting for Subnet (%s) to become available", s.ID) stateConf := &resource.StateChangeConf{ Target: []string{"ACTIVE"}, Refresh: waitForSubnetActive(networkingClient, s.ID), Timeout: 10 * time.Minute, Delay: 5 * time.Second, MinTimeout: 3 * time.Second, } _, err = stateConf.WaitForState() d.SetId(s.ID) return resourceNetworkingSubnetV2Read(d, meta) }
func createSubnet(networkID string) (string, error) { s, err := subnets.Create(Client, subnets.CreateOpts{ NetworkID: networkID, CIDR: "192.168.199.0/24", IPVersion: subnets.IPv4, Name: "my_subnet", EnableDHCP: subnets.Down, AllocationPools: []subnets.AllocationPool{ subnets.AllocationPool{Start: "192.168.199.2", End: "192.168.199.200"}, }, }).Extract() return s.ID, err }
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 createSubnet(t *testing.T, networkID, cidr string) string { t.Logf("Creating a subnet for network %s", networkID) iFalse := false s, err := subnets.Create(base.Client, subnets.CreateOpts{ NetworkID: networkID, CIDR: cidr, IPVersion: subnets.IPv4, Name: "my_subnet", EnableDHCP: &iFalse, }).Extract() th.AssertNoErr(t, err) t.Logf("Subnet created: ID [%s]", s.ID) return s.ID }
func setupTopology(t *testing.T) (string, string) { // create network n, err := networks.Create(base.Client, networks.CreateOpts{Name: "tmp_network"}).Extract() th.AssertNoErr(t, err) t.Logf("Created network, ID %s", n.ID) // create subnet s, err := subnets.Create(base.Client, subnets.CreateOpts{ NetworkID: n.ID, CIDR: "192.168.199.0/24", IPVersion: subnets.IPv4, Name: "tmp_subnet", }).Extract() th.AssertNoErr(t, err) t.Logf("Created subnet, ID %s", s.ID) return n.ID, s.ID }
func resourceNetworkingSubnetV2Create(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) } createOpts := subnets.CreateOpts{ NetworkID: d.Get("network_id").(string), CIDR: d.Get("cidr").(string), Name: d.Get("name").(string), TenantID: d.Get("tenant_id").(string), AllocationPools: resourceSubnetAllocationPoolsV2(d), GatewayIP: d.Get("gateway_ip").(string), IPVersion: d.Get("ip_version").(int), DNSNameservers: resourceSubnetDNSNameserversV2(d), HostRoutes: resourceSubnetHostRoutesV2(d), } 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'") } createOpts.EnableDHCP = &ed } log.Printf("[DEBUG] Create Options: %#v", createOpts) s, err := subnets.Create(networkingClient, createOpts).Extract() if err != nil { return fmt.Errorf("Error creating OpenStack Neutron subnet: %s", err) } log.Printf("[INFO] Subnet ID: %s", s.ID) d.SetId(s.ID) 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") } }
// Create accepts a CreateOpts struct and creates a new subnet using the values // provided. You must remember to provide a valid NetworkID, CIDR and IP version. func Create(c *gophercloud.ServiceClient, opts os.CreateOptsBuilder) os.CreateResult { return os.Create(c, opts) }