Skip to content

Commit

Permalink
Merge pull request #6981 from MartinForReal/shafan/roleassignmentclient
Browse files Browse the repository at this point in the history
track2 sdk:add roledefinition and roleassignment client
  • Loading branch information
k8s-ci-robot committed Sep 9, 2024
2 parents 6d2a767 + 37e9fbb commit bd8a26a
Show file tree
Hide file tree
Showing 27 changed files with 1,241 additions and 30 deletions.
2 changes: 2 additions & 0 deletions pkg/azclient/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,8 @@ generatecode: build ## Generate client
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/keyvault/armkeyvault --package-alias armkeyvault --resource Vault --subresource Secret --client-name SecretsClient --verbs get,createorupdate,delete,list
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/keyvault/armkeyvault --package-alias armkeyvault --resource Vault --client-name VaultsClient --verbs get,createorupdate,delete,list
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources --package-alias armresources --resource Provider --client-name ProvidersClient
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2 --package-alias armauthorization --resource RoleAssignment --client-name RoleAssignmentsClient
$(TYPESCAFFOLD) --package github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2 --package-alias armauthorization --resource RoleDefinition --client-name RoleDefinitionsClient


.PHONY: generateimpl
Expand Down
11 changes: 6 additions & 5 deletions pkg/azclient/client-gen/generator/codegenerator.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,11 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error {
root.AddError(err)
return
}

if err := factoryGenerator.RegisterClient(ctx, root, typeInfo.Name, markerConf, headerText); err != nil {
root.AddError(err)
return
if !markerConf.OutOfSubscriptionScope {
if err := factoryGenerator.RegisterClient(ctx, root, typeInfo.Name, markerConf, headerText); err != nil {
root.AddError(err)
return
}
}
}
})
Expand All @@ -129,7 +130,7 @@ func (g Generator) Generate(ctx *genall.GenerationContext) error {
fmt.Println("Run go test ")

//nolint:gosec // G204 ignore this!
cmd = exec.Command("go", "test", "./...")
cmd = exec.Command("go", "test", "./...", "--timeout=30m")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
return cmd.Run()
Expand Down
3 changes: 3 additions & 0 deletions pkg/azclient/client-gen/generator/gencode_action.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ func generateClient(ctx *genall.GenerationContext, root *loader.Package, _ strin
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/tracing"] = make(map[string]struct{})
if markerConf.OutOfSubscriptionScope && len(markerConf.Verbs) > 0 {
importList["go.opentelemetry.io/otel/attribute"] = make(map[string]struct{})
}
if err := WriteToFile(ctx, root, "zz_generated_client.go", headerText, importList, &outContent); err != nil {
return err
}
Expand Down
45 changes: 27 additions & 18 deletions pkg/azclient/client-gen/generator/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,22 @@ package generator
import "html/template"

type ClientGenConfig struct {
Verbs []string `marker:",optional"`
Resource string
SubResource string `marker:"subResource,optional"`
PackageName string
PackageAlias string
ClientName string
Expand bool `marker:"expand,optional"`
RateLimitKey string `marker:"rateLimitKey,optional"`
CrossSubFactory bool `marker:"crossSubFactory,optional"`
Verbs []string `marker:",optional"`
Resource string
SubResource string `marker:"subResource,optional"`
PackageName string
PackageAlias string
ClientName string
OutOfSubscriptionScope bool `marker:"outOfSubscriptionScope,optional"`
Expand bool `marker:"expand,optional"`
RateLimitKey string `marker:"rateLimitKey,optional"`
CrossSubFactory bool `marker:"crossSubFactory,optional"`
}

var ClientTemplate = template.Must(template.New("object-scaffolding-client-struct").Parse(`
type Client struct{
*{{.PackageAlias}}.{{.ClientName}}
subscriptionID string
{{if not .OutOfSubscriptionScope -}}subscriptionID string {{- end}}
tracer tracing.Tracer
}
`))
Expand All @@ -45,13 +46,13 @@ func New(subscriptionID string, credential azcore.TokenCredential, options *arm.
}
tr := options.TracingProvider.NewTracer(utils.ModuleName, utils.ModuleVersion)
client, err := {{.PackageAlias}}.New{{.ClientName}}(subscriptionID, credential, options)
client, err := {{.PackageAlias}}.New{{.ClientName}}({{if not .OutOfSubscriptionScope}}subscriptionID,{{end}} credential, options)
if err != nil {
return nil, err
}
return &Client{
{{.ClientName}}: client,
subscriptionID: subscriptionID,
{{if not .OutOfSubscriptionScope}}subscriptionID: subscriptionID,{{end}}
tracer: tr,
}, nil
}
Expand All @@ -65,7 +66,11 @@ var CreateOrUpdateFuncTemplate = template.Must(template.New("object-scaffolding-
const CreateOrUpdateOperationName = "{{.ClientName}}.Create"
// CreateOrUpdate creates or updates a {{$resource}}.
func (client *Client) CreateOrUpdate(ctx context.Context, resourceGroupName string, resourceName string,{{with .SubResource}}parentResourceName string, {{end}} resource {{.PackageAlias}}.{{$resource}}) (result *{{.PackageAlias}}.{{$resource}}, err error) {
{{if .OutOfSubscriptionScope -}}
metricsCtx := metrics.BeginARMRequestWithAttributes(attribute.String("resource", "{{ $resource }}"), attribute.String("method", "create_or_update"))
{{else -}}
metricsCtx := metrics.BeginARMRequest(client.subscriptionID, resourceGroupName, "{{ $resource }}", "create_or_update")
{{end -}}
defer func() { metricsCtx.Observe(ctx, err) }()
ctx, endSpan := runtime.StartSpan(ctx, CreateOrUpdateOperationName, client.tracer, nil)
defer endSpan(err)
Expand Down Expand Up @@ -111,12 +116,16 @@ var ListFuncTemplate = template.Must(template.New("object-scaffolding-list-func"
{{- end }}
const ListOperationName = "{{.ClientName}}.List"
// List gets a list of {{$resource}} in the resource group.
func (client *Client) List(ctx context.Context, resourceGroupName string{{with .SubResource}}, parentResourceName string{{end}}) (result []*{{.PackageAlias}}.{{$resource}}, err error) {
metricsCtx := metrics.BeginARMRequest(client.subscriptionID, resourceGroupName, "{{ $resource }}", "list")
func (client *Client) List(ctx context.Context,{{if .OutOfSubscriptionScope}} scopeName{{else}} resourceGroupName{{end}} string{{with .SubResource}}, parentResourceName string{{end}}) (result []*{{.PackageAlias}}.{{$resource}}, err error) {
{{if .OutOfSubscriptionScope -}}
metricsCtx := metrics.BeginARMRequestWithAttributes(attribute.String("resource", "{{ $resource }}"), attribute.String("method", "list"))
{{else -}}
metricsCtx := metrics.BeginARMRequest({{if .OutOfSubscriptionScope}}scopeName{{else}}client.subscriptionID, resourceGroupName,{{end}} "{{ $resource }}", "list")
{{end -}}
defer func() { metricsCtx.Observe(ctx, err) }()
ctx, endSpan := runtime.StartSpan(ctx, ListOperationName, client.tracer, nil)
defer endSpan(err)
pager := client.{{.ClientName}}.NewListPager(resourceGroupName,{{with .SubResource}}parentResourceName,{{end}} nil)
pager := client.{{.ClientName}}.NewListPager({{if .OutOfSubscriptionScope}}scopeName{{else}}resourceGroupName{{end}},{{with .SubResource}} parentResourceName,{{end}} nil)
for pager.More() {
nextResult, err := pager.NextPage(ctx)
if err != nil {
Expand Down Expand Up @@ -153,15 +162,15 @@ var GetFuncTemplate = template.Must(template.New("object-scaffolding-get-func").
const GetOperationName = "{{.ClientName}}.Get"
// Get gets the {{$resource}}
func (client *Client) Get(ctx context.Context, resourceGroupName string, {{with .SubResource}}parentResourceName string,{{end}} resourceName string{{if .Expand}}, expand *string{{end}}) (result *{{.PackageAlias}}.{{$resource}}, err error) {
{{ if .Expand}}var ops *{{.PackageAlias}}.{{.ClientName}}GetOptions
{{ if .Expand -}}var ops *{{.PackageAlias}}.{{.ClientName}}GetOptions
if expand != nil {
ops = &{{.PackageAlias}}.{{.ClientName}}GetOptions{ Expand: expand }
}{{- end}}
}{{ end }}
metricsCtx := metrics.BeginARMRequest(client.subscriptionID, resourceGroupName, "{{ $resource }}", "get")
defer func() { metricsCtx.Observe(ctx, err) }()
ctx, endSpan := runtime.StartSpan(ctx, GetOperationName, client.tracer, nil)
defer endSpan(err)
resp, err := client.{{.ClientName}}.Get(ctx, resourceGroupName,{{with .SubResource}}parentResourceName,{{end}} resourceName,{{if .Expand}}ops{{else}}nil{{end}} )
resp, err := client.{{.ClientName}}.Get(ctx, resourceGroupName,{{with .SubResource}}parentResourceName,{{end}} resourceName,{{if .Expand}} ops{{else}} nil{{end}})
if err != nil {
return nil, err
}
Expand Down
2 changes: 2 additions & 0 deletions pkg/azclient/factory.go

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

27 changes: 27 additions & 0 deletions pkg/azclient/factory_gen.go

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

7 changes: 7 additions & 0 deletions pkg/azclient/factory_test.go

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

1 change: 1 addition & 0 deletions pkg/azclient/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ toolchain go1.23.0
require (
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2 v2.2.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.7.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerregistry/armcontainerregistry v1.2.0
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v4 v4.8.0
Expand Down
2 changes: 2 additions & 0 deletions pkg/azclient/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2 v2.2.0 h1:Hp+EScFOu9HeCbeW8WU2yQPJd4gGwhMgKxWe+G6jNzw=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2 v2.2.0/go.mod h1:/pz8dyNQe+Ey3yBp/XuYz7oqX8YDNWVpPB0hH3XWfbc=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.7.0 h1:LkHbJbgF3YyvC53aqYGR+wWQDn2Rdp9AQdGndf9QvY4=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.7.0/go.mod h1:QyiQdW4f4/BIfB8ZutZ2s+28RAgfa/pT+zS++ZHyM1I=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerregistry/armcontainerregistry v1.2.0 h1:DWlwvVV5r/Wy1561nZ3wrpI1/vDIBRY/Wd1HWaRBZWA=
Expand Down
19 changes: 12 additions & 7 deletions pkg/azclient/metrics/metrics.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,19 @@ type ARMContext struct {

// BeginARMRequest creates a new ARMContext for an ARM request.
func BeginARMRequest(subscriptionID, resourceGroup, resource, method string) *ARMContext {
return BeginARMRequestWithAttributes(
attribute.String("subscription_id", subscriptionID),
attribute.String("resource_group", strings.ToLower(resourceGroup)),
attribute.String("resource", resource),
attribute.String("method", method),
)
}

// BeginARMRequest creates a new ARMContext for an ARM request.
func BeginARMRequestWithAttributes(attributes ...attribute.KeyValue) *ARMContext {
return &ARMContext{
startedAt: time.Now(),
attributes: []attribute.KeyValue{
attribute.String("subscription_id", subscriptionID),
attribute.String("resource_group", strings.ToLower(resourceGroup)),
attribute.String("resource", resource),
attribute.String("method", method),
},
startedAt: time.Now(),
attributes: attributes,
}
}

Expand Down
15 changes: 15 additions & 0 deletions pkg/azclient/mock_azclient/interface.go

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

72 changes: 72 additions & 0 deletions pkg/azclient/roleassignmentclient/custom.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
/*
Copyright 2024 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// +azure:enableclientgen:=true
package roleassignmentclient

import (
"context"

"github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime"
armauthorization "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2"

"sigs.k8s.io/cloud-provider-azure/pkg/azclient/metrics"
)

// Get gets a role assignment.
const GetOperationName = "RoleAssignmentsClient.Get"

func (client *Client) Get(ctx context.Context, scope string, roleAssignmentName string, options *armauthorization.RoleAssignmentsClientGetOptions) (result *armauthorization.RoleAssignment, err error) {
metricsCtx := metrics.BeginARMRequest(client.subscriptionID, scope, "RoleAssignment", "get")
defer func() { metricsCtx.Observe(ctx, err) }()
ctx, endSpan := runtime.StartSpan(ctx, GetOperationName, client.tracer, nil)
defer endSpan(err)
resp, err := client.RoleAssignmentsClient.Get(ctx, scope, roleAssignmentName, options)
if err != nil {
return nil, err
}
return &resp.RoleAssignment, nil
}

const DeleteOperationName = "RoleAssignmentsClient.Delete"

// Delete deletes a Subnet by name.
func (client *Client) Delete(ctx context.Context, scope string, roleAssignmentName string, options *armauthorization.RoleAssignmentsClientDeleteOptions) (result *armauthorization.RoleAssignment, err error) {
metricsCtx := metrics.BeginARMRequest(client.subscriptionID, scope, "RoleAssignment", "delete")
defer func() { metricsCtx.Observe(ctx, err) }()
ctx, endSpan := runtime.StartSpan(ctx, DeleteOperationName, client.tracer, nil)
defer endSpan(err)
resp, err := client.RoleAssignmentsClient.Delete(ctx, scope, roleAssignmentName, options)
if err != nil {
return nil, err
}
return &resp.RoleAssignment, nil
}

const CreateOrUpdateOperationName = "RoleAssignmentsClient.Create"

// CreateOrUpdate creates or updates a Subnet.
func (client *Client) Create(ctx context.Context, scope string, roleAssignmentName string, parameters armauthorization.RoleAssignmentCreateParameters) (result *armauthorization.RoleAssignment, err error) {
metricsCtx := metrics.BeginARMRequest(client.subscriptionID, scope, "RoleAssignment", "create")
defer func() { metricsCtx.Observe(ctx, err) }()
ctx, endSpan := runtime.StartSpan(ctx, CreateOrUpdateOperationName, client.tracer, nil)
defer endSpan(err)
resp, err := client.RoleAssignmentsClient.Create(ctx, scope, roleAssignmentName, parameters, nil)
if err != nil {
return nil, err
}
return &resp.RoleAssignment, nil
}
Loading

0 comments on commit bd8a26a

Please sign in to comment.