Skip to content

Commit

Permalink
Merge pull request #4155 from MartinForReal/master
Browse files Browse the repository at this point in the history
track2 sdk: move sub to config struct in client factory
  • Loading branch information
MartinForReal authored Jun 25, 2023
2 parents 1870032 + 6b05223 commit cb04dcf
Show file tree
Hide file tree
Showing 6 changed files with 334 additions and 369 deletions.
54 changes: 33 additions & 21 deletions pkg/azclient/client-gen/generator/genclientfactory_action.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,10 @@ func (generator *ClientFactoryGenerator) Generate(_ *genall.GenerationContext) e
for k, v := range generator.importList {
importList[k] = v
}
importList["strings"] = make(map[string]struct{})
importList["sync"] = make(map[string]struct{})

importList["github.com/Azure/azure-sdk-for-go/sdk/azcore"] = make(map[string]struct{})
importList["github.com/Azure/azure-sdk-for-go/sdk/azcore/arm"] = make(map[string]struct{})
importList["github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"] = make(map[string]struct{})
importList["sigs.k8s.io/cloud-provider-azure/pkg/azclient/policy/ratelimit"] = make(map[string]struct{})
importList["github.com/Azure/azure-sdk-for-go/sdk/azidentity"] = make(map[string]struct{})

Expand Down Expand Up @@ -139,44 +140,55 @@ type ClientFactoryImpl struct {
*ClientFactoryConfig
cred azcore.TokenCredential
{{ range $key, $client := . -}}
{{ $key }}Registry sync.Map
{{ $key }} {{.PkgAlias}}.{{.InterfaceTypeName}}
{{end -}}
}
func NewClientFactory(config *ClientFactoryConfig, cred azcore.TokenCredential) ClientFactory {
func NewClientFactory(config *ClientFactoryConfig, cred azcore.TokenCredential) (ClientFactory,error) {
if config == nil {
config = &ClientFactoryConfig{}
}
if cred == nil {
cred = &azidentity.DefaultAzureCredential{}
}
return &ClientFactoryImpl{
ClientFactoryConfig: config,
cred: cred,
}
}
{{range $key, $client := . }}
func (factory *ClientFactoryImpl) Get{{.PkgAlias}}{{.InterfaceTypeName}}(subscription string) ({{.PkgAlias}}.{{.InterfaceTypeName}}, error) {
subID := strings.ToLower(subscription)
var options *arm.ClientOptions
var err error
options, err := GetDefaultResourceClientOption(factory.ClientFactoryConfig)
{{ $rateLimitPolicyNotDefined := true -}}
{{range $key, $client := . }}
options, err = GetDefaultResourceClientOption(config)
if err != nil {
return nil, err
}
{{with .RateLimitKey -}}
{{with $rateLimitPolicyNotDefined}}
var ratelimitOption *ratelimit.Config
var rateLimitPolicy policy.Policy
{{ $rateLimitPolicyNotDefined = false -}}
{{end -}}
{{with $client.RateLimitKey -}}
//add ratelimit policy
ratelimitOption := factory.ClientFactoryConfig.GetRateLimitConfig("{{.}}")
rateLimitPolicy := ratelimit.NewRateLimitPolicy(ratelimitOption)
ratelimitOption = config.GetRateLimitConfig("{{.}}")
rateLimitPolicy = ratelimit.NewRateLimitPolicy(ratelimitOption)
options.ClientOptions.PerCallPolicies = append(options.ClientOptions.PerCallPolicies, rateLimitPolicy)
{{- end }}
defaultClient, err := {{.PkgAlias}}.New(subscription, factory.cred, options)
{{- end }}
{{$key}}, err := {{.PkgAlias}}.New(config.SubscriptionID, cred, options)
if err != nil {
return nil, err
}
client, _ := factory.{{ $key }}Registry.LoadOrStore(subID, &defaultClient)
{{end -}}
return &ClientFactoryImpl{
ClientFactoryConfig: config,
cred: cred,
{{- range $key, $client := . -}}
{{ $key }} : {{ $key }},
{{end -}}
}, nil
}
return *client.(*{{.PkgAlias}}.{{.InterfaceTypeName}}), nil
{{range $key, $client := . }}
func (factory *ClientFactoryImpl) Get{{.PkgAlias}}{{.InterfaceTypeName}}(){{.PkgAlias}}.{{.InterfaceTypeName}} {
return factory.{{ $key }}
}
{{ end }}
`))
Expand All @@ -185,7 +197,7 @@ var AbstractClientFactoryInterfaceTemplate = template.Must(template.New("object-
`
type ClientFactory interface {
{{- range $key, $client := . }}
Get{{.PkgAlias}}{{.InterfaceTypeName}}(subscription string) ({{.PkgAlias}}.{{.InterfaceTypeName}}, error)
Get{{.PkgAlias}}{{.InterfaceTypeName}}() {{.PkgAlias}}.{{.InterfaceTypeName}}
{{- end }}
}
`))
36 changes: 18 additions & 18 deletions pkg/azclient/factory.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions pkg/azclient/factory_conf.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ type ClientFactoryConfig struct {

// 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(config *ClientFactoryConfig) (*policy.ClientOptions, error) {
Expand Down
Loading

0 comments on commit cb04dcf

Please sign in to comment.