From fc748662ef8af7df27909effefe1057549556e7c Mon Sep 17 00:00:00 2001 From: realfake Date: Wed, 31 May 2017 23:19:38 +0200 Subject: [PATCH 1/2] Add splitProviderID for azure --- .../providers/azure/azure_test.go | 51 +++++++++++++++++++ .../providers/azure/azure_util.go | 13 +++++ 2 files changed, 64 insertions(+) diff --git a/pkg/cloudprovider/providers/azure/azure_test.go b/pkg/cloudprovider/providers/azure/azure_test.go index 98e9eead48c5..8586e12cf87e 100644 --- a/pkg/cloudprovider/providers/azure/azure_test.go +++ b/pkg/cloudprovider/providers/azure/azure_test.go @@ -677,3 +677,54 @@ func TestDecodeInstanceInfo(t *testing.T) { t.Error("got incorrect fault domain") } } + +func TestSplitProviderID(t *testing.T) { + providers := []struct { + providerID string + name types.NodeName + + fail bool + }{ + { + providerID: CloudProviderName + ":///subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachines/k8s-agent-AAAAAAAA-0", + name: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachines/k8s-agent-AAAAAAAA-0", + fail: false, + }, + { + providerID: CloudProviderName + ":/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachines/k8s-agent-AAAAAAAA-0", + name: "", + fail: true, + }, + { + providerID: CloudProviderName + "://", + name: "", + fail: true, + }, + { + providerID: ":///subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachines/k8s-agent-AAAAAAAA-0", + name: "", + fail: true, + }, + { + providerID: "aws:///subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroupName/providers/Microsoft.Compute/virtualMachines/k8s-agent-AAAAAAAA-0", + name: "", + fail: true, + }, + } + + for _, test := range providers { + name, err := splitProviderID(test.providerID) + if (err != nil) != test.fail { + t.Errorf("Expected to failt=%t, with pattern %v", test.fail, test) + } + + if test.fail { + continue + } + + if name != test.name { + t.Errorf("Expected %v, but got %v", test.name, name) + } + + } +} diff --git a/pkg/cloudprovider/providers/azure/azure_util.go b/pkg/cloudprovider/providers/azure/azure_util.go index 094f3aaf903c..918281d57803 100644 --- a/pkg/cloudprovider/providers/azure/azure_util.go +++ b/pkg/cloudprovider/providers/azure/azure_util.go @@ -17,7 +17,9 @@ limitations under the License. package azure import ( + "errors" "fmt" + "regexp" "strings" "k8s.io/kubernetes/pkg/api/v1" @@ -41,6 +43,8 @@ const ( securityRuleIDTemplate = "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/networkSecurityGroups/%s/securityRules/%s" ) +var providerIDRE = regexp.MustCompile(`^` + CloudProviderName + `://(.+)$`) + // returns the full identifier of a machine func (az *Cloud) getMachineID(machineName string) string { return fmt.Sprintf( @@ -268,3 +272,12 @@ func (az *Cloud) getIPForMachine(nodeName types.NodeName) (string, error) { targetIP := *ipConfig.PrivateIPAddress return targetIP, nil } + +// splitProviderID converts a providerID to a NodeName. +func splitProviderID(providerID string) (types.NodeName, error) { + matches := providerIDRE.FindStringSubmatch(providerID) + if len(matches) != 2 { + return "", errors.New("error splitting providerID") + } + return types.NodeName(matches[1]), nil +} From 7bc205fc59aed53d1583937792652e38de638675 Mon Sep 17 00:00:00 2001 From: realfake Date: Wed, 31 May 2017 23:21:39 +0200 Subject: [PATCH 2/2] Implement *ByProviderID methods --- .../providers/azure/azure_instances.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/pkg/cloudprovider/providers/azure/azure_instances.go b/pkg/cloudprovider/providers/azure/azure_instances.go index 45b109e14781..a205aa3e4a3e 100644 --- a/pkg/cloudprovider/providers/azure/azure_instances.go +++ b/pkg/cloudprovider/providers/azure/azure_instances.go @@ -17,7 +17,6 @@ limitations under the License. package azure import ( - "errors" "fmt" "k8s.io/kubernetes/pkg/api/v1" @@ -44,7 +43,12 @@ func (az *Cloud) NodeAddresses(name types.NodeName) ([]v1.NodeAddress, error) { // This method will not be called from the node that is requesting this ID. i.e. metadata service // and other local methods cannot be used here func (az *Cloud) NodeAddressesByProviderID(providerID string) ([]v1.NodeAddress, error) { - return []v1.NodeAddress{}, errors.New("unimplemented") + name, err := splitProviderID(providerID) + if err != nil { + return nil, err + } + + return az.NodeAddresses(name) } // ExternalID returns the cloud provider ID of the specified instance (deprecated). @@ -68,7 +72,12 @@ func (az *Cloud) InstanceID(name types.NodeName) (string, error) { // This method will not be called from the node that is requesting this ID. i.e. metadata service // and other local methods cannot be used here func (az *Cloud) InstanceTypeByProviderID(providerID string) (string, error) { - return "", errors.New("unimplemented") + name, err := splitProviderID(providerID) + if err != nil { + return "", err + } + + return az.InstanceID(name) } // InstanceType returns the type of the specified instance.