diff --git a/staging/src/k8s.io/cloud-provider/controllers/node/node_controller_test.go b/staging/src/k8s.io/cloud-provider/controllers/node/node_controller_test.go index 410aa6e3eb4..7605c844f95 100644 --- a/staging/src/k8s.io/cloud-provider/controllers/node/node_controller_test.go +++ b/staging/src/k8s.io/cloud-provider/controllers/node/node_controller_test.go @@ -843,6 +843,9 @@ func Test_syncNode(t *testing.T) { ExtID: map[types.NodeName]string{ types.NodeName("node0"): "12345", }, + ProviderID: map[types.NodeName]string{ + types.NodeName("node0"): "fake://12345", + }, Addresses: []v1.NodeAddress{ { Type: v1.NodeHostName, @@ -901,6 +904,9 @@ func Test_syncNode(t *testing.T) { "topology.kubernetes.io/zone": "us-west-1a", }, }, + Spec: v1.NodeSpec{ + ProviderID: "fake://12345", + }, Status: v1.NodeStatus{ Conditions: []v1.NodeCondition{ { @@ -935,6 +941,9 @@ func Test_syncNode(t *testing.T) { ExtID: map[types.NodeName]string{ types.NodeName("node0"): "12345", }, + ProviderID: map[types.NodeName]string{ + types.NodeName("node0"): "fake://12345", + }, Addresses: []v1.NodeAddress{ { Type: v1.NodeHostName, @@ -996,6 +1005,7 @@ func Test_syncNode(t *testing.T) { Effect: v1.TaintEffectNoSchedule, }, }, + ProviderID: "fake://12345", }, Status: v1.NodeStatus{ Addresses: []v1.NodeAddress{ @@ -1276,6 +1286,69 @@ func Test_syncNode(t *testing.T) { }, }, }, + { + name: "[instanceV2] error getting InstanceMetadata", + fakeCloud: &fakecloud.Cloud{ + EnableInstancesV2: true, + InstanceTypes: map[types.NodeName]string{}, + Provider: "test", + ExtID: map[types.NodeName]string{}, + ExtIDErr: map[types.NodeName]error{ + types.NodeName("node0"): cloudprovider.NotImplemented, + }, + MetadataErr: errors.New("metadata error"), + }, + existingNode: &v1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Name: "node0", + CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), + }, + Status: v1.NodeStatus{ + Conditions: []v1.NodeCondition{ + { + Type: v1.NodeReady, + Status: v1.ConditionUnknown, + LastHeartbeatTime: metav1.Date(2015, 1, 1, 12, 0, 0, 0, time.UTC), + LastTransitionTime: metav1.Date(2015, 1, 1, 12, 0, 0, 0, time.UTC), + }, + }, + }, + Spec: v1.NodeSpec{ + Taints: []v1.Taint{ + { + Key: cloudproviderapi.TaintExternalCloudProvider, + Value: "true", + Effect: v1.TaintEffectNoSchedule, + }, + }, + }, + }, + updatedNode: &v1.Node{ + ObjectMeta: metav1.ObjectMeta{ + Name: "node0", + CreationTimestamp: metav1.Date(2012, 1, 1, 0, 0, 0, 0, time.UTC), + }, + Status: v1.NodeStatus{ + Conditions: []v1.NodeCondition{ + { + Type: v1.NodeReady, + Status: v1.ConditionUnknown, + LastHeartbeatTime: metav1.Date(2015, 1, 1, 12, 0, 0, 0, time.UTC), + LastTransitionTime: metav1.Date(2015, 1, 1, 12, 0, 0, 0, time.UTC), + }, + }, + }, + Spec: v1.NodeSpec{ + Taints: []v1.Taint{ + { + Key: cloudproviderapi.TaintExternalCloudProvider, + Value: "true", + Effect: v1.TaintEffectNoSchedule, + }, + }, + }, + }, + }, } for _, test := range tests { diff --git a/staging/src/k8s.io/cloud-provider/fake/fake.go b/staging/src/k8s.io/cloud-provider/fake/fake.go index 3dddae512b6..fa085ea5ec1 100644 --- a/staging/src/k8s.io/cloud-provider/fake/fake.go +++ b/staging/src/k8s.io/cloud-provider/fake/fake.go @@ -24,7 +24,7 @@ import ( "sync" "time" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" cloudprovider "k8s.io/cloud-provider" ) @@ -64,6 +64,7 @@ type Cloud struct { ErrByProviderID error NodeShutdown bool ErrShutdownByProviderID error + MetadataErr error Calls []string Addresses []v1.NodeAddress @@ -81,6 +82,7 @@ type Cloud struct { RouteMap map[string]*Route Lock sync.Mutex Provider string + ProviderID map[types.NodeName]string addCallLock sync.Mutex cloudprovider.Zone VolumeLabelMap map[string]map[string]string @@ -321,13 +323,20 @@ func (f *Cloud) InstanceMetadata(ctx context.Context, node *v1.Node) (*cloudprov f.addCall("instance-metadata-by-provider-id") f.addressesMux.Lock() defer f.addressesMux.Unlock() + + providerID := "" + id, ok := f.ProviderID[types.NodeName(node.Name)] + if ok { + providerID = id + } + return &cloudprovider.InstanceMetadata{ - ProviderID: node.Spec.ProviderID, + ProviderID: providerID, InstanceType: f.InstanceTypes[types.NodeName(node.Spec.ProviderID)], NodeAddresses: f.Addresses, Zone: f.Zone.FailureDomain, Region: f.Zone.Region, - }, f.Err + }, f.MetadataErr } // List is a test-spy implementation of Instances.List.