From f02efc5b198a5eb53c919c50c404b0f90405b0c0 Mon Sep 17 00:00:00 2001 From: weizhichen Date: Thu, 1 Jun 2023 02:35:53 +0000 Subject: [PATCH 01/17] feat: support azure manged identity credentials --- storage_drivers/azure/api/azure.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/storage_drivers/azure/api/azure.go b/storage_drivers/azure/api/azure.go index 8af935fde..b29249102 100644 --- a/storage_drivers/azure/api/azure.go +++ b/storage_drivers/azure/api/azure.go @@ -131,15 +131,26 @@ type Client struct { // NewDriver is a factory method for creating a new SDK interface. func NewDriver(config ClientConfig) (Azure, error) { var err error + var credential azcore.TokenCredential // Ensure we got a location if config.Location == "" { return nil, errors.New("location must be specified in the config") } - credential, err := azidentity.NewClientSecretCredential(config.TenantID, config.ClientID, config.ClientSecret, nil) - if err != nil { - return nil, err + if config.ClientSecret == "" { + // use managed identity credentials + opts := azidentity.ManagedIdentityCredentialOptions{ID: azidentity.ClientID(config.ClientID)} + credential, err = azidentity.NewManagedIdentityCredential(&opts) + if err != nil { + return nil, err + } + } else { + // use service principal credentials + credential, err = azidentity.NewClientSecretCredential(config.TenantID, config.ClientID, config.ClientSecret, nil) + if err != nil { + return nil, err + } } clientOptions := &arm.ClientOptions{ From 39a6c0f9745c7aba795c2a8fb47638cb60ba5726 Mon Sep 17 00:00:00 2001 From: weizhichen Date: Tue, 6 Jun 2023 07:44:31 +0000 Subject: [PATCH 02/17] user azure config file to get credential --- Makefile | 8 +- cli/k8s_client/k8s_client.go | 2 + cli/k8s_client/types.go | 1 + cli/k8s_client/yaml_factory.go | 13 ++ cli/k8s_client/yaml_factory_test.go | 35 +++++ go.mod | 52 ++++--- go.sum | 130 ++++++++++++------ .../templates/tridentorchestrator.yaml | 1 + helm/trident-operator/values.yaml | 3 + .../orchestrator/apis/netapp/v1/types.go | 1 + .../apis/netapp/v1/zz_generated.deepcopy.go | 7 +- .../client/clientset/versioned/clientset.go | 2 +- .../client/clientset/versioned/doc.go | 2 +- .../versioned/fake/clientset_generated.go | 2 +- .../client/clientset/versioned/fake/doc.go | 2 +- .../clientset/versioned/fake/register.go | 16 +-- .../client/clientset/versioned/scheme/doc.go | 2 +- .../clientset/versioned/scheme/register.go | 16 +-- .../versioned/typed/netapp/v1/doc.go | 2 +- .../versioned/typed/netapp/v1/fake/doc.go | 2 +- .../netapp/v1/fake/fake_netapp_client.go | 2 +- .../v1/fake/fake_tridentorchestrator.go | 2 +- .../typed/netapp/v1/generated_expansion.go | 2 +- .../typed/netapp/v1/netapp_client.go | 2 +- .../typed/netapp/v1/tridentorchestrator.go | 2 +- .../informers/externalversions/factory.go | 2 +- .../informers/externalversions/generic.go | 2 +- .../internalinterfaces/factory_interfaces.go | 2 +- .../externalversions/netapp/interface.go | 2 +- .../externalversions/netapp/v1/interface.go | 2 +- .../netapp/v1/tridentorchestrator.go | 2 +- .../listers/netapp/v1/expansion_generated.go | 2 +- .../listers/netapp/v1/tridentorchestrator.go | 2 +- .../orchestrator/installer/installer.go | 3 + storage_drivers/azure/api/azure.go | 41 ++++-- storage_drivers/azure/azure_anf.go | 3 +- storage_drivers/azure/azure_anf_subvolume.go | 2 +- storage_drivers/types.go | 4 - 38 files changed, 266 insertions(+), 112 deletions(-) diff --git a/Makefile b/Makefile index 2fbf546b0..f72ee8e76 100644 --- a/Makefile +++ b/Makefile @@ -417,11 +417,15 @@ k8s_codegen: @rm -rf $(K8S_CODE_GENERATOR) k8s_codegen_operator: - @tar zxvf $(K8S_CODE_GENERATOR).tar.gz -C ./../ --no-same-owner + @tar zxvf $(K8S_CODE_GENERATOR).tar.gz --no-same-owner @chmod +x $(K8S_CODE_GENERATOR)/generate-groups.sh @$(K8S_CODE_GENERATOR)/generate-groups.sh all $(OPERATOR_KUBERNETES_PKG)/client \ - $(OPERATOR_KUBERNETES_PKG)/apis "netapp:v1" -h ./../hack/boilerplate.go.txt + $(OPERATOR_KUBERNETES_PKG)/apis "netapp:v1" -h ./hack/boilerplate.go.txt @rm -rf $(K8S_CODE_GENERATOR) + @rm -rf ./operator/controllers/orchestrator/client/* + @mv $(OPERATOR_KUBERNETES_PKG)/client/* ./operator/controllers/orchestrator/client/ + @rm -rf ./operator/controllers/orchestrator/apis/netapp/v1/zz_generated.deepcopy.go + @mv $(OPERATOR_KUBERNETES_PKG)/apis/netapp/v1/zz_generated.deepcopy.go ./operator/controllers/orchestrator/apis/netapp/v1/ mocks: @go install github.com/golang/mock/mockgen@v1.6.0 diff --git a/cli/k8s_client/k8s_client.go b/cli/k8s_client/k8s_client.go index 99cdd3ad9..bdbe36669 100644 --- a/cli/k8s_client/k8s_client.go +++ b/cli/k8s_client/k8s_client.go @@ -59,6 +59,8 @@ const ( // CRD Finalizer name TridentFinalizer = "trident.netapp.io" + + CloudProviderAzure = "Azure" ) type LogLineCallback func(string) diff --git a/cli/k8s_client/types.go b/cli/k8s_client/types.go index 28ff649c1..7077f72a6 100644 --- a/cli/k8s_client/types.go +++ b/cli/k8s_client/types.go @@ -165,6 +165,7 @@ type DeploymentYAMLArguments struct { ServiceAccountName string `json:"serviceAccountName"` ImagePullPolicy string `json:"imagePullPolicy"` EnableForceDetach bool `json:"enableForceDetach"` + CloudProvider string `json:"cloudProvider"` } type DaemonsetYAMLArguments struct { diff --git a/cli/k8s_client/yaml_factory.go b/cli/k8s_client/yaml_factory.go index b1f80c0cd..f98c368e9 100644 --- a/cli/k8s_client/yaml_factory.go +++ b/cli/k8s_client/yaml_factory.go @@ -432,6 +432,16 @@ func GetCSIDeploymentYAML(args *DeploymentYAMLArguments) string { autosupportDebugLine = "#" + autosupportDebugLine } + if args.CloudProvider == CloudProviderAzure { + deploymentYAML = strings.ReplaceAll(deploymentYAML, "{AZURE_CREDENTIAL_FILE_ENV}", "- name: AZURE_CREDENTIAL_FILE\n value: /etc/kubernetes/azure.json") + deploymentYAML = strings.ReplaceAll(deploymentYAML, "{AZURE_CREDENTIAL_FILE_VOLUME}", "- name: azure-cred\n hostPath:\n path: /etc/kubernetes\n type: DirectoryOrCreate") + deploymentYAML = strings.ReplaceAll(deploymentYAML, "{AZURE_CREDENTIAL_FILE_VOLUME_MOUNT}", "- name: azure-cred\n mountPath: /etc/kubernetes") + } else { + deploymentYAML = strings.ReplaceAll(deploymentYAML, "{AZURE_CREDENTIAL_FILE_ENV}", "") + deploymentYAML = strings.ReplaceAll(deploymentYAML, "{AZURE_CREDENTIAL_FILE_VOLUME}", "") + deploymentYAML = strings.ReplaceAll(deploymentYAML, "{AZURE_CREDENTIAL_FILE_VOLUME_MOUNT}", "") + } + deploymentYAML = strings.ReplaceAll(deploymentYAML, "{TRIDENT_IMAGE}", args.TridentImage) deploymentYAML = strings.ReplaceAll(deploymentYAML, "{DEPLOYMENT_NAME}", args.DeploymentName) deploymentYAML = strings.ReplaceAll(deploymentYAML, "{CSI_SIDECAR_REGISTRY}", args.ImageRegistry) @@ -538,12 +548,14 @@ spec: value: unix://plugin/csi.sock - name: TRIDENT_SERVER value: "{IP_LOCALHOST}:8000" + {AZURE_CREDENTIAL_FILE_ENV} volumeMounts: - name: socket-dir mountPath: /plugin - name: certs mountPath: /certs readOnly: true + {AZURE_CREDENTIAL_FILE_VOLUME_MOUNT} - name: trident-autosupport image: {AUTOSUPPORT_IMAGE} imagePullPolicy: {IMAGE_PULL_POLICY} @@ -651,6 +663,7 @@ spec: emptyDir: medium: "" sizeLimit: 1Gi + {AZURE_CREDENTIAL_FILE_VOLUME} ` func GetCSIDaemonSetYAMLWindows(args *DaemonsetYAMLArguments) string { diff --git a/cli/k8s_client/yaml_factory_test.go b/cli/k8s_client/yaml_factory_test.go index 1e688ef8b..0e099f63a 100644 --- a/cli/k8s_client/yaml_factory_test.go +++ b/cli/k8s_client/yaml_factory_test.go @@ -11,6 +11,7 @@ import ( "github.com/ghodss/yaml" scc "github.com/openshift/api/security/v1" "github.com/stretchr/testify/assert" + appsv1 "k8s.io/api/apps/v1" v1 "k8s.io/api/core/v1" pspv1beta1 "k8s.io/api/policy/v1beta1" csiv1 "k8s.io/api/storage/v1" @@ -437,6 +438,40 @@ func TestGetCSIDeploymentYAMLImagePullPolicy(t *testing.T) { } } +func TestGetCSIDeploymentYAMLAzure(t *testing.T) { + args := &DeploymentYAMLArguments{ + CloudProvider: CloudProviderAzure, + } + + yamlData := GetCSIDeploymentYAML(args) + deployment := appsv1.Deployment{} + err := yaml.Unmarshal([]byte(yamlData), &deployment) + if err != nil { + t.Fatalf("expected valid YAML, got %s", yamlData) + } + + var envExist, volumeExist, volumeMountExist bool + for _, env := range deployment.Spec.Template.Spec.Containers[0].Env { + if env.Name == "AZURE_CREDENTIAL_FILE" { + envExist = true + break + } + } + for _, volumeMount := range deployment.Spec.Template.Spec.Containers[0].VolumeMounts { + if volumeMount.Name == "azure-cred" { + volumeMountExist = true + break + } + } + for _, volume := range deployment.Spec.Template.Spec.Volumes { + if volume.Name == "azure-cred" { + volumeExist = true + break + } + } + assert.True(t, envExist && volumeExist && volumeMountExist, "expected env var AZURE_CREDENTIAL_FILE to exist") +} + func TestGetCSIDaemonSetYAMLLinux(t *testing.T) { versions := []string{"1.21.0", "1.23.0", "1.25.0"} diff --git a/go.mod b/go.mod index 862a7234e..7095cfa48 100755 --- a/go.mod +++ b/go.mod @@ -39,45 +39,58 @@ require ( github.com/sirupsen/logrus v1.9.0 github.com/spf13/afero v1.9.5 github.com/spf13/cobra v1.7.0 - github.com/stretchr/testify v1.8.2 + github.com/stretchr/testify v1.8.3 github.com/vishvananda/netlink v1.1.0 github.com/zcalusic/sysinfo v0.9.6-0.20220805135214-99e836ba64f2 go.uber.org/multierr v1.11.0 // github.com/uber-go/multierr - golang.org/x/crypto v0.8.0 // github.com/golang/crypto - golang.org/x/net v0.9.0 // github.com/golang/net + golang.org/x/crypto v0.9.0 // github.com/golang/crypto + golang.org/x/net v0.10.0 // github.com/golang/net golang.org/x/oauth2 v0.7.0 // github.com/golang/oauth2 - golang.org/x/sys v0.7.0 // github.com/golang/sys + golang.org/x/sys v0.8.0 // github.com/golang/sys golang.org/x/text v0.9.0 // github.com/golang/text golang.org/x/time v0.3.0 // github.com/golang/time google.golang.org/grpc v1.54.0 // github.com/grpc/grpc-go - k8s.io/api v0.26.3 // github.com/kubernetes/api + k8s.io/api v0.27.1 // github.com/kubernetes/api k8s.io/apiextensions-apiserver v0.26.3 // github.com/kubernetes/apiextensions-apiserver - k8s.io/apimachinery v0.26.3 // github.com/kubernetes/apimachinery - k8s.io/client-go v0.26.3 // github.com/kubernetes/client-go + k8s.io/apimachinery v0.27.1 // github.com/kubernetes/apimachinery + k8s.io/client-go v0.27.1 // github.com/kubernetes/client-go k8s.io/mount-utils v0.26.3 // github.com/kubernetes/mount-utils ) +require sigs.k8s.io/cloud-provider-azure v1.27.4 + require ( cloud.google.com/go/compute v1.15.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect + github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.2.0 // indirect + github.com/Azure/go-autorest v14.2.0+incompatible // indirect + github.com/Azure/go-autorest/autorest v0.11.29 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect + github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect + github.com/Azure/go-autorest/autorest/mocks v0.4.2 // indirect + github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect + github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect + github.com/Azure/go-autorest/logger v0.2.1 // indirect + github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.2.0 // indirect + github.com/blang/semver/v4 v4.0.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/elastic/go-windows v1.0.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.2.3 // indirect + github.com/evanphx/json-patch v5.6.0+incompatible // indirect + github.com/go-logr/logr v1.2.4 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/analysis v0.21.2 // indirect - github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.20.0 // indirect + github.com/go-openapi/jsonpointer v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.1 // indirect github.com/go-openapi/loads v0.21.1 // indirect github.com/go-openapi/spec v0.20.4 // indirect github.com/gogo/protobuf v1.3.2 // indirect @@ -117,9 +130,9 @@ require ( go.mongodb.org/mongo-driver v1.11.3 // indirect go.opentelemetry.io/otel v1.11.1 // indirect go.opentelemetry.io/otel/trace v1.11.1 // indirect - golang.org/x/mod v0.8.0 // indirect - golang.org/x/term v0.7.0 // indirect - golang.org/x/tools v0.6.0 // indirect + golang.org/x/mod v0.10.0 // indirect + golang.org/x/term v0.8.0 // indirect + golang.org/x/tools v0.9.1 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect google.golang.org/protobuf v1.28.1 // indirect @@ -127,10 +140,13 @@ require ( gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect howett.net/plist v0.0.0-20181124034731-591f970eefbb // indirect - k8s.io/klog/v2 v2.80.1 // indirect - k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect - k8s.io/utils v0.0.0-20221107191617-1a15be271d1d // indirect - sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + k8s.io/cloud-provider v0.27.1 // indirect + k8s.io/component-base v0.27.1 // indirect + k8s.io/component-helpers v0.27.1 // indirect + k8s.io/klog/v2 v2.90.1 // indirect + k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a // indirect + k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect + sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/go.sum b/go.sum index 403ece6dc..7ec5c127a 100755 --- a/go.sum +++ b/go.sum @@ -40,6 +40,8 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= +github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.4.0 h1:rTnT/Jrcm+figWlYz4Ixzt0SJVR2cMC8lvZcimipiEY= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.4.0/go.mod h1:ON4tFdPTwRcgWEaVDrN3584Ef+b7GgSJaXxe5fW9t4M= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.2 h1:uqM+VoHjVH6zdlkLF2b6O0ZANcHoj3rO0PoQ3jglUJA= @@ -54,6 +56,26 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourceg github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armfeatures v1.1.0 h1:NhvID5juwkPxMUD8hdV3no0nugxk9QM8d5OSLskjOLM= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armfeatures v1.1.0/go.mod h1:hDdPReNCfyh7kmZm6uKm3uH3OQkGn8gbeb1c/JkmEdE= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0 h1:ECsQtyERDVz3NP3kvDOTLvbQhqWp/x9EsGKtb4ogUr8= +github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw= +github.com/Azure/go-autorest/autorest v0.11.29/go.mod h1:ZtEzC4Jy2JDrZLxvWs8LrBWEBycl1hbT1eknI8MtfAs= +github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI038TrJBqjKam0me7qR+L8Cmk= +github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8= +github.com/Azure/go-autorest/autorest/adal v0.9.23/go.mod h1:5pcMqFkdPhviJdlEy3kC/v1ZLnQl0MH6XA5YCcMhy4c= +github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= +github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= +github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= +github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= +github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= +github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= +github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= +github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0 h1:UE9n9rkJF62ArLb1F3DEjRt8O3jLwMWdSoypKV4f3MU= github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -82,6 +104,8 @@ 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/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +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/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= @@ -123,7 +147,6 @@ github.com/elastic/go-sysinfo v1.10.0 h1:8mhFXJrWFLpeskULp0sGq+jt5DA0AaPU+RfGDOJ github.com/elastic/go-sysinfo v1.10.0/go.mod h1:RgpZTzVQX1UUNtbCnTYE5xzUaZ9+UU4ydR2ZXyzjkBg= github.com/elastic/go-windows v1.0.0 h1:qLURgZFkkrYyTTkvYpsZIgf83AUsdIHfvlJaqaZ7aSY= github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= 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/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -134,8 +157,8 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -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/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= +github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= @@ -155,8 +178,8 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-openapi/analysis v0.21.2 h1:hXFrOYFHUAMQdu6zwAiKKJHJQ8kqZs1ux/ru1P1wLJU= @@ -166,11 +189,12 @@ github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpX github.com/go-openapi/errors v0.20.3 h1:rz6kiC84sqNQoqrtulzaL/VERgkoCyB6WdEkc2ujzUc= github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= +github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= -github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= -github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= +github.com/go-openapi/jsonreference v0.20.1 h1:FBLnyygC4/IZZr893oiomc9XaghoveYTrLC1F86HID8= +github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/loads v0.21.1 h1:Wb3nVZpdEzDTcly8S4HMkey6fjARRzb7iEaySimlDW0= github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g= github.com/go-openapi/runtime v0.25.0 h1:7yQTCdRbWhX8vnIjdzU8S00tBYf7Sg71EBeorlPHvhc= @@ -189,6 +213,7 @@ github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+ github.com/go-openapi/validate v0.22.1 h1:G+c2ub6q47kfX1sOBLwIQwzBVt8qmOAARyo/9Fqs9NU= github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= @@ -216,6 +241,7 @@ github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY9 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= 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.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -284,6 +310,7 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -332,8 +359,9 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxv github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/secureheader v0.2.0 h1:Fe/BS3McH8EGMSc+HzaZkkRnrCyx2gq9kSVgLbyBNrA= github.com/kr/secureheader v0.2.0/go.mod h1:PfvbGMMfqBg6z+vxKGKbSJRcmASZc4klL5DiW9V5iLI= @@ -395,8 +423,8 @@ github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.6-0.20210304033056-74c60be0ef68 h1:sB6FDvBA1aVDINTWnVSrcJ95fV/QkN6fTJgksZOT8vY= github.com/olekukonko/tablewriter v0.0.6-0.20210304033056-74c60be0ef68/go.mod h1:8Hf+pH6thup1sPZPD+NLg7d6vbpsdilu9CPIeikvgMQ= -github.com/onsi/ginkgo/v2 v2.4.0 h1:+Ig9nvqgS5OBSACXNk15PLdp0U9XPYROt9CFzVdFGIs= -github.com/onsi/gomega v1.23.0 h1:/oxKu9c2HVap+F3PfKort2Hw5DEU+HGlW8n+tguWsys= +github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= +github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/openshift/api v0.0.0-20230406152840-ce21e3fe5da2 h1:lpKBKpI8or60mSEEKrpS67cevp8XaW8vfmXSwCZXKd0= @@ -445,6 +473,7 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -476,8 +505,10 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 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.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0= @@ -498,6 +529,7 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zcalusic/sysinfo v0.9.6-0.20220805135214-99e836ba64f2 h1:kbjgNu2XjGjB8nvV/BHZS1J8FK8ONWrFQX3uHMDp2Lc= github.com/zcalusic/sysinfo v0.9.6-0.20220805135214-99e836ba64f2/go.mod h1:30ZyzePdcgO8cQgyXtuPpg1FPCaHAv4kTap0HE8wBjo= go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= @@ -527,10 +559,12 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ= -golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= +golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -565,8 +599,9 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= +golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -607,8 +642,10 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -634,7 +671,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -691,12 +729,15 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -706,6 +747,7 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -767,8 +809,9 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= 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= @@ -883,6 +926,7 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/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/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= @@ -910,27 +954,35 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= howett.net/plist v0.0.0-20181124034731-591f970eefbb h1:jhnBjNi9UFpfpl8YZhA9CrOqpnJdvzuiHsl/dnxl11M= howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= -k8s.io/api v0.26.3 h1:emf74GIQMTik01Aum9dPP0gAypL8JTLl/lHa4V9RFSU= -k8s.io/api v0.26.3/go.mod h1:PXsqwPMXBSBcL1lJ9CYDKy7kIReUydukS5JiRlxC3qE= +k8s.io/api v0.27.1 h1:Z6zUGQ1Vd10tJ+gHcNNNgkV5emCyW+v2XTmn+CLjSd0= +k8s.io/api v0.27.1/go.mod h1:z5g/BpAiD+f6AArpqNjkY+cji8ueZDU/WV1jcj5Jk4E= k8s.io/apiextensions-apiserver v0.26.3 h1:5PGMm3oEzdB1W/FTMgGIDmm100vn7IaUP5er36dB+YE= k8s.io/apiextensions-apiserver v0.26.3/go.mod h1:jdA5MdjNWGP+njw1EKMZc64xAT5fIhN6VJrElV3sfpQ= -k8s.io/apimachinery v0.26.3 h1:dQx6PNETJ7nODU3XPtrwkfuubs6w7sX0M8n61zHIV/k= -k8s.io/apimachinery v0.26.3/go.mod h1:ats7nN1LExKHvJ9TmwootT00Yz05MuYqPXEXaVeOy5I= -k8s.io/client-go v0.26.3 h1:k1UY+KXfkxV2ScEL3gilKcF7761xkYsSD6BC9szIu8s= -k8s.io/client-go v0.26.3/go.mod h1:ZPNu9lm8/dbRIPAgteN30RSXea6vrCpFvq+MateTUuQ= -k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E= -k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4= +k8s.io/apimachinery v0.27.1 h1:EGuZiLI95UQQcClhanryclaQE6xjg1Bts6/L3cD7zyc= +k8s.io/apimachinery v0.27.1/go.mod h1:5ikh59fK3AJ287GUvpUsryoMFtH9zj/ARfWCo3AyXTM= +k8s.io/client-go v0.27.1 h1:oXsfhW/qncM1wDmWBIuDzRHNS2tLhK3BZv512Nc59W8= +k8s.io/client-go v0.27.1/go.mod h1:f8LHMUkVb3b9N8bWturc+EDtVVVwZ7ueTVquFAJb2vA= +k8s.io/cloud-provider v0.27.1 h1:482W9e2Yp8LDgTUKrXAxT+nH4pHS2TiBElI/CnfGWac= +k8s.io/cloud-provider v0.27.1/go.mod h1:oN7Zci2Ls2dorwSNd2fMiW/6DA40+F4o2QL70p63bqo= +k8s.io/component-base v0.27.1 h1:kEB8p8lzi4gCs5f2SPU242vOumHJ6EOsOnDM3tTuDTM= +k8s.io/component-base v0.27.1/go.mod h1:UGEd8+gxE4YWoigz5/lb3af3Q24w98pDseXcXZjw+E0= +k8s.io/component-helpers v0.27.1 h1:uY63v834MAHuf3fBiKGQGPq/cToU5kY5SW/58Xv0gl4= +k8s.io/component-helpers v0.27.1/go.mod h1:oOpwSYW1AdL+pU7abHADwX1ZcJl+5c8mnIkvoFZNFWA= +k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= +k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a h1:gmovKNur38vgoWfGtP5QOGNOA7ki4n6qNYoFAgMlNvg= +k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a/go.mod h1:y5VtZWM9sHHc2ZodIH/6SHzXj+TPU5USoA8lcIeKEKY= k8s.io/mount-utils v0.26.3 h1:FxMDiPLCkrYgonfSaKHWltLNkyTg3Q/Xrwn94uwhd8k= k8s.io/mount-utils v0.26.3/go.mod h1:95yx9K6N37y8YZ0/lUh9U6ITosMODNaW0/v4wvaa0Xw= -k8s.io/utils v0.0.0-20221107191617-1a15be271d1d h1:0Smp/HP1OH4Rvhe+4B8nWGERtlqAGSftbSbbmm45oFs= -k8s.io/utils v0.0.0-20221107191617-1a15be271d1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPBjNSSOMowRZxxsY= +k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k= -sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/cloud-provider-azure v1.27.4 h1:wuRdEsotVoPoVwfe4hbSeiU/OZenNOoQok9LZpXNP4U= +sigs.k8s.io/cloud-provider-azure v1.27.4/go.mod h1:xFz0lw727bbEkKjB18Hv6jNb3bagSSbbUCEHIiLfi2c= +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.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= diff --git a/helm/trident-operator/templates/tridentorchestrator.yaml b/helm/trident-operator/templates/tridentorchestrator.yaml index a79f47d8a..e58813074 100644 --- a/helm/trident-operator/templates/tridentorchestrator.yaml +++ b/helm/trident-operator/templates/tridentorchestrator.yaml @@ -61,3 +61,4 @@ spec: {{- end }} imagePullPolicy: {{ include "imagePullPolicy" $ }} windows: {{ .Values.windows }} + cloudProvider: {{ .Values.cloudProvider }} diff --git a/helm/trident-operator/values.yaml b/helm/trident-operator/values.yaml index 92aec2788..3bcd2b148 100644 --- a/helm/trident-operator/values.yaml +++ b/helm/trident-operator/values.yaml @@ -123,3 +123,6 @@ enableForceDetach: false # excludePodSecurityPolicy excludes the operator pod security policy from creation. excludePodSecurityPolicy: false + +# cloudProvider indicates which cloud platform Trident is running on. +cloudProvider: "" diff --git a/operator/controllers/orchestrator/apis/netapp/v1/types.go b/operator/controllers/orchestrator/apis/netapp/v1/types.go index ddb29ad6c..4ea5ff288 100644 --- a/operator/controllers/orchestrator/apis/netapp/v1/types.go +++ b/operator/controllers/orchestrator/apis/netapp/v1/types.go @@ -62,6 +62,7 @@ type TridentOrchestratorSpec struct { NodePluginTolerations []Toleration `json:"nodePluginTolerations,omitempty"` Windows bool `json:"windows,omitempty"` ImagePullPolicy string `json:"imagePullPolicy,omitempty"` + CloudProvider string `json:"cloudProvider,omitempty"` } // Toleration diff --git a/operator/controllers/orchestrator/apis/netapp/v1/zz_generated.deepcopy.go b/operator/controllers/orchestrator/apis/netapp/v1/zz_generated.deepcopy.go index e5f068334..f6b915940 100644 --- a/operator/controllers/orchestrator/apis/netapp/v1/zz_generated.deepcopy.go +++ b/operator/controllers/orchestrator/apis/netapp/v1/zz_generated.deepcopy.go @@ -1,7 +1,7 @@ //go:build !ignore_autogenerated // +build !ignore_autogenerated -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by deepcopy-gen. DO NOT EDIT. @@ -91,6 +91,11 @@ func (in *TridentOrchestratorList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *TridentOrchestratorSpec) DeepCopyInto(out *TridentOrchestratorSpec) { *out = *in + if in.DisableAuditLog != nil { + in, out := &in.DisableAuditLog, &out.DisableAuditLog + *out = new(bool) + **out = **in + } if in.ProbePort != nil { in, out := &in.ProbePort, &out.ProbePort *out = new(int64) diff --git a/operator/controllers/orchestrator/client/clientset/versioned/clientset.go b/operator/controllers/orchestrator/client/clientset/versioned/clientset.go index eea5c13d8..f37c036d0 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/clientset.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/clientset.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/clientset/versioned/doc.go b/operator/controllers/orchestrator/client/clientset/versioned/doc.go index c726f22ef..5f58c9011 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/doc.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/doc.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/clientset/versioned/fake/clientset_generated.go b/operator/controllers/orchestrator/client/clientset/versioned/fake/clientset_generated.go index 749ecc720..0b9871b31 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/fake/clientset_generated.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/fake/clientset_generated.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/clientset/versioned/fake/doc.go b/operator/controllers/orchestrator/client/clientset/versioned/fake/doc.go index 7eae831bc..e1f96a121 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/fake/doc.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/fake/doc.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/clientset/versioned/fake/register.go b/operator/controllers/orchestrator/client/clientset/versioned/fake/register.go index 453dd2b35..90960655e 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/fake/register.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/fake/register.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. @@ -23,14 +23,14 @@ var localSchemeBuilder = runtime.SchemeBuilder{ // AddToScheme adds all types of this clientset into the given scheme. This allows composition // of clientsets, like in: // -// import ( -// "k8s.io/client-go/kubernetes" -// clientsetscheme "k8s.io/client-go/kubernetes/scheme" -// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" -// ) +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) // -// kclientset, _ := kubernetes.NewForConfig(c) -// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) // // After this, RawExtensions in Kubernetes types will serialize kube-aggregator types // correctly. diff --git a/operator/controllers/orchestrator/client/clientset/versioned/scheme/doc.go b/operator/controllers/orchestrator/client/clientset/versioned/scheme/doc.go index d16c8a976..02121db3d 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/scheme/doc.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/scheme/doc.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/clientset/versioned/scheme/register.go b/operator/controllers/orchestrator/client/clientset/versioned/scheme/register.go index a257fe93d..205d4174d 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/scheme/register.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/scheme/register.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. @@ -23,14 +23,14 @@ var localSchemeBuilder = runtime.SchemeBuilder{ // AddToScheme adds all types of this clientset into the given scheme. This allows composition // of clientsets, like in: // -// import ( -// "k8s.io/client-go/kubernetes" -// clientsetscheme "k8s.io/client-go/kubernetes/scheme" -// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" -// ) +// import ( +// "k8s.io/client-go/kubernetes" +// clientsetscheme "k8s.io/client-go/kubernetes/scheme" +// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" +// ) // -// kclientset, _ := kubernetes.NewForConfig(c) -// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) +// kclientset, _ := kubernetes.NewForConfig(c) +// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) // // After this, RawExtensions in Kubernetes types will serialize kube-aggregator types // correctly. diff --git a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/doc.go b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/doc.go index a856cf979..2c4fa60ac 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/doc.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/doc.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/fake/doc.go b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/fake/doc.go index 396c6e2b0..0ed352683 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/fake/doc.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/fake/doc.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/fake/fake_netapp_client.go b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/fake/fake_netapp_client.go index d254eadac..70153a002 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/fake/fake_netapp_client.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/fake/fake_netapp_client.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/fake/fake_tridentorchestrator.go b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/fake/fake_tridentorchestrator.go index 4350c140b..9f1f7c53f 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/fake/fake_tridentorchestrator.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/fake/fake_tridentorchestrator.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/generated_expansion.go b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/generated_expansion.go index cfd36c097..7135c9dac 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/generated_expansion.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/generated_expansion.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/netapp_client.go b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/netapp_client.go index b491fbc82..cb9075601 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/netapp_client.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/netapp_client.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/tridentorchestrator.go b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/tridentorchestrator.go index 52c35cc70..505bac55b 100644 --- a/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/tridentorchestrator.go +++ b/operator/controllers/orchestrator/client/clientset/versioned/typed/netapp/v1/tridentorchestrator.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by client-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/informers/externalversions/factory.go b/operator/controllers/orchestrator/client/informers/externalversions/factory.go index ec1297632..7f56bc1ce 100644 --- a/operator/controllers/orchestrator/client/informers/externalversions/factory.go +++ b/operator/controllers/orchestrator/client/informers/externalversions/factory.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by informer-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/informers/externalversions/generic.go b/operator/controllers/orchestrator/client/informers/externalversions/generic.go index f3ba8fa7c..966d1f1f0 100644 --- a/operator/controllers/orchestrator/client/informers/externalversions/generic.go +++ b/operator/controllers/orchestrator/client/informers/externalversions/generic.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by informer-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/informers/externalversions/internalinterfaces/factory_interfaces.go b/operator/controllers/orchestrator/client/informers/externalversions/internalinterfaces/factory_interfaces.go index 04cd642f4..20457a9f6 100644 --- a/operator/controllers/orchestrator/client/informers/externalversions/internalinterfaces/factory_interfaces.go +++ b/operator/controllers/orchestrator/client/informers/externalversions/internalinterfaces/factory_interfaces.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by informer-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/informers/externalversions/netapp/interface.go b/operator/controllers/orchestrator/client/informers/externalversions/netapp/interface.go index dde656213..bc21b7157 100644 --- a/operator/controllers/orchestrator/client/informers/externalversions/netapp/interface.go +++ b/operator/controllers/orchestrator/client/informers/externalversions/netapp/interface.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by informer-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/informers/externalversions/netapp/v1/interface.go b/operator/controllers/orchestrator/client/informers/externalversions/netapp/v1/interface.go index 75d43864c..c2988b25d 100644 --- a/operator/controllers/orchestrator/client/informers/externalversions/netapp/v1/interface.go +++ b/operator/controllers/orchestrator/client/informers/externalversions/netapp/v1/interface.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by informer-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/informers/externalversions/netapp/v1/tridentorchestrator.go b/operator/controllers/orchestrator/client/informers/externalversions/netapp/v1/tridentorchestrator.go index 728cffdd9..f1b9b223c 100644 --- a/operator/controllers/orchestrator/client/informers/externalversions/netapp/v1/tridentorchestrator.go +++ b/operator/controllers/orchestrator/client/informers/externalversions/netapp/v1/tridentorchestrator.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by informer-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/listers/netapp/v1/expansion_generated.go b/operator/controllers/orchestrator/client/listers/netapp/v1/expansion_generated.go index 3476e5a6e..3f9e69781 100644 --- a/operator/controllers/orchestrator/client/listers/netapp/v1/expansion_generated.go +++ b/operator/controllers/orchestrator/client/listers/netapp/v1/expansion_generated.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by lister-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/client/listers/netapp/v1/tridentorchestrator.go b/operator/controllers/orchestrator/client/listers/netapp/v1/tridentorchestrator.go index fd320dc4c..42e2ef315 100644 --- a/operator/controllers/orchestrator/client/listers/netapp/v1/tridentorchestrator.go +++ b/operator/controllers/orchestrator/client/listers/netapp/v1/tridentorchestrator.go @@ -1,4 +1,4 @@ -// Copyright 2021 NetApp, Inc. All Rights Reserved. +// Copyright 2023 NetApp, Inc. All Rights Reserved. // Code generated by lister-gen. DO NOT EDIT. diff --git a/operator/controllers/orchestrator/installer/installer.go b/operator/controllers/orchestrator/installer/installer.go index da9335743..c4bec089b 100644 --- a/operator/controllers/orchestrator/installer/installer.go +++ b/operator/controllers/orchestrator/installer/installer.go @@ -67,6 +67,7 @@ var ( imageRegistry string kubeletDir string imagePullPolicy string + cloudProvider string autosupportImage string autosupportProxy string @@ -388,6 +389,7 @@ func (i *Installer) setInstallationParams( if cr.Spec.ImagePullPolicy != "" { imagePullPolicy = cr.Spec.ImagePullPolicy } + cloudProvider = cr.Spec.CloudProvider // Owner Reference details set on each of the Trident object created by the operator controllingCRDetails := make(map[string]string) @@ -1397,6 +1399,7 @@ func (i *Installer) createOrPatchTridentDeployment( ServiceAccountName: serviceAccName, ImagePullPolicy: imagePullPolicy, EnableForceDetach: enableForceDetach, + CloudProvider: cloudProvider, } newDeploymentYAML := k8sclient.GetCSIDeploymentYAML(deploymentArgs) diff --git a/storage_drivers/azure/api/azure.go b/storage_drivers/azure/api/azure.go index b29249102..fbd642b80 100644 --- a/storage_drivers/azure/api/azure.go +++ b/storage_drivers/azure/api/azure.go @@ -9,6 +9,7 @@ import ( "fmt" "io" "net/http" + "os" "regexp" "time" @@ -21,6 +22,7 @@ import ( resourcegraph "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph" features "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armfeatures" "github.com/cenkalti/backoff/v4" + azure "sigs.k8s.io/cloud-provider-azure/pkg/provider" . "github.com/netapp/trident/logging" "github.com/netapp/trident/storage" @@ -68,7 +70,7 @@ type ClientConfig struct { // AzureClient holds operational Azure SDK objects. type AzureClient struct { - Credential *azidentity.ClientSecretCredential + Credential azcore.TokenCredential FeaturesClient *features.Client GraphClient *resourcegraph.Client VolumesClient *netapp.VolumesClient @@ -129,7 +131,7 @@ type Client struct { } // NewDriver is a factory method for creating a new SDK interface. -func NewDriver(config ClientConfig) (Azure, error) { +func NewDriver(ctx context.Context, config ClientConfig) (Azure, error) { var err error var credential azcore.TokenCredential @@ -138,18 +140,39 @@ func NewDriver(config ClientConfig) (Azure, error) { return nil, errors.New("location must be specified in the config") } - if config.ClientSecret == "" { - // use managed identity credentials - opts := azidentity.ManagedIdentityCredentialOptions{ID: azidentity.ClientID(config.ClientID)} + if credFilePath := os.Getenv("AZURE_CREDENTIAL_FILE"); credFilePath != "" { + Logc(ctx).WithField("credFilePath", credFilePath).Info("Using Azure credentials from file.") + var azureConfig *azure.Config + credFile, err := os.Open(credFilePath) + if err != nil { + return nil, errors.New("error opening azure config file: " + err.Error()) + } + defer credFile.Close() + if azureConfig, err = azure.ParseConfig(credFile); err != nil { + return nil, errors.New("error parsing azure config file: " + err.Error()) + } + // use managed identity credential + opts := azidentity.ManagedIdentityCredentialOptions{ID: azidentity.ClientID(azureConfig.UserAssignedIdentityID)} credential, err = azidentity.NewManagedIdentityCredential(&opts) if err != nil { return nil, err } } else { - // use service principal credentials - credential, err = azidentity.NewClientSecretCredential(config.TenantID, config.ClientID, config.ClientSecret, nil) - if err != nil { - return nil, err + if config.ClientSecret == "" { + // use managed identity credential + Logc(ctx).Infof("use managed identity credential, client id %s", config.ClientID) + opts := azidentity.ManagedIdentityCredentialOptions{ID: azidentity.ClientID(config.ClientID)} + credential, err = azidentity.NewManagedIdentityCredential(&opts) + if err != nil { + return nil, err + } + } else { + // use service principal credential + Logc(ctx).Infof("use service principal credential, client id %s", config.ClientID) + credential, err = azidentity.NewClientSecretCredential(config.TenantID, config.ClientID, config.ClientSecret, nil) + if err != nil { + return nil, err + } } } diff --git a/storage_drivers/azure/azure_anf.go b/storage_drivers/azure/azure_anf.go index b7d48ae89..b9d024756 100644 --- a/storage_drivers/azure/azure_anf.go +++ b/storage_drivers/azure/azure_anf.go @@ -514,8 +514,7 @@ func (d *NASStorageDriver) initializeAzureSDKClient( maxCacheAge = time.Duration(i) * time.Second } } - - client, err := api.NewDriver(api.ClientConfig{ + client, err := api.NewDriver(ctx, api.ClientConfig{ SubscriptionID: config.SubscriptionID, TenantID: config.TenantID, ClientID: config.ClientID, diff --git a/storage_drivers/azure/azure_anf_subvolume.go b/storage_drivers/azure/azure_anf_subvolume.go index ab63d5298..254ceeddc 100644 --- a/storage_drivers/azure/azure_anf_subvolume.go +++ b/storage_drivers/azure/azure_anf_subvolume.go @@ -538,7 +538,7 @@ func (d *NASBlockStorageDriver) initializeAzureSDKClient( } } - client, err := api.NewDriver(api.ClientConfig{ + client, err := api.NewDriver(ctx, api.ClientConfig{ SubscriptionID: config.SubscriptionID, TenantID: config.TenantID, ClientID: config.ClientID, diff --git a/storage_drivers/types.go b/storage_drivers/types.go index 5f95588f6..f4b04f488 100644 --- a/storage_drivers/types.go +++ b/storage_drivers/types.go @@ -506,10 +506,6 @@ func (d AzureNASStorageDriverConfig) SpecOnlyValidation() error { return fmt.Errorf("input contains forbidden attributes: %v", forbiddenList) } - if !d.HasCredentials() { - return fmt.Errorf("input is missing the credentials field") - } - return nil } From 42dc6b86a77e1aa1c77017a83f62b1b9ebd2a1b1 Mon Sep 17 00:00:00 2001 From: weizhichen Date: Tue, 6 Jun 2023 08:10:38 +0000 Subject: [PATCH 03/17] InjectSecrets allow clientSecret to be nil --- storage_drivers/types.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/storage_drivers/types.go b/storage_drivers/types.go index f4b04f488..028a776d5 100644 --- a/storage_drivers/types.go +++ b/storage_drivers/types.go @@ -456,9 +456,7 @@ func (d *AzureNASStorageDriverConfig) InjectSecrets(secretMap map[string]string) if d.ClientID, ok = secretMap[strings.ToLower("ClientID")]; !ok { return injectionError("ClientID") } - if d.ClientSecret, ok = secretMap[strings.ToLower("ClientSecret")]; !ok { - return injectionError("ClientSecret") - } + d.ClientSecret, _ = secretMap[strings.ToLower("ClientSecret")] return nil } From da78a1983ecbc08de9eda68123a9506b437e899a Mon Sep 17 00:00:00 2001 From: weizhichen Date: Wed, 7 Jun 2023 10:59:04 +0000 Subject: [PATCH 04/17] fix by code review --- go.mod | 43 +++++------- go.sum | 106 ++++++++++------------------- storage_drivers/azure/api/azure.go | 49 +++++++++---- 3 files changed, 87 insertions(+), 111 deletions(-) diff --git a/go.mod b/go.mod index 7095cfa48..8920a5b8b 100755 --- a/go.mod +++ b/go.mod @@ -3,8 +3,8 @@ module github.com/netapp/trident go 1.19 require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.4.0 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.2 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/netapp/armnetapp/v4 v4.0.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.7.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armfeatures v1.1.0 @@ -39,7 +39,7 @@ require ( github.com/sirupsen/logrus v1.9.0 github.com/spf13/afero v1.9.5 github.com/spf13/cobra v1.7.0 - github.com/stretchr/testify v1.8.3 + github.com/stretchr/testify v1.8.4 github.com/vishvananda/netlink v1.1.0 github.com/zcalusic/sysinfo v0.9.6-0.20220805135214-99e836ba64f2 go.uber.org/multierr v1.11.0 // github.com/uber-go/multierr @@ -57,28 +57,22 @@ require ( k8s.io/mount-utils v0.26.3 // github.com/kubernetes/mount-utils ) -require sigs.k8s.io/cloud-provider-azure v1.27.4 +require ( + gopkg.in/yaml.v3 v3.0.1 + sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230607033427-470a363a5dbb +) require ( cloud.google.com/go/compute v1.15.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.2.0 // indirect - github.com/Azure/go-autorest v14.2.0+incompatible // indirect - github.com/Azure/go-autorest/autorest v0.11.29 // indirect - github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect - github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect - github.com/Azure/go-autorest/autorest/mocks v0.4.2 // indirect - github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect - github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect - github.com/Azure/go-autorest/logger v0.2.1 // indirect - github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1 // indirect + github.com/Azure/go-armbalancer v0.0.2 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.2.0 // indirect - github.com/blang/semver/v4 v4.0.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e // indirect github.com/davecgh/go-spew v1.1.1 // indirect @@ -128,24 +122,21 @@ require ( github.com/stretchr/objx v0.5.0 // indirect github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df // indirect go.mongodb.org/mongo-driver v1.11.3 // indirect - go.opentelemetry.io/otel v1.11.1 // indirect - go.opentelemetry.io/otel/trace v1.11.1 // indirect + go.opentelemetry.io/otel v1.16.0 // indirect + go.opentelemetry.io/otel/metric v1.16.0 // indirect + go.opentelemetry.io/otel/trace v1.16.0 // indirect golang.org/x/mod v0.10.0 // indirect golang.org/x/term v0.8.0 // indirect - golang.org/x/tools v0.9.1 // indirect + golang.org/x/tools v0.9.3 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect - google.golang.org/protobuf v1.28.1 // 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 howett.net/plist v0.0.0-20181124034731-591f970eefbb // indirect - k8s.io/cloud-provider v0.27.1 // indirect - k8s.io/component-base v0.27.1 // indirect - k8s.io/component-helpers v0.27.1 // indirect k8s.io/klog/v2 v2.90.1 // indirect k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a // indirect - k8s.io/utils v0.0.0-20230209194617-a36077c30491 // indirect + k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect sigs.k8s.io/yaml v1.3.0 // indirect diff --git a/go.sum b/go.sum index 7ec5c127a..7cd971377 100755 --- a/go.sum +++ b/go.sum @@ -40,44 +40,27 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= -github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.4.0 h1:rTnT/Jrcm+figWlYz4Ixzt0SJVR2cMC8lvZcimipiEY= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.4.0/go.mod h1:ON4tFdPTwRcgWEaVDrN3584Ef+b7GgSJaXxe5fW9t4M= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.2 h1:uqM+VoHjVH6zdlkLF2b6O0ZANcHoj3rO0PoQ3jglUJA= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.2.2/go.mod h1:twTKAa1E6hLmSDjLhaCkbTMQKc7p/rNLU40rLxGEOCI= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.2.0 h1:leh5DwKv6Ihwi+h60uHtn6UWAxBbZ0q8DwQVMzf61zw= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.2.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0 h1:8kDqDngH+DmVBiCtIjCFTGa7MBnsIOkF9IccInFEbjk= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1 h1:UPeCRD+XY7QlaGQte2EVI2iOcWvUYA2XY8w5T/8v0NQ= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1/go.mod h1:oGV6NlB0cvi1ZbYRR2UN44QHxWFyGk+iylgD0qaMXjA= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.1.2 h1:mLY+pNLjCUeKhgnAJWAKhEUQM+RJQo2H1fuGSw1Ky1E= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/netapp/armnetapp/v4 v4.0.0 h1:yNyKx1DKBWXs6EP6WaaVgRuX9ilmOj8emmAyKfqHBYA= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/netapp/armnetapp/v4 v4.0.0/go.mod h1:CLToNi36LmwVMgHuqOgfG8M0ph7VQaEUoqpO35/1wqU= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.0.0 h1:nBy98uKOIfun5z6wx6jwWLrULcM0+cjBalBFZlEZ7CA= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.7.0 h1:ht6xbz1wlfgLAwho2Fv4nKqq2ev/PCDCoX8H0MXf6q4= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.7.0/go.mod h1:21rlzm+SuYrS9ARS92XEGxcHQeLVDcaY2YV30rHjSd4= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armfeatures v1.1.0 h1:NhvID5juwkPxMUD8hdV3no0nugxk9QM8d5OSLskjOLM= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armfeatures v1.1.0/go.mod h1:hDdPReNCfyh7kmZm6uKm3uH3OQkGn8gbeb1c/JkmEdE= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0 h1:ECsQtyERDVz3NP3kvDOTLvbQhqWp/x9EsGKtb4ogUr8= -github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= -github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw= -github.com/Azure/go-autorest/autorest v0.11.29/go.mod h1:ZtEzC4Jy2JDrZLxvWs8LrBWEBycl1hbT1eknI8MtfAs= -github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI038TrJBqjKam0me7qR+L8Cmk= -github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8= -github.com/Azure/go-autorest/autorest/adal v0.9.23/go.mod h1:5pcMqFkdPhviJdlEy3kC/v1ZLnQl0MH6XA5YCcMhy4c= -github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= -github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= -github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= -github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= -github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= -github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= -github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= -github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= -github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= -github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0 h1:UE9n9rkJF62ArLb1F3DEjRt8O3jLwMWdSoypKV4f3MU= -github.com/AzureAD/microsoft-authentication-library-for-go v0.9.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 h1:7CBQ+Ei8SP2c6ydQTGCCrS35bDxgTMfoP2miAwK++OU= +github.com/Azure/go-armbalancer v0.0.2 h1:NVnxsTWHI5/fEzL6k6TjxPUfcB/3Si3+HFOZXOu0QtA= +github.com/Azure/go-armbalancer v0.0.2/go.mod h1:yTg7MA/8YnfKQc9o97tzAJ7fbdVkod1xGsIvKmhYPRE= +github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY= +github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= @@ -104,8 +87,6 @@ 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/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -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/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= @@ -132,7 +113,7 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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.1.0 h1:ReYa/UBrRyQdant9B4fNHGoCNKw6qh6P0fsdGmZpR7c= +github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/docker v20.10.24+incompatible h1:Ugvxm7a8+Gz6vqQYQQ2W7GYq5EUPaAiuPgIfVyI3dYE= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= @@ -241,7 +222,6 @@ github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY9 github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= 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.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -310,7 +290,7 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= +github.com/google/pprof v0.0.0-20230602010524-ada837c32108 h1:y+JfwMOPwQwIrnh3TUPwwtOAhONoppkHiSa4sQBoK2k= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -361,7 +341,7 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/secureheader v0.2.0 h1:Fe/BS3McH8EGMSc+HzaZkkRnrCyx2gq9kSVgLbyBNrA= github.com/kr/secureheader v0.2.0/go.mod h1:PfvbGMMfqBg6z+vxKGKbSJRcmASZc4klL5DiW9V5iLI= @@ -423,7 +403,7 @@ github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.6-0.20210304033056-74c60be0ef68 h1:sB6FDvBA1aVDINTWnVSrcJ95fV/QkN6fTJgksZOT8vY= github.com/olekukonko/tablewriter v0.0.6-0.20210304033056-74c60be0ef68/go.mod h1:8Hf+pH6thup1sPZPD+NLg7d6vbpsdilu9CPIeikvgMQ= -github.com/onsi/ginkgo/v2 v2.9.5 h1:+6Hr4uxzP4XIUyAkg61dWBw8lb/gc4/X5luuxN/EC+Q= +github.com/onsi/ginkgo/v2 v2.9.7 h1:06xGQy5www2oN160RtEZoTvnP2sPhEfePYmCDc2szss= github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= @@ -506,9 +486,8 @@ github.com/stretchr/testify v1.7.0/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.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +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/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0= @@ -529,7 +508,6 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zcalusic/sysinfo v0.9.6-0.20220805135214-99e836ba64f2 h1:kbjgNu2XjGjB8nvV/BHZS1J8FK8ONWrFQX3uHMDp2Lc= github.com/zcalusic/sysinfo v0.9.6-0.20220805135214-99e836ba64f2/go.mod h1:30ZyzePdcgO8cQgyXtuPpg1FPCaHAv4kTap0HE8wBjo= go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= @@ -542,11 +520,13 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opentelemetry.io/otel v1.11.1 h1:4WLLAmcfkmDk2ukNXJyq3/kiz/3UzCaYq6PskJsaou4= -go.opentelemetry.io/otel v1.11.1/go.mod h1:1nNhXBbWSD0nsL38H6btgnFN2k4i0sNLHNNMZMSbUGE= +go.opentelemetry.io/otel v1.16.0 h1:Z7GVAX/UkAXPKsy94IU+i6thsQS4nb7LviLpnaNeW8s= +go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeHrT/bx4= +go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo= +go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4= go.opentelemetry.io/otel/sdk v1.11.1 h1:F7KmQgoHljhUuJyA+9BiU+EkJfyX5nVVF4wyzWZpKxs= -go.opentelemetry.io/otel/trace v1.11.1 h1:ofxdnzsNrGBYXbP7t7zpUK281+go5rF7dvdIZXF8gdQ= -go.opentelemetry.io/otel/trace v1.11.1/go.mod h1:f/Q9G7vzk5u91PhbmKbg1Qn0rzH1LJ4vbPHFGkTPtOk= +go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs= +go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= @@ -559,10 +539,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -599,7 +577,6 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -642,8 +619,6 @@ golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -671,7 +646,6 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -729,13 +703,10 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -747,7 +718,6 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -809,9 +779,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= -golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= +golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= +golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= 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= @@ -918,8 +887,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba 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.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +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/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -927,6 +896,7 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/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/dnaeon/go-vcr.v3 v3.1.2 h1:F1smfXBqQqwpVifDfUBQG6zzaGjzT+EnVZakrOdr5wA= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= @@ -962,25 +932,19 @@ k8s.io/apimachinery v0.27.1 h1:EGuZiLI95UQQcClhanryclaQE6xjg1Bts6/L3cD7zyc= k8s.io/apimachinery v0.27.1/go.mod h1:5ikh59fK3AJ287GUvpUsryoMFtH9zj/ARfWCo3AyXTM= k8s.io/client-go v0.27.1 h1:oXsfhW/qncM1wDmWBIuDzRHNS2tLhK3BZv512Nc59W8= k8s.io/client-go v0.27.1/go.mod h1:f8LHMUkVb3b9N8bWturc+EDtVVVwZ7ueTVquFAJb2vA= -k8s.io/cloud-provider v0.27.1 h1:482W9e2Yp8LDgTUKrXAxT+nH4pHS2TiBElI/CnfGWac= -k8s.io/cloud-provider v0.27.1/go.mod h1:oN7Zci2Ls2dorwSNd2fMiW/6DA40+F4o2QL70p63bqo= -k8s.io/component-base v0.27.1 h1:kEB8p8lzi4gCs5f2SPU242vOumHJ6EOsOnDM3tTuDTM= -k8s.io/component-base v0.27.1/go.mod h1:UGEd8+gxE4YWoigz5/lb3af3Q24w98pDseXcXZjw+E0= -k8s.io/component-helpers v0.27.1 h1:uY63v834MAHuf3fBiKGQGPq/cToU5kY5SW/58Xv0gl4= -k8s.io/component-helpers v0.27.1/go.mod h1:oOpwSYW1AdL+pU7abHADwX1ZcJl+5c8mnIkvoFZNFWA= k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a h1:gmovKNur38vgoWfGtP5QOGNOA7ki4n6qNYoFAgMlNvg= k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a/go.mod h1:y5VtZWM9sHHc2ZodIH/6SHzXj+TPU5USoA8lcIeKEKY= k8s.io/mount-utils v0.26.3 h1:FxMDiPLCkrYgonfSaKHWltLNkyTg3Q/Xrwn94uwhd8k= k8s.io/mount-utils v0.26.3/go.mod h1:95yx9K6N37y8YZ0/lUh9U6ITosMODNaW0/v4wvaa0Xw= -k8s.io/utils v0.0.0-20230209194617-a36077c30491 h1:r0BAOLElQnnFhE/ApUsg3iHdVYYPBjNSSOMowRZxxsY= -k8s.io/utils v0.0.0-20230209194617-a36077c30491/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/utils v0.0.0-20230505201702-9f6742963106 h1:EObNQ3TW2D+WptiYXlApGNLVy0zm/JIBVY9i+M4wpAU= +k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/cloud-provider-azure v1.27.4 h1:wuRdEsotVoPoVwfe4hbSeiU/OZenNOoQok9LZpXNP4U= -sigs.k8s.io/cloud-provider-azure v1.27.4/go.mod h1:xFz0lw727bbEkKjB18Hv6jNb3bagSSbbUCEHIiLfi2c= +sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230607033427-470a363a5dbb h1:qWLN/9MK9CbSJAW+PiIYOQbiKuJw81GRoXbhMBLjbJ0= +sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230607033427-470a363a5dbb/go.mod h1:Mt9nJZTa8ZwDnFSEIvx51fFGNmmgUhTYHAQA/s45iJs= 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.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= diff --git a/storage_drivers/azure/api/azure.go b/storage_drivers/azure/api/azure.go index fbd642b80..3922b4c2e 100644 --- a/storage_drivers/azure/api/azure.go +++ b/storage_drivers/azure/api/azure.go @@ -8,6 +8,7 @@ import ( "encoding/json" "fmt" "io" + "io/ioutil" "net/http" "os" "regexp" @@ -22,7 +23,8 @@ import ( resourcegraph "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph" features "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armfeatures" "github.com/cenkalti/backoff/v4" - azure "sigs.k8s.io/cloud-provider-azure/pkg/provider" + "gopkg.in/yaml.v3" + "sigs.k8s.io/cloud-provider-azure/pkg/azclient" . "github.com/netapp/trident/logging" "github.com/netapp/trident/storage" @@ -41,6 +43,7 @@ const ( SDKMaxRetryDelay = 15 * time.Second CorrelationIDHeader = "X-Ms-Correlation-Request-Id" SubvolumeNameSeparator = "-file-" + DefaultCredentialFilePath = "/etc/kubernetes/azure.json" ) var ( @@ -140,20 +143,13 @@ func NewDriver(ctx context.Context, config ClientConfig) (Azure, error) { return nil, errors.New("location must be specified in the config") } - if credFilePath := os.Getenv("AZURE_CREDENTIAL_FILE"); credFilePath != "" { - Logc(ctx).WithField("credFilePath", credFilePath).Info("Using Azure credentials from file.") - var azureConfig *azure.Config - credFile, err := os.Open(credFilePath) - if err != nil { - return nil, errors.New("error opening azure config file: " + err.Error()) + if config.ClientSecret == "" && config.ClientID == "" { + credFilePath := os.Getenv("AZURE_CREDENTIAL_FILE") + if credFilePath == "" { + credFilePath = DefaultCredentialFilePath } - defer credFile.Close() - if azureConfig, err = azure.ParseConfig(credFile); err != nil { - return nil, errors.New("error parsing azure config file: " + err.Error()) - } - // use managed identity credential - opts := azidentity.ManagedIdentityCredentialOptions{ID: azidentity.ClientID(azureConfig.UserAssignedIdentityID)} - credential, err = azidentity.NewManagedIdentityCredential(&opts) + Logc(ctx).WithField("credFilePath", credFilePath).Info("Using Azure credentials from file.") + credential, err = GetAzureCredential(credFilePath) if err != nil { return nil, err } @@ -233,6 +229,31 @@ func NewDriver(ctx context.Context, config ClientConfig) (Azure, error) { }, nil } +func GetAzureCredential(credFilePath string) (credential azcore.TokenCredential, err error) { + var azureAuthConfig azclient.AzureAuthConfig + var armClientConfig azclient.ARMClientConfig + credFile, err := ioutil.ReadFile(credFilePath) + if err != nil { + return nil, errors.New("error reading from azure config file: " + err.Error()) + } + if err = yaml.Unmarshal(credFile, &azureAuthConfig); err != nil { + return nil, errors.New("error parsing azureAuthConfig: " + err.Error()) + } + if err = yaml.Unmarshal(credFile, &armClientConfig); err != nil { + return nil, errors.New("error parsing armClientConfig: " + err.Error()) + } + authProvider, err := azclient.NewAuthProvider(azureAuthConfig, armClientConfig) + if err != nil { + return nil, errors.New("error creating azure auth provider: " + err.Error()) + } + credential, err = authProvider.GetAzIdentity() + if err != nil { + return nil, errors.New("error getting azure identity: " + err.Error()) + } + + return credential, nil +} + // Init runs startup logic after allocating the driver resources. func (c Client) Init(ctx context.Context, pools map[string]storage.Pool) error { // Map vpools to backend From 3cd3e0280b8124b8056acc4162021c36785c1ac1 Mon Sep 17 00:00:00 2001 From: weizhichen Date: Fri, 9 Jun 2023 03:30:40 +0000 Subject: [PATCH 05/17] fix track2 sdk bugs --- go.mod | 4 ++-- go.sum | 4 ++++ storage_drivers/azure/api/azure.go | 8 ++++---- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/go.mod b/go.mod index 8920a5b8b..0bdcdb35a 100755 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/netapp/trident go 1.19 require ( - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.1 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/netapp/armnetapp/v4 v4.0.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.7.0 @@ -59,7 +59,7 @@ require ( require ( gopkg.in/yaml.v3 v3.0.1 - sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230607033427-470a363a5dbb + sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230609015212-d630eda20a6e ) require ( diff --git a/go.sum b/go.sum index 7cd971377..d53407512 100755 --- a/go.sum +++ b/go.sum @@ -42,6 +42,8 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0 h1:8kDqDngH+DmVBiCtIjCFTGa7MBnsIOkF9IccInFEbjk= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.1 h1:SEy2xmstIphdPwNBUi7uhvjyjhVKISfwjfOJmuy7kg4= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U= github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY= @@ -945,6 +947,8 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230607033427-470a363a5dbb h1:qWLN/9MK9CbSJAW+PiIYOQbiKuJw81GRoXbhMBLjbJ0= sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230607033427-470a363a5dbb/go.mod h1:Mt9nJZTa8ZwDnFSEIvx51fFGNmmgUhTYHAQA/s45iJs= +sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230609015212-d630eda20a6e h1:o520pt/2ZIP9YWBB3mjOQdJo9+Te/emf4VKIpOqiP8c= +sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230609015212-d630eda20a6e/go.mod h1:wGJF9KtrLNnEn87rKc/KqS3phwFSQLhLqpprJXVIZuQ= 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.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= diff --git a/storage_drivers/azure/api/azure.go b/storage_drivers/azure/api/azure.go index 3922b4c2e..3eef30696 100644 --- a/storage_drivers/azure/api/azure.go +++ b/storage_drivers/azure/api/azure.go @@ -231,7 +231,6 @@ func NewDriver(ctx context.Context, config ClientConfig) (Azure, error) { func GetAzureCredential(credFilePath string) (credential azcore.TokenCredential, err error) { var azureAuthConfig azclient.AzureAuthConfig - var armClientConfig azclient.ARMClientConfig credFile, err := ioutil.ReadFile(credFilePath) if err != nil { return nil, errors.New("error reading from azure config file: " + err.Error()) @@ -239,10 +238,11 @@ func GetAzureCredential(credFilePath string) (credential azcore.TokenCredential, if err = yaml.Unmarshal(credFile, &azureAuthConfig); err != nil { return nil, errors.New("error parsing azureAuthConfig: " + err.Error()) } - if err = yaml.Unmarshal(credFile, &armClientConfig); err != nil { - return nil, errors.New("error parsing armClientConfig: " + err.Error()) + clientOptions, err := azclient.GetDefaultAuthClientOption(nil) + if err != nil { + return nil, errors.New("error getting default auth client option: " + err.Error()) } - authProvider, err := azclient.NewAuthProvider(azureAuthConfig, armClientConfig) + authProvider, err := azclient.NewAuthProvider(azureAuthConfig, clientOptions) if err != nil { return nil, errors.New("error creating azure auth provider: " + err.Error()) } From edd7c9fa21974f3f3bd76fa0d346cc276adb003c Mon Sep 17 00:00:00 2001 From: weizhichen Date: Fri, 9 Jun 2023 12:54:51 +0000 Subject: [PATCH 06/17] add comment --- storage_drivers/azure/api/azure.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/storage_drivers/azure/api/azure.go b/storage_drivers/azure/api/azure.go index 3eef30696..dacd7326c 100644 --- a/storage_drivers/azure/api/azure.go +++ b/storage_drivers/azure/api/azure.go @@ -143,6 +143,7 @@ func NewDriver(ctx context.Context, config ClientConfig) (Azure, error) { return nil, errors.New("location must be specified in the config") } + // if client id and secret are not provided in tbc, use azure config file if config.ClientSecret == "" && config.ClientID == "" { credFilePath := os.Getenv("AZURE_CREDENTIAL_FILE") if credFilePath == "" { @@ -155,7 +156,7 @@ func NewDriver(ctx context.Context, config ClientConfig) (Azure, error) { } } else { if config.ClientSecret == "" { - // use managed identity credential + // use managed identity credential: ClientID is the managed identity ID Logc(ctx).Infof("use managed identity credential, client id %s", config.ClientID) opts := azidentity.ManagedIdentityCredentialOptions{ID: azidentity.ClientID(config.ClientID)} credential, err = azidentity.NewManagedIdentityCredential(&opts) From c467b260bce3c8f5d7416509333a930e415432ed Mon Sep 17 00:00:00 2001 From: weizhichen Date: Mon, 12 Jun 2023 12:21:36 +0000 Subject: [PATCH 07/17] fix --- go.mod | 2 +- go.sum | 3 ++ storage_drivers/azure/api/azure.go | 57 ++++---------------- storage_drivers/azure/azure_anf.go | 37 ++++++++++--- storage_drivers/azure/azure_anf_subvolume.go | 34 +++++++++--- storage_drivers/types.go | 9 +++- 6 files changed, 80 insertions(+), 62 deletions(-) diff --git a/go.mod b/go.mod index 0bdcdb35a..c7a670c85 100755 --- a/go.mod +++ b/go.mod @@ -59,7 +59,7 @@ require ( require ( gopkg.in/yaml.v3 v3.0.1 - sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230609015212-d630eda20a6e + sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230612064547-97ff51966a48 ) require ( diff --git a/go.sum b/go.sum index d53407512..f20bb8935 100755 --- a/go.sum +++ b/go.sum @@ -530,6 +530,7 @@ go.opentelemetry.io/otel/sdk v1.11.1 h1:F7KmQgoHljhUuJyA+9BiU+EkJfyX5nVVF4wyzWZp go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs= go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -949,6 +950,8 @@ sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230607033427-470a363a5dbb sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230607033427-470a363a5dbb/go.mod h1:Mt9nJZTa8ZwDnFSEIvx51fFGNmmgUhTYHAQA/s45iJs= sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230609015212-d630eda20a6e h1:o520pt/2ZIP9YWBB3mjOQdJo9+Te/emf4VKIpOqiP8c= sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230609015212-d630eda20a6e/go.mod h1:wGJF9KtrLNnEn87rKc/KqS3phwFSQLhLqpprJXVIZuQ= +sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230612064547-97ff51966a48 h1:JPTRnll9wGWxdJxx0Z4/kFjKMeDLfESO3cjm6R83js8= +sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230612064547-97ff51966a48/go.mod h1:dlFa1ItQ3bzf4DFPBTBQEsqo6Zs+SYoXzGpdfhzz2LM= 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.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= diff --git a/storage_drivers/azure/api/azure.go b/storage_drivers/azure/api/azure.go index dacd7326c..d9b480224 100644 --- a/storage_drivers/azure/api/azure.go +++ b/storage_drivers/azure/api/azure.go @@ -8,9 +8,7 @@ import ( "encoding/json" "fmt" "io" - "io/ioutil" "net/http" - "os" "regexp" "time" @@ -18,12 +16,10 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm" "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" - "github.com/Azure/azure-sdk-for-go/sdk/azidentity" netapp "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/netapp/armnetapp/v4" resourcegraph "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph" features "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armfeatures" "github.com/cenkalti/backoff/v4" - "gopkg.in/yaml.v3" "sigs.k8s.io/cloud-provider-azure/pkg/azclient" . "github.com/netapp/trident/logging" @@ -58,11 +54,9 @@ var ( // ClientConfig holds configuration data for the API driver object. type ClientConfig struct { // Azure API authentication parameters - SubscriptionID string - TenantID string - ClientID string - ClientSecret string - Location string + azclient.AzureAuthConfig + SubscriptionID string `json:"subscriptionId"` + Location string `json:"location"` StorageDriverName string // Options @@ -134,7 +128,7 @@ type Client struct { } // NewDriver is a factory method for creating a new SDK interface. -func NewDriver(ctx context.Context, config ClientConfig) (Azure, error) { +func NewDriver(config ClientConfig) (Azure, error) { var err error var credential azcore.TokenCredential @@ -143,34 +137,9 @@ func NewDriver(ctx context.Context, config ClientConfig) (Azure, error) { return nil, errors.New("location must be specified in the config") } - // if client id and secret are not provided in tbc, use azure config file - if config.ClientSecret == "" && config.ClientID == "" { - credFilePath := os.Getenv("AZURE_CREDENTIAL_FILE") - if credFilePath == "" { - credFilePath = DefaultCredentialFilePath - } - Logc(ctx).WithField("credFilePath", credFilePath).Info("Using Azure credentials from file.") - credential, err = GetAzureCredential(credFilePath) - if err != nil { - return nil, err - } - } else { - if config.ClientSecret == "" { - // use managed identity credential: ClientID is the managed identity ID - Logc(ctx).Infof("use managed identity credential, client id %s", config.ClientID) - opts := azidentity.ManagedIdentityCredentialOptions{ID: azidentity.ClientID(config.ClientID)} - credential, err = azidentity.NewManagedIdentityCredential(&opts) - if err != nil { - return nil, err - } - } else { - // use service principal credential - Logc(ctx).Infof("use service principal credential, client id %s", config.ClientID) - credential, err = azidentity.NewClientSecretCredential(config.TenantID, config.ClientID, config.ClientSecret, nil) - if err != nil { - return nil, err - } - } + credential, err = GetAzureCredential(config) + if err != nil { + return nil, err } clientOptions := &arm.ClientOptions{ @@ -230,20 +199,12 @@ func NewDriver(ctx context.Context, config ClientConfig) (Azure, error) { }, nil } -func GetAzureCredential(credFilePath string) (credential azcore.TokenCredential, err error) { - var azureAuthConfig azclient.AzureAuthConfig - credFile, err := ioutil.ReadFile(credFilePath) - if err != nil { - return nil, errors.New("error reading from azure config file: " + err.Error()) - } - if err = yaml.Unmarshal(credFile, &azureAuthConfig); err != nil { - return nil, errors.New("error parsing azureAuthConfig: " + err.Error()) - } +func GetAzureCredential(config ClientConfig) (credential azcore.TokenCredential, err error) { clientOptions, err := azclient.GetDefaultAuthClientOption(nil) if err != nil { return nil, errors.New("error getting default auth client option: " + err.Error()) } - authProvider, err := azclient.NewAuthProvider(azureAuthConfig, clientOptions) + authProvider, err := azclient.NewAuthProvider(config.AzureAuthConfig, clientOptions) if err != nil { return nil, errors.New("error creating azure auth provider: " + err.Error()) } diff --git a/storage_drivers/azure/azure_anf.go b/storage_drivers/azure/azure_anf.go index b9d024756..c51b2cdf2 100644 --- a/storage_drivers/azure/azure_anf.go +++ b/storage_drivers/azure/azure_anf.go @@ -6,7 +6,9 @@ import ( "context" "encoding/json" "fmt" + "io/ioutil" "net" + "os" "reflect" "regexp" "strconv" @@ -15,6 +17,7 @@ import ( "github.com/RoaringBitmap/roaring" "github.com/google/uuid" + "sigs.k8s.io/cloud-provider-azure/pkg/azclient" tridentconfig "github.com/netapp/trident/config" . "github.com/netapp/trident/logging" @@ -56,6 +59,8 @@ const ( nfsVersion3 = "3" nfsVersion4 = "4" nfsVersion41 = "4.1" + + DefaultCredentialFilePath = "/etc/kubernetes/azure.json" ) var ( @@ -514,17 +519,37 @@ func (d *NASStorageDriver) initializeAzureSDKClient( maxCacheAge = time.Duration(i) * time.Second } } - client, err := api.NewDriver(ctx, api.ClientConfig{ - SubscriptionID: config.SubscriptionID, - TenantID: config.TenantID, - ClientID: config.ClientID, - ClientSecret: config.ClientSecret, + + var clientConfig = api.ClientConfig{ + SubscriptionID: config.SubscriptionID, + AzureAuthConfig: azclient.AzureAuthConfig{ + TenantID: config.TenantID, + AADClientID: config.ClientID, + AADClientSecret: config.ClientSecret, + }, Location: config.Location, StorageDriverName: config.StorageDriverName, DebugTraceFlags: config.DebugTraceFlags, SDKTimeout: sdkTimeout, MaxCacheAge: maxCacheAge, - }) + } + + if config.UseAzureAuthConfig { + credFilePath := os.Getenv("AZURE_CREDENTIAL_FILE") + if credFilePath == "" { + credFilePath = DefaultCredentialFilePath + } + Logc(ctx).WithField("credFilePath", credFilePath).Info("Using Azure credential config file.") + credFile, err := ioutil.ReadFile(credFilePath) + if err != nil { + return errors.New("error reading from azure config file: " + err.Error()) + } + if err = json.Unmarshal(credFile, &clientConfig); err != nil { + return errors.New("error parsing azureAuthConfig: " + err.Error()) + } + } + + client, err := api.NewDriver(clientConfig) if err != nil { return err } diff --git a/storage_drivers/azure/azure_anf_subvolume.go b/storage_drivers/azure/azure_anf_subvolume.go index 254ceeddc..5f6fcd2e2 100644 --- a/storage_drivers/azure/azure_anf_subvolume.go +++ b/storage_drivers/azure/azure_anf_subvolume.go @@ -7,6 +7,8 @@ import ( "crypto/sha256" "encoding/json" "fmt" + "io/ioutil" + "os" "reflect" "regexp" "strconv" @@ -14,6 +16,7 @@ import ( "time" "github.com/RoaringBitmap/roaring" + "sigs.k8s.io/cloud-provider-azure/pkg/azclient" tridentconfig "github.com/netapp/trident/config" . "github.com/netapp/trident/logging" @@ -538,17 +541,36 @@ func (d *NASBlockStorageDriver) initializeAzureSDKClient( } } - client, err := api.NewDriver(ctx, api.ClientConfig{ - SubscriptionID: config.SubscriptionID, - TenantID: config.TenantID, - ClientID: config.ClientID, - ClientSecret: config.ClientSecret, + var clientConfig = api.ClientConfig{ + SubscriptionID: config.SubscriptionID, + AzureAuthConfig: azclient.AzureAuthConfig{ + TenantID: config.TenantID, + AADClientID: config.ClientID, + AADClientSecret: config.ClientSecret, + }, Location: config.Location, StorageDriverName: config.StorageDriverName, DebugTraceFlags: config.DebugTraceFlags, SDKTimeout: sdkTimeout, MaxCacheAge: maxCacheAge, - }) + } + + if config.UseAzureAuthConfig { + credFilePath := os.Getenv("AZURE_CREDENTIAL_FILE") + if credFilePath == "" { + credFilePath = DefaultCredentialFilePath + } + Logc(ctx).WithField("credFilePath", credFilePath).Info("Using Azure credential config file.") + credFile, err := ioutil.ReadFile(credFilePath) + if err != nil { + return errors.New("error reading from azure config file: " + err.Error()) + } + if err = json.Unmarshal(credFile, &clientConfig); err != nil { + return errors.New("error parsing azureAuthConfig: " + err.Error()) + } + } + + client, err := api.NewDriver(clientConfig) if err != nil { return err } diff --git a/storage_drivers/types.go b/storage_drivers/types.go index 028a776d5..81a8a6ef0 100644 --- a/storage_drivers/types.go +++ b/storage_drivers/types.go @@ -399,6 +399,7 @@ func (d SolidfireStorageDriverConfig) SpecOnlyValidation() error { type AzureNASStorageDriverConfig struct { *CommonStorageDriverConfig + UseAzureAuthConfig bool `json:"useAzureAuthConfig"` SubscriptionID string `json:"subscriptionID"` TenantID string `json:"tenantID"` ClientID string `json:"clientID"` @@ -456,7 +457,9 @@ func (d *AzureNASStorageDriverConfig) InjectSecrets(secretMap map[string]string) if d.ClientID, ok = secretMap[strings.ToLower("ClientID")]; !ok { return injectionError("ClientID") } - d.ClientSecret, _ = secretMap[strings.ToLower("ClientSecret")] + if d.ClientSecret, ok = secretMap[strings.ToLower("ClientSecret")]; !ok { + return injectionError("ClientSecret") + } return nil } @@ -504,6 +507,10 @@ func (d AzureNASStorageDriverConfig) SpecOnlyValidation() error { return fmt.Errorf("input contains forbidden attributes: %v", forbiddenList) } + if !d.HasCredentials() && !d.UseAzureAuthConfig { + return fmt.Errorf("input is missing the credentials field") + } + return nil } From b7a6fd161d3b0504f4942329d04369ddb61b7535 Mon Sep 17 00:00:00 2001 From: weizhichen Date: Mon, 12 Jun 2023 12:23:16 +0000 Subject: [PATCH 08/17] fix --- storage_drivers/azure/api/azure.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/storage_drivers/azure/api/azure.go b/storage_drivers/azure/api/azure.go index d9b480224..b207504b5 100644 --- a/storage_drivers/azure/api/azure.go +++ b/storage_drivers/azure/api/azure.go @@ -130,14 +130,13 @@ type Client struct { // NewDriver is a factory method for creating a new SDK interface. func NewDriver(config ClientConfig) (Azure, error) { var err error - var credential azcore.TokenCredential // Ensure we got a location if config.Location == "" { return nil, errors.New("location must be specified in the config") } - credential, err = GetAzureCredential(config) + credential, err := GetAzureCredential(config) if err != nil { return nil, err } From 565f18387c94787054a9f3447ef6975599a0ba69 Mon Sep 17 00:00:00 2001 From: weizhichen Date: Tue, 13 Jun 2023 03:04:07 +0000 Subject: [PATCH 09/17] remove UseAzureAuthConfig --- storage_drivers/azure/azure_anf.go | 2 +- storage_drivers/azure/azure_anf_subvolume.go | 2 +- storage_drivers/types.go | 5 ----- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/storage_drivers/azure/azure_anf.go b/storage_drivers/azure/azure_anf.go index c51b2cdf2..c9c4557e2 100644 --- a/storage_drivers/azure/azure_anf.go +++ b/storage_drivers/azure/azure_anf.go @@ -534,7 +534,7 @@ func (d *NASStorageDriver) initializeAzureSDKClient( MaxCacheAge: maxCacheAge, } - if config.UseAzureAuthConfig { + if config.ClientSecret == "" && config.ClientID == "" { credFilePath := os.Getenv("AZURE_CREDENTIAL_FILE") if credFilePath == "" { credFilePath = DefaultCredentialFilePath diff --git a/storage_drivers/azure/azure_anf_subvolume.go b/storage_drivers/azure/azure_anf_subvolume.go index 5f6fcd2e2..c84b7ec84 100644 --- a/storage_drivers/azure/azure_anf_subvolume.go +++ b/storage_drivers/azure/azure_anf_subvolume.go @@ -555,7 +555,7 @@ func (d *NASBlockStorageDriver) initializeAzureSDKClient( MaxCacheAge: maxCacheAge, } - if config.UseAzureAuthConfig { + if config.ClientSecret == "" && config.ClientID == "" { credFilePath := os.Getenv("AZURE_CREDENTIAL_FILE") if credFilePath == "" { credFilePath = DefaultCredentialFilePath diff --git a/storage_drivers/types.go b/storage_drivers/types.go index 81a8a6ef0..f4b04f488 100644 --- a/storage_drivers/types.go +++ b/storage_drivers/types.go @@ -399,7 +399,6 @@ func (d SolidfireStorageDriverConfig) SpecOnlyValidation() error { type AzureNASStorageDriverConfig struct { *CommonStorageDriverConfig - UseAzureAuthConfig bool `json:"useAzureAuthConfig"` SubscriptionID string `json:"subscriptionID"` TenantID string `json:"tenantID"` ClientID string `json:"clientID"` @@ -507,10 +506,6 @@ func (d AzureNASStorageDriverConfig) SpecOnlyValidation() error { return fmt.Errorf("input contains forbidden attributes: %v", forbiddenList) } - if !d.HasCredentials() && !d.UseAzureAuthConfig { - return fmt.Errorf("input is missing the credentials field") - } - return nil } From 4aaf1d0bcbfaa77a36284dffbb0180159676273b Mon Sep 17 00:00:00 2001 From: weizhichen Date: Tue, 13 Jun 2023 03:06:16 +0000 Subject: [PATCH 10/17] fix --- storage_drivers/azure/api/azure.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/storage_drivers/azure/api/azure.go b/storage_drivers/azure/api/azure.go index b207504b5..1fb7a6a21 100644 --- a/storage_drivers/azure/api/azure.go +++ b/storage_drivers/azure/api/azure.go @@ -207,12 +207,7 @@ func GetAzureCredential(config ClientConfig) (credential azcore.TokenCredential, if err != nil { return nil, errors.New("error creating azure auth provider: " + err.Error()) } - credential, err = authProvider.GetAzIdentity() - if err != nil { - return nil, errors.New("error getting azure identity: " + err.Error()) - } - - return credential, nil + return authProvider.GetAzIdentity() } // Init runs startup logic after allocating the driver resources. From 66539540d1eb213d3ead93f37418477a6e5384cf Mon Sep 17 00:00:00 2001 From: weizhichen Date: Tue, 13 Jun 2023 17:33:38 +0000 Subject: [PATCH 11/17] feat: incoporate-azure-resources --- go.mod | 10 +- go.sum | 24 +-- storage_drivers/azure/api/azure.go | 166 ++++++++++++++++++- storage_drivers/azure/api/azure_discovery.go | 10 +- utils/utils.go | 13 +- 5 files changed, 200 insertions(+), 23 deletions(-) diff --git a/go.mod b/go.mod index c7a670c85..7f21a1b2e 100755 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.19 require ( github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.1 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/netapp/armnetapp/v4 v4.0.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.7.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armfeatures v1.1.0 @@ -58,8 +58,9 @@ require ( ) require ( - gopkg.in/yaml.v3 v3.0.1 - sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230612064547-97ff51966a48 + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1 + sigs.k8s.io/cloud-provider-azure v1.27.5 + sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230613061957-d0cd51201edc ) require ( @@ -73,6 +74,7 @@ require ( github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bits-and-blooms/bitset v1.2.0 // indirect + github.com/blang/semver/v4 v4.0.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e // indirect github.com/davecgh/go-spew v1.1.1 // indirect @@ -133,7 +135,9 @@ require ( 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 howett.net/plist v0.0.0-20181124034731-591f970eefbb // indirect + k8s.io/component-base v0.27.1 // indirect k8s.io/klog/v2 v2.90.1 // indirect k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a // indirect k8s.io/utils v0.0.0-20230505201702-9f6742963106 // indirect diff --git a/go.sum b/go.sum index f20bb8935..a674baa8a 100755 --- a/go.sum +++ b/go.sum @@ -40,8 +40,7 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0 h1:8kDqDngH+DmVBiCtIjCFTGa7MBnsIOkF9IccInFEbjk= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= +github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.1 h1:SEy2xmstIphdPwNBUi7uhvjyjhVKISfwjfOJmuy7kg4= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.6.1/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg= @@ -54,6 +53,8 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.1.2 h1:mLY+pNL github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/netapp/armnetapp/v4 v4.0.0 h1:yNyKx1DKBWXs6EP6WaaVgRuX9ilmOj8emmAyKfqHBYA= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/netapp/armnetapp/v4 v4.0.0/go.mod h1:CLToNi36LmwVMgHuqOgfG8M0ph7VQaEUoqpO35/1wqU= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.0.0 h1:nBy98uKOIfun5z6wx6jwWLrULcM0+cjBalBFZlEZ7CA= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1 h1:bWh0Z2rOEDfB/ywv/l0iHN1JgyazE6kW/aIA89+CEK0= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1/go.mod h1:Bzf34hhAE9NSxailk8xVeLEZbUjOXcC+GnU1mMKdhLw= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.7.0 h1:ht6xbz1wlfgLAwho2Fv4nKqq2ev/PCDCoX8H0MXf6q4= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph v0.7.0/go.mod h1:21rlzm+SuYrS9ARS92XEGxcHQeLVDcaY2YV30rHjSd4= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armfeatures v1.1.0 h1:NhvID5juwkPxMUD8hdV3no0nugxk9QM8d5OSLskjOLM= @@ -89,6 +90,8 @@ 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/bits-and-blooms/bitset v1.2.0 h1:Kn4yilvwNtMACtf1eYDlG8H77R07mZSPbMjLyS07ChA= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +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/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4= github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= @@ -405,8 +408,8 @@ github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.6-0.20210304033056-74c60be0ef68 h1:sB6FDvBA1aVDINTWnVSrcJ95fV/QkN6fTJgksZOT8vY= github.com/olekukonko/tablewriter v0.0.6-0.20210304033056-74c60be0ef68/go.mod h1:8Hf+pH6thup1sPZPD+NLg7d6vbpsdilu9CPIeikvgMQ= -github.com/onsi/ginkgo/v2 v2.9.7 h1:06xGQy5www2oN160RtEZoTvnP2sPhEfePYmCDc2szss= -github.com/onsi/gomega v1.27.7 h1:fVih9JD6ogIiHUN6ePK7HJidyEDpWGVB5mzM7cWNXoU= +github.com/onsi/ginkgo/v2 v2.10.0 h1:sfUl4qgLdvkChZrWCYndY2EAu9BRIw1YphNAzy1VNWs= +github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/openshift/api v0.0.0-20230406152840-ce21e3fe5da2 h1:lpKBKpI8or60mSEEKrpS67cevp8XaW8vfmXSwCZXKd0= @@ -530,7 +533,6 @@ go.opentelemetry.io/otel/sdk v1.11.1 h1:F7KmQgoHljhUuJyA+9BiU+EkJfyX5nVVF4wyzWZp go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs= go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -935,6 +937,8 @@ k8s.io/apimachinery v0.27.1 h1:EGuZiLI95UQQcClhanryclaQE6xjg1Bts6/L3cD7zyc= k8s.io/apimachinery v0.27.1/go.mod h1:5ikh59fK3AJ287GUvpUsryoMFtH9zj/ARfWCo3AyXTM= k8s.io/client-go v0.27.1 h1:oXsfhW/qncM1wDmWBIuDzRHNS2tLhK3BZv512Nc59W8= k8s.io/client-go v0.27.1/go.mod h1:f8LHMUkVb3b9N8bWturc+EDtVVVwZ7ueTVquFAJb2vA= +k8s.io/component-base v0.27.1 h1:kEB8p8lzi4gCs5f2SPU242vOumHJ6EOsOnDM3tTuDTM= +k8s.io/component-base v0.27.1/go.mod h1:UGEd8+gxE4YWoigz5/lb3af3Q24w98pDseXcXZjw+E0= k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw= k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230308215209-15aac26d736a h1:gmovKNur38vgoWfGtP5QOGNOA7ki4n6qNYoFAgMlNvg= @@ -946,12 +950,10 @@ k8s.io/utils v0.0.0-20230505201702-9f6742963106/go.mod h1:OLgZIPagt7ERELqWJFomSt rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230607033427-470a363a5dbb h1:qWLN/9MK9CbSJAW+PiIYOQbiKuJw81GRoXbhMBLjbJ0= -sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230607033427-470a363a5dbb/go.mod h1:Mt9nJZTa8ZwDnFSEIvx51fFGNmmgUhTYHAQA/s45iJs= -sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230609015212-d630eda20a6e h1:o520pt/2ZIP9YWBB3mjOQdJo9+Te/emf4VKIpOqiP8c= -sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230609015212-d630eda20a6e/go.mod h1:wGJF9KtrLNnEn87rKc/KqS3phwFSQLhLqpprJXVIZuQ= -sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230612064547-97ff51966a48 h1:JPTRnll9wGWxdJxx0Z4/kFjKMeDLfESO3cjm6R83js8= -sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230612064547-97ff51966a48/go.mod h1:dlFa1ItQ3bzf4DFPBTBQEsqo6Zs+SYoXzGpdfhzz2LM= +sigs.k8s.io/cloud-provider-azure v1.27.5 h1:D/xONxiecBrWw+45YiygUryntb6MAoMNUsHYH/Lg1hc= +sigs.k8s.io/cloud-provider-azure v1.27.5/go.mod h1:kpbVqvl78SN95q4sE3AAj0SW96JxtCDm0Z4+8Q1lBOY= +sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230613061957-d0cd51201edc h1:2Wq1kz8KC6/+G/6z4BHqWgK/bbR40B8ZvXioN7SnU14= +sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230613061957-d0cd51201edc/go.mod h1:dlFa1ItQ3bzf4DFPBTBQEsqo6Zs+SYoXzGpdfhzz2LM= 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.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= diff --git a/storage_drivers/azure/api/azure.go b/storage_drivers/azure/api/azure.go index 1fb7a6a21..1255b0800 100644 --- a/storage_drivers/azure/api/azure.go +++ b/storage_drivers/azure/api/azure.go @@ -8,6 +8,7 @@ import ( "encoding/json" "fmt" "io" + "net" "net/http" "regexp" "time" @@ -16,11 +17,14 @@ import ( "github.com/Azure/azure-sdk-for-go/sdk/azcore/arm" "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" "github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/to" netapp "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/netapp/armnetapp/v4" + "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2" resourcegraph "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resourcegraph/armresourcegraph" features "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armfeatures" "github.com/cenkalti/backoff/v4" "sigs.k8s.io/cloud-provider-azure/pkg/azclient" + "sigs.k8s.io/cloud-provider-azure/pkg/nodeipam/ipam/cidrset" . "github.com/netapp/trident/logging" "github.com/netapp/trident/storage" @@ -40,6 +44,12 @@ const ( CorrelationIDHeader = "X-Ms-Correlation-Request-Id" SubvolumeNameSeparator = "-file-" DefaultCredentialFilePath = "/etc/kubernetes/azure.json" + DefaultAccountNamePrefix = "anf-" + DefaultPoolNamePrefix = "anf-pool-" + DefaultSubnetNamePrefix = "anf-subnet-" + DefaultServiceLevel = netapp.ServiceLevelStandard + DefaultPoolSize = 10 * 1099511627776 // 10 TiB + DefaultSubnetMaskSize = 24 ) var ( @@ -57,6 +67,9 @@ type ClientConfig struct { azclient.AzureAuthConfig SubscriptionID string `json:"subscriptionId"` Location string `json:"location"` + ResourceGroup string `json:"resourceGroup"` + VnetName string `json:"vnetName"` + VnetResourceGroup string `json:"vnetResourceGroup"` StorageDriverName string // Options @@ -73,6 +86,10 @@ type AzureClient struct { VolumesClient *netapp.VolumesClient SnapshotsClient *netapp.SnapshotsClient SubvolumesClient *netapp.SubvolumesClient + AccountClient *netapp.AccountsClient + PoolsClient *netapp.PoolsClient + SubnetsClient *armnetwork.SubnetsClient + VnetClient *armnetwork.VirtualNetworksClient AzureResources } @@ -182,6 +199,20 @@ func NewDriver(config ClientConfig) (Azure, error) { if err != nil { return nil, err } + accountClient, err := netapp.NewAccountsClient(config.SubscriptionID, credential, clientOptions) + if err != nil { + return nil, err + } + poolsClient, err := netapp.NewPoolsClient(config.SubscriptionID, credential, clientOptions) + if err != nil { + return nil, err + } + networkClientFactory, err := armnetwork.NewClientFactory(config.SubscriptionID, credential, clientOptions) + if err != nil { + return nil, err + } + subnetsClient := networkClientFactory.NewSubnetsClient() + vnetClient := networkClientFactory.NewVirtualNetworksClient() sdkClient := &AzureClient{ Credential: credential, @@ -190,6 +221,10 @@ func NewDriver(config ClientConfig) (Azure, error) { VolumesClient: volumesClient, SnapshotsClient: snapshotsClient, SubvolumesClient: subvolumesClient, + AccountClient: accountClient, + PoolsClient: poolsClient, + SubnetsClient: subnetsClient, + VnetClient: vnetClient, } return Client{ @@ -216,7 +251,136 @@ func (c Client) Init(ctx context.Context, pools map[string]storage.Pool) error { c.registerStoragePools(pools) // Find out what we have to work with in Azure - return c.RefreshAzureResources(ctx) + err := c.RefreshAzureResources(ctx) + if errors.IsNotFoundError(err) && shouldGenerateAzureResources(ctx, pools) { + Logc(ctx).WithError(err).Info("Generate Azure resources when not found.") + if err := c.GenerateAzureResources(ctx, pools); err != nil { + return err + } + Logc(ctx).Info("Azure resources has been generated, refresh again.") + return c.RefreshAzureResources(ctx) + } + + return err +} + +func shouldGenerateAzureResources(ctx context.Context, pools map[string]storage.Pool) bool { + for _, pool := range pools { + if pool.InternalAttributes()[PVirtualNetwork] != "" || + pool.InternalAttributes()[PSubnet] != "" || + pool.InternalAttributes()[PResourceGroups] != "" || + pool.InternalAttributes()[PCapacityPools] != "" || + pool.InternalAttributes()[PNetappAccounts] != "" { + return false + } + } + return true +} + +// GenerateAzureResources creates the Azure resources needed by Trident. +func (c Client) GenerateAzureResources(ctx context.Context, pools map[string]storage.Pool) error { + Logc(ctx).Info("Creating Azure NetApp Account") + accountName := DefaultAccountNamePrefix + utils.RandomNumber(8) + accountPollerResp, err := c.sdkClient.AccountClient.BeginCreateOrUpdate( + ctx, + c.config.ResourceGroup, + accountName, + netapp.Account{ + Location: to.Ptr(c.config.Location), + }, nil) + + _, err = accountPollerResp.PollUntilDone(ctx, nil) + if err != nil { + return err + } + + Logc(ctx).Info("Creating Azure NetApp Capacity Pools") + poolName := DefaultPoolNamePrefix + utils.RandomNumber(8) + poolPollerResp, err := c.sdkClient.PoolsClient.BeginCreateOrUpdate( + ctx, + c.config.ResourceGroup, + accountName, + poolName, + netapp.CapacityPool{ + Location: to.Ptr(c.config.Location), + Properties: &netapp.PoolProperties{ + ServiceLevel: to.Ptr(DefaultServiceLevel), + Size: to.Ptr[int64](DefaultPoolSize), + }, + }, nil) + _, err = poolPollerResp.PollUntilDone(ctx, nil) + if err != nil { + return err + } + + Logc(ctx).Info("Get Available Subnet address ange") + vnetGetResp, err := c.sdkClient.VnetClient.Get(ctx, c.config.ResourceGroup, c.config.VnetName, nil) + if err != nil { + return err + } + vnetAddressSpace := vnetGetResp.Properties.AddressSpace.AddressPrefixes[0] + var existingSubnetAddressSpaces []*string + for _, subnet := range vnetGetResp.Properties.Subnets { + existingSubnetAddressSpaces = append(existingSubnetAddressSpaces, subnet.Properties.AddressPrefix) + existingSubnetAddressSpaces = append(existingSubnetAddressSpaces, subnet.Properties.AddressPrefixes...) + } + availableSubnetAddressRange, err := getAvailableSubnetAddressRange(vnetAddressSpace, existingSubnetAddressSpaces, DefaultSubnetMaskSize) + if err != nil { + return err + } + + Logc(ctx).Info("Creating and delegating subnet") + subnetName := DefaultSubnetNamePrefix + utils.RandomNumber(8) + subnetPollerResp, err := c.sdkClient.SubnetsClient.BeginCreateOrUpdate( + ctx, + c.config.ResourceGroup, + c.config.VnetName, + subnetName, + armnetwork.Subnet{ + Properties: &armnetwork.SubnetPropertiesFormat{ + Delegations: to.SliceOfPtrs(armnetwork.Delegation{ + Name: to.Ptr("Microsoft.Netapp/volumes"), + Properties: &armnetwork.ServiceDelegationPropertiesFormat{ + ServiceName: to.Ptr("Microsoft.Netapp/volumes"), + }, + }), + AddressPrefix: to.Ptr(availableSubnetAddressRange), + }, + }, nil) + _, err = subnetPollerResp.PollUntilDone(ctx, nil) + if err != nil { + return err + } + + return nil +} + +// getAvailableSubnetAddressRange returns an available subnet address range, which must be unique within the VNet address space +// and can't overlap with other subnet address ranges in the virtual network. +func getAvailableSubnetAddressRange(vnetAddressSpace *string, existingSubnetAddressSpaces []*string, maskSize int) (string, error) { + _, vnetCIDR, _ := net.ParseCIDR(*vnetAddressSpace) + cidrSet, err := cidrset.NewCIDRSet(vnetCIDR, maskSize) + if err != nil { + return "", err + } + + var cidrIntersect = func(cidr1, cidr2 *net.IPNet) bool { + return cidr1.Contains(cidr2.IP) || cidr2.Contains(cidr1.IP) + } + + var cidr *net.IPNet + for cidr, err = cidrSet.AllocateNext(); err == nil; cidr, err = cidrSet.AllocateNext() { + for _, subnetAddressSpace := range existingSubnetAddressSpaces { + _, subnetCIDR, _ := net.ParseCIDR(*subnetAddressSpace) + if cidrIntersect(cidr, subnetCIDR) { + goto CONTINUE + } + } + return cidr.String(), nil + CONTINUE: + } + + return "", err } // RegisterStoragePool makes a note of pools defined by the driver for later mapping. diff --git a/storage_drivers/azure/api/azure_discovery.go b/storage_drivers/azure/api/azure_discovery.go index 305fbc536..8ebe6c31d 100644 --- a/storage_drivers/azure/api/azure_discovery.go +++ b/storage_drivers/azure/api/azure_discovery.go @@ -198,13 +198,13 @@ func (c Client) DiscoverAzureResources(ctx context.Context) (returnError error) numSubnets := len(newSubnetMap) if numResourceGroups == 0 { - return errors.New("no resource groups discovered; check connectivity, credentials") + return errors.NotFoundError("no resource groups discovered; check connectivity, credentials") } if numCapacityPools == 0 { - return errors.New("no capacity pools discovered; volume provisioning may fail until corrected") + return errors.NotFoundError("no capacity pools discovered; volume provisioning may fail until corrected") } if numSubnets == 0 { - return errors.New("no ANF subnets discovered; volume provisioning may fail until corrected") + return errors.NotFoundError("no ANF subnets discovered; volume provisioning may fail until corrected") } Logc(ctx).WithFields(LogFields{ @@ -575,7 +575,7 @@ func (c Client) discoverCapacityPools(ctx context.Context) (*[]*CapacityPool, er if resourceList.Data == nil || resourceList.Count == nil || *resourceList.Count == 0 { Logc(ctx).WithFields(logFields).Error("Capacity pool query returned no data.") - return nil, errors.New("capacity pool query returned no data") + return nil, errors.NotFoundError("capacity pool query returned no data") } else if data, ok = resourceList.Data.([]interface{}); !ok { Logc(ctx).WithFields(logFields).Error("Capacity pool query returned invalid data.") return nil, errors.New("capacity pool query returned invalid data") @@ -729,7 +729,7 @@ func (c Client) discoverSubnets(ctx context.Context) (*[]*Subnet, error) { if resourceList.Data == nil || resourceList.Count == nil || *resourceList.Count == 0 { Logc(ctx).WithFields(logFields).Error("Subnet query returned no data.") - return nil, errors.New("subnet query returned no data") + return nil, errors.NotFoundError("subnet query returned no data") } else if data, ok = resourceList.Data.([]interface{}); !ok { Logc(ctx).WithFields(logFields).Error("Subnet query returned invalid data.") return nil, errors.New("subnet pool query returned invalid data") diff --git a/utils/utils.go b/utils/utils.go index 84cc5532b..3d1a56280 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -314,9 +314,7 @@ func GetV(opts map[string]string, keys, defaultValue string) string { return defaultValue } -// RandomString returns a string of the specified length consisting only of alphabetic characters. -func RandomString(strSize int) string { - chars := "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +func Random(chars string, strSize int) string { bytes := make([]byte, strSize) _, err := rand.Read(bytes) if err != nil { @@ -328,6 +326,15 @@ func RandomString(strSize int) string { return string(bytes) } +// RandomString returns a string of the specified length consisting only of alphabetic characters. +func RandomString(strSize int) string { + return Random("ABCDEFGHIJKLMNOPQRSTUVWXYZ", strSize) +} + +func RandomNumber(numSize int) string { + return Random("0123456789", numSize) +} + // StringInSlice checks whether a string is in a list of strings func StringInSlice(s string, list []string) bool { for _, item := range list { From 064e3879d8e2377def4e3d4f567a194b38ce5f7c Mon Sep 17 00:00:00 2001 From: weizhichen Date: Wed, 14 Jun 2023 08:25:12 +0000 Subject: [PATCH 12/17] fix repeatly create resources --- frontend/crd/trident_backend_config.go | 28 ++-- storage/factory/factory.go | 2 +- storage_drivers/azure/api/azure.go | 203 ++++++++++++++++--------- storage_drivers/azure/azure_anf.go | 2 +- 4 files changed, 151 insertions(+), 84 deletions(-) diff --git a/frontend/crd/trident_backend_config.go b/frontend/crd/trident_backend_config.go index 9ea924a66..dd8ed7cbb 100644 --- a/frontend/crd/trident_backend_config.go +++ b/frontend/crd/trident_backend_config.go @@ -189,7 +189,20 @@ func (c *TridentCrdController) addBackendConfig( }).Trace("Adding backend in core.") backendDetails, err := c.orchestrator.AddBackend(ctx, string(rawJSONData), string(backendConfig.UID)) - if err != nil { + if err == nil { + newStatus := tridentv1.TridentBackendConfigStatus{ + Message: fmt.Sprintf("Backend '%v' created", backendDetails.Name), + BackendInfo: c.getBackendInfo(ctx, backendDetails.Name, backendDetails.BackendUUID), + Phase: string(tridentv1.PhaseBound), + DeletionPolicy: deletionPolicy, + LastOperationStatus: OperationStatusSuccess, + } + + if _, statusErr := c.updateTbcEventAndStatus(ctx, backendConfig, newStatus, "Backend created.", + corev1.EventTypeNormal); statusErr != nil { + err = fmt.Errorf("encountered an error while updating the status: %v", statusErr) + } + } else if !errors.IsReconcileDeferredError(err) { newStatus := tridentv1.TridentBackendConfigStatus{ Message: fmt.Sprintf("Failed to create backend: %v", err), BackendInfo: c.getBackendInfo(ctx, "", ""), @@ -203,19 +216,6 @@ func (c *TridentCrdController) addBackendConfig( err = fmt.Errorf("failed to create backend: %v; Also encountered error while updating the status: %v", err, statusErr) } - } else { - newStatus := tridentv1.TridentBackendConfigStatus{ - Message: fmt.Sprintf("Backend '%v' created", backendDetails.Name), - BackendInfo: c.getBackendInfo(ctx, backendDetails.Name, backendDetails.BackendUUID), - Phase: string(tridentv1.PhaseBound), - DeletionPolicy: deletionPolicy, - LastOperationStatus: OperationStatusSuccess, - } - - if _, statusErr := c.updateTbcEventAndStatus(ctx, backendConfig, newStatus, "Backend created.", - corev1.EventTypeNormal); statusErr != nil { - err = fmt.Errorf("encountered an error while updating the status: %v", statusErr) - } } return err diff --git a/storage/factory/factory.go b/storage/factory/factory.go index 0b3fdd29b..9d95e0dec 100644 --- a/storage/factory/factory.go +++ b/storage/factory/factory.go @@ -99,7 +99,7 @@ func NewStorageBackendForConfig( Logc(ctx).WithField("error", err).Error("Could not initialize storage driver.") sb = storage.NewFailedStorageBackend(ctx, storageDriver) - err = fmt.Errorf("problem initializing storage driver '%s': %v", commonConfig.StorageDriverName, err) + err = fmt.Errorf("problem initializing storage driver '%s': %w", commonConfig.StorageDriverName, err) } else { Logc(ctx).WithField("driver", commonConfig.StorageDriverName).Info("Storage driver initialized.") diff --git a/storage_drivers/azure/api/azure.go b/storage_drivers/azure/api/azure.go index 1255b0800..54ff7c506 100644 --- a/storage_drivers/azure/api/azure.go +++ b/storage_drivers/azure/api/azure.go @@ -44,9 +44,9 @@ const ( CorrelationIDHeader = "X-Ms-Correlation-Request-Id" SubvolumeNameSeparator = "-file-" DefaultCredentialFilePath = "/etc/kubernetes/azure.json" - DefaultAccountNamePrefix = "anf-" - DefaultPoolNamePrefix = "anf-pool-" - DefaultSubnetNamePrefix = "anf-subnet-" + DefaultAccountNamePrefix = "aks-anf-account-" + DefaultPoolNamePrefix = "aks-anf-pool-" + DefaultSubnetNamePrefix = "aks-anf-subnet-" DefaultServiceLevel = netapp.ServiceLevelStandard DefaultPoolSize = 10 * 1099511627776 // 10 TiB DefaultSubnetMaskSize = 24 @@ -152,7 +152,6 @@ func NewDriver(config ClientConfig) (Azure, error) { if config.Location == "" { return nil, errors.New("location must be specified in the config") } - credential, err := GetAzureCredential(config) if err != nil { return nil, err @@ -252,19 +251,20 @@ func (c Client) Init(ctx context.Context, pools map[string]storage.Pool) error { // Find out what we have to work with in Azure err := c.RefreshAzureResources(ctx) - if errors.IsNotFoundError(err) && shouldGenerateAzureResources(ctx, pools) { + if errors.IsNotFoundError(err) && shouldGenerateAzureResources(pools) { Logc(ctx).WithError(err).Info("Generate Azure resources when not found.") - if err := c.GenerateAzureResources(ctx, pools); err != nil { + if err := c.GenerateAzureResources(ctx); err != nil { return err } - Logc(ctx).Info("Azure resources has been generated, refresh again.") - return c.RefreshAzureResources(ctx) + message := "Azure resources generated successfully, reconcile again to update cache." + Logc(ctx).Info(message) + return errors.ReconcileDeferredError(message) } return err } -func shouldGenerateAzureResources(ctx context.Context, pools map[string]storage.Pool) bool { +func shouldGenerateAzureResources(pools map[string]storage.Pool) bool { for _, pool := range pools { if pool.InternalAttributes()[PVirtualNetwork] != "" || pool.InternalAttributes()[PSubnet] != "" || @@ -278,83 +278,150 @@ func shouldGenerateAzureResources(ctx context.Context, pools map[string]storage. } // GenerateAzureResources creates the Azure resources needed by Trident. -func (c Client) GenerateAzureResources(ctx context.Context, pools map[string]storage.Pool) error { - Logc(ctx).Info("Creating Azure NetApp Account") - accountName := DefaultAccountNamePrefix + utils.RandomNumber(8) - accountPollerResp, err := c.sdkClient.AccountClient.BeginCreateOrUpdate( - ctx, - c.config.ResourceGroup, - accountName, - netapp.Account{ - Location: to.Ptr(c.config.Location), - }, nil) - - _, err = accountPollerResp.PollUntilDone(ctx, nil) +func (c Client) GenerateAzureResources(ctx context.Context) error { + accountName, exist, err := c.accountExists(ctx) if err != nil { return err } - - Logc(ctx).Info("Creating Azure NetApp Capacity Pools") - poolName := DefaultPoolNamePrefix + utils.RandomNumber(8) - poolPollerResp, err := c.sdkClient.PoolsClient.BeginCreateOrUpdate( - ctx, - c.config.ResourceGroup, - accountName, - poolName, - netapp.CapacityPool{ - Location: to.Ptr(c.config.Location), - Properties: &netapp.PoolProperties{ - ServiceLevel: to.Ptr(DefaultServiceLevel), - Size: to.Ptr[int64](DefaultPoolSize), - }, - }, nil) - _, err = poolPollerResp.PollUntilDone(ctx, nil) - if err != nil { - return err + if !exist { + Logc(ctx).Info("Creating Azure NetApp Account") + accountName = DefaultAccountNamePrefix + utils.RandomNumber(8) + accountPollerResp, err := c.sdkClient.AccountClient.BeginCreateOrUpdate( + ctx, + c.config.ResourceGroup, + accountName, + netapp.Account{ + Location: to.Ptr(c.config.Location), + }, nil) + if err != nil { + return err + } + _, err = accountPollerResp.PollUntilDone(ctx, nil) + if err != nil { + return err + } } - Logc(ctx).Info("Get Available Subnet address ange") - vnetGetResp, err := c.sdkClient.VnetClient.Get(ctx, c.config.ResourceGroup, c.config.VnetName, nil) + exist, err = c.poolExists(ctx, accountName) if err != nil { return err } - vnetAddressSpace := vnetGetResp.Properties.AddressSpace.AddressPrefixes[0] - var existingSubnetAddressSpaces []*string - for _, subnet := range vnetGetResp.Properties.Subnets { - existingSubnetAddressSpaces = append(existingSubnetAddressSpaces, subnet.Properties.AddressPrefix) - existingSubnetAddressSpaces = append(existingSubnetAddressSpaces, subnet.Properties.AddressPrefixes...) + if !exist { + Logc(ctx).Info("Creating Azure NetApp Capacity Pools") + poolName := DefaultPoolNamePrefix + utils.RandomNumber(8) + poolPollerResp, err := c.sdkClient.PoolsClient.BeginCreateOrUpdate( + ctx, + c.config.ResourceGroup, + accountName, + poolName, + netapp.CapacityPool{ + Location: to.Ptr(c.config.Location), + Properties: &netapp.PoolProperties{ + ServiceLevel: to.Ptr(DefaultServiceLevel), + Size: to.Ptr[int64](DefaultPoolSize), + }, + }, nil) + if err != nil { + return err + } + _, err = poolPollerResp.PollUntilDone(ctx, nil) + if err != nil { + return err + } } - availableSubnetAddressRange, err := getAvailableSubnetAddressRange(vnetAddressSpace, existingSubnetAddressSpaces, DefaultSubnetMaskSize) + + vnetGetResp, exist, err := c.subnetExists(ctx) if err != nil { return err } + if !exist { + Logc(ctx).Info("Get Available Subnet address range") + vnetAddressSpace := vnetGetResp.Properties.AddressSpace.AddressPrefixes[0] + var existingSubnetAddressSpaces []*string + for _, subnet := range vnetGetResp.Properties.Subnets { + existingSubnetAddressSpaces = append(existingSubnetAddressSpaces, subnet.Properties.AddressPrefix) + existingSubnetAddressSpaces = append(existingSubnetAddressSpaces, subnet.Properties.AddressPrefixes...) + } + availableSubnetAddressRange, err := getAvailableSubnetAddressRange(vnetAddressSpace, existingSubnetAddressSpaces, DefaultSubnetMaskSize) + if err != nil { + return err + } - Logc(ctx).Info("Creating and delegating subnet") - subnetName := DefaultSubnetNamePrefix + utils.RandomNumber(8) - subnetPollerResp, err := c.sdkClient.SubnetsClient.BeginCreateOrUpdate( - ctx, - c.config.ResourceGroup, - c.config.VnetName, - subnetName, - armnetwork.Subnet{ - Properties: &armnetwork.SubnetPropertiesFormat{ - Delegations: to.SliceOfPtrs(armnetwork.Delegation{ - Name: to.Ptr("Microsoft.Netapp/volumes"), - Properties: &armnetwork.ServiceDelegationPropertiesFormat{ - ServiceName: to.Ptr("Microsoft.Netapp/volumes"), - }, - }), - AddressPrefix: to.Ptr(availableSubnetAddressRange), - }, - }, nil) - _, err = subnetPollerResp.PollUntilDone(ctx, nil) - if err != nil { - return err + Logc(ctx).Info("Creating and delegating subnet") + subnetName := DefaultSubnetNamePrefix + utils.RandomNumber(8) + subnetPollerResp, err := c.sdkClient.SubnetsClient.BeginCreateOrUpdate( + ctx, + c.config.ResourceGroup, + c.config.VnetName, + subnetName, + armnetwork.Subnet{ + Properties: &armnetwork.SubnetPropertiesFormat{ + Delegations: to.SliceOfPtrs(armnetwork.Delegation{ + Name: to.Ptr("Microsoft.Netapp/volumes"), + Properties: &armnetwork.ServiceDelegationPropertiesFormat{ + ServiceName: to.Ptr("Microsoft.Netapp/volumes"), + }, + }), + AddressPrefix: to.Ptr(availableSubnetAddressRange), + }, + }, nil) + if err != nil { + return err + } + _, err = subnetPollerResp.PollUntilDone(ctx, nil) + if err != nil { + return err + } } return nil } +func (c Client) accountExists(ctx context.Context) (string, bool, error) { + pager := c.sdkClient.AccountClient.NewListPager(c.config.ResourceGroup, nil) + accounts := make([]*netapp.Account, 0) + for pager.More() { + resp, err := pager.NextPage(ctx) + if err != nil { + return "", false, err + } + accounts = append(accounts, resp.Value...) + } + if len(accounts) == 0 { + return "", false, nil + } + return *accounts[0].Name, true, nil +} + +func (c Client) poolExists(ctx context.Context, accountName string) (bool, error) { + pager := c.sdkClient.PoolsClient.NewListPager(c.config.ResourceGroup, accountName, nil) + pools := make([]*netapp.CapacityPool, 0) + for pager.More() { + resp, err := pager.NextPage(ctx) + if err != nil { + return false, err + } + pools = append(pools, resp.Value...) + } + return len(pools) > 0, nil +} + +func (c Client) subnetExists(ctx context.Context) (*armnetwork.VirtualNetworksClientGetResponse, bool, error) { + vnetGetResp, err := c.sdkClient.VnetClient.Get(ctx, c.config.ResourceGroup, c.config.VnetName, nil) + if err != nil { + return nil, false, err + } + for _, subnet := range vnetGetResp.Properties.Subnets { + for _, delegation := range subnet.Properties.Delegations { + if *delegation.Properties.ServiceName == "Microsoft.Netapp/volumes" { + Logc(ctx).Infof("The 'Microsoft.NetApp/volumes' delegation can only exist on one subnet within a VNet. There is already a delegation on subnet %s, skip creating subnet", *subnet.Name) + return nil, true, nil + } + } + } + return &vnetGetResp, false, nil +} + // getAvailableSubnetAddressRange returns an available subnet address range, which must be unique within the VNet address space // and can't overlap with other subnet address ranges in the virtual network. func getAvailableSubnetAddressRange(vnetAddressSpace *string, existingSubnetAddressSpaces []*string, maskSize int) (string, error) { diff --git a/storage_drivers/azure/azure_anf.go b/storage_drivers/azure/azure_anf.go index c9c4557e2..aba3977f2 100644 --- a/storage_drivers/azure/azure_anf.go +++ b/storage_drivers/azure/azure_anf.go @@ -183,7 +183,7 @@ func (d *NASStorageDriver) Initialize( d.initializeTelemetry(ctx, backendUUID) if err = d.initializeAzureSDKClient(ctx, &d.Config); err != nil { - return fmt.Errorf("error initializing %s SDK client. %v", d.Name(), err) + return fmt.Errorf("error initializing %s SDK client. %w", d.Name(), err) } if err = d.validate(ctx); err != nil { From f8f3e92d23b86e5c3617c2bd454a05a2223e5e4d Mon Sep 17 00:00:00 2001 From: weizhichen Date: Wed, 14 Jun 2023 14:19:40 +0000 Subject: [PATCH 13/17] update go mod --- go.mod | 10 +++++----- go.sum | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index 7f21a1b2e..5d742c442 100755 --- a/go.mod +++ b/go.mod @@ -43,11 +43,11 @@ require ( github.com/vishvananda/netlink v1.1.0 github.com/zcalusic/sysinfo v0.9.6-0.20220805135214-99e836ba64f2 go.uber.org/multierr v1.11.0 // github.com/uber-go/multierr - golang.org/x/crypto v0.9.0 // github.com/golang/crypto + golang.org/x/crypto v0.10.0 // github.com/golang/crypto golang.org/x/net v0.10.0 // github.com/golang/net golang.org/x/oauth2 v0.7.0 // github.com/golang/oauth2 - golang.org/x/sys v0.8.0 // github.com/golang/sys - golang.org/x/text v0.9.0 // github.com/golang/text + golang.org/x/sys v0.9.0 // github.com/golang/sys + golang.org/x/text v0.10.0 // github.com/golang/text golang.org/x/time v0.3.0 // github.com/golang/time google.golang.org/grpc v1.54.0 // github.com/grpc/grpc-go k8s.io/api v0.27.1 // github.com/kubernetes/api @@ -60,7 +60,7 @@ require ( require ( github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1 sigs.k8s.io/cloud-provider-azure v1.27.5 - sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230613061957-d0cd51201edc + sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230614113418-76168d52887e ) require ( @@ -128,7 +128,7 @@ require ( go.opentelemetry.io/otel/metric v1.16.0 // indirect go.opentelemetry.io/otel/trace v1.16.0 // indirect golang.org/x/mod v0.10.0 // indirect - golang.org/x/term v0.8.0 // indirect + golang.org/x/term v0.9.0 // indirect golang.org/x/tools v0.9.3 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect diff --git a/go.sum b/go.sum index a674baa8a..d41b7ffc4 100755 --- a/go.sum +++ b/go.sum @@ -546,8 +546,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.10.0 h1:LKqV2xt9+kDzSTfOhx4FrkEBcMrAgHSYgzywV9zcGmM= +golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -708,12 +708,12 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.9.0 h1:GRRCnKYhdQrD8kfRAdQ6Zcw1P0OcELxGLKJvtjVMZ28= +golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -723,8 +723,8 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -952,8 +952,8 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= sigs.k8s.io/cloud-provider-azure v1.27.5 h1:D/xONxiecBrWw+45YiygUryntb6MAoMNUsHYH/Lg1hc= sigs.k8s.io/cloud-provider-azure v1.27.5/go.mod h1:kpbVqvl78SN95q4sE3AAj0SW96JxtCDm0Z4+8Q1lBOY= -sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230613061957-d0cd51201edc h1:2Wq1kz8KC6/+G/6z4BHqWgK/bbR40B8ZvXioN7SnU14= -sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230613061957-d0cd51201edc/go.mod h1:dlFa1ItQ3bzf4DFPBTBQEsqo6Zs+SYoXzGpdfhzz2LM= +sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230614113418-76168d52887e h1:6w35nHkuAkSgjBEwznlgutHfpgXe7hO93acuxvxeTYg= +sigs.k8s.io/cloud-provider-azure/pkg/azclient v0.0.0-20230614113418-76168d52887e/go.mod h1:tntSHYpEsHw8gv5HVh5lPpDkhfXsPzwqSoihLhJCgZw= 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.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE= From e71df7ff2da43009446681b10cb6947b457c51d1 Mon Sep 17 00:00:00 2001 From: weizhichen Date: Mon, 3 Jul 2023 03:29:16 +0000 Subject: [PATCH 14/17] fix --- cli/k8s_client/yaml_factory.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/k8s_client/yaml_factory.go b/cli/k8s_client/yaml_factory.go index df2b0a251..961d84075 100644 --- a/cli/k8s_client/yaml_factory.go +++ b/cli/k8s_client/yaml_factory.go @@ -433,7 +433,7 @@ func GetCSIDeploymentYAML(args *DeploymentYAMLArguments) string { autosupportDebugLine = "#" + autosupportDebugLine } - if args.CloudProvider == CloudProviderAzure { + if strings.EqualFold(args.CloudProvider, CloudProviderAzure) { deploymentYAML = strings.ReplaceAll(deploymentYAML, "{AZURE_CREDENTIAL_FILE_ENV}", "- name: AZURE_CREDENTIAL_FILE\n value: /etc/kubernetes/azure.json") deploymentYAML = strings.ReplaceAll(deploymentYAML, "{AZURE_CREDENTIAL_FILE_VOLUME}", "- name: azure-cred\n hostPath:\n path: /etc/kubernetes\n type: DirectoryOrCreate") deploymentYAML = strings.ReplaceAll(deploymentYAML, "{AZURE_CREDENTIAL_FILE_VOLUME_MOUNT}", "- name: azure-cred\n mountPath: /etc/kubernetes") From ef816c303c687a826fcd76e81a618df16c538ff8 Mon Sep 17 00:00:00 2001 From: weizhichen Date: Thu, 14 Sep 2023 05:06:53 +0000 Subject: [PATCH 15/17] should use vnet resource group --- storage_drivers/azure/api/azure.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/storage_drivers/azure/api/azure.go b/storage_drivers/azure/api/azure.go index 0cdfc89a5..efbb6f879 100644 --- a/storage_drivers/azure/api/azure.go +++ b/storage_drivers/azure/api/azure.go @@ -351,7 +351,7 @@ func (c Client) GenerateAzureResources(ctx context.Context) error { subnetName := DefaultSubnetNamePrefix + utils.RandomNumber(8) subnetPollerResp, err := c.sdkClient.SubnetsClient.BeginCreateOrUpdate( ctx, - c.config.ResourceGroup, + c.config.VnetResourceGroup, c.config.VnetName, subnetName, armnetwork.Subnet{ @@ -407,7 +407,7 @@ func (c Client) poolExists(ctx context.Context, accountName string) (bool, error } func (c Client) subnetExists(ctx context.Context) (*armnetwork.VirtualNetworksClientGetResponse, bool, error) { - vnetGetResp, err := c.sdkClient.VnetClient.Get(ctx, c.config.ResourceGroup, c.config.VnetName, nil) + vnetGetResp, err := c.sdkClient.VnetClient.Get(ctx, c.config.VnetResourceGroup, c.config.VnetName, nil) if err != nil { return nil, false, err } From 1efc8ee6ee85f2bd226318c6cbea8ef401deab45 Mon Sep 17 00:00:00 2001 From: weizhichen Date: Thu, 14 Sep 2023 05:10:38 +0000 Subject: [PATCH 16/17] vnetresourcegroup --- storage_drivers/azure/api/azure.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/storage_drivers/azure/api/azure.go b/storage_drivers/azure/api/azure.go index efbb6f879..c252672ed 100644 --- a/storage_drivers/azure/api/azure.go +++ b/storage_drivers/azure/api/azure.go @@ -348,10 +348,14 @@ func (c Client) GenerateAzureResources(ctx context.Context) error { } Logc(ctx).Info("Creating and delegating subnet") + vnetResourceGroup := c.config.VnetResourceGroup + if vnetResourceGroup == "" { + vnetResourceGroup = c.config.ResourceGroup + } subnetName := DefaultSubnetNamePrefix + utils.RandomNumber(8) subnetPollerResp, err := c.sdkClient.SubnetsClient.BeginCreateOrUpdate( ctx, - c.config.VnetResourceGroup, + vnetResourceGroup, c.config.VnetName, subnetName, armnetwork.Subnet{ @@ -407,7 +411,11 @@ func (c Client) poolExists(ctx context.Context, accountName string) (bool, error } func (c Client) subnetExists(ctx context.Context) (*armnetwork.VirtualNetworksClientGetResponse, bool, error) { - vnetGetResp, err := c.sdkClient.VnetClient.Get(ctx, c.config.VnetResourceGroup, c.config.VnetName, nil) + vnetResourceGroup := c.config.VnetResourceGroup + if vnetResourceGroup == "" { + vnetResourceGroup = c.config.ResourceGroup + } + vnetGetResp, err := c.sdkClient.VnetClient.Get(ctx, vnetResourceGroup, c.config.VnetName, nil) if err != nil { return nil, false, err } From bd8bdace803b8498a48ec90f148f648219336b84 Mon Sep 17 00:00:00 2001 From: weizhichen Date: Fri, 15 Sep 2023 01:25:31 +0000 Subject: [PATCH 17/17] go sum --- go.sum | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/go.sum b/go.sum index ed165fac6..128bdf65f 100755 --- a/go.sum +++ b/go.sum @@ -52,7 +52,9 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v4 v4.0.0 h1:PcCx8mii9UPb0ztRpw8JF4/pKEfxXeXtL1GETENP4pU= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/containerservice/armcontainerservice/v4 v4.0.0/go.mod h1:FoPQz7wDNpmE619+efw24epeh69HYI6c3jbwz8jgPMw= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.1.2 h1:mLY+pNLjCUeKhgnAJWAKhEUQM+RJQo2H1fuGSw1Ky1E= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.1.2/go.mod h1:FbdwsQ2EzwvXxOPcMFYO8ogEc9uMMIj3YkmCdXdAFmk= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0 h1:pPvTJ1dY0sA35JOeFq6TsY2xj6Z85Yo23Pj4wCCvu4o= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0/go.mod h1:mLfWfj8v3jfWKsL9G4eoBoXVcsqcIUTapmdKy7uGOp0= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/netapp/armnetapp/v4 v4.0.0 h1:yNyKx1DKBWXs6EP6WaaVgRuX9ilmOj8emmAyKfqHBYA= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/netapp/armnetapp/v4 v4.0.0/go.mod h1:CLToNi36LmwVMgHuqOgfG8M0ph7VQaEUoqpO35/1wqU= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1 h1:bWh0Z2rOEDfB/ywv/l0iHN1JgyazE6kW/aIA89+CEK0= @@ -83,6 +85,7 @@ github.com/RoaringBitmap/roaring v1.3.0 h1:aQmu9zQxDU0uhwR8SXOH/OrqEf+X8A0LQmwW3 github.com/RoaringBitmap/roaring v1.3.0/go.mod h1:plvDsJQpxOC5bw8LRteu/MLWHsHez/3y6cubLI4/1yE= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= @@ -117,13 +120,17 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs 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/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho= +github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-plugins-helpers v0.0.0-20211224144127-6eecb7beb651 h1:YcvzLmdrP/b8kLAGJ8GT7bdncgCAiWxJZIlt84D+RJg= github.com/docker/go-plugins-helpers v0.0.0-20211224144127-6eecb7beb651/go.mod h1:LFyLie6XcDbyKGeVK6bHe+9aJTYCxWLBg5IrJZOaXKA= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v1.0.2-0.20230319011938-bd1b3e1a20a1 h1:xWuCuGTxFJBS1aR92jQcf67YS3N6DozQ9xhlM421MPI= github.com/dustin/go-humanize v1.0.2-0.20230319011938-bd1b3e1a20a1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= @@ -198,6 +205,7 @@ github.com/go-openapi/validate v0.22.1 h1:G+c2ub6q47kfX1sOBLwIQwzBVt8qmOAARyo/9F github.com/go-openapi/validate v0.22.1/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= @@ -293,6 +301,7 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20230602010524-ada837c32108 h1:y+JfwMOPwQwIrnh3TUPwwtOAhONoppkHiSa4sQBoK2k= +github.com/google/pprof v0.0.0-20230602010524-ada837c32108/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -338,6 +347,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/secureheader v0.2.0 h1:Fe/BS3McH8EGMSc+HzaZkkRnrCyx2gq9kSVgLbyBNrA= github.com/kr/secureheader v0.2.0/go.mod h1:PfvbGMMfqBg6z+vxKGKbSJRcmASZc4klL5DiW9V5iLI= @@ -366,6 +376,7 @@ github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRC 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/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g= +github.com/maxatome/go-testdeep v1.12.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= @@ -396,9 +407,13 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn github.com/olekukonko/tablewriter v0.0.6-0.20230422125635-f6b4e4ae60d8 h1:eZ1u2pOgYpOBuhRmW9qo8C7tXKtqSRNI1U3PHcpcObQ= github.com/olekukonko/tablewriter v0.0.6-0.20230422125635-f6b4e4ae60d8/go.mod h1:8Hf+pH6thup1sPZPD+NLg7d6vbpsdilu9CPIeikvgMQ= github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU= +github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM= github.com/onsi/gomega v1.27.9 h1:qIyVWbOsvQEye2QCqLsNSeH/5L1RS9vS382erEWfT3o= +github.com/onsi/gomega v1.27.9/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= +github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/openshift/api v0.0.0-20230711095040-ca06f4a23b64 h1:j7LIIr4Vrdy4Dpd4bw2j53UXUSjA1eXXC0x89g9kyAI= github.com/openshift/api v0.0.0-20230711095040-ca06f4a23b64/go.mod h1:yimSGmjsI+XF1mr+AKBs2//fSXIOhhetHGbMlBEfXbs= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= @@ -429,6 +444,7 @@ github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= 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.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= @@ -499,6 +515,7 @@ go.opentelemetry.io/otel v1.16.0/go.mod h1:vl0h9NUa1D5s1nv3A5vZOYWn8av4K8Ml6JDeH go.opentelemetry.io/otel/metric v1.16.0 h1:RbrpwVG1Hfv85LgnZ7+txXioPDoh6EdbZHo26Q3hqOo= go.opentelemetry.io/otel/metric v1.16.0/go.mod h1:QE47cpOmkwipPiefDwo2wDzwJrlfxxNYodqc4xnGCo4= go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY= +go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM= go.opentelemetry.io/otel/trace v1.16.0 h1:8JRpaObFoW0pxuVPapkgH8UhHQj+bJW8jJsCZEu5MQs= go.opentelemetry.io/otel/trace v1.16.0/go.mod h1:Yt9vYq1SdNz3xdjZZK7wcXv1qv2pwLkqr2QVwea0ef0= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= @@ -614,6 +631,7 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= +golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -854,6 +872,7 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8 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/dnaeon/go-vcr.v3 v3.1.2 h1:F1smfXBqQqwpVifDfUBQG6zzaGjzT+EnVZakrOdr5wA= +gopkg.in/dnaeon/go-vcr.v3 v3.1.2/go.mod h1:2IMOnnlx9I6u9x+YBsM3tAMx6AlOxnJ0pWxQAzZ79Ag= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=