diff --git a/pkg/cloudprovider/providers/openstack/openstack.go b/pkg/cloudprovider/providers/openstack/openstack.go index 7e3e85161ef..1a37396349d 100644 --- a/pkg/cloudprovider/providers/openstack/openstack.go +++ b/pkg/cloudprovider/providers/openstack/openstack.go @@ -281,18 +281,12 @@ func newOpenStack(cfg Config) (*OpenStack, error) { return nil, err } - id, err := readInstanceID() - if err != nil { - return nil, err - } - os := OpenStack{ - provider: provider, - region: cfg.Global.Region, - lbOpts: cfg.LoadBalancer, - bsOpts: cfg.BlockStorage, - routeOpts: cfg.Route, - localInstanceID: id, + provider: provider, + region: cfg.Global.Region, + lbOpts: cfg.LoadBalancer, + bsOpts: cfg.BlockStorage, + routeOpts: cfg.Route, } err = checkOpenStackOpts(&os) diff --git a/pkg/cloudprovider/providers/openstack/openstack_instances.go b/pkg/cloudprovider/providers/openstack/openstack_instances.go index 810858acc75..70f29ff7bd0 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_instances.go +++ b/pkg/cloudprovider/providers/openstack/openstack_instances.go @@ -143,6 +143,13 @@ func (i *Instances) ExternalID(name types.NodeName) (string, error) { // InstanceID returns the kubelet's cloud provider ID. func (os *OpenStack) InstanceID() (string, error) { + if len(os.localInstanceID) == 0 { + id, err := readInstanceID() + if err != nil { + return "", err + } + os.localInstanceID = id + } return os.localInstanceID, nil } diff --git a/pkg/cloudprovider/providers/openstack/openstack_test.go b/pkg/cloudprovider/providers/openstack/openstack_test.go index d0422c172f7..7e8ed5901b3 100644 --- a/pkg/cloudprovider/providers/openstack/openstack_test.go +++ b/pkg/cloudprovider/providers/openstack/openstack_test.go @@ -473,7 +473,12 @@ func TestVolumes(t *testing.T) { WaitForVolumeStatus(t, os, vol, volumeAvailableStatus) - diskId, err := os.AttachDisk(os.localInstanceID, vol) + id, err := os.InstanceID() + if err != nil { + t.Fatalf("Cannot find instance id: %v", err) + } + + diskId, err := os.AttachDisk(id, vol) if err != nil { t.Fatalf("Cannot AttachDisk Cinder volume %s: %v", vol, err) } @@ -487,7 +492,7 @@ func TestVolumes(t *testing.T) { } t.Logf("Volume (%s) found at path: %s\n", vol, devicePath) - err = os.DetachDisk(os.localInstanceID, vol) + err = os.DetachDisk(id, vol) if err != nil { t.Fatalf("Cannot DetachDisk Cinder volume %s: %v", vol, err) }