mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-14 21:53:52 +00:00
Merge pull request #60775 from feiskyer/msi
Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Fix broken useManagedIdentityExtension for azure cloud provider **What this PR does / why we need it**: useManagedIdentityExtension has been broken because azure cloud provider uses `yaml.Unmarshal` to read configs while there is no yaml tag defined for useManagedIdentityExtension. This PR fixes this problem and adds unit tests for parseConfig. **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes #60691 **Special notes for your reviewer**: Should be cherry-picked to 1.7, 1.8 and 1.9. **Release note**: ```release-note Fix broken useManagedIdentityExtension for azure cloud provider ```
This commit is contained in:
@@ -43,7 +43,7 @@ type AzureAuthConfig struct {
|
|||||||
// The password of the client certificate for an AAD application with RBAC access to talk to Azure RM APIs
|
// The password of the client certificate for an AAD application with RBAC access to talk to Azure RM APIs
|
||||||
AADClientCertPassword string `json:"aadClientCertPassword" yaml:"aadClientCertPassword"`
|
AADClientCertPassword string `json:"aadClientCertPassword" yaml:"aadClientCertPassword"`
|
||||||
// Use managed service identity for the virtual machine to access Azure ARM APIs
|
// Use managed service identity for the virtual machine to access Azure ARM APIs
|
||||||
UseManagedIdentityExtension bool `json:"useManagedIdentityExtension"`
|
UseManagedIdentityExtension bool `json:"useManagedIdentityExtension" yaml:"useManagedIdentityExtension"`
|
||||||
// The ID of the Azure Subscription that the cluster is deployed in
|
// The ID of the Azure Subscription that the cluster is deployed in
|
||||||
SubscriptionID string `json:"subscriptionId" yaml:"subscriptionId"`
|
SubscriptionID string `json:"subscriptionId" yaml:"subscriptionId"`
|
||||||
}
|
}
|
||||||
|
@@ -109,11 +109,8 @@ type Config struct {
|
|||||||
// Use instance metadata service where possible
|
// Use instance metadata service where possible
|
||||||
UseInstanceMetadata bool `json:"useInstanceMetadata" yaml:"useInstanceMetadata"`
|
UseInstanceMetadata bool `json:"useInstanceMetadata" yaml:"useInstanceMetadata"`
|
||||||
|
|
||||||
// Use managed service identity for the virtual machine to access Azure ARM APIs
|
|
||||||
UseManagedIdentityExtension bool `json:"useManagedIdentityExtension"`
|
|
||||||
|
|
||||||
// Maximum allowed LoadBalancer Rule Count is the limit enforced by Azure Load balancer
|
// Maximum allowed LoadBalancer Rule Count is the limit enforced by Azure Load balancer
|
||||||
MaximumLoadBalancerRuleCount int `json:"maximumLoadBalancerRuleCount"`
|
MaximumLoadBalancerRuleCount int `json:"maximumLoadBalancerRuleCount" yaml:"maximumLoadBalancerRuleCount"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cloud holds the config and clients
|
// Cloud holds the config and clients
|
||||||
|
@@ -17,6 +17,7 @@ limitations under the License.
|
|||||||
package azure
|
package azure
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
@@ -37,10 +38,85 @@ import (
|
|||||||
"github.com/Azure/azure-sdk-for-go/arm/compute"
|
"github.com/Azure/azure-sdk-for-go/arm/compute"
|
||||||
"github.com/Azure/azure-sdk-for-go/arm/network"
|
"github.com/Azure/azure-sdk-for-go/arm/network"
|
||||||
"github.com/Azure/go-autorest/autorest/to"
|
"github.com/Azure/go-autorest/autorest/to"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
var testClusterName = "testCluster"
|
var testClusterName = "testCluster"
|
||||||
|
|
||||||
|
func TestParseConfig(t *testing.T) {
|
||||||
|
azureConfig := `{
|
||||||
|
"aadClientCertPassword": "aadClientCertPassword",
|
||||||
|
"aadClientCertPath": "aadClientCertPath",
|
||||||
|
"aadClientId": "aadClientId",
|
||||||
|
"aadClientSecret": "aadClientSecret",
|
||||||
|
"cloud":"AzurePublicCloud",
|
||||||
|
"cloudProviderBackoff": true,
|
||||||
|
"cloudProviderBackoffDuration": 1,
|
||||||
|
"cloudProviderBackoffExponent": 1,
|
||||||
|
"cloudProviderBackoffJitter": 1,
|
||||||
|
"cloudProviderBackoffRetries": 1,
|
||||||
|
"cloudProviderRatelimit": true,
|
||||||
|
"cloudProviderRateLimitBucket": 1,
|
||||||
|
"CloudProviderRateLimitBucketWrite": 1,
|
||||||
|
"cloudProviderRateLimitQPS": 1,
|
||||||
|
"CloudProviderRateLimitQPSWrite": 1,
|
||||||
|
"location": "location",
|
||||||
|
"maximumLoadBalancerRuleCount": 1,
|
||||||
|
"primaryAvailabilitySetName": "primaryAvailabilitySetName",
|
||||||
|
"primaryScaleSetName": "primaryScaleSetName",
|
||||||
|
"resourceGroup": "resourceGroup",
|
||||||
|
"routeTableName": "routeTableName",
|
||||||
|
"securityGroupName": "securityGroupName",
|
||||||
|
"subnetName": "subnetName",
|
||||||
|
"subscriptionId": "subscriptionId",
|
||||||
|
"tenantId": "tenantId",
|
||||||
|
"useInstanceMetadata": true,
|
||||||
|
"useManagedIdentityExtension": true,
|
||||||
|
"vnetName": "vnetName",
|
||||||
|
"vnetResourceGroup": "vnetResourceGroup",
|
||||||
|
vmType: "standard"
|
||||||
|
}`
|
||||||
|
expected := &Config{
|
||||||
|
AzureAuthConfig: auth.AzureAuthConfig{
|
||||||
|
AADClientCertPassword: "aadClientCertPassword",
|
||||||
|
AADClientCertPath: "aadClientCertPath",
|
||||||
|
AADClientID: "aadClientId",
|
||||||
|
AADClientSecret: "aadClientSecret",
|
||||||
|
Cloud: "AzurePublicCloud",
|
||||||
|
SubscriptionID: "subscriptionId",
|
||||||
|
TenantID: "tenantId",
|
||||||
|
UseManagedIdentityExtension: true,
|
||||||
|
},
|
||||||
|
CloudProviderBackoff: true,
|
||||||
|
CloudProviderBackoffDuration: 1,
|
||||||
|
CloudProviderBackoffExponent: 1,
|
||||||
|
CloudProviderBackoffJitter: 1,
|
||||||
|
CloudProviderBackoffRetries: 1,
|
||||||
|
CloudProviderRateLimit: true,
|
||||||
|
CloudProviderRateLimitBucket: 1,
|
||||||
|
CloudProviderRateLimitBucketWrite: 1,
|
||||||
|
CloudProviderRateLimitQPS: 1,
|
||||||
|
CloudProviderRateLimitQPSWrite: 1,
|
||||||
|
Location: "location",
|
||||||
|
MaximumLoadBalancerRuleCount: 1,
|
||||||
|
PrimaryAvailabilitySetName: "primaryAvailabilitySetName",
|
||||||
|
PrimaryScaleSetName: "primaryScaleSetName",
|
||||||
|
ResourceGroup: "resourceGroup",
|
||||||
|
RouteTableName: "routeTableName",
|
||||||
|
SecurityGroupName: "securityGroupName",
|
||||||
|
SubnetName: "subnetName",
|
||||||
|
UseInstanceMetadata: true,
|
||||||
|
VMType: "standard",
|
||||||
|
VnetName: "vnetName",
|
||||||
|
VnetResourceGroup: "vnetResourceGroup",
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer := bytes.NewBufferString(azureConfig)
|
||||||
|
config, err := parseConfig(buffer)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, expected, config)
|
||||||
|
}
|
||||||
|
|
||||||
// Test flipServiceInternalAnnotation
|
// Test flipServiceInternalAnnotation
|
||||||
func TestFlipServiceInternalAnnotation(t *testing.T) {
|
func TestFlipServiceInternalAnnotation(t *testing.T) {
|
||||||
svc := getTestService("servicea", v1.ProtocolTCP, 80)
|
svc := getTestService("servicea", v1.ProtocolTCP, 80)
|
||||||
|
Reference in New Issue
Block a user