From c41fae2c40485d1d1fc4970fb7febd2156b66abc Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Wed, 5 Jun 2024 11:28:04 +0200 Subject: [PATCH 01/14] first implementation --- go.mod | 14 +-- go.sum | 32 ++--- pkg/azure/access/helpers/disk.go | 48 ++++++++ pkg/azure/api/providerspec.go | 2 + pkg/azure/provider/helpers/driver.go | 114 +++++++++++++++++- .../helpers/resourcegraphprocessor.go | 2 +- pkg/azure/provider/provider.go | 31 +++-- pkg/azure/testhelp/fakes/machineresources.go | 4 +- pkg/azure/testhelp/providerspec.go | 2 +- pkg/azure/utils/names.go | 19 ++- pkg/azure/utils/names_test.go | 2 +- 11 files changed, 219 insertions(+), 51 deletions(-) diff --git a/go.mod b/go.mod index e965da29..996d0491 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module github.com/gardener/machine-controller-manager-provider-azure go 1.21 require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 - github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.3.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/marketplaceordering/armmarketplaceordering v1.2.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.8.2 @@ -15,7 +15,7 @@ require ( github.com/onsi/gomega v1.29.0 github.com/prometheus/client_golang v1.16.0 github.com/spf13/pflag v1.0.5 - golang.org/x/crypto v0.16.0 + golang.org/x/crypto v0.21.0 golang.org/x/exp v0.0.0-20230905200255-921286631fa9 k8s.io/api v0.29.3 k8s.io/apimachinery v0.29.3 @@ -26,7 +26,7 @@ require ( ) require ( - github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.6.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -65,10 +65,10 @@ require ( github.com/prometheus/common v0.44.0 // indirect github.com/prometheus/procfs v0.10.1 // indirect github.com/spf13/cobra v1.7.0 // indirect - golang.org/x/net v0.19.0 // indirect + golang.org/x/net v0.22.0 // indirect golang.org/x/oauth2 v0.10.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/term v0.15.0 // indirect + golang.org/x/sys v0.18.0 // indirect + golang.org/x/term v0.18.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/tools v0.16.1 // indirect diff --git a/go.sum b/go.sum index 6128c3c2..48960f9d 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,11 @@ -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 h1:fb8kj/Dh4CSwgsOzHeZY4Xh68cFVbzXx+ONXGMY//4w= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0/go.mod h1:uReU2sSxZExRPBAg3qKzmAucSi51+SP1OhohieR821Q= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2 h1:c4k2FIYIh4xtwqrQwV0Ct1v5+ehlNXj5NI/MWVsiTkQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2/go.mod h1:5FDJtLEO/GxwNgUxbwrY3LP0pEoThTQJtk2oysdXHxM= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 h1:d81/ng9rET2YqdVkVwkb6EXeRrLJIwyGnJcAlAWKwhs= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.3.0 h1:qgs/VAMSR+9qFhwTw4OwF2NbVuw+2m83pVZJjqkKQMw= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.3.0/go.mod h1:uYt4CfhkJA9o0FN7jfE5minm/i4nUE4MjGUJkzB6Zs8= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.6.0 h1:sUFnFjzDUie80h24I7mrKtwCKgLY9L8h5Tp2x9+TWqk= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.6.0/go.mod h1:52JbnQTp15qg5mRkMBHwp0j0ZFwHJ42Sx3zVV5RE9p0= +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/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0 h1:pPvTJ1dY0sA35JOeFq6TsY2xj6Z85Yo23Pj4wCCvu4o= @@ -142,8 +142,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= @@ -155,8 +155,8 @@ go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= +golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -166,8 +166,8 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= +golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -179,10 +179,10 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= +golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= +golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= diff --git a/pkg/azure/access/helpers/disk.go b/pkg/azure/access/helpers/disk.go index fc2a2b7a..44dda55d 100644 --- a/pkg/azure/access/helpers/disk.go +++ b/pkg/azure/access/helpers/disk.go @@ -6,6 +6,8 @@ package helpers import ( "context" + "time" + "k8s.io/klog/v2" "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" @@ -17,6 +19,10 @@ import ( const ( diskDeleteServiceLabel = "disk_delete" + diskCreateServiceLabel = "disk_create" + diskAttachServiceLabel = "disk_attach" + + defaultDiskOperationTimeout = 10 * time.Minute ) // DeleteDisk deletes disk for passed in resourceGroup and diskName. @@ -38,3 +44,45 @@ func DeleteDisk(ctx context.Context, client *armcompute.DisksClient, resourceGro klog.Infof("Successfully deleted Disk: %s, for ResourceGroup: %s", diskName, resourceGroup) return } + +// CreateImageRefDisk creates a Disk given a resourceGroup and disk creation parameters. +// NOTE: All calls to this Azure API are instrumented as prometheus metric. +func CreateImageRefDisk(ctx context.Context, client *armcompute.DisksClient, resourceGroup, diskName string, diskCreationParams armcompute.Disk) (disk *armcompute.Disk, err error) { + defer instrument.AZAPIMetricRecorderFn(diskCreateServiceLabel, &err)() + + createCtx, cancelFn := context.WithTimeout(ctx, defaultDiskOperationTimeout) + defer cancelFn() + poller, err := client.BeginCreateOrUpdate(createCtx, resourceGroup, diskName, diskCreationParams, nil) + if err != nil { + errors.LogAzAPIError(err, "Failed to trigger create of Disk [Name: %s, ResourceGroup: %s]", resourceGroup, diskName) + return + } + createResp, err := poller.PollUntilDone(createCtx, nil) + if err != nil { + errors.LogAzAPIError(err, "Polling failed while waiting for create of Disk: %s for ResourceGroup: %s", diskName, resourceGroup) + return + } + disk = &createResp.Disk + return +} + +// AttachDataDisks attaches a Disk given a resourceGroup and virtual machine creation parameters. +// NOTE: All calls to this Azure API are instrumented as prometheus metric. +func AttachDataDisks(ctx context.Context, client *armcompute.VirtualMachinesClient, attachParameters armcompute.AttachDetachDataDisksRequest, resourceGroup, vmName string) (disks []*armcompute.DataDisk, err error) { + defer instrument.AZAPIMetricRecorderFn(diskAttachServiceLabel, &err)() + + attachCtx, cancelFn := context.WithTimeout(ctx, defaultDiskOperationTimeout) + defer cancelFn() + poller, err := client.BeginAttachDetachDataDisks(attachCtx, resourceGroup, vmName, attachParameters, nil) + if err != nil { + errors.LogAzAPIError(err, "Failed to attach Disks [ResourceGroup: %s, VM: %s]", resourceGroup, vmName) + return + } + createResp, err := poller.PollUntilDone(attachCtx, nil) + if err != nil { + errors.LogAzAPIError(err, "Polling failed while waiting for attaching of Disks to VM: %s for ResourceGroup: %s ", vmName, resourceGroup) + return + } + disks = createResp.DataDisks + return +} diff --git a/pkg/azure/api/providerspec.go b/pkg/azure/api/providerspec.go index 72f05687..c2a64708 100644 --- a/pkg/azure/api/providerspec.go +++ b/pkg/azure/api/providerspec.go @@ -204,6 +204,8 @@ type AzureDataDisk struct { StorageAccountType string `json:"storageAccountType,omitempty"` // DiskSizeGB is the size of an empty disk in gigabytes. DiskSizeGB int32 `json:"diskSizeGB,omitempty"` + // ImageRef optionally specifies an image source + ImageRef *AzureImageReference `json:"imageRef,omitempty"` } // AzureManagedDiskParameters is the parameters of a managed disk. diff --git a/pkg/azure/provider/helpers/driver.go b/pkg/azure/provider/helpers/driver.go index 2995ccde..076d127f 100644 --- a/pkg/azure/provider/helpers/driver.go +++ b/pkg/azure/provider/helpers/driver.go @@ -126,7 +126,7 @@ func createDataDiskNames(providerSpec api.AzureProviderSpec, vmName string) []st dataDisks := providerSpec.Properties.StorageProfile.DataDisks diskNames := make([]string, 0, len(dataDisks)) for _, disk := range dataDisks { - diskName := utils.CreateDataDiskName(vmName, disk) + diskName := utils.CreateDataDiskName(vmName, disk.Name, *disk.Lun) diskNames = append(diskNames, diskName) } return diskNames @@ -552,6 +552,112 @@ func CreateVM(ctx context.Context, factory access.Factory, connectConfig access. return vm, nil } +type ImageRefDisk struct { + Disk *armcompute.Disk + Lun *int32 + Caching *armcompute.CachingTypes + DeleteOption *armcompute.DiskDeleteOptionTypes +} + +// CreateDisksWithImageRef creates a disk with CreationData (e.g. ImageReference or GalleryImageReference) +func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, vmName string) ([]*ImageRefDisk, error) { + disksAccess, err := factory.GetDisksAccess(connectConfig) + if err != nil { + return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create disk access for VM: [ResourceGroup: %s], Err: %v", providerSpec.ResourceGroup, err), err) + } + + var disks []*ImageRefDisk + specDataDisks := providerSpec.Properties.StorageProfile.DataDisks + if utils.IsSliceNilOrEmpty(specDataDisks) { + return disks, nil + } + + for _, specDataDisk := range specDataDisks { + if isDataDiskWithImageRef(specDataDisk) { + continue + } + diskCreationParams := createDiskCreationParams(specDataDisk, providerSpec) + diskName := utils.CreateDataDiskName(vmName, specDataDisk.Name, *specDataDisk.Lun) + disk, err := accesshelpers.CreateImageRefDisk(ctx, disksAccess, providerSpec.ResourceGroup, diskName, diskCreationParams) + if err != nil { + errCode := accesserrors.GetMatchingErrorCode(err) + return nil, status.WrapError(errCode, fmt.Sprintf("Failed to create Disk: [ResourceGroup: %s, Name: %s], Err: %v", providerSpec.ResourceGroup, diskName, err), err) + } + caching := armcompute.CachingTypesNone + if !utils.IsEmptyString(specDataDisk.Caching) { + caching = armcompute.CachingTypes(specDataDisk.Caching) + } + imageRefDisk := &ImageRefDisk{ + Disk: disk, + Lun: specDataDisk.Lun, + Caching: to.Ptr(caching), + DeleteOption: to.Ptr(armcompute.DiskDeleteOptionTypesDelete), + } + disks = append(disks, imageRefDisk) + klog.Infof("Successfully created Disk: [ResourceGroup: %s, Name: %s]", providerSpec.ResourceGroup, specDataDisk.Name) + } + + return disks, nil +} + +func isDataDiskWithImageRef(dataDisk api.AzureDataDisk) bool { + if dataDisk.ImageRef == nil { + return false + } + return true +} + +func createDiskCreationParams(specDataDisk api.AzureDataDisk, providerSpec api.AzureProviderSpec) armcompute.Disk { + diskCreationParams := armcompute.Disk{ + Location: to.Ptr(providerSpec.Location), + Properties: &armcompute.DiskProperties{ + CreationData: &armcompute.CreationData{ + CreateOption: to.Ptr(armcompute.DiskCreateOptionFromImage), + GalleryImageReference: &armcompute.ImageDiskReference{ + CommunityGalleryImageID: specDataDisk.ImageRef.CommunityGalleryImageID, + SharedGalleryImageID: specDataDisk.ImageRef.SharedGalleryImageID, + }, + ImageReference: &armcompute.ImageDiskReference{ + // ID: specDataDisk.ImageRef.URN // TODO calculate from URN + }, + }, + DiskSizeGB: to.Ptr[int32](specDataDisk.DiskSizeGB), + OSType: to.Ptr(armcompute.OperatingSystemTypesLinux), + }, + SKU: &armcompute.DiskSKU{ + Name: to.Ptr(armcompute.DiskStorageAccountTypes(specDataDisk.StorageAccountType)), + }, + Tags: utils.CreateResourceTags(providerSpec.Tags), + Zones: getZonesFromProviderSpec(providerSpec), + Name: to.Ptr(specDataDisk.Name), + } + return diskCreationParams +} + +func AttachDataDisks(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, resourceGroup, vmName string, disks []*ImageRefDisk) ([]*armcompute.DataDisk, error) { + vmAccess, err := factory.GetVirtualMachinesAccess(connectConfig) + if err != nil { + return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create vm access to attach disk: [Vm: %s, ResourceGroup: %s], Err: %v", vmName, resourceGroup, err), err) + } + + var attachParams armcompute.AttachDetachDataDisksRequest + for _, disk := range disks { + toAttach := &armcompute.DataDisksToAttach{ + DiskID: disk.Disk.ID, + Caching: disk.Caching, + DeleteOption: disk.DeleteOption, + Lun: disk.Lun, + } + attachParams.DataDisksToAttach = append(attachParams.DataDisksToAttach, toAttach) + } + attachedDataDisks, err := accesshelpers.AttachDataDisks(ctx, vmAccess, attachParams, resourceGroup, vmName) + if err != nil { + return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to attach disks for VM: [VmName: %s, ResourceGroup: %s], Err: %v", vmName, resourceGroup, err), err) + } + + return attachedDataDisks, nil +} + // LogVMCreation is a convenience method which helps to extract relevant details from the created virtual machine and logs it. // Today the azure create VM call is atomic only w.r.t creation of VM, OSDisk, DataDisk(s). NIC still has to be created prior to creation of the VM. // Therefore, this method produces a log which also prints the OSDisk, DataDisks that are created (which helps in traceability). For completeness it @@ -669,13 +775,15 @@ func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string) []*armcomput return dataDisks } for _, specDataDisk := range specDataDisks { - dataDiskName := utils.CreateDataDiskName(vmName, specDataDisk) + if isDataDiskWithImageRef(specDataDisk) { + continue + } + dataDiskName := utils.CreateDataDiskName(vmName, specDataDisk.Name, *specDataDisk.Lun) caching := armcompute.CachingTypesNone if !utils.IsEmptyString(specDataDisk.Caching) { caching = armcompute.CachingTypes(specDataDisk.Caching) } dataDisk := &armcompute.DataDisk{ - CreateOption: to.Ptr(armcompute.DiskCreateOptionTypesEmpty), Lun: specDataDisk.Lun, Caching: to.Ptr(caching), diff --git a/pkg/azure/provider/helpers/resourcegraphprocessor.go b/pkg/azure/provider/helpers/resourcegraphprocessor.go index a06d82bd..f046ce5b 100644 --- a/pkg/azure/provider/helpers/resourcegraphprocessor.go +++ b/pkg/azure/provider/helpers/resourcegraphprocessor.go @@ -120,7 +120,7 @@ func getDataDiskNameSuffixes(providerSpec api.AzureProviderSpec) sets.Set[string dataDisks := providerSpec.Properties.StorageProfile.DataDisks if dataDisks != nil { for _, dataDisk := range dataDisks { - dataDiskNameSuffixes.Insert(utils.GetDataDiskNameSuffix(dataDisk)) + dataDiskNameSuffixes.Insert(utils.GetDataDiskNameSuffix(dataDisk.Name, *dataDisk.Lun)) } } return dataDiskNameSuffixes diff --git a/pkg/azure/provider/provider.go b/pkg/azure/provider/provider.go index 220a2bb7..b30da80c 100644 --- a/pkg/azure/provider/provider.go +++ b/pkg/azure/provider/provider.go @@ -69,6 +69,7 @@ func (d defaultDriver) CreateMachine(ctx context.Context, req *driver.CreateMach if err != nil { return } + subnet, err := helpers.GetSubnet(ctx, d.factory, connectConfig, providerSpec) if err != nil { return @@ -79,10 +80,24 @@ func (d defaultDriver) CreateMachine(ctx context.Context, req *driver.CreateMach return } + // create disks with image ref since they can not be created as vm data disk + // TODO parallelize creation? + imageRefDisks, err := helpers.CreateDisksWithImageRef(ctx, d.factory, connectConfig, providerSpec, vmName) + if err != nil { + return + } + vm, err := helpers.CreateVM(ctx, d.factory, connectConfig, providerSpec, imageReference, plan, req.Secret, nicID, vmName) if err != nil { return } + + // attach imageRefDisks to vm + _, err = helpers.AttachDataDisks(ctx, d.factory, connectConfig, providerSpec.ResourceGroup, vmName, imageRefDisks) + if err != nil { + return + } + resp = helpers.ConstructCreateMachineResponse(providerSpec.Location, vmName) helpers.LogVMCreation(providerSpec.Location, providerSpec.ResourceGroup, vm) return @@ -140,17 +155,15 @@ func (d defaultDriver) DeleteMachine(ctx context.Context, req *driver.DeleteMach if err = helpers.UpdateCascadeDeleteOptions(ctx, providerSpec, vmAccess, resourceGroup, vm); err != nil { return } - if err = helpers.DeleteVirtualMachine(ctx, vmAccess, resourceGroup, vmName); err != nil { - return - } } else { klog.Infof("Cannot update VM: [ResourceGroup: %s, Name: %s]. Either the VM has provisionState set to Failed or there are one or more data disks that are marked for detachment, update call to this VM will fail and therefore skipped. Will now delete the VM and all its associated resources.", resourceGroup, vmName) - if err = helpers.DeleteVirtualMachine(ctx, vmAccess, resourceGroup, vmName); err != nil { - return - } - if err = helpers.CheckAndDeleteLeftoverNICsAndDisks(ctx, d.factory, vmName, connectConfig, providerSpec); err != nil { - return - } + } + if err = helpers.DeleteVirtualMachine(ctx, vmAccess, resourceGroup, vmName); err != nil { + return + } + // We always need to check for leftover disks in case disk attach failed + if err = helpers.CheckAndDeleteLeftoverNICsAndDisks(ctx, d.factory, vmName, connectConfig, providerSpec); err != nil { + return } klog.Infof("Successfully deleted all Machine resources[VM, NIC, Disks] for [ResourceGroup: %s, VMName: %s]", providerSpec.ResourceGroup, vmName) } diff --git a/pkg/azure/testhelp/fakes/machineresources.go b/pkg/azure/testhelp/fakes/machineresources.go index 38425947..28623ab0 100644 --- a/pkg/azure/testhelp/fakes/machineresources.go +++ b/pkg/azure/testhelp/fakes/machineresources.go @@ -294,7 +294,7 @@ func createDataDiskResources(spec api.AzureProviderSpec, vmID *string, vmName st dataDisks := make(map[string]*armcompute.Disk, len(specDataDisks)) if specDataDisks != nil { for _, specDataDisk := range specDataDisks { - diskName := utils.CreateDataDiskName(vmName, specDataDisk) + diskName := utils.CreateDataDiskName(vmName, specDataDisk.Name, *specDataDisk.Lun) dataDisks[diskName] = createDiskResource(spec, diskName, vmID, nil) } } @@ -442,7 +442,7 @@ func createDataDisks(spec api.AzureProviderSpec, vmName string, deleteOption *ar } dataDisks := make([]*armcompute.DataDisk, 0, len(specDataDisks)) for _, disk := range specDataDisks { - diskName := utils.CreateDataDiskName(vmName, disk) + diskName := utils.CreateDataDiskName(vmName, disk.Name, *disk.Lun) d := createDataDisk(*disk.Lun, armcompute.CachingTypes(disk.Caching), deleteOption, disk.DiskSizeGB, armcompute.StorageAccountTypes(disk.StorageAccountType), diskName) dataDisks = append(dataDisks, d) } diff --git a/pkg/azure/testhelp/providerspec.go b/pkg/azure/testhelp/providerspec.go index 1000d440..04a0081a 100644 --- a/pkg/azure/testhelp/providerspec.go +++ b/pkg/azure/testhelp/providerspec.go @@ -193,7 +193,7 @@ func (b *ProviderSpecBuilder) Build() api.AzureProviderSpec { func CreateDataDiskNames(vmName string, spec api.AzureProviderSpec) []string { var diskNames []string for _, specDataDisk := range spec.Properties.StorageProfile.DataDisks { - diskNames = append(diskNames, utils.CreateDataDiskName(vmName, specDataDisk)) + diskNames = append(diskNames, utils.CreateDataDiskName(vmName, specDataDisk.Name, *specDataDisk.Lun)) } return diskNames } diff --git a/pkg/azure/utils/names.go b/pkg/azure/utils/names.go index fd4b1db0..d56a9d6c 100644 --- a/pkg/azure/utils/names.go +++ b/pkg/azure/utils/names.go @@ -6,8 +6,6 @@ package utils import ( "fmt" - - "github.com/gardener/machine-controller-manager-provider-azure/pkg/azure/api" ) const ( @@ -42,22 +40,21 @@ func CreateOSDiskName(vmName string) string { } // CreateDataDiskName creates a name for a DataDisk using VM name and data disk name specified in the provider Spec -func CreateDataDiskName(vmName string, dataDisk api.AzureDataDisk) string { +func CreateDataDiskName(vmName, diskName string, lun int32) string { prefix := vmName - suffix := GetDataDiskNameSuffix(dataDisk) + suffix := GetDataDiskNameSuffix(diskName, lun) return fmt.Sprintf("%s%s", prefix, suffix) } // GetDataDiskNameSuffix creates the suffix based on an optional data disk name and required lun fields. -func GetDataDiskNameSuffix(dataDisk api.AzureDataDisk) string { - infix := getDataDiskInfix(dataDisk) +func GetDataDiskNameSuffix(diskName string, lun int32) string { + infix := getDataDiskInfix(diskName, lun) return fmt.Sprintf("-%s%s", infix, DataDiskSuffix) } -func getDataDiskInfix(dataDisk api.AzureDataDisk) string { - name := dataDisk.Name - if IsEmptyString(name) { - return fmt.Sprintf("%d", *dataDisk.Lun) +func getDataDiskInfix(diskName string, lun int32) string { + if IsEmptyString(diskName) { + return fmt.Sprintf("%d", lun) } - return fmt.Sprintf("%s-%d", name, *dataDisk.Lun) + return fmt.Sprintf("%s-%d", diskName, lun) } diff --git a/pkg/azure/utils/names_test.go b/pkg/azure/utils/names_test.go index 381a8794..22453e21 100644 --- a/pkg/azure/utils/names_test.go +++ b/pkg/azure/utils/names_test.go @@ -48,7 +48,7 @@ func TestCreateDataDiskName(t *testing.T) { Lun: pointer.Int32(entry.lun), DiskSizeGB: 10, } - g.Expect(CreateDataDiskName(vmName, dataDisk)).To(Equal(entry.expectedDataDiskName)) + g.Expect(CreateDataDiskName(vmName, dataDisk.Name, *dataDisk.Lun)).To(Equal(entry.expectedDataDiskName)) }) } } From a17085ba0389c39831c1135ec672d9bbf2282d87 Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Wed, 5 Jun 2024 12:11:11 +0200 Subject: [PATCH 02/14] Fix lintings --- go.sum | 76 ++++++++++++++++++++++++++++ pkg/azure/access/helpers/disk.go | 4 +- pkg/azure/provider/helpers/driver.go | 6 ++- pkg/azure/provider/provider.go | 3 +- 4 files changed, 83 insertions(+), 6 deletions(-) diff --git a/go.sum b/go.sum index 48960f9d..2377c58e 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2 h1:c4k2FIYIh4xtwqrQwV0Ct1v5+ehlNXj5NI/MWVsiTkQ= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2/go.mod h1:5FDJtLEO/GxwNgUxbwrY3LP0pEoThTQJtk2oysdXHxM= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= @@ -18,19 +20,30 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourceg github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.8.2/go.mod h1:29c9+gYpdWhyC4TPANZBPlgoWllMDhguL2AIByPYQtk= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 h1:Dd+RhdJn0OTtVGaeDLZpcumkIVCtA/3/Fo42+eoYvVM= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0/go.mod h1:5kakwfW5CjC9KK+Q4wjXAg+ShuIm2mBMua0ZFj2C8PE= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 h1:WpB/QDNLpMw72xHJc34BNNykqSOeEJDAWkhf0u12/Jk= github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= +github.com/alecthomas/kingpin/v2 v2.3.2/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -38,14 +51,20 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/gardener/machine-controller-manager v0.53.0 h1:g2O0F7nEYZ9LjyPY6Gew8+q0n+rU88deexNq5k8CKks= github.com/gardener/machine-controller-manager v0.53.0/go.mod h1:XWXHaTy32TU0qmLjWqOgtw8NncdB0HfFzXhUUrcpr7Y= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= @@ -58,6 +77,7 @@ github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEe github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= @@ -66,6 +86,8 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/cel-go v0.17.7/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -78,15 +100,24 @@ github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJY github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -102,23 +133,30 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI= github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= @@ -130,10 +168,13 @@ github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPH github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -144,8 +185,29 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= +github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/etcd/api/v3 v3.5.10/go.mod h1:TidfmT4Uycad3NM/o25fG3J07odo4GBB9hoxaodFCtI= +go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U= +go.etcd.io/etcd/client/v2 v2.305.10/go.mod h1:m3CKZi69HzilhVqtPDcjhSGp+kA1OmbNn0qamH80xjA= +go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc= +go.etcd.io/etcd/pkg/v3 v3.5.10/go.mod h1:TKTuCKKcF1zxmfKWDkfz5qqYaE3JncKKZPFf8c1nFUs= +go.etcd.io/etcd/raft/v3 v3.5.10/go.mod h1:odD6kr8XQXTy9oQnyMPBOr0TVe+gT0neQhElQ6jbGRc= +go.etcd.io/etcd/server/v3 v3.5.10/go.mod h1:gBplPHfs6YI0L+RpGkTQO7buDbHv5HJGG/Bst0/zIPo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.0/go.mod h1:5z+/ZWJQKXa9YT34fQNx5K8Hd1EoIhvtUygUQPqEOgQ= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0/go.mod h1:SeQhzAEccGVZVEy7aH87Nh0km+utSpo1pTv6eMMop48= +go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0/go.mod h1:IPtUMKL4O3tH5y+iXVyAXqpAwMuzC1IrxVS81rummfE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0/go.mod h1:0+KuTDyKL4gjKCF75pHOX4wuzYDUZYfAQdSu43o+Z2I= +go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= +go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= +go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -159,8 +221,10 @@ golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -174,6 +238,7 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -200,8 +265,13 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= +google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= +google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -209,6 +279,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= +gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -228,14 +300,18 @@ k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg= k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0= k8s.io/cluster-bootstrap v0.29.3 h1:DIMDZSN8gbFMy9CS2mAS2Iqq/fIUG783WN/1lqi5TF8= k8s.io/cluster-bootstrap v0.29.3/go.mod h1:aPAg1VtXx3uRrx5qU2jTzR7p1rf18zLXWS+pGhiqPto= +k8s.io/code-generator v0.29.3/go.mod h1:x47ofBhN4gxYFcxeKA1PYXeaPreAGaDN85Y/lNUsPoM= k8s.io/component-base v0.29.3 h1:Oq9/nddUxlnrCuuR2K/jp6aflVvc0uDvxMzAWxnGzAo= k8s.io/component-base v0.29.3/go.mod h1:Yuj33XXjuOk2BAaHsIGHhCKZQAgYKhqIxIjIr2UXYio= +k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= +k8s.io/kms v0.29.3/go.mod h1:TBGbJKpRUMk59neTMDMddjIDL+D4HuFUbpuiuzmOPg0= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= diff --git a/pkg/azure/access/helpers/disk.go b/pkg/azure/access/helpers/disk.go index 44dda55d..39d0b843 100644 --- a/pkg/azure/access/helpers/disk.go +++ b/pkg/azure/access/helpers/disk.go @@ -45,9 +45,9 @@ func DeleteDisk(ctx context.Context, client *armcompute.DisksClient, resourceGro return } -// CreateImageRefDisk creates a Disk given a resourceGroup and disk creation parameters. +// CreateDisk creates a Disk given a resourceGroup and disk creation parameters. // NOTE: All calls to this Azure API are instrumented as prometheus metric. -func CreateImageRefDisk(ctx context.Context, client *armcompute.DisksClient, resourceGroup, diskName string, diskCreationParams armcompute.Disk) (disk *armcompute.Disk, err error) { +func CreateDisk(ctx context.Context, client *armcompute.DisksClient, resourceGroup, diskName string, diskCreationParams armcompute.Disk) (disk *armcompute.Disk, err error) { defer instrument.AZAPIMetricRecorderFn(diskCreateServiceLabel, &err)() createCtx, cancelFn := context.WithTimeout(ctx, defaultDiskOperationTimeout) diff --git a/pkg/azure/provider/helpers/driver.go b/pkg/azure/provider/helpers/driver.go index 076d127f..9f01c1fb 100644 --- a/pkg/azure/provider/helpers/driver.go +++ b/pkg/azure/provider/helpers/driver.go @@ -552,6 +552,7 @@ func CreateVM(ctx context.Context, factory access.Factory, connectConfig access. return vm, nil } +// ImageRefDisk is a disk that will later be attached to a VM as dataDisk type ImageRefDisk struct { Disk *armcompute.Disk Lun *int32 @@ -578,7 +579,7 @@ func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connec } diskCreationParams := createDiskCreationParams(specDataDisk, providerSpec) diskName := utils.CreateDataDiskName(vmName, specDataDisk.Name, *specDataDisk.Lun) - disk, err := accesshelpers.CreateImageRefDisk(ctx, disksAccess, providerSpec.ResourceGroup, diskName, diskCreationParams) + disk, err := accesshelpers.CreateDisk(ctx, disksAccess, providerSpec.ResourceGroup, diskName, diskCreationParams) if err != nil { errCode := accesserrors.GetMatchingErrorCode(err) return nil, status.WrapError(errCode, fmt.Sprintf("Failed to create Disk: [ResourceGroup: %s, Name: %s], Err: %v", providerSpec.ResourceGroup, diskName, err), err) @@ -634,7 +635,8 @@ func createDiskCreationParams(specDataDisk api.AzureDataDisk, providerSpec api.A return diskCreationParams } -func AttachDataDisks(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, resourceGroup, vmName string, disks []*ImageRefDisk) ([]*armcompute.DataDisk, error) { +// AttachImageRefDisks attaches all disks with imageRef +func AttachImageRefDisks(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, resourceGroup, vmName string, disks []*ImageRefDisk) ([]*armcompute.DataDisk, error) { vmAccess, err := factory.GetVirtualMachinesAccess(connectConfig) if err != nil { return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create vm access to attach disk: [Vm: %s, ResourceGroup: %s], Err: %v", vmName, resourceGroup, err), err) diff --git a/pkg/azure/provider/provider.go b/pkg/azure/provider/provider.go index b30da80c..c5cd8613 100644 --- a/pkg/azure/provider/provider.go +++ b/pkg/azure/provider/provider.go @@ -92,8 +92,7 @@ func (d defaultDriver) CreateMachine(ctx context.Context, req *driver.CreateMach return } - // attach imageRefDisks to vm - _, err = helpers.AttachDataDisks(ctx, d.factory, connectConfig, providerSpec.ResourceGroup, vmName, imageRefDisks) + _, err = helpers.AttachImageRefDisks(ctx, d.factory, connectConfig, providerSpec.ResourceGroup, vmName, imageRefDisks) if err != nil { return } From a14697ab78352acc0e7a6f4b363ba6f8dc866b60 Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Wed, 5 Jun 2024 12:42:29 +0200 Subject: [PATCH 03/14] Switch data disk lun from pointer to value --- pkg/azure/api/providerspec.go | 2 +- pkg/azure/api/validation/validation.go | 15 +++++------ pkg/azure/api/validation/validation_test.go | 27 +++++++------------ pkg/azure/provider/helpers/driver.go | 10 +++---- .../helpers/resourcegraphprocessor.go | 2 +- pkg/azure/testhelp/fakes/machineresources.go | 6 ++--- pkg/azure/testhelp/providerspec.go | 6 ++--- pkg/azure/utils/names_test.go | 5 ++-- 8 files changed, 30 insertions(+), 43 deletions(-) diff --git a/pkg/azure/api/providerspec.go b/pkg/azure/api/providerspec.go index c2a64708..ea122871 100644 --- a/pkg/azure/api/providerspec.go +++ b/pkg/azure/api/providerspec.go @@ -197,7 +197,7 @@ type AzureDataDisk struct { Name string `json:"name,omitempty"` // Lun specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and // therefore must be unique for each data disk attached to a VM. - Lun *int32 `json:"lun,omitempty"` + Lun int32 `json:"lun,omitempty"` // Caching specifies the caching requirements. Possible values are: None, ReadOnly, ReadWrite. Caching string `json:"caching,omitempty"` // StorageAccountType is the storage account type for a managed disk. diff --git a/pkg/azure/api/validation/validation.go b/pkg/azure/api/validation/validation.go index 9c7b412f..5df94951 100644 --- a/pkg/azure/api/validation/validation.go +++ b/pkg/azure/api/validation/validation.go @@ -211,17 +211,14 @@ func validateDataDisks(disks []api.AzureDataDisk, fldPath *field.Path) field.Err luns := make(map[int32]int, len(disks)) for _, disk := range disks { - if disk.Lun == nil { - allErrs = append(allErrs, field.Required(fldPath.Child("lun"), "must provide lun")) + // Lun should always start from 0 and it cannot be negative. The max value of lun will depend upon the VM type to which the disks are associated. + // Therefore, we will avoid any max limit check for lun and delegate that responsibility to the provider as that mapping could change over time. + if disk.Lun < 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("lun"), disk.Lun, "lun must be a positive number")) } else { - // Lun should always start from 0 and it cannot be negative. The max value of lun will depend upon the VM type to which the disks are associated. - // Therefore, we will avoid any max limit check for lun and delegate that responsibility to the provider as that mapping could change over time. - if *disk.Lun < 0 { - allErrs = append(allErrs, field.Invalid(fldPath.Child("lun"), *disk.Lun, "lun must be a positive number")) - } else { - luns[*disk.Lun]++ - } + luns[disk.Lun]++ } + if disk.DiskSizeGB <= 0 { allErrs = append(allErrs, field.Invalid(fldPath.Child("diskSizeGB"), disk.DiskSizeGB, "DataDisk size must be positive and greater than 0")) } diff --git a/pkg/azure/api/validation/validation_test.go b/pkg/azure/api/validation/validation_test.go index e25f8012..b82b1d78 100644 --- a/pkg/azure/api/validation/validation_test.go +++ b/pkg/azure/api/validation/validation_test.go @@ -277,30 +277,23 @@ func TestValidateDataDisks(t *testing.T) { matcher gomegatypes.GomegaMatcher }{ {"should forbid empty storageAccountType", - []api.AzureDataDisk{{Name: "disk-1", Lun: pointer.Int32(0), StorageAccountType: "", DiskSizeGB: 10}}, 1, + []api.AzureDataDisk{{Name: "disk-1", Lun: 0, StorageAccountType: "", DiskSizeGB: 10}}, 1, ConsistOf(PointTo(MatchFields(IgnoreExtras, Fields{"Type": Equal(field.ErrorTypeRequired), "Field": Equal("providerSpec.properties.storageProfile.dataDisks.storageAccountType")}))), }, {"should forbid negative diskSize and empty storageAccountType", - []api.AzureDataDisk{{Name: "disk-1", Lun: pointer.Int32(0), StorageAccountType: "", DiskSizeGB: -10}}, 2, + []api.AzureDataDisk{{Name: "disk-1", Lun: 0, StorageAccountType: "", DiskSizeGB: -10}}, 2, ConsistOf( PointTo(MatchFields(IgnoreExtras, Fields{"Type": Equal(field.ErrorTypeRequired), "Field": Equal("providerSpec.properties.storageProfile.dataDisks.storageAccountType")})), PointTo(MatchFields(IgnoreExtras, Fields{"Type": Equal(field.ErrorTypeInvalid), "Field": Equal("providerSpec.properties.storageProfile.dataDisks.diskSizeGB")})), ), }, - { - "should forbid nil Lun", - []api.AzureDataDisk{ - {Name: "disk-1", Lun: nil, StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 10}, - }, 1, - ConsistOf(PointTo(MatchFields(IgnoreExtras, Fields{"Type": Equal(field.ErrorTypeRequired), "Field": Equal("providerSpec.properties.storageProfile.dataDisks.lun")}))), - }, {"should forbid duplicate Lun", []api.AzureDataDisk{ - {Name: "disk-1", Lun: pointer.Int32(0), StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 10}, - {Name: "disk-2", Lun: pointer.Int32(1), StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 10}, - {Name: "disk-3", Lun: pointer.Int32(0), StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 10}, - {Name: "disk-4", Lun: pointer.Int32(2), StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 10}, - {Name: "disk-5", Lun: pointer.Int32(1), StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 10}, + {Name: "disk-1", Lun: 0, StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 10}, + {Name: "disk-2", Lun: 1, StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 10}, + {Name: "disk-3", Lun: 0, StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 10}, + {Name: "disk-4", Lun: 2, StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 10}, + {Name: "disk-5", Lun: 1, StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 10}, }, 2, ConsistOf( PointTo(MatchFields(IgnoreExtras, Fields{"Type": Equal(field.ErrorTypeInvalid), "Field": Equal("providerSpec.properties.storageProfile.dataDisks.lun")})), @@ -309,9 +302,9 @@ func TestValidateDataDisks(t *testing.T) { }, {"should succeed with non-duplicate lun, valid diskSize and non-empty storageAccountType", []api.AzureDataDisk{ - {Name: "disk-1", Lun: pointer.Int32(0), StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 10}, - {Name: "disk-2", Lun: pointer.Int32(1), StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 30}, - {Name: "disk-3", Lun: pointer.Int32(2), StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 50}, + {Name: "disk-1", Lun: 0, StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 10}, + {Name: "disk-2", Lun: 1, StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 30}, + {Name: "disk-3", Lun: 2, StorageAccountType: "StandardSSD_LRS", DiskSizeGB: 50}, }, 0, nil, }, } diff --git a/pkg/azure/provider/helpers/driver.go b/pkg/azure/provider/helpers/driver.go index 9f01c1fb..7b4aeaf5 100644 --- a/pkg/azure/provider/helpers/driver.go +++ b/pkg/azure/provider/helpers/driver.go @@ -126,7 +126,7 @@ func createDataDiskNames(providerSpec api.AzureProviderSpec, vmName string) []st dataDisks := providerSpec.Properties.StorageProfile.DataDisks diskNames := make([]string, 0, len(dataDisks)) for _, disk := range dataDisks { - diskName := utils.CreateDataDiskName(vmName, disk.Name, *disk.Lun) + diskName := utils.CreateDataDiskName(vmName, disk.Name, disk.Lun) diskNames = append(diskNames, diskName) } return diskNames @@ -578,7 +578,7 @@ func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connec continue } diskCreationParams := createDiskCreationParams(specDataDisk, providerSpec) - diskName := utils.CreateDataDiskName(vmName, specDataDisk.Name, *specDataDisk.Lun) + diskName := utils.CreateDataDiskName(vmName, specDataDisk.Name, specDataDisk.Lun) disk, err := accesshelpers.CreateDisk(ctx, disksAccess, providerSpec.ResourceGroup, diskName, diskCreationParams) if err != nil { errCode := accesserrors.GetMatchingErrorCode(err) @@ -590,7 +590,7 @@ func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connec } imageRefDisk := &ImageRefDisk{ Disk: disk, - Lun: specDataDisk.Lun, + Lun: to.Ptr(specDataDisk.Lun), Caching: to.Ptr(caching), DeleteOption: to.Ptr(armcompute.DiskDeleteOptionTypesDelete), } @@ -780,14 +780,14 @@ func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string) []*armcomput if isDataDiskWithImageRef(specDataDisk) { continue } - dataDiskName := utils.CreateDataDiskName(vmName, specDataDisk.Name, *specDataDisk.Lun) + dataDiskName := utils.CreateDataDiskName(vmName, specDataDisk.Name, specDataDisk.Lun) caching := armcompute.CachingTypesNone if !utils.IsEmptyString(specDataDisk.Caching) { caching = armcompute.CachingTypes(specDataDisk.Caching) } dataDisk := &armcompute.DataDisk{ CreateOption: to.Ptr(armcompute.DiskCreateOptionTypesEmpty), - Lun: specDataDisk.Lun, + Lun: to.Ptr(specDataDisk.Lun), Caching: to.Ptr(caching), DeleteOption: to.Ptr(armcompute.DiskDeleteOptionTypesDelete), DiskSizeGB: pointer.Int32(specDataDisk.DiskSizeGB), diff --git a/pkg/azure/provider/helpers/resourcegraphprocessor.go b/pkg/azure/provider/helpers/resourcegraphprocessor.go index f046ce5b..854f6f52 100644 --- a/pkg/azure/provider/helpers/resourcegraphprocessor.go +++ b/pkg/azure/provider/helpers/resourcegraphprocessor.go @@ -120,7 +120,7 @@ func getDataDiskNameSuffixes(providerSpec api.AzureProviderSpec) sets.Set[string dataDisks := providerSpec.Properties.StorageProfile.DataDisks if dataDisks != nil { for _, dataDisk := range dataDisks { - dataDiskNameSuffixes.Insert(utils.GetDataDiskNameSuffix(dataDisk.Name, *dataDisk.Lun)) + dataDiskNameSuffixes.Insert(utils.GetDataDiskNameSuffix(dataDisk.Name, dataDisk.Lun)) } } return dataDiskNameSuffixes diff --git a/pkg/azure/testhelp/fakes/machineresources.go b/pkg/azure/testhelp/fakes/machineresources.go index 28623ab0..bc96b2c6 100644 --- a/pkg/azure/testhelp/fakes/machineresources.go +++ b/pkg/azure/testhelp/fakes/machineresources.go @@ -294,7 +294,7 @@ func createDataDiskResources(spec api.AzureProviderSpec, vmID *string, vmName st dataDisks := make(map[string]*armcompute.Disk, len(specDataDisks)) if specDataDisks != nil { for _, specDataDisk := range specDataDisks { - diskName := utils.CreateDataDiskName(vmName, specDataDisk.Name, *specDataDisk.Lun) + diskName := utils.CreateDataDiskName(vmName, specDataDisk.Name, specDataDisk.Lun) dataDisks[diskName] = createDiskResource(spec, diskName, vmID, nil) } } @@ -442,8 +442,8 @@ func createDataDisks(spec api.AzureProviderSpec, vmName string, deleteOption *ar } dataDisks := make([]*armcompute.DataDisk, 0, len(specDataDisks)) for _, disk := range specDataDisks { - diskName := utils.CreateDataDiskName(vmName, disk.Name, *disk.Lun) - d := createDataDisk(*disk.Lun, armcompute.CachingTypes(disk.Caching), deleteOption, disk.DiskSizeGB, armcompute.StorageAccountTypes(disk.StorageAccountType), diskName) + diskName := utils.CreateDataDiskName(vmName, disk.Name, disk.Lun) + d := createDataDisk(disk.Lun, armcompute.CachingTypes(disk.Caching), deleteOption, disk.DiskSizeGB, armcompute.StorageAccountTypes(disk.StorageAccountType), diskName) dataDisks = append(dataDisks, d) } return dataDisks diff --git a/pkg/azure/testhelp/providerspec.go b/pkg/azure/testhelp/providerspec.go index 04a0081a..46620d52 100644 --- a/pkg/azure/testhelp/providerspec.go +++ b/pkg/azure/testhelp/providerspec.go @@ -9,8 +9,6 @@ import ( "fmt" "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" - "k8s.io/utils/pointer" - "github.com/gardener/machine-controller-manager-provider-azure/pkg/azure/api" "github.com/gardener/machine-controller-manager-provider-azure/pkg/azure/utils" ) @@ -129,7 +127,7 @@ func (b *ProviderSpecBuilder) WithDataDisks(diskName string, numDisks int) *Prov for i := 0; i < numDisks; i++ { d := api.AzureDataDisk{ Name: diskName, - Lun: pointer.Int32(int32(i)), + Lun: int32(i), Caching: "None", StorageAccountType: StorageAccountType, DiskSizeGB: 20, @@ -193,7 +191,7 @@ func (b *ProviderSpecBuilder) Build() api.AzureProviderSpec { func CreateDataDiskNames(vmName string, spec api.AzureProviderSpec) []string { var diskNames []string for _, specDataDisk := range spec.Properties.StorageProfile.DataDisks { - diskNames = append(diskNames, utils.CreateDataDiskName(vmName, specDataDisk.Name, *specDataDisk.Lun)) + diskNames = append(diskNames, utils.CreateDataDiskName(vmName, specDataDisk.Name, specDataDisk.Lun)) } return diskNames } diff --git a/pkg/azure/utils/names_test.go b/pkg/azure/utils/names_test.go index 22453e21..e8f807b7 100644 --- a/pkg/azure/utils/names_test.go +++ b/pkg/azure/utils/names_test.go @@ -10,7 +10,6 @@ import ( "github.com/gardener/machine-controller-manager-provider-azure/pkg/azure/api" . "github.com/onsi/gomega" - "k8s.io/utils/pointer" ) const vmName = "shoot--test-project-z1-4567c-xj5sq" @@ -45,10 +44,10 @@ func TestCreateDataDiskName(t *testing.T) { t.Run(entry.description, func(t *testing.T) { dataDisk := api.AzureDataDisk{ Name: entry.dataDiskName, - Lun: pointer.Int32(entry.lun), + Lun: entry.lun, DiskSizeGB: 10, } - g.Expect(CreateDataDiskName(vmName, dataDisk.Name, *dataDisk.Lun)).To(Equal(entry.expectedDataDiskName)) + g.Expect(CreateDataDiskName(vmName, dataDisk.Name, dataDisk.Lun)).To(Equal(entry.expectedDataDiskName)) }) } } From 1871c47a39fc259023a4702cb185a44597936218 Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Wed, 5 Jun 2024 13:43:54 +0200 Subject: [PATCH 04/14] Fix false if condition --- pkg/azure/provider/helpers/driver.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/azure/provider/helpers/driver.go b/pkg/azure/provider/helpers/driver.go index 7b4aeaf5..692b07f9 100644 --- a/pkg/azure/provider/helpers/driver.go +++ b/pkg/azure/provider/helpers/driver.go @@ -574,7 +574,7 @@ func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connec } for _, specDataDisk := range specDataDisks { - if isDataDiskWithImageRef(specDataDisk) { + if !isDataDiskWithImageRef(specDataDisk) { continue } diskCreationParams := createDiskCreationParams(specDataDisk, providerSpec) From 407f998fda44f51f2f2a7557ad9136053e3372b0 Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Tue, 11 Jun 2024 14:14:47 +0200 Subject: [PATCH 05/14] Fix disk creation --- pkg/azure/access/helpers/disk.go | 21 ------- pkg/azure/provider/helpers/driver.go | 85 +++++++--------------------- pkg/azure/provider/provider.go | 7 +-- 3 files changed, 23 insertions(+), 90 deletions(-) diff --git a/pkg/azure/access/helpers/disk.go b/pkg/azure/access/helpers/disk.go index 39d0b843..31d4383e 100644 --- a/pkg/azure/access/helpers/disk.go +++ b/pkg/azure/access/helpers/disk.go @@ -65,24 +65,3 @@ func CreateDisk(ctx context.Context, client *armcompute.DisksClient, resourceGro disk = &createResp.Disk return } - -// AttachDataDisks attaches a Disk given a resourceGroup and virtual machine creation parameters. -// NOTE: All calls to this Azure API are instrumented as prometheus metric. -func AttachDataDisks(ctx context.Context, client *armcompute.VirtualMachinesClient, attachParameters armcompute.AttachDetachDataDisksRequest, resourceGroup, vmName string) (disks []*armcompute.DataDisk, err error) { - defer instrument.AZAPIMetricRecorderFn(diskAttachServiceLabel, &err)() - - attachCtx, cancelFn := context.WithTimeout(ctx, defaultDiskOperationTimeout) - defer cancelFn() - poller, err := client.BeginAttachDetachDataDisks(attachCtx, resourceGroup, vmName, attachParameters, nil) - if err != nil { - errors.LogAzAPIError(err, "Failed to attach Disks [ResourceGroup: %s, VM: %s]", resourceGroup, vmName) - return - } - createResp, err := poller.PollUntilDone(attachCtx, nil) - if err != nil { - errors.LogAzAPIError(err, "Polling failed while waiting for attaching of Disks to VM: %s for ResourceGroup: %s ", vmName, resourceGroup) - return - } - disks = createResp.DataDisks - return -} diff --git a/pkg/azure/provider/helpers/driver.go b/pkg/azure/provider/helpers/driver.go index 692b07f9..272d2c58 100644 --- a/pkg/azure/provider/helpers/driver.go +++ b/pkg/azure/provider/helpers/driver.go @@ -534,12 +534,12 @@ func checkAndAcceptAgreementIfNotAccepted(ctx context.Context, factory access.Fa } // CreateVM gathers the VM creation parameters and invokes a call to create or update the VM. -func CreateVM(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, imageRef armcompute.ImageReference, plan *armcompute.Plan, secret *corev1.Secret, nicID string, vmName string) (*armcompute.VirtualMachine, error) { +func CreateVM(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, imageRef armcompute.ImageReference, plan *armcompute.Plan, secret *corev1.Secret, nicID string, vmName string, imageRefDisks map[int32]*string) (*armcompute.VirtualMachine, error) { vmAccess, err := factory.GetVirtualMachinesAccess(connectConfig) if err != nil { return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create virtual machine access to process request: [resourceGroup: %s, vmName: %s], Err: %v", providerSpec.ResourceGroup, vmName, err), err) } - vmCreationParams, err := createVMCreationParams(providerSpec, imageRef, plan, secret, nicID, vmName) + vmCreationParams, err := createVMCreationParams(providerSpec, imageRef, plan, secret, nicID, vmName, imageRefDisks) if err != nil { return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create virtual machine parameters to create VM: [ResourceGroup: %s, Name: %s], Err: %v", providerSpec.ResourceGroup, vmName, err), err) } @@ -552,22 +552,14 @@ func CreateVM(ctx context.Context, factory access.Factory, connectConfig access. return vm, nil } -// ImageRefDisk is a disk that will later be attached to a VM as dataDisk -type ImageRefDisk struct { - Disk *armcompute.Disk - Lun *int32 - Caching *armcompute.CachingTypes - DeleteOption *armcompute.DiskDeleteOptionTypes -} - // CreateDisksWithImageRef creates a disk with CreationData (e.g. ImageReference or GalleryImageReference) -func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, vmName string) ([]*ImageRefDisk, error) { +func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, vmName string) (map[int32]*string, error) { disksAccess, err := factory.GetDisksAccess(connectConfig) if err != nil { return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create disk access for VM: [ResourceGroup: %s], Err: %v", providerSpec.ResourceGroup, err), err) } - var disks []*ImageRefDisk + disks := make(map[int32]*string) specDataDisks := providerSpec.Properties.StorageProfile.DataDisks if utils.IsSliceNilOrEmpty(specDataDisks) { return disks, nil @@ -584,28 +576,18 @@ func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connec errCode := accesserrors.GetMatchingErrorCode(err) return nil, status.WrapError(errCode, fmt.Sprintf("Failed to create Disk: [ResourceGroup: %s, Name: %s], Err: %v", providerSpec.ResourceGroup, diskName, err), err) } - caching := armcompute.CachingTypesNone - if !utils.IsEmptyString(specDataDisk.Caching) { - caching = armcompute.CachingTypes(specDataDisk.Caching) - } - imageRefDisk := &ImageRefDisk{ - Disk: disk, - Lun: to.Ptr(specDataDisk.Lun), - Caching: to.Ptr(caching), - DeleteOption: to.Ptr(armcompute.DiskDeleteOptionTypesDelete), - } - disks = append(disks, imageRefDisk) - klog.Infof("Successfully created Disk: [ResourceGroup: %s, Name: %s]", providerSpec.ResourceGroup, specDataDisk.Name) + disks[specDataDisk.Lun] = disk.ID + klog.Infof("Successfully created Disk: [ResourceGroup: %s, Name: %s]", providerSpec.ResourceGroup, diskName) } return disks, nil } func isDataDiskWithImageRef(dataDisk api.AzureDataDisk) bool { - if dataDisk.ImageRef == nil { - return false + if dataDisk.ImageRef != nil { + return true } - return true + return false } func createDiskCreationParams(specDataDisk api.AzureDataDisk, providerSpec api.AzureProviderSpec) armcompute.Disk { @@ -616,11 +598,11 @@ func createDiskCreationParams(specDataDisk api.AzureDataDisk, providerSpec api.A CreateOption: to.Ptr(armcompute.DiskCreateOptionFromImage), GalleryImageReference: &armcompute.ImageDiskReference{ CommunityGalleryImageID: specDataDisk.ImageRef.CommunityGalleryImageID, - SharedGalleryImageID: specDataDisk.ImageRef.SharedGalleryImageID, - }, - ImageReference: &armcompute.ImageDiskReference{ - // ID: specDataDisk.ImageRef.URN // TODO calculate from URN + // SharedGalleryImageID: specDataDisk.ImageRef.SharedGalleryImageID, }, + //ImageReference: &armcompute.ImageDiskReference{ + // // ID: specDataDisk.ImageRef.URN // TODO calculate from URN + //}, }, DiskSizeGB: to.Ptr[int32](specDataDisk.DiskSizeGB), OSType: to.Ptr(armcompute.OperatingSystemTypesLinux), @@ -630,36 +612,10 @@ func createDiskCreationParams(specDataDisk api.AzureDataDisk, providerSpec api.A }, Tags: utils.CreateResourceTags(providerSpec.Tags), Zones: getZonesFromProviderSpec(providerSpec), - Name: to.Ptr(specDataDisk.Name), } return diskCreationParams } -// AttachImageRefDisks attaches all disks with imageRef -func AttachImageRefDisks(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, resourceGroup, vmName string, disks []*ImageRefDisk) ([]*armcompute.DataDisk, error) { - vmAccess, err := factory.GetVirtualMachinesAccess(connectConfig) - if err != nil { - return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create vm access to attach disk: [Vm: %s, ResourceGroup: %s], Err: %v", vmName, resourceGroup, err), err) - } - - var attachParams armcompute.AttachDetachDataDisksRequest - for _, disk := range disks { - toAttach := &armcompute.DataDisksToAttach{ - DiskID: disk.Disk.ID, - Caching: disk.Caching, - DeleteOption: disk.DeleteOption, - Lun: disk.Lun, - } - attachParams.DataDisksToAttach = append(attachParams.DataDisksToAttach, toAttach) - } - attachedDataDisks, err := accesshelpers.AttachDataDisks(ctx, vmAccess, attachParams, resourceGroup, vmName) - if err != nil { - return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to attach disks for VM: [VmName: %s, ResourceGroup: %s], Err: %v", vmName, resourceGroup, err), err) - } - - return attachedDataDisks, nil -} - // LogVMCreation is a convenience method which helps to extract relevant details from the created virtual machine and logs it. // Today the azure create VM call is atomic only w.r.t creation of VM, OSDisk, DataDisk(s). NIC still has to be created prior to creation of the VM. // Therefore, this method produces a log which also prints the OSDisk, DataDisks that are created (which helps in traceability). For completeness it @@ -686,7 +642,7 @@ func LogVMCreation(location, resourceGroup string, vm *armcompute.VirtualMachine klog.Infof(msgBuilder.String()) } -func createVMCreationParams(providerSpec api.AzureProviderSpec, imageRef armcompute.ImageReference, plan *armcompute.Plan, secret *corev1.Secret, nicID, vmName string) (armcompute.VirtualMachine, error) { +func createVMCreationParams(providerSpec api.AzureProviderSpec, imageRef armcompute.ImageReference, plan *armcompute.Plan, secret *corev1.Secret, nicID, vmName string, imageRefDisks map[int32]*string) (armcompute.VirtualMachine, error) { vmTags := utils.CreateResourceTags(providerSpec.Tags) sshConfiguration, err := getSSHConfiguration(providerSpec.Properties.OsProfile.LinuxConfiguration.SSH) if err != nil { @@ -721,7 +677,7 @@ func createVMCreationParams(providerSpec api.AzureProviderSpec, imageRef armcomp }, }, StorageProfile: &armcompute.StorageProfile{ - DataDisks: getDataDisks(providerSpec.Properties.StorageProfile.DataDisks, vmName), + DataDisks: getDataDisks(providerSpec.Properties.StorageProfile.DataDisks, vmName, imageRefDisks), ImageReference: &imageRef, OSDisk: &armcompute.OSDisk{ CreateOption: to.Ptr(armcompute.DiskCreateOptionTypes(providerSpec.Properties.StorageProfile.OsDisk.CreateOption)), @@ -771,15 +727,12 @@ func createVMCreationParams(providerSpec api.AzureProviderSpec, imageRef armcomp return vm, nil } -func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string) []*armcompute.DataDisk { +func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string, imageRefDisks map[int32]*string) []*armcompute.DataDisk { var dataDisks []*armcompute.DataDisk if utils.IsSliceNilOrEmpty(specDataDisks) { return dataDisks } for _, specDataDisk := range specDataDisks { - if isDataDiskWithImageRef(specDataDisk) { - continue - } dataDiskName := utils.CreateDataDiskName(vmName, specDataDisk.Name, specDataDisk.Lun) caching := armcompute.CachingTypesNone if !utils.IsEmptyString(specDataDisk.Caching) { @@ -796,6 +749,12 @@ func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string) []*armcomput }, Name: to.Ptr(dataDiskName), } + if isDataDiskWithImageRef(specDataDisk) { + diskID := imageRefDisks[specDataDisk.Lun] + // TODO check if diskID != nil + dataDisk.CreateOption = to.Ptr(armcompute.DiskCreateOptionTypesAttach) + dataDisk.ManagedDisk.ID = diskID + } dataDisks = append(dataDisks, dataDisk) } return dataDisks diff --git a/pkg/azure/provider/provider.go b/pkg/azure/provider/provider.go index c5cd8613..b9bd8b3d 100644 --- a/pkg/azure/provider/provider.go +++ b/pkg/azure/provider/provider.go @@ -87,12 +87,7 @@ func (d defaultDriver) CreateMachine(ctx context.Context, req *driver.CreateMach return } - vm, err := helpers.CreateVM(ctx, d.factory, connectConfig, providerSpec, imageReference, plan, req.Secret, nicID, vmName) - if err != nil { - return - } - - _, err = helpers.AttachImageRefDisks(ctx, d.factory, connectConfig, providerSpec.ResourceGroup, vmName, imageRefDisks) + vm, err := helpers.CreateVM(ctx, d.factory, connectConfig, providerSpec, imageReference, plan, req.Secret, nicID, vmName, imageRefDisks) if err != nil { return } From 1238859243da572218812d269bdab0bb4f30b535 Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Tue, 11 Jun 2024 14:22:06 +0200 Subject: [PATCH 06/14] Undo changes in DeleteMachine func --- pkg/azure/provider/provider.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/pkg/azure/provider/provider.go b/pkg/azure/provider/provider.go index b9bd8b3d..1893b24d 100644 --- a/pkg/azure/provider/provider.go +++ b/pkg/azure/provider/provider.go @@ -149,15 +149,17 @@ func (d defaultDriver) DeleteMachine(ctx context.Context, req *driver.DeleteMach if err = helpers.UpdateCascadeDeleteOptions(ctx, providerSpec, vmAccess, resourceGroup, vm); err != nil { return } + if err = helpers.DeleteVirtualMachine(ctx, vmAccess, resourceGroup, vmName); err != nil { + return + } } else { klog.Infof("Cannot update VM: [ResourceGroup: %s, Name: %s]. Either the VM has provisionState set to Failed or there are one or more data disks that are marked for detachment, update call to this VM will fail and therefore skipped. Will now delete the VM and all its associated resources.", resourceGroup, vmName) - } - if err = helpers.DeleteVirtualMachine(ctx, vmAccess, resourceGroup, vmName); err != nil { - return - } - // We always need to check for leftover disks in case disk attach failed - if err = helpers.CheckAndDeleteLeftoverNICsAndDisks(ctx, d.factory, vmName, connectConfig, providerSpec); err != nil { - return + if err = helpers.DeleteVirtualMachine(ctx, vmAccess, resourceGroup, vmName); err != nil { + return + } + if err = helpers.CheckAndDeleteLeftoverNICsAndDisks(ctx, d.factory, vmName, connectConfig, providerSpec); err != nil { + return + } } klog.Infof("Successfully deleted all Machine resources[VM, NIC, Disks] for [ResourceGroup: %s, VMName: %s]", providerSpec.ResourceGroup, vmName) } From ceae5937ed0daf0a71c7cf4a9899945fae57f283 Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Wed, 12 Jun 2024 16:46:23 +0200 Subject: [PATCH 07/14] Fix set disk image --- pkg/azure/provider/helpers/driver.go | 60 ++++++++++++++++++++++------ pkg/azure/provider/provider.go | 2 +- 2 files changed, 49 insertions(+), 13 deletions(-) diff --git a/pkg/azure/provider/helpers/driver.go b/pkg/azure/provider/helpers/driver.go index 272d2c58..3d95ac7b 100644 --- a/pkg/azure/provider/helpers/driver.go +++ b/pkg/azure/provider/helpers/driver.go @@ -425,7 +425,7 @@ func createNICTags(tags map[string]string) map[string]*string { // 1. Gets the VM image. If the image does not exist then it will return an error. // 2. From the VM Image it checks if there is a plan. // 3. If there is a plan then it will check if there is an existing agreement for this plan. If an agreement does not exist then it will return an error. -// 4. If the agreement has not been accepted yet then it will accept the agreement and update the agreement. If that fails then it will return an error. +// 4. If the agreement has not been accepted, yet then it will accept the agreement and update the agreement. If that fails then it will return an error. func ProcessVMImageConfiguration(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, vmName string) (imgRef armcompute.ImageReference, plan *armcompute.Plan, err error) { imgRef = getImageReference(providerSpec) @@ -559,6 +559,7 @@ func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connec return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create disk access for VM: [ResourceGroup: %s], Err: %v", providerSpec.ResourceGroup, err), err) } + // TODO create struct or type aliases for better reading disks := make(map[int32]*string) specDataDisks := providerSpec.Properties.StorageProfile.DataDisks if utils.IsSliceNilOrEmpty(specDataDisks) { @@ -569,8 +570,12 @@ func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connec if !isDataDiskWithImageRef(specDataDisk) { continue } - diskCreationParams := createDiskCreationParams(specDataDisk, providerSpec) diskName := utils.CreateDataDiskName(vmName, specDataDisk.Name, specDataDisk.Lun) + diskCreationParams, err := createDiskCreationParams(ctx, specDataDisk, providerSpec, factory, connectConfig) + if err != nil { + errCode := accesserrors.GetMatchingErrorCode(err) + return nil, status.WrapError(errCode, fmt.Sprintf("Failed to create disk creation params: [ResourceGroup: %s, Name: %s], Err: %v", providerSpec.ResourceGroup, diskName, err), err) + } disk, err := accesshelpers.CreateDisk(ctx, disksAccess, providerSpec.ResourceGroup, diskName, diskCreationParams) if err != nil { errCode := accesserrors.GetMatchingErrorCode(err) @@ -590,19 +595,12 @@ func isDataDiskWithImageRef(dataDisk api.AzureDataDisk) bool { return false } -func createDiskCreationParams(specDataDisk api.AzureDataDisk, providerSpec api.AzureProviderSpec) armcompute.Disk { - diskCreationParams := armcompute.Disk{ +func createDiskCreationParams(ctx context.Context, specDataDisk api.AzureDataDisk, providerSpec api.AzureProviderSpec, factory access.Factory, connectConfig access.ConnectConfig) (params armcompute.Disk, err error) { + params = armcompute.Disk{ Location: to.Ptr(providerSpec.Location), Properties: &armcompute.DiskProperties{ CreationData: &armcompute.CreationData{ CreateOption: to.Ptr(armcompute.DiskCreateOptionFromImage), - GalleryImageReference: &armcompute.ImageDiskReference{ - CommunityGalleryImageID: specDataDisk.ImageRef.CommunityGalleryImageID, - // SharedGalleryImageID: specDataDisk.ImageRef.SharedGalleryImageID, - }, - //ImageReference: &armcompute.ImageDiskReference{ - // // ID: specDataDisk.ImageRef.URN // TODO calculate from URN - //}, }, DiskSizeGB: to.Ptr[int32](specDataDisk.DiskSizeGB), OSType: to.Ptr(armcompute.OperatingSystemTypesLinux), @@ -613,7 +611,45 @@ func createDiskCreationParams(specDataDisk api.AzureDataDisk, providerSpec api.A Tags: utils.CreateResourceTags(providerSpec.Tags), Zones: getZonesFromProviderSpec(providerSpec), } - return diskCreationParams + err = setDiskImageReference(ctx, ¶ms, specDataDisk, providerSpec.Location, factory, connectConfig) + return +} + +func setDiskImageReference(ctx context.Context, disk *armcompute.Disk, specDataDisk api.AzureDataDisk, location string, factory access.Factory, connectConfig access.ConnectConfig) error { + if !utils.IsEmptyString(specDataDisk.ImageRef.ID) { + disk.Properties.CreationData.ImageReference = &armcompute.ImageDiskReference{ + ID: &specDataDisk.ImageRef.ID, + } + } else if !utils.IsNilOrEmptyStringPtr(specDataDisk.ImageRef.SharedGalleryImageID) { + disk.Properties.CreationData.GalleryImageReference = &armcompute.ImageDiskReference{ + SharedGalleryImageID: specDataDisk.ImageRef.SharedGalleryImageID, + } + } else if !utils.IsNilOrEmptyStringPtr(specDataDisk.ImageRef.CommunityGalleryImageID) { + disk.Properties.CreationData.GalleryImageReference = &armcompute.ImageDiskReference{ + CommunityGalleryImageID: specDataDisk.ImageRef.CommunityGalleryImageID, + } + } else if !utils.IsNilOrEmptyStringPtr(specDataDisk.ImageRef.URN) { + urnParts := strings.Split(*specDataDisk.ImageRef.URN, ":") + imageRef := armcompute.ImageReference{ + Publisher: to.Ptr(urnParts[0]), + Offer: to.Ptr(urnParts[1]), + SKU: to.Ptr(urnParts[2]), + Version: to.Ptr(urnParts[3]), + } + + vmImagesAccess, err := factory.GetVirtualMachineImagesAccess(connectConfig) + if err != nil { + return status.WrapError(codes.Internal, fmt.Sprintf("Failed to create image access, Err: %v", err), err) + } + image, err := accesshelpers.GetVMImage(ctx, vmImagesAccess, location, imageRef) + if err != nil { + return status.WrapError(codes.Internal, fmt.Sprintf("Failed to get image, Err: %v", err), err) + } + disk.Properties.CreationData.ImageReference = &armcompute.ImageDiskReference{ + ID: image.ID, + } + } + return nil } // LogVMCreation is a convenience method which helps to extract relevant details from the created virtual machine and logs it. diff --git a/pkg/azure/provider/provider.go b/pkg/azure/provider/provider.go index 1893b24d..6aad92f1 100644 --- a/pkg/azure/provider/provider.go +++ b/pkg/azure/provider/provider.go @@ -80,7 +80,7 @@ func (d defaultDriver) CreateMachine(ctx context.Context, req *driver.CreateMach return } - // create disks with image ref since they can not be created as vm data disk + // create disks with image ref since they can not be created together with the vm // TODO parallelize creation? imageRefDisks, err := helpers.CreateDisksWithImageRef(ctx, d.factory, connectConfig, providerSpec, vmName) if err != nil { From d72778bb545ea3f67fa7d5dcd0b03e35ebe2b127 Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Thu, 13 Jun 2024 12:28:14 +0200 Subject: [PATCH 08/14] Remove unused diskAttachServiceLabel --- pkg/azure/access/helpers/disk.go | 1 - 1 file changed, 1 deletion(-) diff --git a/pkg/azure/access/helpers/disk.go b/pkg/azure/access/helpers/disk.go index 31d4383e..78f8ac8e 100644 --- a/pkg/azure/access/helpers/disk.go +++ b/pkg/azure/access/helpers/disk.go @@ -20,7 +20,6 @@ import ( const ( diskDeleteServiceLabel = "disk_delete" diskCreateServiceLabel = "disk_create" - diskAttachServiceLabel = "disk_attach" defaultDiskOperationTimeout = 10 * time.Minute ) From ab3981c1f88ad2b44d2c833b810670516846acd8 Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Thu, 13 Jun 2024 13:19:12 +0200 Subject: [PATCH 09/14] Add type aliases for disksWithImageRef map --- pkg/azure/provider/helpers/driver.go | 23 ++++++++++++----------- pkg/azure/provider/provider.go | 2 +- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/pkg/azure/provider/helpers/driver.go b/pkg/azure/provider/helpers/driver.go index 3d95ac7b..634a68a3 100644 --- a/pkg/azure/provider/helpers/driver.go +++ b/pkg/azure/provider/helpers/driver.go @@ -36,6 +36,9 @@ import ( "github.com/gardener/machine-controller-manager-provider-azure/pkg/azure/utils" ) +type dataDiskLun int32 +type diskID *string + // ExtractProviderSpecAndConnectConfig extracts api.AzureProviderSpec from mcc and access.ConnectConfig from secret. func ExtractProviderSpecAndConnectConfig(mcc *v1alpha1.MachineClass, secret *corev1.Secret) (api.AzureProviderSpec, access.ConnectConfig, error) { var ( @@ -534,12 +537,12 @@ func checkAndAcceptAgreementIfNotAccepted(ctx context.Context, factory access.Fa } // CreateVM gathers the VM creation parameters and invokes a call to create or update the VM. -func CreateVM(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, imageRef armcompute.ImageReference, plan *armcompute.Plan, secret *corev1.Secret, nicID string, vmName string, imageRefDisks map[int32]*string) (*armcompute.VirtualMachine, error) { +func CreateVM(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, vmImageRef armcompute.ImageReference, plan *armcompute.Plan, secret *corev1.Secret, nicID string, vmName string, imageRefDisks map[dataDiskLun]diskID) (*armcompute.VirtualMachine, error) { vmAccess, err := factory.GetVirtualMachinesAccess(connectConfig) if err != nil { return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create virtual machine access to process request: [resourceGroup: %s, vmName: %s], Err: %v", providerSpec.ResourceGroup, vmName, err), err) } - vmCreationParams, err := createVMCreationParams(providerSpec, imageRef, plan, secret, nicID, vmName, imageRefDisks) + vmCreationParams, err := createVMCreationParams(providerSpec, vmImageRef, plan, secret, nicID, vmName, imageRefDisks) if err != nil { return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create virtual machine parameters to create VM: [ResourceGroup: %s, Name: %s], Err: %v", providerSpec.ResourceGroup, vmName, err), err) } @@ -553,14 +556,13 @@ func CreateVM(ctx context.Context, factory access.Factory, connectConfig access. } // CreateDisksWithImageRef creates a disk with CreationData (e.g. ImageReference or GalleryImageReference) -func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, vmName string) (map[int32]*string, error) { +func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, vmName string) (map[dataDiskLun]diskID, error) { disksAccess, err := factory.GetDisksAccess(connectConfig) if err != nil { return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create disk access for VM: [ResourceGroup: %s], Err: %v", providerSpec.ResourceGroup, err), err) } - // TODO create struct or type aliases for better reading - disks := make(map[int32]*string) + disks := make(map[dataDiskLun]diskID) specDataDisks := providerSpec.Properties.StorageProfile.DataDisks if utils.IsSliceNilOrEmpty(specDataDisks) { return disks, nil @@ -581,7 +583,7 @@ func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connec errCode := accesserrors.GetMatchingErrorCode(err) return nil, status.WrapError(errCode, fmt.Sprintf("Failed to create Disk: [ResourceGroup: %s, Name: %s], Err: %v", providerSpec.ResourceGroup, diskName, err), err) } - disks[specDataDisk.Lun] = disk.ID + disks[dataDiskLun(specDataDisk.Lun)] = disk.ID klog.Infof("Successfully created Disk: [ResourceGroup: %s, Name: %s]", providerSpec.ResourceGroup, diskName) } @@ -678,7 +680,7 @@ func LogVMCreation(location, resourceGroup string, vm *armcompute.VirtualMachine klog.Infof(msgBuilder.String()) } -func createVMCreationParams(providerSpec api.AzureProviderSpec, imageRef armcompute.ImageReference, plan *armcompute.Plan, secret *corev1.Secret, nicID, vmName string, imageRefDisks map[int32]*string) (armcompute.VirtualMachine, error) { +func createVMCreationParams(providerSpec api.AzureProviderSpec, imageRef armcompute.ImageReference, plan *armcompute.Plan, secret *corev1.Secret, nicID, vmName string, imageRefDisks map[dataDiskLun]diskID) (armcompute.VirtualMachine, error) { vmTags := utils.CreateResourceTags(providerSpec.Tags) sshConfiguration, err := getSSHConfiguration(providerSpec.Properties.OsProfile.LinuxConfiguration.SSH) if err != nil { @@ -763,7 +765,7 @@ func createVMCreationParams(providerSpec api.AzureProviderSpec, imageRef armcomp return vm, nil } -func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string, imageRefDisks map[int32]*string) []*armcompute.DataDisk { +func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string, imageRefDisks map[dataDiskLun]diskID) []*armcompute.DataDisk { var dataDisks []*armcompute.DataDisk if utils.IsSliceNilOrEmpty(specDataDisks) { return dataDisks @@ -786,10 +788,9 @@ func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string, imageRefDisk Name: to.Ptr(dataDiskName), } if isDataDiskWithImageRef(specDataDisk) { - diskID := imageRefDisks[specDataDisk.Lun] - // TODO check if diskID != nil + imageRefDiskID := imageRefDisks[dataDiskLun(specDataDisk.Lun)] dataDisk.CreateOption = to.Ptr(armcompute.DiskCreateOptionTypesAttach) - dataDisk.ManagedDisk.ID = diskID + dataDisk.ManagedDisk.ID = imageRefDiskID } dataDisks = append(dataDisks, dataDisk) } diff --git a/pkg/azure/provider/provider.go b/pkg/azure/provider/provider.go index 6aad92f1..353e775c 100644 --- a/pkg/azure/provider/provider.go +++ b/pkg/azure/provider/provider.go @@ -81,7 +81,7 @@ func (d defaultDriver) CreateMachine(ctx context.Context, req *driver.CreateMach } // create disks with image ref since they can not be created together with the vm - // TODO parallelize creation? + // TODO parallelize creation with nic? imageRefDisks, err := helpers.CreateDisksWithImageRef(ctx, d.factory, connectConfig, providerSpec, vmName) if err != nil { return From 5b3455a2f19787f9ec9b6e59c2db555729a31802 Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Thu, 13 Jun 2024 13:29:01 +0200 Subject: [PATCH 10/14] Handle case where disk is not found in map --- pkg/azure/provider/helpers/driver.go | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/pkg/azure/provider/helpers/driver.go b/pkg/azure/provider/helpers/driver.go index 634a68a3..c16b3578 100644 --- a/pkg/azure/provider/helpers/driver.go +++ b/pkg/azure/provider/helpers/driver.go @@ -686,6 +686,10 @@ func createVMCreationParams(providerSpec api.AzureProviderSpec, imageRef armcomp if err != nil { return armcompute.VirtualMachine{}, err } + dataDisks, err := getDataDisks(providerSpec.Properties.StorageProfile.DataDisks, vmName, imageRefDisks) + if err != nil { + return armcompute.VirtualMachine{}, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create vm creation params, Err: %v", err), err) + } vm := armcompute.VirtualMachine{ Location: to.Ptr(providerSpec.Location), @@ -715,7 +719,7 @@ func createVMCreationParams(providerSpec api.AzureProviderSpec, imageRef armcomp }, }, StorageProfile: &armcompute.StorageProfile{ - DataDisks: getDataDisks(providerSpec.Properties.StorageProfile.DataDisks, vmName, imageRefDisks), + DataDisks: dataDisks, ImageReference: &imageRef, OSDisk: &armcompute.OSDisk{ CreateOption: to.Ptr(armcompute.DiskCreateOptionTypes(providerSpec.Properties.StorageProfile.OsDisk.CreateOption)), @@ -765,10 +769,10 @@ func createVMCreationParams(providerSpec api.AzureProviderSpec, imageRef armcomp return vm, nil } -func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string, imageRefDisks map[dataDiskLun]diskID) []*armcompute.DataDisk { +func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string, imageRefDisks map[dataDiskLun]diskID) ([]*armcompute.DataDisk, error) { var dataDisks []*armcompute.DataDisk if utils.IsSliceNilOrEmpty(specDataDisks) { - return dataDisks + return dataDisks, nil } for _, specDataDisk := range specDataDisks { dataDiskName := utils.CreateDataDiskName(vmName, specDataDisk.Name, specDataDisk.Lun) @@ -789,12 +793,15 @@ func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string, imageRefDisk } if isDataDiskWithImageRef(specDataDisk) { imageRefDiskID := imageRefDisks[dataDiskLun(specDataDisk.Lun)] + if imageRefDiskID == nil { + return nil, fmt.Errorf("could not find disk with lun %d", specDataDisk.Lun) + } dataDisk.CreateOption = to.Ptr(armcompute.DiskCreateOptionTypesAttach) dataDisk.ManagedDisk.ID = imageRefDiskID } dataDisks = append(dataDisks, dataDisk) } - return dataDisks + return dataDisks, nil } func getVMIdentity(specVMIdentityID *string) *armcompute.VirtualMachineIdentity { From 70afb0e3b10a0a5a093a0a598f2aa59ded002a22 Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Thu, 13 Jun 2024 13:31:07 +0200 Subject: [PATCH 11/14] Improve error message --- pkg/azure/provider/helpers/driver.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/azure/provider/helpers/driver.go b/pkg/azure/provider/helpers/driver.go index c16b3578..9a8c1d5f 100644 --- a/pkg/azure/provider/helpers/driver.go +++ b/pkg/azure/provider/helpers/driver.go @@ -794,7 +794,8 @@ func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string, imageRefDisk if isDataDiskWithImageRef(specDataDisk) { imageRefDiskID := imageRefDisks[dataDiskLun(specDataDisk.Lun)] if imageRefDiskID == nil { - return nil, fmt.Errorf("could not find disk with lun %d", specDataDisk.Lun) + return nil, fmt.Errorf("could not find id of pre created disk %s with lun %d", + dataDiskName, specDataDisk.Lun) } dataDisk.CreateOption = to.Ptr(armcompute.DiskCreateOptionTypesAttach) dataDisk.ManagedDisk.ID = imageRefDiskID From 7631b119513314a0764bc80ffcf6066fd801cc37 Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Thu, 13 Jun 2024 14:00:02 +0200 Subject: [PATCH 12/14] Add comment for exported type --- pkg/azure/provider/helpers/driver.go | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/pkg/azure/provider/helpers/driver.go b/pkg/azure/provider/helpers/driver.go index 9a8c1d5f..1ed70241 100644 --- a/pkg/azure/provider/helpers/driver.go +++ b/pkg/azure/provider/helpers/driver.go @@ -36,8 +36,11 @@ import ( "github.com/gardener/machine-controller-manager-provider-azure/pkg/azure/utils" ) -type dataDiskLun int32 -type diskID *string +// DataDiskLun describes the dataDisk lun +type DataDiskLun int32 + +// DiskID describes the disk ID +type DiskID *string // ExtractProviderSpecAndConnectConfig extracts api.AzureProviderSpec from mcc and access.ConnectConfig from secret. func ExtractProviderSpecAndConnectConfig(mcc *v1alpha1.MachineClass, secret *corev1.Secret) (api.AzureProviderSpec, access.ConnectConfig, error) { @@ -537,7 +540,7 @@ func checkAndAcceptAgreementIfNotAccepted(ctx context.Context, factory access.Fa } // CreateVM gathers the VM creation parameters and invokes a call to create or update the VM. -func CreateVM(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, vmImageRef armcompute.ImageReference, plan *armcompute.Plan, secret *corev1.Secret, nicID string, vmName string, imageRefDisks map[dataDiskLun]diskID) (*armcompute.VirtualMachine, error) { +func CreateVM(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, vmImageRef armcompute.ImageReference, plan *armcompute.Plan, secret *corev1.Secret, nicID string, vmName string, imageRefDisks map[DataDiskLun]DiskID) (*armcompute.VirtualMachine, error) { vmAccess, err := factory.GetVirtualMachinesAccess(connectConfig) if err != nil { return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create virtual machine access to process request: [resourceGroup: %s, vmName: %s], Err: %v", providerSpec.ResourceGroup, vmName, err), err) @@ -556,13 +559,13 @@ func CreateVM(ctx context.Context, factory access.Factory, connectConfig access. } // CreateDisksWithImageRef creates a disk with CreationData (e.g. ImageReference or GalleryImageReference) -func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, vmName string) (map[dataDiskLun]diskID, error) { +func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connectConfig access.ConnectConfig, providerSpec api.AzureProviderSpec, vmName string) (map[DataDiskLun]DiskID, error) { disksAccess, err := factory.GetDisksAccess(connectConfig) if err != nil { return nil, status.WrapError(codes.Internal, fmt.Sprintf("Failed to create disk access for VM: [ResourceGroup: %s], Err: %v", providerSpec.ResourceGroup, err), err) } - disks := make(map[dataDiskLun]diskID) + disks := make(map[DataDiskLun]DiskID) specDataDisks := providerSpec.Properties.StorageProfile.DataDisks if utils.IsSliceNilOrEmpty(specDataDisks) { return disks, nil @@ -583,7 +586,7 @@ func CreateDisksWithImageRef(ctx context.Context, factory access.Factory, connec errCode := accesserrors.GetMatchingErrorCode(err) return nil, status.WrapError(errCode, fmt.Sprintf("Failed to create Disk: [ResourceGroup: %s, Name: %s], Err: %v", providerSpec.ResourceGroup, diskName, err), err) } - disks[dataDiskLun(specDataDisk.Lun)] = disk.ID + disks[DataDiskLun(specDataDisk.Lun)] = disk.ID klog.Infof("Successfully created Disk: [ResourceGroup: %s, Name: %s]", providerSpec.ResourceGroup, diskName) } @@ -680,7 +683,7 @@ func LogVMCreation(location, resourceGroup string, vm *armcompute.VirtualMachine klog.Infof(msgBuilder.String()) } -func createVMCreationParams(providerSpec api.AzureProviderSpec, imageRef armcompute.ImageReference, plan *armcompute.Plan, secret *corev1.Secret, nicID, vmName string, imageRefDisks map[dataDiskLun]diskID) (armcompute.VirtualMachine, error) { +func createVMCreationParams(providerSpec api.AzureProviderSpec, imageRef armcompute.ImageReference, plan *armcompute.Plan, secret *corev1.Secret, nicID, vmName string, imageRefDisks map[DataDiskLun]DiskID) (armcompute.VirtualMachine, error) { vmTags := utils.CreateResourceTags(providerSpec.Tags) sshConfiguration, err := getSSHConfiguration(providerSpec.Properties.OsProfile.LinuxConfiguration.SSH) if err != nil { @@ -769,7 +772,7 @@ func createVMCreationParams(providerSpec api.AzureProviderSpec, imageRef armcomp return vm, nil } -func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string, imageRefDisks map[dataDiskLun]diskID) ([]*armcompute.DataDisk, error) { +func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string, imageRefDisks map[DataDiskLun]DiskID) ([]*armcompute.DataDisk, error) { var dataDisks []*armcompute.DataDisk if utils.IsSliceNilOrEmpty(specDataDisks) { return dataDisks, nil @@ -792,13 +795,13 @@ func getDataDisks(specDataDisks []api.AzureDataDisk, vmName string, imageRefDisk Name: to.Ptr(dataDiskName), } if isDataDiskWithImageRef(specDataDisk) { - imageRefDiskID := imageRefDisks[dataDiskLun(specDataDisk.Lun)] - if imageRefDiskID == nil { + diskID := imageRefDisks[DataDiskLun(specDataDisk.Lun)] + if diskID == nil { return nil, fmt.Errorf("could not find id of pre created disk %s with lun %d", dataDiskName, specDataDisk.Lun) } dataDisk.CreateOption = to.Ptr(armcompute.DiskCreateOptionTypesAttach) - dataDisk.ManagedDisk.ID = imageRefDiskID + dataDisk.ManagedDisk.ID = diskID } dataDisks = append(dataDisks, dataDisk) } From 2336b5727e313e5e596842960e89f6e4ec42ca3f Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Thu, 13 Jun 2024 14:45:27 +0200 Subject: [PATCH 13/14] Undo azure sdk update --- go.mod | 2 +- go.sum | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 996d0491..8ca47a2f 100644 --- a/go.mod +++ b/go.mod @@ -84,4 +84,4 @@ require ( sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect sigs.k8s.io/yaml v1.3.0 // indirect -) +) \ No newline at end of file diff --git a/go.sum b/go.sum index 2377c58e..956096b8 100644 --- a/go.sum +++ b/go.sum @@ -317,4 +317,4 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h6 sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= \ No newline at end of file From 6eb88106b4751114054172b08a0aa818a16ac68e Mon Sep 17 00:00:00 2001 From: Alexander Hebel Date: Thu, 13 Jun 2024 14:47:13 +0200 Subject: [PATCH 14/14] Undo go mod changes --- go.mod | 50 +++++++-------- go.sum | 188 ++++++++++++++++++--------------------------------------- 2 files changed, 84 insertions(+), 154 deletions(-) diff --git a/go.mod b/go.mod index 8ca47a2f..f211d032 100644 --- a/go.mod +++ b/go.mod @@ -3,37 +3,37 @@ module github.com/gardener/machine-controller-manager-provider-azure go 1.21 require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.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/compute/armcompute/v5 v5.3.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/marketplaceordering/armmarketplaceordering v1.2.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.8.2 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 - github.com/gardener/machine-controller-manager v0.53.0 + github.com/gardener/machine-controller-manager v0.52.0 github.com/onsi/ginkgo/v2 v2.13.0 github.com/onsi/gomega v1.29.0 github.com/prometheus/client_golang v1.16.0 github.com/spf13/pflag v1.0.5 - golang.org/x/crypto v0.21.0 + golang.org/x/crypto v0.14.0 golang.org/x/exp v0.0.0-20230905200255-921286631fa9 - k8s.io/api v0.29.3 - k8s.io/apimachinery v0.29.3 - k8s.io/client-go v0.29.3 // indirect - k8s.io/component-base v0.29.3 - k8s.io/klog/v2 v2.110.1 - k8s.io/utils v0.0.0-20230726121419-3b25d923346b + k8s.io/api v0.28.2 + k8s.io/apimachinery v0.28.2 + k8s.io/client-go v0.28.2 // indirect + k8s.io/component-base v0.28.2 + k8s.io/klog/v2 v2.100.1 + k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 ) require ( - github.com/Azure/azure-sdk-for-go/sdk/internal v1.6.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/emicklei/go-restful/v3 v3.11.0 // indirect + github.com/emicklei/go-restful/v3 v3.9.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/go-logr/logr v1.3.0 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect @@ -43,7 +43,7 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v5 v5.0.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.4 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect @@ -65,23 +65,23 @@ require ( github.com/prometheus/common v0.44.0 // indirect github.com/prometheus/procfs v0.10.1 // indirect github.com/spf13/cobra v1.7.0 // indirect - golang.org/x/net v0.22.0 // indirect - golang.org/x/oauth2 v0.10.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/term v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect + golang.org/x/sys v0.14.0 // indirect + golang.org/x/term v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.3.0 // indirect - golang.org/x/tools v0.16.1 // indirect + golang.org/x/tools v0.14.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.33.0 // indirect + google.golang.org/protobuf v1.30.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - k8s.io/apiextensions-apiserver v0.29.3 // indirect - k8s.io/apiserver v0.29.3 // indirect - k8s.io/cluster-bootstrap v0.29.3 // indirect - k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect + k8s.io/apiextensions-apiserver v0.28.2 // indirect + k8s.io/apiserver v0.28.2 // indirect + k8s.io/cluster-bootstrap v0.28.2 // indirect + k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) \ No newline at end of file diff --git a/go.sum b/go.sum index 956096b8..b71a6cc2 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,11 @@ -cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2 h1:c4k2FIYIh4xtwqrQwV0Ct1v5+ehlNXj5NI/MWVsiTkQ= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.2/go.mod h1:5FDJtLEO/GxwNgUxbwrY3LP0pEoThTQJtk2oysdXHxM= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0 h1:fb8kj/Dh4CSwgsOzHeZY4Xh68cFVbzXx+ONXGMY//4w= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.0/go.mod h1:uReU2sSxZExRPBAg3qKzmAucSi51+SP1OhohieR821Q= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.6.0 h1:sUFnFjzDUie80h24I7mrKtwCKgLY9L8h5Tp2x9+TWqk= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.6.0/go.mod h1:52JbnQTp15qg5mRkMBHwp0j0ZFwHJ42Sx3zVV5RE9p0= -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/internal v1.5.0 h1:d81/ng9rET2YqdVkVwkb6EXeRrLJIwyGnJcAlAWKwhs= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.0/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.3.0 h1:qgs/VAMSR+9qFhwTw4OwF2NbVuw+2m83pVZJjqkKQMw= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.3.0/go.mod h1:uYt4CfhkJA9o0FN7jfE5minm/i4nUE4MjGUJkzB6Zs8= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0 h1:pPvTJ1dY0sA35JOeFq6TsY2xj6Z85Yo23Pj4wCCvu4o= @@ -20,30 +18,19 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourceg github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.8.2/go.mod h1:29c9+gYpdWhyC4TPANZBPlgoWllMDhguL2AIByPYQtk= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 h1:Dd+RhdJn0OTtVGaeDLZpcumkIVCtA/3/Fo42+eoYvVM= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0/go.mod h1:5kakwfW5CjC9KK+Q4wjXAg+ShuIm2mBMua0ZFj2C8PE= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 h1:WpB/QDNLpMw72xHJc34BNNykqSOeEJDAWkhf0u12/Jk= github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= -github.com/alecthomas/kingpin/v2 v2.3.2/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= -github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= -github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= -github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -51,20 +38,15 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= -github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE= +github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= -github.com/gardener/machine-controller-manager v0.53.0 h1:g2O0F7nEYZ9LjyPY6Gew8+q0n+rU88deexNq5k8CKks= -github.com/gardener/machine-controller-manager v0.53.0/go.mod h1:XWXHaTy32TU0qmLjWqOgtw8NncdB0HfFzXhUUrcpr7Y= -github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/gardener/machine-controller-manager v0.52.0 h1:irhpamQ/QXixCXJpNKRL71aM3FAdNO1HxZwA54jvncI= +github.com/gardener/machine-controller-manager v0.52.0/go.mod h1:6g5i/uRGugkRyIABZmDjvaiT8GLL7XRE9ziw4C/9nCo= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= @@ -77,20 +59,18 @@ github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEe github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/cel-go v0.17.7/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -100,24 +80,15 @@ github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJY github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -133,30 +104,23 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI= github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= @@ -168,13 +132,10 @@ github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPH github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -183,31 +144,10 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= -github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= -go.etcd.io/etcd/api/v3 v3.5.10/go.mod h1:TidfmT4Uycad3NM/o25fG3J07odo4GBB9hoxaodFCtI= -go.etcd.io/etcd/client/pkg/v3 v3.5.10/go.mod h1:DYivfIviIuQ8+/lCq4vcxuseg2P2XbHygkKwFo9fc8U= -go.etcd.io/etcd/client/v2 v2.305.10/go.mod h1:m3CKZi69HzilhVqtPDcjhSGp+kA1OmbNn0qamH80xjA= -go.etcd.io/etcd/client/v3 v3.5.10/go.mod h1:RVeBnDz2PUEZqTpgqwAtUd8nAPf5kjyFyND7P1VkOKc= -go.etcd.io/etcd/pkg/v3 v3.5.10/go.mod h1:TKTuCKKcF1zxmfKWDkfz5qqYaE3JncKKZPFf8c1nFUs= -go.etcd.io/etcd/raft/v3 v3.5.10/go.mod h1:odD6kr8XQXTy9oQnyMPBOr0TVe+gT0neQhElQ6jbGRc= -go.etcd.io/etcd/server/v3 v3.5.10/go.mod h1:gBplPHfs6YI0L+RpGkTQO7buDbHv5HJGG/Bst0/zIPo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.42.0/go.mod h1:5z+/ZWJQKXa9YT34fQNx5K8Hd1EoIhvtUygUQPqEOgQ= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0/go.mod h1:SeQhzAEccGVZVEy7aH87Nh0km+utSpo1pTv6eMMop48= -go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0/go.mod h1:IPtUMKL4O3tH5y+iXVyAXqpAwMuzC1IrxVS81rummfE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0/go.mod h1:0+KuTDyKL4gjKCF75pHOX4wuzYDUZYfAQdSu43o+Z2I= -go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= -go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= -go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= -go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -217,70 +157,64 @@ go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= +golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc= -golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/oauth2 v0.10.0 h1:zHCpF2Khkwy4mMB4bv0U37YtJdTGW8jI0glAApi0Kh8= -golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= -golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= +golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8= -google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M= -google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= -gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -288,33 +222,29 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw= -k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80= -k8s.io/apiextensions-apiserver v0.29.3 h1:9HF+EtZaVpFjStakF4yVufnXGPRppWFEQ87qnO91YeI= -k8s.io/apiextensions-apiserver v0.29.3/go.mod h1:po0XiY5scnpJfFizNGo6puNU6Fq6D70UJY2Cb2KwAVc= -k8s.io/apimachinery v0.29.3 h1:2tbx+5L7RNvqJjn7RIuIKu9XTsIZ9Z5wX2G22XAa5EU= -k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU= -k8s.io/apiserver v0.29.3 h1:xR7ELlJ/BZSr2n4CnD3lfA4gzFivh0wwfNfz9L0WZcE= -k8s.io/apiserver v0.29.3/go.mod h1:hrvXlwfRulbMbBgmWRQlFru2b/JySDpmzvQwwk4GUOs= -k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg= -k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0= -k8s.io/cluster-bootstrap v0.29.3 h1:DIMDZSN8gbFMy9CS2mAS2Iqq/fIUG783WN/1lqi5TF8= -k8s.io/cluster-bootstrap v0.29.3/go.mod h1:aPAg1VtXx3uRrx5qU2jTzR7p1rf18zLXWS+pGhiqPto= -k8s.io/code-generator v0.29.3/go.mod h1:x47ofBhN4gxYFcxeKA1PYXeaPreAGaDN85Y/lNUsPoM= -k8s.io/component-base v0.29.3 h1:Oq9/nddUxlnrCuuR2K/jp6aflVvc0uDvxMzAWxnGzAo= -k8s.io/component-base v0.29.3/go.mod h1:Yuj33XXjuOk2BAaHsIGHhCKZQAgYKhqIxIjIr2UXYio= -k8s.io/gengo v0.0.0-20230829151522-9cce18d56c01/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= -k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= -k8s.io/kms v0.29.3/go.mod h1:TBGbJKpRUMk59neTMDMddjIDL+D4HuFUbpuiuzmOPg0= -k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= -k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y= +k8s.io/api v0.28.2 h1:9mpl5mOb6vXZvqbQmankOfPIGiudghwCoLl1EYfUZbw= +k8s.io/api v0.28.2/go.mod h1:RVnJBsjU8tcMq7C3iaRSGMeaKt2TWEUXcpIt/90fjEg= +k8s.io/apiextensions-apiserver v0.28.2 h1:J6/QRWIKV2/HwBhHRVITMLYoypCoPY1ftigDM0Kn+QU= +k8s.io/apiextensions-apiserver v0.28.2/go.mod h1:5tnkxLGa9nefefYzWuAlWZ7RZYuN/765Au8cWLA6SRg= +k8s.io/apimachinery v0.28.2 h1:KCOJLrc6gu+wV1BYgwik4AF4vXOlVJPdiqn0yAWWwXQ= +k8s.io/apimachinery v0.28.2/go.mod h1:RdzF87y/ngqk9H4z3EL2Rppv5jj95vGS/HaFXrLDApU= +k8s.io/apiserver v0.28.2 h1:rBeYkLvF94Nku9XfXyUIirsVzCzJBs6jMn3NWeHieyI= +k8s.io/apiserver v0.28.2/go.mod h1:f7D5e8wH8MWcKD7azq6Csw9UN+CjdtXIVQUyUhrtb+E= +k8s.io/client-go v0.28.2 h1:DNoYI1vGq0slMBN/SWKMZMw0Rq+0EQW6/AK4v9+3VeY= +k8s.io/client-go v0.28.2/go.mod h1:sMkApowspLuc7omj1FOSUxSoqjr+d5Q0Yc0LOFnYFJY= +k8s.io/cluster-bootstrap v0.28.2 h1:jHvj5tynPGcxe+D5k8BpvljNH/Sx13q3SICoCNUpX/Y= +k8s.io/cluster-bootstrap v0.28.2/go.mod h1:7mx47DH3CcszMiwsLBHos3ddcIg5zDwb3ZPy/7eqJlg= +k8s.io/component-base v0.28.2 h1:Yc1yU+6AQSlpJZyvehm/NkJBII72rzlEsd6MkBQ+G0E= +k8s.io/component-base v0.28.2/go.mod h1:4IuQPQviQCg3du4si8GpMrhAIegxpsgPngPRR/zWpzc= +k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= +k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ= +k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM= +k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk= +k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= -sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= +sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= \ No newline at end of file