diff --git a/pkg/azclient/arm_conf.go b/pkg/azclient/arm_conf.go index 5b4fc14310..5e66aed796 100644 --- a/pkg/azclient/arm_conf.go +++ b/pkg/azclient/arm_conf.go @@ -45,10 +45,6 @@ type ARMClientConfig struct { CloudProviderBackoffRetries int32 `json:"cloudProviderBackoffRetries,omitempty" yaml:"cloudProviderBackoffRetries,omitempty"` // Backoff duration CloudProviderBackoffDuration int `json:"cloudProviderBackoffDuration,omitempty" yaml:"cloudProviderBackoffDuration,omitempty"` - //Storage suffix - StorageSuffix *string `json:"storageSuffix,omitempty" yaml:"storageSuffix,omitempty"` - //ACRLoginServer - ACRLoginServer *string `json:"acrLoginServer,omitempty" yaml:"containerRegistrySuffix,omitempty"` } func (config *ARMClientConfig) GetTenantID() string { @@ -59,30 +55,30 @@ func (config *ARMClientConfig) GetTenantID() string { return config.TenantID } -func GetAzCoreClientOption(armConfig *ARMClientConfig) (*policy.ClientOptions, error) { +func GetAzCoreClientOption(armConfig *ARMClientConfig) (*policy.ClientOptions, *Environment, error) { + var env *Environment + var err error //Get default settings - azCoreClientConfig := utils.GetDefaultAzCoreClientOption() + clientConfig := utils.GetDefaultAzCoreClientOption() if armConfig != nil { //update user agent header if userAgent := strings.TrimSpace(armConfig.UserAgent); userAgent != "" { - azCoreClientConfig.Telemetry.Disabled = true - azCoreClientConfig.PerCallPolicies = append(azCoreClientConfig.PerCallPolicies, useragent.NewCustomUserAgentPolicy(userAgent)) + clientConfig.Telemetry.Disabled = true + clientConfig.PerCallPolicies = append(clientConfig.PerCallPolicies, useragent.NewCustomUserAgentPolicy(userAgent)) } //set cloud - cloudConfig, err := GetAzureCloudConfigAndBackfillARMClientConfig(armConfig) + clientConfig.Cloud, env, err = GetAzureCloudConfigAndEnvConfig(armConfig) if err != nil { - return nil, err + return nil, nil, err } - azCoreClientConfig.Cloud = *cloudConfig if armConfig.CloudProviderBackoff && armConfig.CloudProviderBackoffDuration > 0 { - azCoreClientConfig.Retry.RetryDelay = time.Duration(armConfig.CloudProviderBackoffDuration) * time.Second + clientConfig.Retry.RetryDelay = time.Duration(armConfig.CloudProviderBackoffDuration) * time.Second } if armConfig.CloudProviderBackoff && armConfig.CloudProviderBackoffRetries > 0 { - azCoreClientConfig.Retry.MaxRetries = armConfig.CloudProviderBackoffRetries + clientConfig.Retry.MaxRetries = armConfig.CloudProviderBackoffRetries } - } - return &azCoreClientConfig, nil + return &clientConfig, env, nil } func IsMultiTenant(armConfig *ARMClientConfig) bool { diff --git a/pkg/azclient/auth.go b/pkg/azclient/auth.go index 976790943a..ec4f922367 100644 --- a/pkg/azclient/auth.go +++ b/pkg/azclient/auth.go @@ -37,18 +37,12 @@ type AuthProvider struct { } func NewAuthProvider(armConfig *ARMClientConfig, config *AzureAuthConfig, clientOptionsMutFn ...func(option *policy.ClientOptions)) (*AuthProvider, error) { - clientOption, err := GetAzCoreClientOption(armConfig) + clientOption, _, err := GetAzCoreClientOption(armConfig) if err != nil { return nil, err } for _, fn := range clientOptionsMutFn { fn(clientOption) - if clientOption == nil { - clientOption, err = GetAzCoreClientOption(armConfig) - if err != nil { - return nil, err - } - } } var computeCredential azcore.TokenCredential var networkTokenCredential azcore.TokenCredential diff --git a/pkg/azclient/client-gen/generator/clientfactory.go b/pkg/azclient/client-gen/generator/clientfactory.go index eeaa4b83ea..fb56c5b37a 100644 --- a/pkg/azclient/client-gen/generator/clientfactory.go +++ b/pkg/azclient/client-gen/generator/clientfactory.go @@ -120,7 +120,9 @@ func (generator ClientFactoryGenerator) Generate(ctx *genall.GenerationContext) } codeimportList["github.com/Azure/azure-sdk-for-go/sdk/azcore"] = make(map[string]struct{}) + codeimportList["github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud"] = make(map[string]struct{}) codeimportList["github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"] = make(map[string]struct{}) + codeimportList["sigs.k8s.io/cloud-provider-azure/pkg/azclient/utils"] = make(map[string]struct{}) codeimportList["sigs.k8s.io/cloud-provider-azure/pkg/azclient/policy/ratelimit"] = make(map[string]struct{}) codeimportList["github.com/Azure/azure-sdk-for-go/sdk/azidentity"] = make(map[string]struct{}) @@ -141,12 +143,9 @@ func (generator ClientFactoryGenerator) Generate(ctx *genall.GenerationContext) } defer file.Close() testimportList := make(map[string]map[string]struct{}) - for k, v := range importList { - testimportList[k] = v - } - testimportList["github.com/onsi/ginkgo/v2"] = map[string]struct{}{} testimportList["github.com/onsi/gomega"] = map[string]struct{}{} + testimportList["github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud"] = make(map[string]struct{}) err = DumpHeaderToWriter(ctx, file, generator.HeaderFile, testimportList, "azclient") if err != nil { @@ -187,6 +186,7 @@ var AbstractClientFactoryImplTemplate = template.Must(template.New("object-facto ` type ClientFactoryImpl struct { armConfig *ARMClientConfig + cloudConfig cloud.Configuration factoryConfig *ClientFactoryConfig cred azcore.TokenCredential clientOptionsMutFn []func(option *arm.ClientOptions) @@ -199,7 +199,7 @@ type ClientFactoryImpl struct { {{end -}} } -func NewClientFactory(config *ClientFactoryConfig, armConfig *ARMClientConfig, cred azcore.TokenCredential, clientOptionsMutFn ...func(option *arm.ClientOptions)) (ClientFactory,error) { +func NewClientFactory(config *ClientFactoryConfig, armConfig *ARMClientConfig,cloud cloud.Configuration, cred azcore.TokenCredential, clientOptionsMutFn ...func(option *arm.ClientOptions)) (ClientFactory,error) { if config == nil { config = &ClientFactoryConfig{} } @@ -212,6 +212,7 @@ func NewClientFactory(config *ClientFactoryConfig, armConfig *ARMClientConfig, c factory := &ClientFactoryImpl{ armConfig: armConfig, factoryConfig: config, + cloudConfig: cloud, cred: cred, clientOptionsMutFn: clientOptionsMutFn, } @@ -240,10 +241,11 @@ func NewClientFactory(config *ClientFactoryConfig, armConfig *ARMClientConfig, c {{- end }} func (factory *ClientFactoryImpl) create{{$resource}}Client(subscription string)({{.PkgAlias}}.{{.InterfaceTypeName}},error) { //initialize {{.PkgAlias}} - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig {{if $client.AzureStackCloudAPIVersion}} if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = {{.PkgAlias}}.AzureStackCloudAPIVersion @@ -319,7 +321,7 @@ ginkgo.When("config is nil", func() { {{- $resource = $client.SubResource -}} {{- end -}} ginkgo.It("should create factory instance without painc - {{$resource}}", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil,cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.Get{{$resource}}Client() diff --git a/pkg/azclient/cloud.go b/pkg/azclient/cloud.go index a416f26ecd..f24c346d9d 100644 --- a/pkg/azclient/cloud.go +++ b/pkg/azclient/cloud.go @@ -42,24 +42,24 @@ const ( ) func AzureCloudConfigFromName(cloudName string) *cloud.Configuration { - if cloudName == "" { - return &cloud.AzurePublic - } cloudName = strings.ToUpper(strings.TrimSpace(cloudName)) if cloudConfig, ok := EnvironmentMapping[cloudName]; ok { return cloudConfig } - return nil + return &cloud.AzurePublic } -// OverrideAzureCloudConfigFromMetadataService returns cloud config from url +// OverrideAzureCloudConfigAndEnvConfigFromMetadataService returns cloud config and environment config from url // track2 sdk will add this one in the near future https://github.com/Azure/azure-sdk-for-go/issues/20959 -func OverrideAzureCloudConfigFromMetadataService(armconfig *ARMClientConfig, config *cloud.Configuration) error { - if armconfig == nil || armconfig.ResourceManagerEndpoint == "" { +// cloud and env should not be empty +// it should never return an empty config +func OverrideAzureCloudConfigAndEnvConfigFromMetadataService(endpoint, cloudName string, cloudConfig *cloud.Configuration, env *Environment) error { + // If the ResourceManagerEndpoint is not set, we should not query the metadata service + if endpoint == "" { return nil } - managementEndpoint := fmt.Sprintf("%s%s", strings.TrimSuffix(armconfig.ResourceManagerEndpoint, "/"), "/metadata/endpoints?api-version=2019-05-01") + managementEndpoint := fmt.Sprintf("%s%s", strings.TrimSuffix(endpoint, "/"), "/metadata/endpoints?api-version=2019-05-01") res, err := http.Get(managementEndpoint) //nolint if err != nil { return err @@ -86,27 +86,30 @@ func OverrideAzureCloudConfigFromMetadataService(armconfig *ARMClientConfig, con } for _, item := range metadata { - if armconfig.Cloud == "" || strings.EqualFold(item.Name, armconfig.Cloud) { + if cloudName == "" || strings.EqualFold(item.Name, cloudName) { // We use the endpoint to build our config, but on ASH the config returned // does not contain the endpoint, and this is not accounted for. This // ultimately unsets it for the returned config, causing the bootstrap of // the provider to fail. Instead, check if the endpoint is returned, and if // It is not then set it. if item.ResourceManager == "" { - item.ResourceManager = armconfig.ResourceManagerEndpoint + item.ResourceManager = endpoint } - config.Services[cloud.ResourceManager] = cloud.ServiceConfiguration{ + cloudConfig.Services[cloud.ResourceManager] = cloud.ServiceConfiguration{ Endpoint: item.ResourceManager, Audience: item.Authentication.Audiences[0], } + env.ResourceManagerEndpoint = item.ResourceManager + env.TokenAudience = item.Authentication.Audiences[0] if item.Authentication.LoginEndpoint != "" { - config.ActiveDirectoryAuthorityHost = item.Authentication.LoginEndpoint + cloudConfig.ActiveDirectoryAuthorityHost = item.Authentication.LoginEndpoint + env.ActiveDirectoryEndpoint = item.Authentication.LoginEndpoint } - if item.Suffixes.Storage != nil && armconfig.StorageSuffix == nil { - armconfig.StorageSuffix = item.Suffixes.Storage + if item.Suffixes.Storage != nil { + env.StorageEndpointSuffix = *item.Suffixes.Storage } - if item.Suffixes.AcrLoginServer != nil && armconfig.ACRLoginServer == nil { - armconfig.ACRLoginServer = item.Suffixes.AcrLoginServer + if item.Suffixes.AcrLoginServer != nil { + env.ContainerRegistryDNSSuffix = *item.Suffixes.AcrLoginServer } return nil } @@ -114,7 +117,7 @@ func OverrideAzureCloudConfigFromMetadataService(armconfig *ARMClientConfig, con return nil } -func OverrideAzureCloudConfigFromEnv(armconfig *ARMClientConfig, config *cloud.Configuration) error { +func OverrideAzureCloudConfigFromEnv(config *cloud.Configuration, env *Environment) error { envFilePath, ok := os.LookupEnv(EnvironmentFilepathName) if !ok { return nil @@ -123,54 +126,44 @@ func OverrideAzureCloudConfigFromEnv(armconfig *ARMClientConfig, config *cloud.C if err != nil { return err } - var envConfig Environment - if err = json.Unmarshal(content, &envConfig); err != nil { + if err = json.Unmarshal(content, env); err != nil { return err } - if len(envConfig.ActiveDirectoryEndpoint) > 0 { - config.ActiveDirectoryAuthorityHost = envConfig.ActiveDirectoryEndpoint - } - if len(envConfig.ResourceManagerEndpoint) > 0 && len(envConfig.TokenAudience) > 0 { + if len(env.ResourceManagerEndpoint) > 0 && len(env.TokenAudience) > 0 { config.Services[cloud.ResourceManager] = cloud.ServiceConfiguration{ - Endpoint: envConfig.ResourceManagerEndpoint, - Audience: envConfig.TokenAudience, + Endpoint: env.ResourceManagerEndpoint, + Audience: env.TokenAudience, } } - if len(envConfig.StorageEndpointSuffix) > 0 { - armconfig.StorageSuffix = &envConfig.StorageEndpointSuffix - } - if len(envConfig.ContainerRegistryDNSSuffix) > 0 { - armconfig.ACRLoginServer = &envConfig.ContainerRegistryDNSSuffix + if len(env.ActiveDirectoryEndpoint) > 0 { + config.ActiveDirectoryAuthorityHost = env.ActiveDirectoryEndpoint } return nil } -// GetAzureCloudConfigAndBackfillArmClientConfig retrieves the Azure cloud configuration based on the provided ARM client configuration. -// If the ARM client configuration is nil, it returns the default Azure public cloud configuration. -// It attempts to override the cloud configuration using metadata service and environment variables. -// -// Parameters: -// - armConfig: A pointer to an ARMClientConfig struct containing the ARM client configuration. -// -// Returns: -// - A pointer to a cloud.Configuration struct representing the Azure cloud configuration. -// - An error if there is an issue overriding the cloud configuration from metadata service or environment variables. -func GetAzureCloudConfigAndBackfillARMClientConfig(armConfig *ARMClientConfig) (*cloud.Configuration, error) { - config := &cloud.AzurePublic +func GetAzureCloudConfigAndEnvConfig(armConfig *ARMClientConfig) (cloud.Configuration, *Environment, error) { + env := &Environment{} + var cloudName string + if armConfig != nil { + cloudName = armConfig.Cloud + } + config := AzureCloudConfigFromName(cloudName) if armConfig == nil { - return config, nil + return *config, nil, nil } - config = AzureCloudConfigFromName(armConfig.Cloud) - if err := OverrideAzureCloudConfigFromMetadataService(armConfig, config); err != nil { - return nil, err + + err := OverrideAzureCloudConfigAndEnvConfigFromMetadataService(armConfig.ResourceManagerEndpoint, cloudName, config, env) + if err != nil { + return *config, nil, err } - err := OverrideAzureCloudConfigFromEnv(armConfig, config) - return config, err + err = OverrideAzureCloudConfigFromEnv(config, env) + return *config, env, err } // Environment represents a set of endpoints for each of Azure's Clouds. type Environment struct { Name string `json:"name"` + ServiceManagementEndpoint string `json:"serviceManagementEndpoint"` ResourceManagerEndpoint string `json:"resourceManagerEndpoint"` ActiveDirectoryEndpoint string `json:"activeDirectoryEndpoint"` StorageEndpointSuffix string `json:"storageEndpointSuffix"` diff --git a/pkg/azclient/cloud_test.go b/pkg/azclient/cloud_test.go index 327f45efd9..e95233c6ed 100644 --- a/pkg/azclient/cloud_test.go +++ b/pkg/azclient/cloud_test.go @@ -75,14 +75,18 @@ var _ = ginkgo.Describe("Cloud", func() { gomega.Expect(err).ToNot(gomega.HaveOccurred()) })) defer server.Close() - armconfig := &azclient.ARMClientConfig{} - cloudConfig := &cloud.AzurePublic - err := azclient.OverrideAzureCloudConfigFromMetadataService(armconfig, cloudConfig) + cloudConfig := cloud.AzurePublic + env := &azclient.Environment{} + err := azclient.OverrideAzureCloudConfigAndEnvConfigFromMetadataService(server.URL, "AzureCloud", &cloudConfig, env) gomega.Expect(err).ToNot(gomega.HaveOccurred()) gomega.Expect(cloudConfig).ToNot(gomega.BeNil()) gomega.Expect(cloudConfig.ActiveDirectoryAuthorityHost).To(gomega.Equal("https://login.microsoftonline.com/")) gomega.Expect(cloudConfig.Services).NotTo(gomega.BeEmpty()) gomega.Expect(cloudConfig.Services[cloud.ResourceManager].Audience).To(gomega.Equal("https://management.core.windows.net/")) + gomega.Expect(env).ToNot(gomega.BeNil()) + gomega.Expect(env.ResourceManagerEndpoint).To(gomega.Equal("https://management.azure.com/")) + gomega.Expect(env.ContainerRegistryDNSSuffix).To(gomega.Equal("azurecr.io")) + gomega.Expect(env.StorageEndpointSuffix).To(gomega.Equal("core.windows.net")) }) }) @@ -130,19 +134,17 @@ var _ = ginkgo.Describe("Cloud", func() { gomega.Expect(err).ToNot(gomega.HaveOccurred()) })) defer server.Close() - armconfig := &azclient.ARMClientConfig{ - ResourceManagerEndpoint: server.URL, - } - cloudConfig := &cloud.Configuration{ - ActiveDirectoryAuthorityHost: "https://login.microsoftonline.com/", Services: map[cloud.ServiceName]cloud.ServiceConfiguration{}, - } - err := azclient.OverrideAzureCloudConfigFromMetadataService(armconfig, cloudConfig) + cloudConfig := cloud.AzurePublic + env := &azclient.Environment{} + err := azclient.OverrideAzureCloudConfigAndEnvConfigFromMetadataService(server.URL, "AzureCloud", &cloudConfig, env) gomega.Expect(err).ToNot(gomega.HaveOccurred()) gomega.Expect(cloudConfig).ToNot(gomega.BeNil()) gomega.Expect(cloudConfig.ActiveDirectoryAuthorityHost).To(gomega.Equal("https://login.microsoftonline.com/")) gomega.Expect(cloudConfig.Services).NotTo(gomega.BeEmpty()) gomega.Expect(cloudConfig.Services[cloud.ResourceManager].Audience).To(gomega.Equal("https://management.core.windows.net/")) gomega.Expect(cloudConfig.Services[cloud.ResourceManager].Endpoint).To(gomega.Equal(server.URL)) + gomega.Expect(env).ToNot(gomega.BeNil()) + gomega.Expect(env.ResourceManagerEndpoint).To(gomega.Equal(server.URL)) }) }) }) @@ -159,7 +161,7 @@ var _ = ginkgo.Describe("Cloud", func() { ginkgo.When("cloud name is wrong", func() { ginkgo.It("should return the default cloud", func() { cloudConfig := azclient.AzureCloudConfigFromName("wrong") - gomega.Expect(cloudConfig).To(gomega.BeNil()) + gomega.Expect(*cloudConfig).To(gomega.Equal(cloud.AzurePublic)) }) }) ginkgo.When("cloud name is AzureChinaCloud", func() { @@ -176,9 +178,9 @@ var _ = ginkgo.Describe("Cloud", func() { ginkgo.Context("AzureCloudFromEnvironment", func() { ginkgo.When("the environment is empty", func() { ginkgo.It("should return the default cloud", func() { - armconfig := &azclient.ARMClientConfig{} + env := &azclient.Environment{} cloudConfig := &cloud.AzurePublic - err := azclient.OverrideAzureCloudConfigFromEnv(armconfig, cloudConfig) + err := azclient.OverrideAzureCloudConfigFromEnv(cloudConfig, env) gomega.Expect(err).ToNot(gomega.HaveOccurred()) gomega.Expect(cloudConfig).ToNot(gomega.BeNil()) gomega.Expect(cloudConfig.ActiveDirectoryAuthorityHost).To(gomega.Equal("https://login.microsoftonline.com/")) @@ -190,9 +192,9 @@ var _ = ginkgo.Describe("Cloud", func() { ginkgo.When("the environment is set,file is not found", func() { ginkgo.It("should return error", func() { os.Setenv(azclient.EnvironmentFilepathName, "notfound") - armconfig := &azclient.ARMClientConfig{} + env := &azclient.Environment{} cloudConfig := &cloud.AzurePublic - err := azclient.OverrideAzureCloudConfigFromEnv(armconfig, cloudConfig) + err := azclient.OverrideAzureCloudConfigFromEnv(cloudConfig, env) gomega.Expect(err).To(gomega.HaveOccurred()) os.Unsetenv(azclient.EnvironmentFilepathName) }) @@ -200,9 +202,9 @@ var _ = ginkgo.Describe("Cloud", func() { ginkgo.When("the environment is set,file is empty", func() { ginkgo.It("should return error", func() { os.Setenv(azclient.EnvironmentFilepathName, "notfound") - armconfig := &azclient.ARMClientConfig{} + env := &azclient.Environment{} cloudConfig := &cloud.AzurePublic - err := azclient.OverrideAzureCloudConfigFromEnv(armconfig, cloudConfig) + err := azclient.OverrideAzureCloudConfigFromEnv(cloudConfig, env) gomega.Expect(err).To(gomega.HaveOccurred()) os.Unsetenv(azclient.EnvironmentFilepathName) }) @@ -221,16 +223,16 @@ var _ = ginkgo.Describe("Cloud", func() { }`), 0600) gomega.Expect(err).ToNot(gomega.HaveOccurred()) os.Setenv(azclient.EnvironmentFilepathName, configFile.Name()) - armconfig := &azclient.ARMClientConfig{ - Cloud: "AzureGovernment", - } + env := &azclient.Environment{} cloudConfig := &cloud.AzureGovernment - err = azclient.OverrideAzureCloudConfigFromEnv(armconfig, cloudConfig) + err = azclient.OverrideAzureCloudConfigFromEnv(cloudConfig, env) gomega.Expect(err).ToNot(gomega.HaveOccurred()) gomega.Expect(cloudConfig).ToNot(gomega.BeNil()) gomega.Expect(cloudConfig.ActiveDirectoryAuthorityHost).To(gomega.Equal("https://login.chinacloudapi.cn")) gomega.Expect(cloudConfig.Services).NotTo(gomega.BeEmpty()) gomega.Expect(cloudConfig.Services[cloud.ResourceManager].Audience).To(gomega.Equal("https://management.core.chinacloudapi.cn/")) + gomega.Expect(env).ToNot(gomega.BeNil()) + gomega.Expect(env.ResourceManagerEndpoint).To(gomega.Equal("https://management.chinacloudapi.cn")) os.Unsetenv(azclient.EnvironmentFilepathName) }) }) diff --git a/pkg/azclient/factory_conf.go b/pkg/azclient/factory_conf.go index f3b40edbc4..bc16ab316f 100644 --- a/pkg/azclient/factory_conf.go +++ b/pkg/azclient/factory_conf.go @@ -45,17 +45,13 @@ func init() { type ClientFactoryConfig struct { ratelimit.CloudProviderRateLimitConfig - - // Enable exponential backoff to manage resource request retries - CloudProviderBackoff bool `json:"cloudProviderBackoff,omitempty" yaml:"cloudProviderBackoff,omitempty"` - // The ID of the Azure Subscription that the cluster is deployed in SubscriptionID string `json:"subscriptionId,omitempty" yaml:"subscriptionId,omitempty"` } -func GetDefaultResourceClientOption(armConfig *ARMClientConfig, factoryConfig *ClientFactoryConfig) (*policy.ClientOptions, error) { +func GetDefaultResourceClientOption(armConfig *ARMClientConfig) (*policy.ClientOptions, error) { armClientOption := policy.ClientOptions{} - options, err := GetAzCoreClientOption(armConfig) + options, _, err := GetAzCoreClientOption(armConfig) if err != nil { return nil, err } @@ -65,12 +61,6 @@ func GetDefaultResourceClientOption(armConfig *ARMClientConfig, factoryConfig *C armClientOption.AuxiliaryTenants = []string{armConfig.NetworkResourceTenantID} } - if factoryConfig != nil { - //Set retry - if !factoryConfig.CloudProviderBackoff { - options.Retry.MaxRetries = 0 - } - } armClientOption.ClientOptions.Transport = DefaultResourceClientTransport return &armClientOption, err } diff --git a/pkg/azclient/factory_gen.go b/pkg/azclient/factory_gen.go index 6587183171..f8586ea53b 100644 --- a/pkg/azclient/factory_gen.go +++ b/pkg/azclient/factory_gen.go @@ -23,6 +23,7 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/azcore" "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "sigs.k8s.io/cloud-provider-azure/pkg/azclient/accountclient" @@ -67,6 +68,7 @@ import ( type ClientFactoryImpl struct { armConfig *ARMClientConfig + cloudConfig cloud.Configuration factoryConfig *ClientFactoryConfig cred azcore.TokenCredential clientOptionsMutFn []func(option *arm.ClientOptions) @@ -108,7 +110,7 @@ type ClientFactoryImpl struct { virtualnetworklinkclientInterface virtualnetworklinkclient.Interface } -func NewClientFactory(config *ClientFactoryConfig, armConfig *ARMClientConfig, cred azcore.TokenCredential, clientOptionsMutFn ...func(option *arm.ClientOptions)) (ClientFactory, error) { +func NewClientFactory(config *ClientFactoryConfig, armConfig *ARMClientConfig, cloud cloud.Configuration, cred azcore.TokenCredential, clientOptionsMutFn ...func(option *arm.ClientOptions)) (ClientFactory, error) { if config == nil { config = &ClientFactoryConfig{} } @@ -121,6 +123,7 @@ func NewClientFactory(config *ClientFactoryConfig, armConfig *ARMClientConfig, c factory := &ClientFactoryImpl{ armConfig: armConfig, factoryConfig: config, + cloudConfig: cloud, cred: cred, clientOptionsMutFn: clientOptionsMutFn, } @@ -345,10 +348,11 @@ func NewClientFactory(config *ClientFactoryConfig, armConfig *ARMClientConfig, c func (factory *ClientFactoryImpl) createAccountClient(subscription string) (accountclient.Interface, error) { //initialize accountclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = accountclient.AzureStackCloudAPIVersion @@ -391,10 +395,11 @@ func (factory *ClientFactoryImpl) GetAccountClientForSub(subscriptionID string) func (factory *ClientFactoryImpl) createAvailabilitySetClient(subscription string) (availabilitysetclient.Interface, error) { //initialize availabilitysetclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = availabilitysetclient.AzureStackCloudAPIVersion @@ -420,10 +425,11 @@ func (factory *ClientFactoryImpl) GetAvailabilitySetClient() availabilitysetclie func (factory *ClientFactoryImpl) createBackendAddressPoolClient(subscription string) (backendaddresspoolclient.Interface, error) { //initialize backendaddresspoolclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig //add ratelimit policy ratelimitOption := factory.factoryConfig.GetRateLimitConfig("loadBalancerRateLimit") @@ -445,10 +451,11 @@ func (factory *ClientFactoryImpl) GetBackendAddressPoolClient() backendaddresspo func (factory *ClientFactoryImpl) createBlobContainerClient(subscription string) (blobcontainerclient.Interface, error) { //initialize blobcontainerclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = blobcontainerclient.AzureStackCloudAPIVersion @@ -485,10 +492,11 @@ func (factory *ClientFactoryImpl) GetBlobContainerClientForSub(subscriptionID st func (factory *ClientFactoryImpl) createBlobServicePropertiesClient(subscription string) (blobservicepropertiesclient.Interface, error) { //initialize blobservicepropertiesclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = blobservicepropertiesclient.AzureStackCloudAPIVersion @@ -525,10 +533,11 @@ func (factory *ClientFactoryImpl) GetBlobServicePropertiesClientForSub(subscript func (factory *ClientFactoryImpl) createDeploymentClient(subscription string) (deploymentclient.Interface, error) { //initialize deploymentclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig //add ratelimit policy ratelimitOption := factory.factoryConfig.GetRateLimitConfig("deploymentRateLimit") @@ -550,10 +559,11 @@ func (factory *ClientFactoryImpl) GetDeploymentClient() deploymentclient.Interfa func (factory *ClientFactoryImpl) createDiskClient(subscription string) (diskclient.Interface, error) { //initialize diskclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = diskclient.AzureStackCloudAPIVersion @@ -596,10 +606,11 @@ func (factory *ClientFactoryImpl) GetDiskClientForSub(subscriptionID string) (di func (factory *ClientFactoryImpl) createFileServicePropertiesClient(subscription string) (fileservicepropertiesclient.Interface, error) { //initialize fileservicepropertiesclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig for _, optionMutFn := range factory.clientOptionsMutFn { if optionMutFn != nil { @@ -632,10 +643,11 @@ func (factory *ClientFactoryImpl) GetFileServicePropertiesClientForSub(subscript func (factory *ClientFactoryImpl) createFileShareClient(subscription string) (fileshareclient.Interface, error) { //initialize fileshareclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig for _, optionMutFn := range factory.clientOptionsMutFn { if optionMutFn != nil { @@ -668,10 +680,11 @@ func (factory *ClientFactoryImpl) GetFileShareClientForSub(subscriptionID string func (factory *ClientFactoryImpl) createIdentityClient(subscription string) (identityclient.Interface, error) { //initialize identityclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig for _, optionMutFn := range factory.clientOptionsMutFn { if optionMutFn != nil { @@ -687,10 +700,11 @@ func (factory *ClientFactoryImpl) GetIdentityClient() identityclient.Interface { func (factory *ClientFactoryImpl) createInterfaceClient(subscription string) (interfaceclient.Interface, error) { //initialize interfaceclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = interfaceclient.AzureStackCloudAPIVersion @@ -716,10 +730,11 @@ func (factory *ClientFactoryImpl) GetInterfaceClient() interfaceclient.Interface func (factory *ClientFactoryImpl) createIPGroupClient(subscription string) (ipgroupclient.Interface, error) { //initialize ipgroupclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig //add ratelimit policy ratelimitOption := factory.factoryConfig.GetRateLimitConfig("ipGroupRateLimit") @@ -741,10 +756,11 @@ func (factory *ClientFactoryImpl) GetIPGroupClient() ipgroupclient.Interface { func (factory *ClientFactoryImpl) createLoadBalancerClient(subscription string) (loadbalancerclient.Interface, error) { //initialize loadbalancerclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = loadbalancerclient.AzureStackCloudAPIVersion @@ -770,10 +786,11 @@ func (factory *ClientFactoryImpl) GetLoadBalancerClient() loadbalancerclient.Int func (factory *ClientFactoryImpl) createManagedClusterClient(subscription string) (managedclusterclient.Interface, error) { //initialize managedclusterclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig //add ratelimit policy ratelimitOption := factory.factoryConfig.GetRateLimitConfig("containerServiceRateLimit") @@ -795,10 +812,11 @@ func (factory *ClientFactoryImpl) GetManagedClusterClient() managedclusterclient func (factory *ClientFactoryImpl) createPrivateDNSZoneGroupClient(subscription string) (privatednszonegroupclient.Interface, error) { //initialize privatednszonegroupclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig for _, optionMutFn := range factory.clientOptionsMutFn { if optionMutFn != nil { @@ -814,10 +832,11 @@ func (factory *ClientFactoryImpl) GetPrivateDNSZoneGroupClient() privatednszoneg func (factory *ClientFactoryImpl) createPrivateEndpointClient(subscription string) (privateendpointclient.Interface, error) { //initialize privateendpointclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig //add ratelimit policy ratelimitOption := factory.factoryConfig.GetRateLimitConfig("privateEndpointRateLimit") @@ -839,10 +858,11 @@ func (factory *ClientFactoryImpl) GetPrivateEndpointClient() privateendpointclie func (factory *ClientFactoryImpl) createPrivateLinkServiceClient(subscription string) (privatelinkserviceclient.Interface, error) { //initialize privatelinkserviceclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = privatelinkserviceclient.AzureStackCloudAPIVersion @@ -868,10 +888,11 @@ func (factory *ClientFactoryImpl) GetPrivateLinkServiceClient() privatelinkservi func (factory *ClientFactoryImpl) createPrivateZoneClient(subscription string) (privatezoneclient.Interface, error) { //initialize privatezoneclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = privatezoneclient.AzureStackCloudAPIVersion @@ -897,10 +918,11 @@ func (factory *ClientFactoryImpl) GetPrivateZoneClient() privatezoneclient.Inter func (factory *ClientFactoryImpl) createProviderClient(subscription string) (providerclient.Interface, error) { //initialize providerclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig for _, optionMutFn := range factory.clientOptionsMutFn { if optionMutFn != nil { @@ -916,10 +938,11 @@ func (factory *ClientFactoryImpl) GetProviderClient() providerclient.Interface { func (factory *ClientFactoryImpl) createPublicIPAddressClient(subscription string) (publicipaddressclient.Interface, error) { //initialize publicipaddressclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = publicipaddressclient.AzureStackCloudAPIVersion @@ -945,10 +968,11 @@ func (factory *ClientFactoryImpl) GetPublicIPAddressClient() publicipaddressclie func (factory *ClientFactoryImpl) createPublicIPPrefixClient(subscription string) (publicipprefixclient.Interface, error) { //initialize publicipprefixclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig for _, optionMutFn := range factory.clientOptionsMutFn { if optionMutFn != nil { @@ -964,10 +988,11 @@ func (factory *ClientFactoryImpl) GetPublicIPPrefixClient() publicipprefixclient func (factory *ClientFactoryImpl) createRegistryClient(subscription string) (registryclient.Interface, error) { //initialize registryclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig for _, optionMutFn := range factory.clientOptionsMutFn { if optionMutFn != nil { @@ -983,10 +1008,11 @@ func (factory *ClientFactoryImpl) GetRegistryClient() registryclient.Interface { func (factory *ClientFactoryImpl) createResourceGroupClient(subscription string) (resourcegroupclient.Interface, error) { //initialize resourcegroupclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig for _, optionMutFn := range factory.clientOptionsMutFn { if optionMutFn != nil { @@ -1002,10 +1028,11 @@ func (factory *ClientFactoryImpl) GetResourceGroupClient() resourcegroupclient.I func (factory *ClientFactoryImpl) createRoleAssignmentClient(subscription string) (roleassignmentclient.Interface, error) { //initialize roleassignmentclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig for _, optionMutFn := range factory.clientOptionsMutFn { if optionMutFn != nil { @@ -1021,10 +1048,11 @@ func (factory *ClientFactoryImpl) GetRoleAssignmentClient() roleassignmentclient func (factory *ClientFactoryImpl) createRouteTableClient(subscription string) (routetableclient.Interface, error) { //initialize routetableclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = routetableclient.AzureStackCloudAPIVersion @@ -1050,10 +1078,11 @@ func (factory *ClientFactoryImpl) GetRouteTableClient() routetableclient.Interfa func (factory *ClientFactoryImpl) createSecretClient(subscription string) (secretclient.Interface, error) { //initialize secretclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig for _, optionMutFn := range factory.clientOptionsMutFn { if optionMutFn != nil { @@ -1069,10 +1098,11 @@ func (factory *ClientFactoryImpl) GetSecretClient() secretclient.Interface { func (factory *ClientFactoryImpl) createSecurityGroupClient(subscription string) (securitygroupclient.Interface, error) { //initialize securitygroupclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = securitygroupclient.AzureStackCloudAPIVersion @@ -1098,10 +1128,11 @@ func (factory *ClientFactoryImpl) GetSecurityGroupClient() securitygroupclient.I func (factory *ClientFactoryImpl) createSnapshotClient(subscription string) (snapshotclient.Interface, error) { //initialize snapshotclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = snapshotclient.AzureStackCloudAPIVersion @@ -1144,10 +1175,11 @@ func (factory *ClientFactoryImpl) GetSnapshotClientForSub(subscriptionID string) func (factory *ClientFactoryImpl) createSSHPublicKeyResourceClient(subscription string) (sshpublickeyresourceclient.Interface, error) { //initialize sshpublickeyresourceclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig for _, optionMutFn := range factory.clientOptionsMutFn { if optionMutFn != nil { @@ -1163,10 +1195,11 @@ func (factory *ClientFactoryImpl) GetSSHPublicKeyResourceClient() sshpublickeyre func (factory *ClientFactoryImpl) createSubnetClient(subscription string) (subnetclient.Interface, error) { //initialize subnetclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = subnetclient.AzureStackCloudAPIVersion @@ -1192,10 +1225,11 @@ func (factory *ClientFactoryImpl) GetSubnetClient() subnetclient.Interface { func (factory *ClientFactoryImpl) createVaultClient(subscription string) (vaultclient.Interface, error) { //initialize vaultclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig for _, optionMutFn := range factory.clientOptionsMutFn { if optionMutFn != nil { @@ -1211,10 +1245,11 @@ func (factory *ClientFactoryImpl) GetVaultClient() vaultclient.Interface { func (factory *ClientFactoryImpl) createVirtualMachineClient(subscription string) (virtualmachineclient.Interface, error) { //initialize virtualmachineclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = virtualmachineclient.AzureStackCloudAPIVersion @@ -1240,10 +1275,11 @@ func (factory *ClientFactoryImpl) GetVirtualMachineClient() virtualmachineclient func (factory *ClientFactoryImpl) createVirtualMachineScaleSetClient(subscription string) (virtualmachinescalesetclient.Interface, error) { //initialize virtualmachinescalesetclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = virtualmachinescalesetclient.AzureStackCloudAPIVersion @@ -1269,10 +1305,11 @@ func (factory *ClientFactoryImpl) GetVirtualMachineScaleSetClient() virtualmachi func (factory *ClientFactoryImpl) createVirtualMachineScaleSetVMClient(subscription string) (virtualmachinescalesetvmclient.Interface, error) { //initialize virtualmachinescalesetvmclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig if factory.armConfig != nil && strings.EqualFold(factory.armConfig.Cloud, utils.AzureStackCloudName) { options.ClientOptions.APIVersion = virtualmachinescalesetvmclient.AzureStackCloudAPIVersion @@ -1292,10 +1329,11 @@ func (factory *ClientFactoryImpl) GetVirtualMachineScaleSetVMClient() virtualmac func (factory *ClientFactoryImpl) createVirtualNetworkClient(subscription string) (virtualnetworkclient.Interface, error) { //initialize virtualnetworkclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig for _, optionMutFn := range factory.clientOptionsMutFn { if optionMutFn != nil { @@ -1311,10 +1349,11 @@ func (factory *ClientFactoryImpl) GetVirtualNetworkClient() virtualnetworkclient func (factory *ClientFactoryImpl) createVirtualNetworkLinkClient(subscription string) (virtualnetworklinkclient.Interface, error) { //initialize virtualnetworklinkclient - options, err := GetDefaultResourceClientOption(factory.armConfig, factory.factoryConfig) + options, err := GetDefaultResourceClientOption(factory.armConfig) if err != nil { return nil, err } + options.Cloud = factory.cloudConfig //add ratelimit policy ratelimitOption := factory.factoryConfig.GetRateLimitConfig("virtualNetworkRateLimit") diff --git a/pkg/azclient/factory_test.go b/pkg/azclient/factory_test.go index 4f35deb5d9..691b09cfc4 100644 --- a/pkg/azclient/factory_test.go +++ b/pkg/azclient/factory_test.go @@ -18,6 +18,7 @@ package azclient import ( + "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" "github.com/onsi/ginkgo/v2" "github.com/onsi/gomega" ) @@ -25,252 +26,252 @@ import ( var _ = ginkgo.Describe("Factory", func() { ginkgo.When("config is nil", func() { ginkgo.It("should create factory instance without painc - Account", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetAccountClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - AvailabilitySet", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetAvailabilitySetClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - BackendAddressPool", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetBackendAddressPoolClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - BlobContainer", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetBlobContainerClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - BlobServiceProperties", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetBlobServicePropertiesClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - Deployment", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetDeploymentClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - Disk", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetDiskClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - FileServiceProperties", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetFileServicePropertiesClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - FileShare", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetFileShareClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - Identity", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetIdentityClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - Interface", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetInterfaceClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - IPGroup", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetIPGroupClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - LoadBalancer", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetLoadBalancerClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - ManagedCluster", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetManagedClusterClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - PrivateDNSZoneGroup", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetPrivateDNSZoneGroupClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - PrivateEndpoint", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetPrivateEndpointClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - PrivateLinkService", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetPrivateLinkServiceClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - PrivateZone", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetPrivateZoneClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - Provider", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetProviderClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - PublicIPAddress", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetPublicIPAddressClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - PublicIPPrefix", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetPublicIPPrefixClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - Registry", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetRegistryClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - ResourceGroup", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetResourceGroupClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - RoleAssignment", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetRoleAssignmentClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - RouteTable", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetRouteTableClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - Secret", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetSecretClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - SecurityGroup", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetSecurityGroupClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - Snapshot", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetSnapshotClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - SSHPublicKeyResource", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetSSHPublicKeyResourceClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - Subnet", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetSubnetClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - Vault", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetVaultClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - VirtualMachine", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetVirtualMachineClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - VirtualMachineScaleSet", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetVirtualMachineScaleSetClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - VirtualMachineScaleSetVM", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetVirtualMachineScaleSetVMClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - VirtualNetwork", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetVirtualNetworkClient() gomega.Expect(client).NotTo(gomega.BeNil()) }) ginkgo.It("should create factory instance without painc - VirtualNetworkLink", func() { - factory, err := NewClientFactory(nil, nil, nil) + factory, err := NewClientFactory(nil, nil, cloud.AzurePublic, nil) gomega.Expect(err).NotTo(gomega.HaveOccurred()) gomega.Expect(factory).NotTo(gomega.BeNil()) client := factory.GetVirtualNetworkLinkClient()