From ef4e03a7293f7727c8d902c5245be5f49c581b6e Mon Sep 17 00:00:00 2001 From: Joe Topjian Date: Wed, 1 Apr 2015 21:31:55 +0000 Subject: [PATCH] Workaround for missing tenant-network This commit resolves an issue where the tenant-network api extension does not exist. The caveat is that the user must either specify no networks (single network environment) or can only specify UUIDs for network configurations. --- .../resource_openstack_compute_instance_v2.go | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/builtin/providers/openstack/resource_openstack_compute_instance_v2.go b/builtin/providers/openstack/resource_openstack_compute_instance_v2.go index 36fe297a0f..a6cf8a5978 100644 --- a/builtin/providers/openstack/resource_openstack_compute_instance_v2.go +++ b/builtin/providers/openstack/resource_openstack_compute_instance_v2.go @@ -768,31 +768,51 @@ func resourceInstanceNetworks(computeClient *gophercloud.ServiceClient, d *schem 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 { - return nil, err + errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) + if !ok { + return nil, err + } + + if errCode.Actual == 404 { + tenantNetworkExt = false + } else { + return nil, err + } } - networkList, err := tenantnetworks.ExtractNetworks(allPages) - if err != nil { - 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 + 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": tenantnet.ID, - "name": tenantnet.Name, + "uuid": networkID, + "name": networkName, "port": rawMap["port"].(string), "fixed_ip_v4": rawMap["fixed_ip_v4"].(string), }