func resourceInstanceNetworks(computeClient *gophercloud.ServiceClient, d *schema.ResourceData) ([]map[string]interface{}, error) { rawNetworks := d.Get("network").([]interface{}) newNetworks := make([]map[string]interface{}, len(rawNetworks)) var tenantnet tenantnetworks.Network tenantNetworkExt := true for i, raw := range rawNetworks { rawMap := raw.(map[string]interface{}) allPages, err := tenantnetworks.List(computeClient).AllPages() if err != nil { errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) if !ok { return nil, err } if errCode.Actual == 404 { tenantNetworkExt = false } else { return nil, err } } networkID := "" networkName := "" if tenantNetworkExt { networkList, err := tenantnetworks.ExtractNetworks(allPages) if err != nil { return nil, err } for _, network := range networkList { if network.Name == rawMap["name"] { tenantnet = network } if network.ID == rawMap["uuid"] { tenantnet = network } } networkID = tenantnet.ID networkName = tenantnet.Name } else { networkID = rawMap["uuid"].(string) networkName = rawMap["name"].(string) } newNetworks[i] = map[string]interface{}{ "uuid": networkID, "name": networkName, "port": rawMap["port"].(string), "fixed_ip_v4": rawMap["fixed_ip_v4"].(string), } } log.Printf("[DEBUG] networks: %+v", newNetworks) return newNetworks, nil }
func TestTenantNetworks(t *testing.T) { networkName := os.Getenv("OS_NETWORK_NAME") if networkName == "" { t.Fatalf("OS_NETWORK_NAME must be set") } choices, err := ComputeChoicesFromEnv() if err != nil { t.Fatal(err) } client, err := newClient() if err != nil { t.Fatalf("Unable to create a compute client: %v", err) } networkID, err := getNetworkID(t, client, networkName) if err != nil { t.Fatalf("Unable to get network ID: %v", err) } server, err := createNetworkServer(t, client, choices, networkID) if err != nil { t.Fatalf("Unable to create server: %v", err) } defer func() { servers.Delete(client, server.ID) t.Logf("Server deleted.") }() if err = waitForStatus(client, server, "ACTIVE"); err != nil { t.Fatalf("Unable to wait for server: %v", err) } allPages, err := tenantnetworks.List(client).AllPages() allNetworks, err := tenantnetworks.ExtractNetworks(allPages) th.AssertNoErr(t, err) t.Logf("Retrieved all %d networks: %+v", len(allNetworks), allNetworks) }
func getNetworkID(t *testing.T, client *gophercloud.ServiceClient, networkName string) (string, error) { allPages, err := tenantnetworks.List(client).AllPages() if err != nil { t.Fatalf("Unable to list networks: %v", err) } networkList, err := tenantnetworks.ExtractNetworks(allPages) if err != nil { t.Fatalf("Unable to list networks: %v", err) } networkID := "" for _, network := range networkList { t.Logf("Network: %v", network) if network.Name == networkName { networkID = network.ID } } t.Logf("Found network ID for %s: %s\n", networkName, networkID) return networkID, nil }
func getInstanceNetworks(computeClient *gophercloud.ServiceClient, d *schema.ResourceData) ([]map[string]interface{}, error) { rawNetworks := d.Get("network").([]interface{}) newNetworks := make([]map[string]interface{}, 0, len(rawNetworks)) var tenantnet tenantnetworks.Network tenantNetworkExt := true for _, raw := range rawNetworks { // Not sure what causes this, but it is a possibility (see GH-2323). // Since we call this function to reconcile what we'll save in the // state anyways, we just ignore it. if raw == nil { continue } rawMap := raw.(map[string]interface{}) allPages, err := tenantnetworks.List(computeClient).AllPages() if err != nil { errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) if !ok { return nil, err } if errCode.Actual == 404 { tenantNetworkExt = false } else { return nil, err } } networkID := "" networkName := "" if tenantNetworkExt { networkList, err := tenantnetworks.ExtractNetworks(allPages) if err != nil { return nil, err } for _, network := range networkList { if network.Name == rawMap["name"] { tenantnet = network } if network.ID == rawMap["uuid"] { tenantnet = network } } networkID = tenantnet.ID networkName = tenantnet.Name } else { networkID = rawMap["uuid"].(string) networkName = rawMap["name"].(string) } newNetworks = append(newNetworks, map[string]interface{}{ "uuid": networkID, "name": networkName, "port": rawMap["port"].(string), "fixed_ip_v4": rawMap["fixed_ip_v4"].(string), "access_network": rawMap["access_network"].(bool), }) } log.Printf("[DEBUG] networks: %+v", newNetworks) return newNetworks, nil }