Add azClientConfig to pass all essential information to create clients

This commit is contained in:
Pengfei Ni 2018-01-10 17:19:35 +08:00
parent 2423e7c52b
commit c3a885353b
2 changed files with 84 additions and 70 deletions

View File

@ -171,22 +171,28 @@ func NewCloud(configReader io.Reader) (cloudprovider.Interface, error) {
config.CloudProviderRateLimitBucket) config.CloudProviderRateLimitBucket)
} }
azClientConfig := &azClientConfig{
subscriptionID: config.SubscriptionID,
resourceManagerEndpoint: env.ResourceManagerEndpoint,
servicePrincipalToken: servicePrincipalToken,
rateLimiter: operationPollRateLimiter,
}
az := Cloud{ az := Cloud{
Config: *config, Config: *config,
Environment: *env, Environment: *env,
DisksClient: newAzDisksClient(config.SubscriptionID, env.ResourceManagerEndpoint, servicePrincipalToken, operationPollRateLimiter), DisksClient: newAzDisksClient(azClientConfig),
RoutesClient: newAzRoutesClient(config.SubscriptionID, env.ResourceManagerEndpoint, servicePrincipalToken, operationPollRateLimiter), RoutesClient: newAzRoutesClient(azClientConfig),
SubnetsClient: newAzSubnetsClient(config.SubscriptionID, env.ResourceManagerEndpoint, servicePrincipalToken, operationPollRateLimiter), SubnetsClient: newAzSubnetsClient(azClientConfig),
InterfacesClient: newAzInterfacesClient(config.SubscriptionID, env.ResourceManagerEndpoint, servicePrincipalToken, operationPollRateLimiter), InterfacesClient: newAzInterfacesClient(azClientConfig),
RouteTablesClient: newAzRouteTablesClient(config.SubscriptionID, env.ResourceManagerEndpoint, servicePrincipalToken, operationPollRateLimiter), RouteTablesClient: newAzRouteTablesClient(azClientConfig),
LoadBalancerClient: newAzLoadBalancersClient(config.SubscriptionID, env.ResourceManagerEndpoint, servicePrincipalToken, operationPollRateLimiter), LoadBalancerClient: newAzLoadBalancersClient(azClientConfig),
SecurityGroupsClient: newAzSecurityGroupsClient(config.SubscriptionID, env.ResourceManagerEndpoint, servicePrincipalToken, operationPollRateLimiter), SecurityGroupsClient: newAzSecurityGroupsClient(azClientConfig),
StorageAccountClient: newAzStorageAccountClient(config.SubscriptionID, env.ResourceManagerEndpoint, servicePrincipalToken, operationPollRateLimiter), StorageAccountClient: newAzStorageAccountClient(azClientConfig),
VirtualMachinesClient: newAzVirtualMachinesClient(config.SubscriptionID, env.ResourceManagerEndpoint, servicePrincipalToken, operationPollRateLimiter), VirtualMachinesClient: newAzVirtualMachinesClient(azClientConfig),
PublicIPAddressesClient: newAzPublicIPAddressesClient(config.SubscriptionID, env.ResourceManagerEndpoint, servicePrincipalToken, operationPollRateLimiter), PublicIPAddressesClient: newAzPublicIPAddressesClient(azClientConfig),
VirtualMachineScaleSetsClient: newAzVirtualMachineScaleSetsClient(config.SubscriptionID, env.ResourceManagerEndpoint, servicePrincipalToken, operationPollRateLimiter), VirtualMachineScaleSetsClient: newAzVirtualMachineScaleSetsClient(azClientConfig),
VirtualMachineScaleSetVMsClient: newAzVirtualMachineScaleSetVMsClient(config.SubscriptionID, env.ResourceManagerEndpoint, servicePrincipalToken, operationPollRateLimiter), VirtualMachineScaleSetVMsClient: newAzVirtualMachineScaleSetVMsClient(azClientConfig),
} }
// Conditionally configure resource request backoff // Conditionally configure resource request backoff

View File

@ -124,21 +124,29 @@ type DisksClient interface {
Get(resourceGroupName string, diskName string) (result disk.Model, err error) Get(resourceGroupName string, diskName string) (result disk.Model, err error)
} }
// azClientConfig contains all essential information to create an Azure client.
type azClientConfig struct {
subscriptionID string
resourceManagerEndpoint string
servicePrincipalToken *adal.ServicePrincipalToken
rateLimiter flowcontrol.RateLimiter
}
// azVirtualMachinesClient implements VirtualMachinesClient. // azVirtualMachinesClient implements VirtualMachinesClient.
type azVirtualMachinesClient struct { type azVirtualMachinesClient struct {
client compute.VirtualMachinesClient client compute.VirtualMachinesClient
rateLimiter flowcontrol.RateLimiter rateLimiter flowcontrol.RateLimiter
} }
func newAzVirtualMachinesClient(subscriptionID string, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken, rateLimiter flowcontrol.RateLimiter) *azVirtualMachinesClient { func newAzVirtualMachinesClient(config *azClientConfig) *azVirtualMachinesClient {
virtualMachinesClient := compute.NewVirtualMachinesClient(subscriptionID) virtualMachinesClient := compute.NewVirtualMachinesClient(config.subscriptionID)
virtualMachinesClient.BaseURI = endpoint virtualMachinesClient.BaseURI = config.resourceManagerEndpoint
virtualMachinesClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken) virtualMachinesClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken)
virtualMachinesClient.PollingDelay = 5 * time.Second virtualMachinesClient.PollingDelay = 5 * time.Second
configureUserAgent(&virtualMachinesClient.Client) configureUserAgent(&virtualMachinesClient.Client)
return &azVirtualMachinesClient{ return &azVirtualMachinesClient{
rateLimiter: rateLimiter, rateLimiter: config.rateLimiter,
client: virtualMachinesClient, client: virtualMachinesClient,
} }
} }
@ -189,15 +197,15 @@ type azInterfacesClient struct {
rateLimiter flowcontrol.RateLimiter rateLimiter flowcontrol.RateLimiter
} }
func newAzInterfacesClient(subscriptionID string, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken, rateLimiter flowcontrol.RateLimiter) *azInterfacesClient { func newAzInterfacesClient(config *azClientConfig) *azInterfacesClient {
interfacesClient := network.NewInterfacesClient(subscriptionID) interfacesClient := network.NewInterfacesClient(config.subscriptionID)
interfacesClient.BaseURI = endpoint interfacesClient.BaseURI = config.resourceManagerEndpoint
interfacesClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken) interfacesClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken)
interfacesClient.PollingDelay = 5 * time.Second interfacesClient.PollingDelay = 5 * time.Second
configureUserAgent(&interfacesClient.Client) configureUserAgent(&interfacesClient.Client)
return &azInterfacesClient{ return &azInterfacesClient{
rateLimiter: rateLimiter, rateLimiter: config.rateLimiter,
client: interfacesClient, client: interfacesClient,
} }
} }
@ -238,15 +246,15 @@ type azLoadBalancersClient struct {
rateLimiter flowcontrol.RateLimiter rateLimiter flowcontrol.RateLimiter
} }
func newAzLoadBalancersClient(subscriptionID string, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken, rateLimiter flowcontrol.RateLimiter) *azLoadBalancersClient { func newAzLoadBalancersClient(config *azClientConfig) *azLoadBalancersClient {
loadBalancerClient := network.NewLoadBalancersClient(subscriptionID) loadBalancerClient := network.NewLoadBalancersClient(config.subscriptionID)
loadBalancerClient.BaseURI = endpoint loadBalancerClient.BaseURI = config.resourceManagerEndpoint
loadBalancerClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken) loadBalancerClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken)
loadBalancerClient.PollingDelay = 5 * time.Second loadBalancerClient.PollingDelay = 5 * time.Second
configureUserAgent(&loadBalancerClient.Client) configureUserAgent(&loadBalancerClient.Client)
return &azLoadBalancersClient{ return &azLoadBalancersClient{
rateLimiter: rateLimiter, rateLimiter: config.rateLimiter,
client: loadBalancerClient, client: loadBalancerClient,
} }
} }
@ -307,15 +315,15 @@ type azPublicIPAddressesClient struct {
rateLimiter flowcontrol.RateLimiter rateLimiter flowcontrol.RateLimiter
} }
func newAzPublicIPAddressesClient(subscriptionID string, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken, rateLimiter flowcontrol.RateLimiter) *azPublicIPAddressesClient { func newAzPublicIPAddressesClient(config *azClientConfig) *azPublicIPAddressesClient {
publicIPAddressClient := network.NewPublicIPAddressesClient(subscriptionID) publicIPAddressClient := network.NewPublicIPAddressesClient(config.subscriptionID)
publicIPAddressClient.BaseURI = endpoint publicIPAddressClient.BaseURI = config.resourceManagerEndpoint
publicIPAddressClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken) publicIPAddressClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken)
publicIPAddressClient.PollingDelay = 5 * time.Second publicIPAddressClient.PollingDelay = 5 * time.Second
configureUserAgent(&publicIPAddressClient.Client) configureUserAgent(&publicIPAddressClient.Client)
return &azPublicIPAddressesClient{ return &azPublicIPAddressesClient{
rateLimiter: rateLimiter, rateLimiter: config.rateLimiter,
client: publicIPAddressClient, client: publicIPAddressClient,
} }
} }
@ -376,16 +384,16 @@ type azSubnetsClient struct {
rateLimiter flowcontrol.RateLimiter rateLimiter flowcontrol.RateLimiter
} }
func newAzSubnetsClient(subscriptionID string, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken, rateLimiter flowcontrol.RateLimiter) *azSubnetsClient { func newAzSubnetsClient(config *azClientConfig) *azSubnetsClient {
subnetsClient := network.NewSubnetsClient(subscriptionID) subnetsClient := network.NewSubnetsClient(config.subscriptionID)
subnetsClient.BaseURI = endpoint subnetsClient.BaseURI = config.resourceManagerEndpoint
subnetsClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken) subnetsClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken)
subnetsClient.PollingDelay = 5 * time.Second subnetsClient.PollingDelay = 5 * time.Second
configureUserAgent(&subnetsClient.Client) configureUserAgent(&subnetsClient.Client)
return &azSubnetsClient{ return &azSubnetsClient{
client: subnetsClient, client: subnetsClient,
rateLimiter: rateLimiter, rateLimiter: config.rateLimiter,
} }
} }
@ -435,15 +443,15 @@ type azSecurityGroupsClient struct {
rateLimiter flowcontrol.RateLimiter rateLimiter flowcontrol.RateLimiter
} }
func newAzSecurityGroupsClient(subscriptionID string, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken, rateLimiter flowcontrol.RateLimiter) *azSecurityGroupsClient { func newAzSecurityGroupsClient(config *azClientConfig) *azSecurityGroupsClient {
securityGroupsClient := network.NewSecurityGroupsClient(subscriptionID) securityGroupsClient := network.NewSecurityGroupsClient(config.subscriptionID)
securityGroupsClient.BaseURI = endpoint securityGroupsClient.BaseURI = config.resourceManagerEndpoint
securityGroupsClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken) securityGroupsClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken)
securityGroupsClient.PollingDelay = 5 * time.Second securityGroupsClient.PollingDelay = 5 * time.Second
configureUserAgent(&securityGroupsClient.Client) configureUserAgent(&securityGroupsClient.Client)
return &azSecurityGroupsClient{ return &azSecurityGroupsClient{
rateLimiter: rateLimiter, rateLimiter: config.rateLimiter,
client: securityGroupsClient, client: securityGroupsClient,
} }
} }
@ -494,16 +502,16 @@ type azVirtualMachineScaleSetsClient struct {
rateLimiter flowcontrol.RateLimiter rateLimiter flowcontrol.RateLimiter
} }
func newAzVirtualMachineScaleSetsClient(subscriptionID string, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken, rateLimiter flowcontrol.RateLimiter) *azVirtualMachineScaleSetsClient { func newAzVirtualMachineScaleSetsClient(config *azClientConfig) *azVirtualMachineScaleSetsClient {
virtualMachineScaleSetsClient := compute.NewVirtualMachineScaleSetsClient(subscriptionID) virtualMachineScaleSetsClient := compute.NewVirtualMachineScaleSetsClient(config.subscriptionID)
virtualMachineScaleSetsClient.BaseURI = endpoint virtualMachineScaleSetsClient.BaseURI = config.resourceManagerEndpoint
virtualMachineScaleSetsClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken) virtualMachineScaleSetsClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken)
virtualMachineScaleSetsClient.PollingDelay = 5 * time.Second virtualMachineScaleSetsClient.PollingDelay = 5 * time.Second
configureUserAgent(&virtualMachineScaleSetsClient.Client) configureUserAgent(&virtualMachineScaleSetsClient.Client)
return &azVirtualMachineScaleSetsClient{ return &azVirtualMachineScaleSetsClient{
client: virtualMachineScaleSetsClient, client: virtualMachineScaleSetsClient,
rateLimiter: rateLimiter, rateLimiter: config.rateLimiter,
} }
} }
@ -563,16 +571,16 @@ type azVirtualMachineScaleSetVMsClient struct {
rateLimiter flowcontrol.RateLimiter rateLimiter flowcontrol.RateLimiter
} }
func newAzVirtualMachineScaleSetVMsClient(subscriptionID string, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken, rateLimiter flowcontrol.RateLimiter) *azVirtualMachineScaleSetVMsClient { func newAzVirtualMachineScaleSetVMsClient(config *azClientConfig) *azVirtualMachineScaleSetVMsClient {
virtualMachineScaleSetVMsClient := compute.NewVirtualMachineScaleSetVMsClient(subscriptionID) virtualMachineScaleSetVMsClient := compute.NewVirtualMachineScaleSetVMsClient(config.subscriptionID)
virtualMachineScaleSetVMsClient.BaseURI = endpoint virtualMachineScaleSetVMsClient.BaseURI = config.resourceManagerEndpoint
virtualMachineScaleSetVMsClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken) virtualMachineScaleSetVMsClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken)
virtualMachineScaleSetVMsClient.PollingDelay = 5 * time.Second virtualMachineScaleSetVMsClient.PollingDelay = 5 * time.Second
configureUserAgent(&virtualMachineScaleSetVMsClient.Client) configureUserAgent(&virtualMachineScaleSetVMsClient.Client)
return &azVirtualMachineScaleSetVMsClient{ return &azVirtualMachineScaleSetVMsClient{
client: virtualMachineScaleSetVMsClient, client: virtualMachineScaleSetVMsClient,
rateLimiter: rateLimiter, rateLimiter: config.rateLimiter,
} }
} }
@ -622,16 +630,16 @@ type azRoutesClient struct {
rateLimiter flowcontrol.RateLimiter rateLimiter flowcontrol.RateLimiter
} }
func newAzRoutesClient(subscriptionID string, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken, rateLimiter flowcontrol.RateLimiter) *azRoutesClient { func newAzRoutesClient(config *azClientConfig) *azRoutesClient {
routesClient := network.NewRoutesClient(subscriptionID) routesClient := network.NewRoutesClient(config.subscriptionID)
routesClient.BaseURI = endpoint routesClient.BaseURI = config.resourceManagerEndpoint
routesClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken) routesClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken)
routesClient.PollingDelay = 5 * time.Second routesClient.PollingDelay = 5 * time.Second
configureUserAgent(&routesClient.Client) configureUserAgent(&routesClient.Client)
return &azRoutesClient{ return &azRoutesClient{
client: routesClient, client: routesClient,
rateLimiter: rateLimiter, rateLimiter: config.rateLimiter,
} }
} }
@ -661,16 +669,16 @@ type azRouteTablesClient struct {
rateLimiter flowcontrol.RateLimiter rateLimiter flowcontrol.RateLimiter
} }
func newAzRouteTablesClient(subscriptionID string, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken, rateLimiter flowcontrol.RateLimiter) *azRouteTablesClient { func newAzRouteTablesClient(config *azClientConfig) *azRouteTablesClient {
routeTablesClient := network.NewRouteTablesClient(subscriptionID) routeTablesClient := network.NewRouteTablesClient(config.subscriptionID)
routeTablesClient.BaseURI = endpoint routeTablesClient.BaseURI = config.resourceManagerEndpoint
routeTablesClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken) routeTablesClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken)
routeTablesClient.PollingDelay = 5 * time.Second routeTablesClient.PollingDelay = 5 * time.Second
configureUserAgent(&routeTablesClient.Client) configureUserAgent(&routeTablesClient.Client)
return &azRouteTablesClient{ return &azRouteTablesClient{
client: routeTablesClient, client: routeTablesClient,
rateLimiter: rateLimiter, rateLimiter: config.rateLimiter,
} }
} }
@ -700,15 +708,15 @@ type azStorageAccountClient struct {
rateLimiter flowcontrol.RateLimiter rateLimiter flowcontrol.RateLimiter
} }
func newAzStorageAccountClient(subscriptionID string, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken, rateLimiter flowcontrol.RateLimiter) *azStorageAccountClient { func newAzStorageAccountClient(config *azClientConfig) *azStorageAccountClient {
storageAccountClient := storage.NewAccountsClientWithBaseURI(endpoint, subscriptionID) storageAccountClient := storage.NewAccountsClientWithBaseURI(config.resourceManagerEndpoint, config.subscriptionID)
storageAccountClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken) storageAccountClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken)
storageAccountClient.PollingDelay = 5 * time.Second storageAccountClient.PollingDelay = 5 * time.Second
configureUserAgent(&storageAccountClient.Client) configureUserAgent(&storageAccountClient.Client)
return &azStorageAccountClient{ return &azStorageAccountClient{
client: storageAccountClient, client: storageAccountClient,
rateLimiter: rateLimiter, rateLimiter: config.rateLimiter,
} }
} }
@ -768,15 +776,15 @@ type azDisksClient struct {
rateLimiter flowcontrol.RateLimiter rateLimiter flowcontrol.RateLimiter
} }
func newAzDisksClient(subscriptionID string, endpoint string, servicePrincipalToken *adal.ServicePrincipalToken, rateLimiter flowcontrol.RateLimiter) *azDisksClient { func newAzDisksClient(config *azClientConfig) *azDisksClient {
disksClient := disk.NewDisksClientWithBaseURI(endpoint, subscriptionID) disksClient := disk.NewDisksClientWithBaseURI(config.resourceManagerEndpoint, config.subscriptionID)
disksClient.Authorizer = autorest.NewBearerAuthorizer(servicePrincipalToken) disksClient.Authorizer = autorest.NewBearerAuthorizer(config.servicePrincipalToken)
disksClient.PollingDelay = 5 * time.Second disksClient.PollingDelay = 5 * time.Second
configureUserAgent(&disksClient.Client) configureUserAgent(&disksClient.Client)
return &azDisksClient{ return &azDisksClient{
client: disksClient, client: disksClient,
rateLimiter: rateLimiter, rateLimiter: config.rateLimiter,
} }
} }