From c31bfe67a45f5aafb443a64f99e8e39008d09d7c Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Mon, 27 Nov 2017 13:44:46 -0500 Subject: [PATCH 1/5] LBaaS v1 is no longer supported --- pkg/cloudprovider/providers/openstack/openstack_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/cloudprovider/providers/openstack/openstack_test.go b/pkg/cloudprovider/providers/openstack/openstack_test.go index 0875185b63d..f8116ce0dcc 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_test.go +++ b/pkg/cloudprovider/providers/openstack/openstack_test.go @@ -443,7 +443,7 @@ func TestLoadBalancer(t *testing.T) { t.Skipf("No config found in environment") } - versions := []string{"v1", "v2", ""} + versions := []string{"v2", ""} for _, v := range versions { t.Logf("Trying LBVersion = '%s'\n", v) From 90a531ceb56b9e70e6ab701df5e6a3b2a1d54285 Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Mon, 27 Nov 2017 13:48:27 -0500 Subject: [PATCH 2/5] Set bs-version to auto for tests --- pkg/cloudprovider/providers/openstack/openstack_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/cloudprovider/providers/openstack/openstack_test.go b/pkg/cloudprovider/providers/openstack/openstack_test.go index f8116ce0dcc..40dc7a087d1 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_test.go +++ b/pkg/cloudprovider/providers/openstack/openstack_test.go @@ -421,6 +421,7 @@ func configFromEnv() (cfg Config, ok bool) { cfg.Global.DomainId != "" || cfg.Global.DomainName != "")) cfg.Metadata.SearchOrder = fmt.Sprintf("%s,%s", configDriveID, metadataID) + cfg.BlockStorage.BSVersion = "auto" return } From f5299fe7e15c0cfe8b323f65b26e6a0476887a1f Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Mon, 27 Nov 2017 14:01:32 -0500 Subject: [PATCH 3/5] Skip TestRoutes if extension or router-id is missing --- .../providers/openstack/openstack_routes_test.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/cloudprovider/providers/openstack/openstack_routes_test.go b/pkg/cloudprovider/providers/openstack/openstack_routes_test.go index 2cfdc7d8f79..6e4d506d8de 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_routes_test.go +++ b/pkg/cloudprovider/providers/openstack/openstack_routes_test.go @@ -37,9 +37,13 @@ func TestRoutes(t *testing.T) { t.Fatalf("Failed to construct/authenticate OpenStack: %s", err) } + if os.routeOpts.RouterId == "" { + t.Skip("router-id is empty. skipping test") + } + r, ok := os.Routes() if !ok { - t.Fatalf("Routes() returned false - perhaps your stack doens't support Neutron?") + t.Skip("Routes() returned false - perhaps your stack does not support Neutron extraroute extension?") } newroute := cloudprovider.Route{ From 076f4da28b6e63d371332fbe381f6d0c9a728c25 Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Mon, 27 Nov 2017 14:03:04 -0500 Subject: [PATCH 4/5] Allow volume test to run outside an actual OpenStack VM --- .../providers/openstack/openstack_test.go | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/pkg/cloudprovider/providers/openstack/openstack_test.go b/pkg/cloudprovider/providers/openstack/openstack_test.go index 40dc7a087d1..95cbfc0cb3b 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_test.go +++ b/pkg/cloudprovider/providers/openstack/openstack_test.go @@ -526,31 +526,31 @@ func TestVolumes(t *testing.T) { id, err := os.InstanceID() if err != nil { - t.Fatalf("Cannot find instance id: %v", err) + t.Logf("Cannot find instance id: %v - perhaps you are running this test outside a VM launched by OpenStack", err) + } else { + diskId, err := os.AttachDisk(id, vol) + if err != nil { + t.Fatalf("Cannot AttachDisk Cinder volume %s: %v", vol, err) + } + t.Logf("Volume (%s) attached, disk ID: %s\n", vol, diskId) + + WaitForVolumeStatus(t, os, vol, volumeInUseStatus) + + devicePath := os.GetDevicePath(diskId) + if diskPathRegexp.FindString(devicePath) == "" { + t.Fatalf("GetDevicePath returned and unexpected path for Cinder volume %s, returned %s", vol, devicePath) + } + t.Logf("Volume (%s) found at path: %s\n", vol, devicePath) + + err = os.DetachDisk(id, vol) + if err != nil { + t.Fatalf("Cannot DetachDisk Cinder volume %s: %v", vol, err) + } + t.Logf("Volume (%s) detached\n", vol) + + WaitForVolumeStatus(t, os, vol, volumeAvailableStatus) } - diskId, err := os.AttachDisk(id, vol) - if err != nil { - t.Fatalf("Cannot AttachDisk Cinder volume %s: %v", vol, err) - } - t.Logf("Volume (%s) attached, disk ID: %s\n", vol, diskId) - - WaitForVolumeStatus(t, os, vol, volumeInUseStatus) - - devicePath := os.GetDevicePath(diskId) - if diskPathRegexp.FindString(devicePath) == "" { - t.Fatalf("GetDevicePath returned and unexpected path for Cinder volume %s, returned %s", vol, devicePath) - } - t.Logf("Volume (%s) found at path: %s\n", vol, devicePath) - - err = os.DetachDisk(id, vol) - if err != nil { - t.Fatalf("Cannot DetachDisk Cinder volume %s: %v", vol, err) - } - t.Logf("Volume (%s) detached\n", vol) - - WaitForVolumeStatus(t, os, vol, volumeAvailableStatus) - err = os.DeleteVolume(vol) if err != nil { t.Fatalf("Cannot delete Cinder volume %s: %v", vol, err) From 8300dd890171bf2d29d9f1648b0f08d2f518e601 Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Mon, 27 Nov 2017 15:33:47 -0500 Subject: [PATCH 5/5] Find a server name and router id to test TestRoutes --- pkg/cloudprovider/providers/openstack/BUILD | 1 + .../openstack/openstack_routes_test.go | 46 +++++++++++++++++-- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/pkg/cloudprovider/providers/openstack/BUILD b/pkg/cloudprovider/providers/openstack/BUILD index 3b04ef8c048..57575aa4d51 100644 --- a/pkg/cloudprovider/providers/openstack/BUILD +++ b/pkg/cloudprovider/providers/openstack/BUILD @@ -75,6 +75,7 @@ go_test( "//pkg/cloudprovider:go_default_library", "//vendor/github.com/gophercloud/gophercloud:go_default_library", "//vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers:go_default_library", + "//vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", diff --git a/pkg/cloudprovider/providers/openstack/openstack_routes_test.go b/pkg/cloudprovider/providers/openstack/openstack_routes_test.go index 6e4d506d8de..7b44c7945a9 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_routes_test.go +++ b/pkg/cloudprovider/providers/openstack/openstack_routes_test.go @@ -20,6 +20,8 @@ import ( "net" "testing" + "github.com/gophercloud/gophercloud/openstack/compute/v2/servers" + "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers" "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/cloudprovider" ) @@ -37,9 +39,9 @@ func TestRoutes(t *testing.T) { t.Fatalf("Failed to construct/authenticate OpenStack: %s", err) } - if os.routeOpts.RouterId == "" { - t.Skip("router-id is empty. skipping test") - } + // Pick the first router and server to try a test with + os.routeOpts.RouterId = getRouters(os)[0].ID + servername := getServers(os)[0].Name r, ok := os.Routes() if !ok { @@ -48,7 +50,7 @@ func TestRoutes(t *testing.T) { newroute := cloudprovider.Route{ DestinationCIDR: "10.164.2.0/24", - TargetNode: types.NodeName("testinstance"), + TargetNode: types.NodeName(servername), } err = r.CreateRoute(clusterName, "myhint", &newroute) if err != nil { @@ -73,3 +75,39 @@ func TestRoutes(t *testing.T) { t.Fatalf("DeleteRoute error: %v", err) } } + +func getServers(os *OpenStack) []servers.Server { + c, err := os.NewComputeV2() + allPages, err := servers.List(c, servers.ListOpts{}).AllPages() + if err != nil { + panic(err) + } + allServers, err := servers.ExtractServers(allPages) + if err != nil { + panic(err) + } + if len(allServers) == 0 { + panic("No servers to test with") + } + return allServers +} + +func getRouters(os *OpenStack) []routers.Router { + listOpts := routers.ListOpts{} + n, err := os.NewNetworkV2() + if err != nil { + panic(err) + } + allPages, err := routers.List(n, listOpts).AllPages() + if err != nil { + panic(err) + } + allRouters, err := routers.ExtractRouters(allPages) + if err != nil { + panic(err) + } + if len(allRouters) == 0 { + panic("No routers to test with") + } + return allRouters +}