From cf154e9d1f2327dc93878c2e881a55d0bc8f1bf9 Mon Sep 17 00:00:00 2001 From: louisgong Date: Wed, 13 May 2020 11:45:07 +0800 Subject: [PATCH] implement openstack InstanceMetadataByProviderID function --- .../openstack/openstack_instances.go | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack_instances.go b/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack_instances.go index c354e9f1657..8c10e50fe45 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack_instances.go +++ b/staging/src/k8s.io/legacy-cloud-providers/openstack/openstack_instances.go @@ -154,7 +154,33 @@ func (i *Instances) InstanceShutdownByProviderID(ctx context.Context, providerID // InstanceMetadataByProviderID returns metadata of the specified instance. func (i *Instances) InstanceMetadataByProviderID(ctx context.Context, providerID string) (*cloudprovider.InstanceMetadata, error) { - return nil, fmt.Errorf("unimplemented") + if providerID == "" { + return nil, fmt.Errorf("couldn't compute InstanceMetadata for empty providerID") + } + + instanceID, err := instanceIDFromProviderID(providerID) + if err != nil { + return nil, err + } + srv, err := servers.Get(i.compute, instanceID).Extract() + if err != nil { + return nil, err + } + + instanceType, err := srvInstanceType(srv) + if err != nil { + return nil, err + } + addresses, err := nodeAddresses(srv) + if err != nil { + return nil, err + } + + return &cloudprovider.InstanceMetadata{ + ProviderID: providerID, + Type: instanceType, + NodeAddresses: addresses, + }, nil } // InstanceID returns the kubelet's cloud provider ID.