diff --git a/COPYRIGHT b/COPYRIGHT index aba7a82..49dacc3 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -1,2 +1,2 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation diff --git a/Dockerfile b/Dockerfile index 0cfc7d5..987c59e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ ## SPDX-License-Identifier: Apache-2.0 -## Copyright (c) 2020-2021 Intel Corporation +## Copyright (c) 2020-2022 Intel Corporation # Build the manager binary FROM golang:1.18.3 as builder @@ -22,7 +22,7 @@ COPY controllers/ controllers/ # Build RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a -o manager main.go -FROM registry.access.redhat.com/ubi8/ubi-minimal:8.6-751 +FROM registry.access.redhat.com/ubi8/ubi-minimal:8.6-941 ARG VERSION ### Required OpenShift Labels diff --git a/Dockerfile.daemon b/Dockerfile.daemon index ec3931f..5639626 100644 --- a/Dockerfile.daemon +++ b/Dockerfile.daemon @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation FROM golang:1.18.3 as builder @@ -10,11 +10,11 @@ RUN git clone --depth 1 --branch r44 https://github.com/benhoyt/inih && \ make -f Makefile.static && \ cp libinih.a ../ -RUN git clone --depth 1 --branch v22.03 https://github.com/intel/pf-bb-config && \ +RUN git clone --depth 1 --branch v22.07 https://github.com/intel/pf-bb-config && \ cd pf-bb-config && \ VERSION_STRING=$(git describe --tags --long) && \ sed -i "s/#VERSION_STRING#/${VERSION_STRING}/g" config_app.c && \ - make CFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-strong -fPIE -z relro -z now -z noexecstack -s -O1" + make WORKDIR /workspace-go @@ -29,7 +29,7 @@ COPY api api/ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a -o sriov_fec_daemon cmd/daemon/main.go -FROM registry.access.redhat.com/ubi8:8.6-754 +FROM registry.access.redhat.com/ubi8:8.6-943 ARG VERSION ### Required OpenShift Labels diff --git a/Dockerfile.labeler b/Dockerfile.labeler index 3cfab96..b3f31fd 100644 --- a/Dockerfile.labeler +++ b/Dockerfile.labeler @@ -12,7 +12,7 @@ COPY pkg/ pkg/ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a -o node_labeler cmd/labeler/main.go -FROM registry.access.redhat.com/ubi8:8.6-754 +FROM registry.access.redhat.com/ubi8:8.6-943 ARG VERSION ### Required OpenShift Labels diff --git a/Makefile b/Makefile index 4a0a1cb..02d39d2 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ export CLI_EXEC?=oc # Container format for podman. Required to build containers with "ManifestType": "application/vnd.oci.image.manifest.v2+json", export BUILDAH_FORMAT=docker # Current Operator version -VERSION ?= 2.4.0 +VERSION ?= 2.5.0 # Supported channels CHANNELS ?= stable # Default channel @@ -25,7 +25,7 @@ endif # tls verify flag for pushing images TLS_VERIFY ?= false -REQUIRED_OPERATOR_SDK_VERSION ?= v1.20.1 +REQUIRED_OPERATOR_SDK_VERSION ?= v1.22.2 IMAGE_TAG_BASE ?= $(IMAGE_REGISTRY)sriov-fec BUNDLE_IMG ?= $(IMAGE_TAG_BASE)-bundle:v$(VERSION) @@ -50,11 +50,11 @@ export SRIOV_FEC_DAEMON_IMAGE ?= $(IMAGE_REGISTRY)sriov-fec-daemon:$(IMG_VERSION export SRIOV_FEC_LABELER_IMAGE ?= $(IMAGE_REGISTRY)n3000-labeler:$(IMG_VERSION) ifeq ($(CONTAINER_TOOL),podman) - export SRIOV_FEC_NETWORK_DEVICE_PLUGIN_IMAGE ?= registry.redhat.io/openshift4/ose-sriov-network-device-plugin:v4.10 - export KUBE_RBAC_PROXY_IMAGE ?= registry.redhat.io/openshift4/ose-kube-rbac-proxy@sha256:86e5fa1fa294987114be200890c2e516501e424aee0fb98ece25c95e7716295b + export SRIOV_FEC_NETWORK_DEVICE_PLUGIN_IMAGE ?= registry.redhat.io/openshift4/ose-sriov-network-device-plugin:v4.10 #TBD + export KUBE_RBAC_PROXY_IMAGE ?= registry.redhat.io/openshift4/ose-kube-rbac-proxy@sha256:b5786bbbef725badf3dfcc2c2c7a86ead5ebb584c978c47aae8b9a62e241b80d else - export SRIOV_FEC_NETWORK_DEVICE_PLUGIN_IMAGE ?= quay.io/openshift/origin-sriov-network-device-plugin:4.10 - export KUBE_RBAC_PROXY_IMAGE ?= gcr.io/kubebuilder/kube-rbac-proxy:v0.5.0 + export SRIOV_FEC_NETWORK_DEVICE_PLUGIN_IMAGE ?= quay.io/openshift/origin-sriov-network-device-plugin:4.11 + export KUBE_RBAC_PROXY_IMAGE ?= gcr.io/kubebuilder/kube-rbac-proxy:v0.11.0 endif # Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set) @@ -74,11 +74,11 @@ SHELL = /usr/bin/env bash -o pipefail all: manager daemon labeler # ENVTEST_K8S_VERSION refers to the version of kubebuilder assets to be downloaded by envtest binary. -ENVTEST_K8S_VERSION = 1.23 +ENVTEST_K8S_VERSION = 1.24 ENVTEST = $(shell pwd)/bin/setup-envtest .PHONY: envtest envtest: ## Download envtest-setup locally if necessary. - echo $(ENVTEST) + rm -f $(ENVTEST) $(call go-get-tool,$(ENVTEST),sigs.k8s.io/controller-runtime/tools/setup-envtest@latest) .PHONY: test @@ -160,7 +160,7 @@ vet: generate: controller-gen $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." -# go-get-tool will 'go get' any package $2 and install it to $1. +# go-get-tool will 'go install' any package $2 and install it to $1. PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST)))) define go-get-tool @@ -180,11 +180,13 @@ endef CONTROLLER_GEN = $(shell pwd)/bin/controller-gen .PHONY: controller-gen controller-gen: ## Download controller-gen locally if necessary. - $(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen@v0.8.0) + rm -f $(CONTROLLER_GEN) + $(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen@v0.9.2) KUSTOMIZE = $(shell pwd)/bin/kustomize .PHONY: kustomize kustomize: ## Download kustomize locally if necessary. + rm -f $(KUSTOMIZE) $(call go-get-tool,$(KUSTOMIZE),sigs.k8s.io/kustomize/kustomize/v4@v4.5.5) # Build/Push daemon image @@ -339,7 +341,7 @@ build_all: build .PHONY: build_index build_index: opm index add --bundles $(BUNDLE_IMG) --tag localhost/sriov-fec-index:$(VERSION) $(if ifeq $(TLS_VERIFY) false, --skip-tls) -c $(CONTAINER_TOOL) --mode=semver - $(MAKE) VERSION=$(VERSION) IMAGE_REGISTRY=$(IMAGE_REGISTRY) TLS_VERIFY=$(TLS_VERIFY) $(CONTAINER_TOOL)_push_index + $(MAKE) VERSION=$(VERSION) IMAGE_REGISTRY=$(IMAGE_REGISTRY) TLS_VERIFY=$(TLS_VERIFY) $(CONTAINER_TOOL)_push_index .PHONY: podman_push_index podman_push_index: diff --git a/api/v1/groupversion_info.go b/api/v1/groupversion_info.go index 6c60a18..1be63a0 100644 --- a/api/v1/groupversion_info.go +++ b/api/v1/groupversion_info.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation /* diff --git a/api/v1/sriovfecclusterconfig_types.go b/api/v1/sriovfecclusterconfig_types.go index b210af6..0d93d74 100644 --- a/api/v1/sriovfecclusterconfig_types.go +++ b/api/v1/sriovfecclusterconfig_types.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package v1 diff --git a/api/v1/sriovfecnodeconfig_types.go b/api/v1/sriovfecnodeconfig_types.go index 0a3ade3..c90e9be 100644 --- a/api/v1/sriovfecnodeconfig_types.go +++ b/api/v1/sriovfecnodeconfig_types.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package v1 diff --git a/api/v1/zz_generated.deepcopy.go b/api/v1/zz_generated.deepcopy.go index 51590fb..8f7c034 100644 --- a/api/v1/zz_generated.deepcopy.go +++ b/api/v1/zz_generated.deepcopy.go @@ -2,7 +2,7 @@ // +build !ignore_autogenerated // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation // Code generated by controller-gen. DO NOT EDIT. diff --git a/api/v2/groupversion_info.go b/api/v2/groupversion_info.go index cbc2361..78fffd1 100644 --- a/api/v2/groupversion_info.go +++ b/api/v2/groupversion_info.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation // Package v2 contains API Schema definitions for the sriovfec v2 API group // +kubebuilder:object:generate=true diff --git a/api/v2/helper.go b/api/v2/helper.go index 99b2b23..ac8d15b 100644 --- a/api/v2/helper.go +++ b/api/v2/helper.go @@ -1,11 +1,12 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package v2 import ( "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "reflect" ) type ByPriority []SriovFecClusterConfig @@ -26,25 +27,34 @@ func (a ByPriority) Swap(i, j int) { } func (s AcceleratorSelector) Matches(a SriovAccelerator) bool { - if s.VendorID != "" && s.VendorID != a.VendorID { - return false - } - if s.PCIAddress != "" && s.PCIAddress != a.PCIAddress { - return false - } - if s.PFDriver != "" && s.PFDriver != a.PFDriver { - return false - } - if s.MaxVFs != 0 && s.MaxVFs != a.MaxVFs { - return false - } - if s.DeviceID != "" && s.DeviceID != a.DeviceID { - return false - } + return s.isVendorMatching(a) && s.isPciAddressMatching(a) && + s.isPFDriverMatching(a) && s.isMaxVFsMatching(a) && s.isDeviceIDMatching(a) +} + +func (s AcceleratorSelector) isVendorMatching(a SriovAccelerator) bool { + return s.VendorID == "" || s.VendorID == a.VendorID +} - return true +func (s AcceleratorSelector) isPciAddressMatching(a SriovAccelerator) bool { + return s.PCIAddress == "" || s.PCIAddress == a.PCIAddress +} + +func (s AcceleratorSelector) isPFDriverMatching(a SriovAccelerator) bool { + return s.PFDriver == "" || s.PFDriver == a.PFDriver +} + +func (s AcceleratorSelector) isMaxVFsMatching(a SriovAccelerator) bool { + return s.MaxVFs == 0 || s.MaxVFs == a.MaxVFs +} + +func (s AcceleratorSelector) isDeviceIDMatching(a SriovAccelerator) bool { + return s.DeviceID == "" || s.DeviceID == a.DeviceID } func (in *SriovFecNodeConfig) FindCondition(conditionType string) *metav1.Condition { return meta.FindStatusCondition(in.Status.Conditions, conditionType) } + +func isNil(v interface{}) bool { + return v == nil || (reflect.ValueOf(v).Kind() == reflect.Ptr && reflect.ValueOf(v).IsNil()) +} diff --git a/api/v2/sriovfecclusterconfig_types.go b/api/v2/sriovfecclusterconfig_types.go index 6368d24..ccbcbb3 100644 --- a/api/v2/sriovfecclusterconfig_types.go +++ b/api/v2/sriovfecclusterconfig_types.go @@ -1,16 +1,20 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package v2 import ( "fmt" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) type SyncStatus string +const ( + acc100maxQueueGroups = 8 + acc200maxQueueGroups = 16 +) + var ( // InProgressSync indicates that the synchronization of the CR is in progress InProgressSync SyncStatus = "InProgress" @@ -108,10 +112,54 @@ type ACC100BBDevConfig struct { Downlink5G QueueGroupConfig `json:"downlink5G"` } +func (in *ACC100BBDevConfig) Validate() error { + totalQueueGroups := in.Uplink4G.NumQueueGroups + in.Downlink4G.NumQueueGroups + in.Uplink5G.NumQueueGroups + in.Downlink5G.NumQueueGroups + if totalQueueGroups > acc100maxQueueGroups { + return fmt.Errorf("total number of requested queue groups (4G/5G) %v exceeds the maximum (%d)", totalQueueGroups, acc100maxQueueGroups) + } + return nil +} + +// ACC200BBDevConfig specifies variables to configure ACC200 with +type ACC200BBDevConfig struct { + ACC100BBDevConfig `json:",inline"` + QFFT QueueGroupConfig `json:"qfft"` +} + +func (in *ACC200BBDevConfig) Validate() error { + totalQueueGroups := in.Uplink4G.NumQueueGroups + in.Downlink4G.NumQueueGroups + in.Uplink5G.NumQueueGroups + in.Downlink5G.NumQueueGroups + in.QFFT.NumQueueGroups + if totalQueueGroups > acc200maxQueueGroups { + return fmt.Errorf("total number of requested queue groups (4G/5G/QFFT) %v exceeds the maximum (%d)", totalQueueGroups, acc200maxQueueGroups) + } + return nil +} + // BBDevConfig is a struct containing configuration for various FEC cards type BBDevConfig struct { N3000 *N3000BBDevConfig `json:"n3000,omitempty"` ACC100 *ACC100BBDevConfig `json:"acc100,omitempty"` + ACC200 *ACC200BBDevConfig `json:"acc200,omitempty"` +} + +type validator interface { + Validate() error +} + +func (in *BBDevConfig) Validate() error { + + if err := hasAmbiguousBBDevConfigs(*in); err != nil { + return err + } + + for _, config := range []interface{}{in.ACC200, in.ACC100, in.N3000} { + if !isNil(config) { + if validator, ok := config.(validator); ok { + return validator.Validate() + } + } + } + + return nil } // PhysicalFunctionConfig defines a possible configuration of a single Physical Function (PF), i.e. card @@ -122,7 +170,7 @@ type PhysicalFunctionConfig struct { // VFDriver to bound the VFs to VFDriver string `json:"vfDriver"` // VFAmount is an amount of VFs to be created - // +kubebuilder:validation:Minimum=0 + // +kubebuilder:validation:Minimum=1 VFAmount int `json:"vfAmount"` // BBDevConfig is a config for PF's queues BBDevConfig BBDevConfig `json:"bbDevConfig"` diff --git a/api/v2/sriovfecclusterconfig_webhook.go b/api/v2/sriovfecclusterconfig_webhook.go index a1f5a87..51eb4ec 100644 --- a/api/v2/sriovfecclusterconfig_webhook.go +++ b/api/v2/sriovfecclusterconfig_webhook.go @@ -1,9 +1,10 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package v2 import ( + "fmt" "github.com/smart-edge-open/sriov-fec-operator/pkg/common/utils" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" @@ -48,6 +49,8 @@ func validate(spec SriovFecClusterConfigSpec) (errs field.ErrorList) { ambiguousBBDevConfigValidator, n3000LinkQueuesValidator, acc100VfAmountValidator, + acc200VfAmountValidator, + acc200NumQueueGroupsValidator, acc100NumQueueGroupsValidator, } @@ -65,12 +68,35 @@ func (in *SriovFecClusterConfig) ValidateDelete() error { return nil } +func hasAmbiguousBBDevConfigs(bbDevConfig BBDevConfig) *field.Error { + + var found interface{} + for _, config := range []interface{}{bbDevConfig.N3000, bbDevConfig.ACC100, bbDevConfig.ACC200} { + if !isNil(config) && !isNil(found) { + return field.Forbidden( + field.NewPath("spec").Child("physicalFunction").Child("bbDevConfig"), + "specified bbDevConfig cannot contain multiple configurations") + } + found = config + } + return nil +} + func ambiguousBBDevConfigValidator(spec SriovFecClusterConfigSpec) (errs field.ErrorList) { - if spec.PhysicalFunction.BBDevConfig.N3000 != nil && spec.PhysicalFunction.BBDevConfig.ACC100 != nil { + if err := hasAmbiguousBBDevConfigs(spec.PhysicalFunction.BBDevConfig); err != nil { + errs = append(errs, err) + return + } + + if spec.PhysicalFunction.BBDevConfig.N3000 == nil && + spec.PhysicalFunction.BBDevConfig.ACC100 == nil && + spec.PhysicalFunction.BBDevConfig.ACC200 == nil { + err := field.Forbidden( field.NewPath("spec").Child("physicalFunction").Child("bbDevConfig"), - "specified bbDevConfig cannot contain acc100 and n3000 configuration in the same time") + "bbDevConfig section cannot be empty") errs = append(errs, err) + return } return } @@ -113,11 +139,31 @@ func acc100VfAmountValidator(spec SriovFecClusterConfigSpec) (errs field.ErrorLi return nil } - if vfAmount == 0 && accConfig.NumVfBundles != 0 { + if vfAmount != accConfig.NumVfBundles { return field.Invalid( path, accConfig.NumVfBundles, - "non zero value of numVfBundles cannot be accepted when physicalFunction.vfAmount equals 0") + "value should be the same as physicalFunction.vfAmount") + } + return nil + } + + if err := validate( + spec.PhysicalFunction.BBDevConfig.ACC100, + spec.PhysicalFunction.VFAmount, + field.NewPath("spec").Child("physicalFunction").Child("bbDevConfig", "acc100", "numVfBundles"), + ); err != nil { + errs = append(errs, err) + } + + return +} + +func acc200VfAmountValidator(spec SriovFecClusterConfigSpec) (errs field.ErrorList) { + + validate := func(accConfig *ACC200BBDevConfig, vfAmount int, path *field.Path) *field.Error { + if accConfig == nil { + return nil } if vfAmount != accConfig.NumVfBundles { @@ -130,9 +176,9 @@ func acc100VfAmountValidator(spec SriovFecClusterConfigSpec) (errs field.ErrorLi } if err := validate( - spec.PhysicalFunction.BBDevConfig.ACC100, + spec.PhysicalFunction.BBDevConfig.ACC200, spec.PhysicalFunction.VFAmount, - field.NewPath("spec").Child("physicalFunction").Child("bbDevConfig", "acc100", "numVfBundles"), + field.NewPath("spec").Child("physicalFunction").Child("bbDevConfig", "acc200", "numVfBundles"), ); err != nil { errs = append(errs, err) } @@ -168,3 +214,33 @@ func acc100NumQueueGroupsValidator(spec SriovFecClusterConfigSpec) (errs field.E return } + +func acc200NumQueueGroupsValidator(spec SriovFecClusterConfigSpec) (errs field.ErrorList) { + + validate := func(accConfig *ACC200BBDevConfig, path *field.Path) *field.Error { + if accConfig == nil { + return nil + } + + downlink4g := accConfig.Downlink4G.NumQueueGroups + uplink4g := accConfig.Uplink4G.NumQueueGroups + downlink5g := accConfig.Downlink5G.NumQueueGroups + uplink5g := accConfig.Uplink5G.NumQueueGroups + qfft := accConfig.QFFT.NumQueueGroups + + if sum := downlink5g + uplink5g + downlink4g + uplink4g + qfft; sum > acc200maxQueueGroups { + return field.Invalid( + field.NewPath("spec", "physicalFunction", "bbDevConfig", "acc100", "[downlink4G|uplink4G|downlink5G|uplink5G]", "numQueueGroups"), + sum, + fmt.Sprintf("sum of all numQueueGroups should not be greater than %d", acc200maxQueueGroups), + ) + } + return nil + } + + if err := validate(spec.PhysicalFunction.BBDevConfig.ACC200, field.NewPath("spec", "physicalFunction", "bbDevConfig", "acc100", "[downlink4G|uplink4G|downlink5G|uplink5G|qfft]", "numQueueGroups")); err != nil { + errs = append(errs, err) + } + + return +} diff --git a/api/v2/sriovfecnodeconfig_types.go b/api/v2/sriovfecnodeconfig_types.go index 12b6bee..a85158e 100644 --- a/api/v2/sriovfecnodeconfig_types.go +++ b/api/v2/sriovfecnodeconfig_types.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package v2 diff --git a/api/v2/webhook_suite_test.go b/api/v2/webhook_suite_test.go index 7943425..1ae06bb 100644 --- a/api/v2/webhook_suite_test.go +++ b/api/v2/webhook_suite_test.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package v2 @@ -57,15 +57,18 @@ var _ = Describe("Creation of SriovFecClusterConfig without n3000 bbdevconfig", _ = k8sClient.Delete(context.TODO(), &ccPrototype) }) - It("should be accepted", func() { + It("should be rejected", func() { cc := ccPrototype.DeepCopy() cc.Spec = SriovFecClusterConfigSpec{ PhysicalFunction: PhysicalFunctionConfig{ PFDriver: "pci-pf-stub", BBDevConfig: BBDevConfig{}, + VFAmount: 1, }, } - Expect(k8sClient.Create(context.TODO(), cc)).To(Succeed()) + Expect(k8sClient.Create(context.TODO(), cc)).To( + MatchError( + ContainSubstring("bbDevConfig section cannot be empty"))) }) }) @@ -79,6 +82,7 @@ var _ = Describe("Creation of SriovFecClusterConfig with bbdevconfig containing Spec: SriovFecClusterConfigSpec{ PhysicalFunction: PhysicalFunctionConfig{ PFDriver: "pci-pf-stub", + VFAmount: 16, BBDevConfig: BBDevConfig{ ACC100: &ACC100BBDevConfig{ NumVfBundles: 16, @@ -114,7 +118,7 @@ var _ = Describe("Creation of SriovFecClusterConfig with bbdevconfig containing Expect(k8sClient.Create(context.TODO(), &cc)).To( MatchError( - ContainSubstring("Forbidden: specified bbDevConfig cannot contain acc100 and n3000 configuration in the same time"))) + ContainSubstring("Forbidden: specified bbDevConfig cannot contain multiple configurations"))) }) }) var _ = Describe("Creation of SriovFecClusterConfig with n3000 bbdevconfig", func() { @@ -128,6 +132,7 @@ var _ = Describe("Creation of SriovFecClusterConfig with n3000 bbdevconfig", fun cc := ccPrototype.DeepCopy() cc.Spec.PhysicalFunction = PhysicalFunctionConfig{ PFDriver: "pci-pf-stub", + VFAmount: 1, BBDevConfig: BBDevConfig{ N3000: &N3000BBDevConfig{ NetworkType: "FPGA_LTE", @@ -151,6 +156,7 @@ var _ = Describe("Creation of SriovFecClusterConfig with n3000 bbdevconfig", fun cc := ccPrototype.DeepCopy() cc.Spec.PhysicalFunction = PhysicalFunctionConfig{ PFDriver: "pci-pf-stub", + VFAmount: 1, BBDevConfig: BBDevConfig{ N3000: &N3000BBDevConfig{ NetworkType: "FPGA_LTE", @@ -175,6 +181,7 @@ var _ = Describe("Creation of SriovFecClusterConfig with n3000 bbdevconfig", fun cc := ccPrototype.DeepCopy() cc.Spec.PhysicalFunction = PhysicalFunctionConfig{ PFDriver: "pci-pf-stub", + VFAmount: 1, BBDevConfig: BBDevConfig{ N3000: &N3000BBDevConfig{ NetworkType: "FPGA_LTE", @@ -200,6 +207,7 @@ var _ = Describe("Creation of SriovFecClusterConfig with acc100 bbdevconfig", fu cc := ccPrototype.DeepCopy() cc.Spec.PhysicalFunction = PhysicalFunctionConfig{ PFDriver: "pci-pf-stub", + VFAmount: 16, BBDevConfig: BBDevConfig{ ACC100: &ACC100BBDevConfig{ NumVfBundles: 16, @@ -270,34 +278,88 @@ var _ = Describe("Creation of SriovFecClusterConfig with acc100 bbdevconfig", fu To(MatchError(ContainSubstring("value should be the same as physicalFunction.vfAmount"))) }) }) +}) - When("fvAmount equals zero and bbDevConfig.acc100.numVfBundles is greater than zero", func() { +var _ = Describe("Creation of SriovFecClusterConfig with acc200 bbdevconfig", func() { + When("With total number of all specified numQueueGroups is greater than 16", func() { It("invalid spec should be rejected", func() { cc := ccPrototype.DeepCopy() cc.Spec.PhysicalFunction = PhysicalFunctionConfig{ PFDriver: "pci-pf-stub", - VFAmount: 0, + VFAmount: 16, BBDevConfig: BBDevConfig{ - ACC100: &ACC100BBDevConfig{ - NumVfBundles: 2, - MaxQueueSize: 1024, - Uplink4G: QueueGroupConfig{ - NumQueueGroups: 2, - NumAqsPerGroups: 16, - AqDepthLog2: 4, + ACC200: &ACC200BBDevConfig{ + ACC100BBDevConfig: ACC100BBDevConfig{ + NumVfBundles: 16, + MaxQueueSize: 1024, + Uplink4G: QueueGroupConfig{ + NumQueueGroups: 8, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, + Uplink5G: QueueGroupConfig{ + NumQueueGroups: 0, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, + Downlink4G: QueueGroupConfig{ + NumQueueGroups: 0, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, + Downlink5G: QueueGroupConfig{ + NumQueueGroups: 1, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, }, - Uplink5G: QueueGroupConfig{ - NumQueueGroups: 2, + QFFT: QueueGroupConfig{ + NumQueueGroups: 8, NumAqsPerGroups: 16, AqDepthLog2: 4, }, - Downlink4G: QueueGroupConfig{ - NumQueueGroups: 2, - NumAqsPerGroups: 16, - AqDepthLog2: 4, + }, + }, + } + Expect(k8sClient.Create(context.TODO(), cc)).To(MatchError(ContainSubstring("sum of all numQueueGroups should not be greater than 16"))) + Expect(k8sClient.Create(context.TODO(), cc)).ToNot(Succeed()) + }) + }) + + When("fvAmount != bbDevConfig.acc200.numVfBundles", func() { + It("invalid spec should be rejected", func() { + cc := ccPrototype.DeepCopy() + cc.Spec.PhysicalFunction = PhysicalFunctionConfig{ + PFDriver: "vfio-pci", + VFAmount: 2, + BBDevConfig: BBDevConfig{ + ACC200: &ACC200BBDevConfig{ + ACC100BBDevConfig: ACC100BBDevConfig{ + NumVfBundles: 16, + MaxQueueSize: 1024, + Uplink4G: QueueGroupConfig{ + NumQueueGroups: 2, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, + Uplink5G: QueueGroupConfig{ + NumQueueGroups: 2, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, + Downlink4G: QueueGroupConfig{ + NumQueueGroups: 2, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, + Downlink5G: QueueGroupConfig{ + NumQueueGroups: 2, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, }, - Downlink5G: QueueGroupConfig{ - NumQueueGroups: 2, + QFFT: QueueGroupConfig{ + NumQueueGroups: 0, NumAqsPerGroups: 16, AqDepthLog2: 4, }, @@ -306,9 +368,8 @@ var _ = Describe("Creation of SriovFecClusterConfig with acc100 bbdevconfig", fu } Expect(k8sClient.Create(context.TODO(), cc)). - To(MatchError(ContainSubstring("non zero value of numVfBundles cannot be accepted when physicalFunction.vfAmount equals 0"))) + To(MatchError(ContainSubstring("value should be the same as physicalFunction.vfAmount"))) }) - }) }) @@ -360,6 +421,7 @@ var _ = BeforeSuite(func() { //+kubebuilder:scaffold:webhook go func() { + defer GinkgoRecover() err = mgr.Start(ctx) if err != nil { Expect(err).NotTo(HaveOccurred()) diff --git a/api/v2/zz_generated.deepcopy.go b/api/v2/zz_generated.deepcopy.go index d737455..5fb3a23 100644 --- a/api/v2/zz_generated.deepcopy.go +++ b/api/v2/zz_generated.deepcopy.go @@ -2,7 +2,7 @@ // +build !ignore_autogenerated // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation // Code generated by controller-gen. DO NOT EDIT. @@ -32,6 +32,23 @@ func (in *ACC100BBDevConfig) DeepCopy() *ACC100BBDevConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ACC200BBDevConfig) DeepCopyInto(out *ACC200BBDevConfig) { + *out = *in + out.ACC100BBDevConfig = in.ACC100BBDevConfig + out.QFFT = in.QFFT +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ACC200BBDevConfig. +func (in *ACC200BBDevConfig) DeepCopy() *ACC200BBDevConfig { + if in == nil { + return nil + } + out := new(ACC200BBDevConfig) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *AcceleratorSelector) DeepCopyInto(out *AcceleratorSelector) { *out = *in @@ -60,6 +77,11 @@ func (in *BBDevConfig) DeepCopyInto(out *BBDevConfig) { *out = new(ACC100BBDevConfig) **out = **in } + if in.ACC200 != nil { + in, out := &in.ACC200, &out.ACC200 + *out = new(ACC200BBDevConfig) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BBDevConfig. diff --git a/assets/100-labeler.yaml b/assets/100-labeler.yaml index 0e18c73..0681d6d 100644 --- a/assets/100-labeler.yaml +++ b/assets/100-labeler.yaml @@ -28,6 +28,7 @@ data: "0d8f": "FPGA_5GNR", "5052": "FPGA_LTE", "0d5c": "ACC100", + "57c0": "ACC200", "0b32": "" }, "NodeLabel": "fpga.intel.com/intel-accelerator-present" diff --git a/assets/200-device-plugin.yaml b/assets/200-device-plugin.yaml index 7785745..64d5374 100644 --- a/assets/200-device-plugin.yaml +++ b/assets/200-device-plugin.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation apiVersion: v1 kind: ConfigMap @@ -80,7 +80,16 @@ data: "devices": ["0d5d"], "drivers": ["pci-pf-stub", "vfio-pci"] } + }, + { + "resourceName": "intel_fec_acc200", + "deviceType": "accelerator", + "selectors": { + "vendors": ["8086"], + "devices": ["57c1"], + "drivers": ["pci-pf-stub", "vfio-pci"] } + } ] } daemonSet: | diff --git a/assets/300-daemon.yaml b/assets/300-daemon.yaml index ac281ae..b2cc28d 100644 --- a/assets/300-daemon.yaml +++ b/assets/300-daemon.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation apiVersion: v1 kind: ConfigMap @@ -103,7 +103,7 @@ data: namespace: {{ .SRIOV_FEC_NAMESPACE }} type: Opaque stringData: - VFIO_TOKEN: 02bddbbf-bbb0-4d79-886b-91bad3fbb510 + VFIO_TOKEN: {{ .SRIOV_FEC_VFIO_TOKEN }} immutable: true daemonSet: | apiVersion: apps/v1 diff --git a/cmd/daemon/main.go b/cmd/daemon/main.go index af48f02..2e26bef 100644 --- a/cmd/daemon/main.go +++ b/cmd/daemon/main.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package main @@ -40,17 +40,8 @@ func main() { ctrl.SetLogger(logr.New(utils.NewLogWrapper())) - nodeName := os.Getenv("NODENAME") - if nodeName == "" { - setupLog.Error("NODENAME environment variable is empty") - os.Exit(1) - } - - ns := os.Getenv("SRIOV_FEC_NAMESPACE") - if ns == "" { - setupLog.Error("SRIOV_FEC_NAMESPACE environment variable is empty") - os.Exit(1) - } + nodeName := getNodeNameFromEnvOrDie() + ns := getSriovFecNameSpaceFromEnvOrDie() config := ctrl.GetConfigOrDie() directClient, err := client.New(config, client.Options{Scheme: scheme}) @@ -110,3 +101,21 @@ func main() { os.Exit(1) } } + +func getSriovFecNameSpaceFromEnvOrDie() string { + ns := os.Getenv("SRIOV_FEC_NAMESPACE") + if ns == "" { + setupLog.Error("SRIOV_FEC_NAMESPACE environment variable is empty") + os.Exit(1) + } + return ns +} + +func getNodeNameFromEnvOrDie() string { + nodeName := os.Getenv("NODENAME") + if nodeName == "" { + setupLog.Error("NODENAME environment variable is empty") + os.Exit(1) + } + return nodeName +} diff --git a/cmd/labeler/main.go b/cmd/labeler/main.go index 0ed1598..959e831 100644 --- a/cmd/labeler/main.go +++ b/cmd/labeler/main.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package main diff --git a/cmd/labeler/main_test.go b/cmd/labeler/main_test.go index d1a5178..7e43247 100644 --- a/cmd/labeler/main_test.go +++ b/cmd/labeler/main_test.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package main diff --git a/config/certmanager/certificate.yaml b/config/certmanager/certificate.yaml index 71411f3..db5fb88 100644 --- a/config/certmanager/certificate.yaml +++ b/config/certmanager/certificate.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation # The following manifests contain a self-signed issuer CR and a certificate CR. # More document can be found at https://docs.cert-manager.io diff --git a/config/crd/kustomizeconfig.yaml b/config/crd/kustomizeconfig.yaml index fe75a32..4ba0017 100644 --- a/config/crd/kustomizeconfig.yaml +++ b/config/crd/kustomizeconfig.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation # This file is for teaching kustomize how to substitute name and namespace reference in CRD nameReference: diff --git a/config/crd/patches/cainjection_in_sriovfecclusterconfigs.yaml b/config/crd/patches/cainjection_in_sriovfecclusterconfigs.yaml index 98ae115..77af23a 100644 --- a/config/crd/patches/cainjection_in_sriovfecclusterconfigs.yaml +++ b/config/crd/patches/cainjection_in_sriovfecclusterconfigs.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation # The following patch adds a directive for certmanager to inject CA into the CRD apiVersion: apiextensions.k8s.io/v1 diff --git a/config/crd/patches/cainjection_in_sriovfecnodeconfigs.yaml b/config/crd/patches/cainjection_in_sriovfecnodeconfigs.yaml index 234170a..9a3c103 100644 --- a/config/crd/patches/cainjection_in_sriovfecnodeconfigs.yaml +++ b/config/crd/patches/cainjection_in_sriovfecnodeconfigs.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation # The following patch adds a directive for certmanager to inject CA into the CRD apiVersion: apiextensions.k8s.io/v1 diff --git a/config/crd/patches/webhook_in_sriovfecclusterconfigs.yaml b/config/crd/patches/webhook_in_sriovfecclusterconfigs.yaml index 4e74803..b61e9f2 100644 --- a/config/crd/patches/webhook_in_sriovfecclusterconfigs.yaml +++ b/config/crd/patches/webhook_in_sriovfecclusterconfigs.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation # The following patch enables a conversion webhook for the CRD apiVersion: apiextensions.k8s.io/v1 diff --git a/config/crd/patches/webhook_in_sriovfecnodeconfigs.yaml b/config/crd/patches/webhook_in_sriovfecnodeconfigs.yaml index 123f654..1ea09f6 100644 --- a/config/crd/patches/webhook_in_sriovfecnodeconfigs.yaml +++ b/config/crd/patches/webhook_in_sriovfecnodeconfigs.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation # The following patch enables a conversion webhook for the CRD apiVersion: apiextensions.k8s.io/v1 diff --git a/config/default/kustomization.yaml b/config/default/kustomization.yaml index 7faf97d..48662b8 100644 --- a/config/default/kustomization.yaml +++ b/config/default/kustomization.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation # Adds namespace to all resources. namespace: sriov-fec-system diff --git a/config/default/manager_auth_proxy_patch.yaml b/config/default/manager_auth_proxy_patch.yaml index fe6fb1f..3b5f521 100644 --- a/config/default/manager_auth_proxy_patch.yaml +++ b/config/default/manager_auth_proxy_patch.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation # This patch inject a sidecar container which is a HTTP proxy for the # controller manager, it performs RBAC authorization against the Kubernetes API using SubjectAccessReviews. diff --git a/config/manager/kustomization.yaml b/config/manager/kustomization.yaml index f0f3f7d..fc10d93 100644 --- a/config/manager/kustomization.yaml +++ b/config/manager/kustomization.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation resources: - manager.yaml diff --git a/config/manager/manager.yaml b/config/manager/manager.yaml index 3dea173..736cc1b 100644 --- a/config/manager/manager.yaml +++ b/config/manager/manager.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation apiVersion: v1 kind: Namespace diff --git a/config/manifests/bases/sriov-fec.clusterserviceversion.yaml b/config/manifests/bases/sriov-fec.clusterserviceversion.yaml index a4dcdb0..d586b0a 100644 --- a/config/manifests/bases/sriov-fec.clusterserviceversion.yaml +++ b/config/manifests/bases/sriov-fec.clusterserviceversion.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: @@ -171,5 +171,5 @@ spec: provider: name: Intel Corporation url: https://builders.intel.com/docs/networkbuilders/intel-vran-dedicated-accelerator-acc100-product-brief.pdf - replaces: sriov-fec.v2.3.0 + replaces: sriov-fec.v2.4.0 version: 0.0.0 diff --git a/config/rbac/auth_proxy_client_clusterrole.yaml b/config/rbac/auth_proxy_client_clusterrole.yaml index b3213db..1f02cc3 100644 --- a/config/rbac/auth_proxy_client_clusterrole.yaml +++ b/config/rbac/auth_proxy_client_clusterrole.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole diff --git a/config/rbac/leader_election_role.yaml b/config/rbac/leader_election_role.yaml index 87a5172..2a12d08 100644 --- a/config/rbac/leader_election_role.yaml +++ b/config/rbac/leader_election_role.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation # permissions to do leader election. apiVersion: rbac.authorization.k8s.io/v1 diff --git a/config/rbac/role.yaml b/config/rbac/role.yaml index 6e95d8f..0c918f0 100644 --- a/config/rbac/role.yaml +++ b/config/rbac/role.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole diff --git a/config/scorecard/patches/basic.config.yaml b/config/scorecard/patches/basic.config.yaml index 9af19d1..e55d58b 100644 --- a/config/scorecard/patches/basic.config.yaml +++ b/config/scorecard/patches/basic.config.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation - op: add path: /stages/0/tests/- diff --git a/config/scorecard/patches/olm.config.yaml b/config/scorecard/patches/olm.config.yaml index 43a5123..5b245b0 100644 --- a/config/scorecard/patches/olm.config.yaml +++ b/config/scorecard/patches/olm.config.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation - op: add path: /stages/0/tests/- diff --git a/config/webhook/manifests.yaml b/config/webhook/manifests.yaml index 7d52ad5..626526d 100644 --- a/config/webhook/manifests.yaml +++ b/config/webhook/manifests.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation --- apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingWebhookConfiguration diff --git a/controllers/sriovfecclusterconfig_controller.go b/controllers/sriovfecclusterconfig_controller.go index 7b01e78..7e8e818 100644 --- a/controllers/sriovfecclusterconfig_controller.go +++ b/controllers/sriovfecclusterconfig_controller.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation /* @@ -29,7 +29,6 @@ import ( "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/util/retry" "os" @@ -46,8 +45,7 @@ var NAMESPACE = os.Getenv("SRIOV_FEC_NAMESPACE") // SriovFecClusterConfigReconciler reconciles a SriovFecClusterConfig object type SriovFecClusterConfigReconciler struct { client.Client - Log *logrus.Logger - Scheme *runtime.Scheme + Log *logrus.Logger } // +kubebuilder:rbac:groups=sriovfec.intel.com,resources=sriovfecclusterconfigs,verbs=get;list;watch;create;update;patch;delete diff --git a/controllers/sriovfecclusterconfig_controller_test.go b/controllers/sriovfecclusterconfig_controller_test.go index 526ef88..7112c37 100644 --- a/controllers/sriovfecclusterconfig_controller_test.go +++ b/controllers/sriovfecclusterconfig_controller_test.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation /* @@ -40,7 +40,6 @@ import ( corev1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" - "k8s.io/client-go/kubernetes/scheme" ctrl "sigs.k8s.io/controller-runtime" ) @@ -159,7 +158,7 @@ var _ = Describe("SriovControllerTest", func() { } reconcile := func(ccName string) *SriovFecClusterConfigReconciler { - reconciler := SriovFecClusterConfigReconciler{k8sClient, log, scheme.Scheme} + reconciler := SriovFecClusterConfigReconciler{k8sClient, log} _, err := reconciler.Reconcile(context.TODO(), createDummyReconcileRequest(ccName)) Expect(err).ToNot(HaveOccurred()) return &reconciler @@ -201,6 +200,7 @@ var _ = Describe("SriovControllerTest", func() { } cc.Spec.PhysicalFunction = sriovv2.PhysicalFunctionConfig{ PFDriver: "pci-pf-stub", + VFAmount: 1, } }) @@ -243,6 +243,7 @@ var _ = Describe("SriovControllerTest", func() { } cc.Spec.PhysicalFunction = sriovv2.PhysicalFunctionConfig{ PFDriver: "pci-pf-stub", + VFAmount: 1, } }) @@ -406,16 +407,18 @@ var _ = Describe("SriovControllerTest", func() { cc.Spec.AcceleratorSelector = sriovv2.AcceleratorSelector{DeviceID: "id1"} cc.Spec.PhysicalFunction = sriovv2.PhysicalFunctionConfig{ PFDriver: "pci-pf-stub", + VFAmount: 1, } }) _ = createAcceleratorConfig("cc2", func(cc *sriovv2.SriovFecClusterConfig) { cc.Spec.AcceleratorSelector = sriovv2.AcceleratorSelector{DeviceID: "id2"} cc.Spec.PhysicalFunction = sriovv2.PhysicalFunctionConfig{ PFDriver: "igb_uio", + VFAmount: 1, } }) - reconciler := SriovFecClusterConfigReconciler{k8sClient, log, scheme.Scheme} + reconciler := SriovFecClusterConfigReconciler{k8sClient, log} _, err := reconciler.Reconcile(context.TODO(), createDummyReconcileRequest("cc1")) Expect(err).ToNot(HaveOccurred()) @@ -623,7 +626,7 @@ var _ = Describe("SriovControllerTest", func() { } }) - reconciler := SriovFecClusterConfigReconciler{k8sClient, log, scheme.Scheme} + reconciler := SriovFecClusterConfigReconciler{k8sClient, log} _, err := reconciler.Reconcile(context.TODO(), createDummyReconcileRequest("cc")) Expect(err).ToNot(HaveOccurred()) @@ -659,7 +662,7 @@ var _ = Describe("SriovControllerTest", func() { } }) - reconciler := SriovFecClusterConfigReconciler{k8sClient, log, scheme.Scheme} + reconciler := SriovFecClusterConfigReconciler{k8sClient, log} _, err := reconciler.Reconcile(context.TODO(), createDummyReconcileRequest("config")) Expect(err).ToNot(HaveOccurred()) @@ -714,7 +717,7 @@ var _ = Describe("SriovControllerTest", func() { } }) - reconciler := SriovFecClusterConfigReconciler{k8sClient, log, scheme.Scheme} + reconciler := SriovFecClusterConfigReconciler{k8sClient, log} _, err := reconciler.Reconcile(context.TODO(), createDummyReconcileRequest("config")) Expect(err).ToNot(HaveOccurred()) @@ -763,7 +766,7 @@ var _ = Describe("SriovControllerTest", func() { cc.Spec.DrainSkip = true }) - reconciler := SriovFecClusterConfigReconciler{k8sClient, log, scheme.Scheme} + reconciler := SriovFecClusterConfigReconciler{k8sClient, log} _, err := reconciler.Reconcile(context.TODO(), createDummyReconcileRequest("config")) Expect(err).ToNot(HaveOccurred()) @@ -782,7 +785,7 @@ var _ = Describe("SriovControllerTest", func() { cc.Namespace = v1.NamespaceSystem Expect(k8sClient.Create(context.TODO(), cc)).ToNot(HaveOccurred()) - reconciler := SriovFecClusterConfigReconciler{k8sClient, log, scheme.Scheme} + reconciler := SriovFecClusterConfigReconciler{k8sClient, log} _, err := reconciler.Reconcile(context.TODO(), createDummyReconcileRequest(clusterConfigPrototype.Name)) Expect(err).ToNot(HaveOccurred()) diff --git a/controllers/suite_test.go b/controllers/suite_test.go index bc91697..176ae5d 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation /* diff --git a/copyright.sh b/copyright.sh index 4ddb007..b0c539c 100755 --- a/copyright.sh +++ b/copyright.sh @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation #!/bin/bash diff --git a/gather_sriovfec_logs.sh b/gather_sriovfec_logs.sh new file mode 100755 index 0000000..cccfcad --- /dev/null +++ b/gather_sriovfec_logs.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +K8S_BIN="${1:-oc}" +NAMESPACE="${2:-vran-acceleration-operators}" +CLUSTER_CONFIG="sfcc" +NODE_CONFIG="sfnc" +DIR=sriov-fec-$(hostname)-$(date) + +mkdir -p "${DIR}" +cd "${DIR}" || exit + +"${K8S_BIN}" version > "${K8S_BIN}"_version +"${K8S_BIN}" get csv -n "${NAMESPACE}" > csv_in_namespace + +# nodes +echo "Getting information about nodes" +"${K8S_BIN}" get nodes -o wide -n "${NAMESPACE}" > nodes_in_namespace +mkdir -p nodes +nodes=$("${K8S_BIN}" get nodes -o custom-columns=NAME:.metadata.name --no-headers=true) +# shellcheck disable=SC2068 +for node in ${nodes[@]}; do + "${K8S_BIN}" describe node "${node}" > nodes/"${node}" + "${K8S_BIN}" get node "${node}" -o yaml > nodes/"${node}".yaml +done + +# pods +echo "Getting information about pods in ${NAMESPACE}" +"${K8S_BIN}" get all -n "${NAMESPACE}" -o wide > resources_in_namespace +mkdir -p pods +pods=$("${K8S_BIN}" -n "${NAMESPACE}" get pods -o custom-columns=NAME:.metadata.name --no-headers=true) +# shellcheck disable=SC2068 +for pod in ${pods[@]}; do + "${K8S_BIN}" -n "${NAMESPACE}" logs --all-containers=true "${pod}" > pods/"${pod}".log + "${K8S_BIN}" -n "${NAMESPACE}" get pod "${pod}" -o yaml > pods/"${pod}".yaml +done + +# ClusterConfig +echo "Getting information about ClusterConfigs in ${NAMESPACE}" +mkdir -p clusterConfigs +"${K8S_BIN}" get "${CLUSTER_CONFIG}" -n "${NAMESPACE}" > cluster_configs_in_namespace +clusterConfigs=$("${K8S_BIN}" -n "${NAMESPACE}" get "${CLUSTER_CONFIG}" --ignore-not-found=true -o custom-columns=NAME:.metadata.name --no-headers=true) +# shellcheck disable=SC2068 +for clusterConfig in ${clusterConfigs[@]}; do + "${K8S_BIN}" -n "${NAMESPACE}" describe "${CLUSTER_CONFIG}" "${clusterConfig}" > clusterConfigs/"${clusterConfig}" + "${K8S_BIN}" -n "${NAMESPACE}" get "${CLUSTER_CONFIG}" "${clusterConfig}" -o yaml > clusterConfigs/"${clusterConfig}".yaml +done + +# NodeConfig +echo "Getting information about NodeConfigs in ${NAMESPACE}" +mkdir -p nodeConfigs +"${K8S_BIN}" get "${NODE_CONFIG}" -n "${NAMESPACE}" > node_configs_in_namespace +nodeConfigs=$("${K8S_BIN}" -n "${NAMESPACE}" get "${NODE_CONFIG}" --ignore-not-found=true -o custom-columns=NAME:.metadata.name --no-headers=true) +# shellcheck disable=SC2068 +for nodeConfig in ${nodeConfigs[@]}; do + "${K8S_BIN}" -n "${NAMESPACE}" describe "${NODE_CONFIG}" "${nodeConfig}" > nodeConfigs/"${nodeConfig}" + "${K8S_BIN}" -n "${NAMESPACE}" get "${NODE_CONFIG}" "${nodeConfig}" -o yaml > nodeConfigs/"${nodeConfig}".yaml +done + +# system configuration logs +echo "Getting information about system configurations in ${NAMESPACE}" +mkdir -p systemLogs +pods=$("${K8S_BIN}" -n "${NAMESPACE}" get pods -o custom-columns=NAME:.metadata.name --no-headers=true | grep sriov-fec-daemonset) +# shellcheck disable=SC2068 +for pod in ${pods[@]}; do + nodeName=$("${K8S_BIN}" -n "${NAMESPACE}" get pod "${pod}" -o custom-columns=NODE:.spec.nodeName --no-headers=true) + "${K8S_BIN}" -n "${NAMESPACE}" exec -it "${pod}" -- bash -c "chroot /host dmesg" > systemLogs/dmesg-"${nodeName}".log + "${K8S_BIN}" -n "${NAMESPACE}" exec -it "${pod}" -- bash -c "chroot /host lspci -vvv" > systemLogs/lspci-"${nodeName}".log +done + +cd ../ +tar -zcvf sriov-fec.logs.tar.gz "${DIR}" +echo "Please attach 'sriov-fec.logs.tar.gz' to bug report. If you had to apply some configs and deleted them to reproduce issue, attach them as well." diff --git a/go.mod b/go.mod index 9277d63..e28ae73 100644 --- a/go.mod +++ b/go.mod @@ -3,20 +3,24 @@ module github.com/smart-edge-open/sriov-fec-operator go 1.18 require ( + github.com/go-logr/logr v1.2.3 github.com/google/gofuzz v1.2.0 - github.com/google/uuid v1.1.2 + github.com/google/uuid v1.3.0 github.com/jaypipes/ghw v0.8.0 + github.com/jaypipes/pcidb v0.6.0 github.com/k8snetworkplumbingwg/sriov-network-device-plugin v3.0.0+incompatible github.com/onsi/ginkgo v1.16.5 - github.com/onsi/gomega v1.17.0 + github.com/onsi/gomega v1.20.0 github.com/openshift/api v3.9.0+incompatible github.com/pkg/errors v0.9.1 - github.com/sirupsen/logrus v1.8.1 - gopkg.in/ini.v1 v1.63.2 - k8s.io/api v0.23.4 - k8s.io/apimachinery v0.23.4 - k8s.io/client-go v0.23.4 - sigs.k8s.io/controller-runtime v0.11.0 + github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.58.0 + github.com/sirupsen/logrus v1.9.0 + gopkg.in/ini.v1 v1.67.0 + k8s.io/api v0.24.3 + k8s.io/apimachinery v0.24.3 + k8s.io/client-go v0.24.3 + k8s.io/kubectl v0.24.3 + sigs.k8s.io/controller-runtime v0.12.3 ) require ( @@ -27,14 +31,15 @@ require ( github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cespare/xxhash/v2 v2.1.1 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/emicklei/go-restful v2.16.0+incompatible // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/ghodss/yaml v1.0.0 // indirect github.com/go-errors/errors v1.0.1 // indirect - github.com/go-logr/logr v1.2.0 github.com/go-ole/go-ole v1.2.4 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.19.5 // indirect @@ -43,13 +48,12 @@ require ( github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/google/btree v1.0.1 // indirect - github.com/google/go-cmp v0.5.5 // indirect + github.com/google/gnostic v0.5.7-v3refs // indirect + github.com/google/go-cmp v0.5.8 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect - github.com/googleapis/gnostic v0.5.5 // indirect github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect github.com/imdario/mergo v0.3.12 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect - github.com/jaypipes/pcidb v0.6.0 github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect @@ -58,52 +62,47 @@ require ( github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-wordwrap v1.0.0 // indirect github.com/moby/spdystream v0.2.0 // indirect - github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 // indirect + github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect + github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/nxadm/tail v1.4.8 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.49.0 - github.com/prometheus/client_golang v1.11.1 // indirect + github.com/prometheus/client_golang v1.12.1 // indirect github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.28.0 // indirect - github.com/prometheus/procfs v0.6.0 // indirect + github.com/prometheus/common v0.32.1 // indirect + github.com/prometheus/procfs v0.7.3 // indirect github.com/russross/blackfriday v1.5.2 // indirect - github.com/spf13/cobra v1.2.1 // indirect + github.com/spf13/cobra v1.4.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/stretchr/testify v1.7.0 // indirect - github.com/vishvananda/netlink v1.1.0 // indirect - github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df // indirect github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca // indirect go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect - golang.org/x/net v0.0.0-20211209124913-491a49abca63 // indirect - golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f // indirect - golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8 // indirect - golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b // indirect + golang.org/x/net v0.0.0-20220708220712-1185a9018129 // indirect + golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 // indirect + golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect golang.org/x/text v0.3.7 // indirect - golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect + golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/protobuf v1.27.1 // indirect + google.golang.org/protobuf v1.28.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect howett.net/plist v0.0.0-20181124034731-591f970eefbb // indirect - k8s.io/apiextensions-apiserver v0.23.0 // indirect - k8s.io/cli-runtime v0.23.2 // indirect - k8s.io/component-base v0.23.0 // indirect - k8s.io/klog/v2 v2.30.0 // indirect - k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 // indirect - k8s.io/kubectl v0.22.3 - k8s.io/utils v0.0.0-20211116205334-6203023598ed // indirect - sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 // indirect - sigs.k8s.io/kustomize/api v0.10.1 // indirect - sigs.k8s.io/kustomize/kyaml v0.13.0 // indirect + k8s.io/apiextensions-apiserver v0.24.3 // indirect + k8s.io/cli-runtime v0.24.3 // indirect + k8s.io/component-base v0.24.3 // indirect + k8s.io/klog/v2 v2.70.1 // indirect + k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 // indirect + k8s.io/utils v0.0.0-20220713171938-56c0de1e6f5e // indirect + sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect + sigs.k8s.io/kustomize/api v0.11.4 // indirect + sigs.k8s.io/kustomize/kyaml v0.13.6 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.2.1 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) - -replace github.com/k8snetworkplumbingwg/sriov-network-device-plugin => github.com/openshift/sriov-network-device-plugin v0.0.0-20210719073155-2acaea488d32 //4.9 diff --git a/go.sum b/go.sum index f2c77d0..a06bcf9 100644 --- a/go.sum +++ b/go.sum @@ -38,55 +38,40 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= -github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= -github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= -github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= -github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= 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/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU= github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= -github.com/Mellanox/rdmamap v1.0.0/go.mod h1:fN+/V9lf10ABnDCwTaXRjeeWijLt2iVLETnK+sx/LY8= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +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-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -97,15 +82,15 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= -github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= +github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 h1:7aWHqerlJ41y6FOsEUvknqgXnGmJyJSbjhAWq5pO4F8= github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -115,27 +100,18 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= -github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -145,19 +121,16 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.10.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.16.0+incompatible h1:rgqiKNjTnFQA6kkhFe16D8epTksy9HQ1MyrbDXSdYhM= +github.com/emicklei/go-restful v2.16.0+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -167,7 +140,6 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m 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 v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= 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= @@ -185,11 +157,8 @@ github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5 github.com/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= github.com/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= -github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -203,62 +172,22 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v1.2.0 h1:QK40JKJyMdUDz+h+xvCsru/bJhvG0UxvePV0ufL/AcE= github.com/go-logr/logr v1.2.0/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/zapr v1.2.0 h1:n4JnPI1T3Qq1SFEi/F8rwLrZERp2bso19PJZDB9dayk= github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI= github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= -github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= -github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= -github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= -github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= 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/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= -github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.19.5 h1:1WJP/wi4OjB4iV8KVbH73rQaoialJrqv8gitZLxGLtM= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= -github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= -github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= -github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= -github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= -github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= -github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= -github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= -github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= -github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng= github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= -github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -269,7 +198,6 @@ github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -284,7 +212,6 @@ github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -308,8 +235,10 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/cel-go v0.9.0/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= +github.com/google/cel-go v0.10.1/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w= github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA= +github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= +github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -320,8 +249,9 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= @@ -343,32 +273,22 @@ github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLe github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= -github.com/googleapis/gnostic v0.5.5 h1:9fHAtK0uDfpveeqqo1hkEZJcFvYXAiCN3UutL8F9xHw= -github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= @@ -398,10 +318,8 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jaypipes/ghw v0.6.0/go.mod h1:QOXppNRCLGYR1H+hu09FxZPqjNt09bqUZUnOL3Rcero= github.com/jaypipes/ghw v0.8.0 h1:02q1pTm9CD83vuhBsEZZhOCS128pq87uyaQeJZkp3sQ= github.com/jaypipes/ghw v0.8.0/go.mod h1:+gR9bjm3W/HnFi90liF+Fj9GpCe/Dsibl9Im8KmC7c4= -github.com/jaypipes/pcidb v0.5.0/go.mod h1:L2RGk04sfRhp5wvHO0gfRAMoLY/F3PKv/nwJeVoho0o= github.com/jaypipes/pcidb v0.6.0 h1:VIM7GKVaW4qba30cvB67xSCgJPTzkG8Kzw/cbs5PHWU= github.com/jaypipes/pcidb v0.6.0/go.mod h1:L2RGk04sfRhp5wvHO0gfRAMoLY/F3PKv/nwJeVoho0o= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= @@ -411,8 +329,6 @@ github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8Hm github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= @@ -422,7 +338,8 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.1.1-0.20201119153432-9d213757d22d/go.mod h1:+1DpV8uIwteAhxNO0lgRox8gHkTG6w3OeDfAlg+qqjA= +github.com/k8snetworkplumbingwg/sriov-network-device-plugin v3.0.0+incompatible h1:9W/Hegetr0iBlRHhH2PbgLj0BdCNqj8SSRv/XWwEH7Y= +github.com/k8snetworkplumbingwg/sriov-network-device-plugin v3.0.0+incompatible/go.mod h1:aUGoUFXUpTj4KfF+UA3agYgUMEoMNvKliDWUymr2QJA= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -434,19 +351,14 @@ 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/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0= github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= @@ -454,8 +366,6 @@ github.com/mailru/easyjson v0.7.6 h1:8yTIVnZgCoiM1TgqoeTl+LfU5Jg6/xL3QhGQnimLYnA github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= @@ -475,8 +385,8 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= -github.com/moby/term v0.0.0-20210610120745-9d4ed1856297 h1:yH0SvLzcbZxcJXho2yh7CqdENGMQe73Cw3woZBpPli0= -github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -487,6 +397,7 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -497,32 +408,24 @@ github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.4 h1:GNapqRSid3zijZ9H77KrgVG4/8KqiyRsxcSxe+7ApXY= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0 h1:9Luw4uT5HTjHTN8+aNcSThgH1vdXnmdJ8xIfZ4wyTRE= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/openshift/api v3.9.0+incompatible h1:fJ/KsefYuZAjmrr3+5U9yZIZbTOpVkDDLDLFresAeYs= github.com/openshift/api v3.9.0+incompatible/go.mod h1:dh9o4Fs58gpFXGSYfnVxGR9PnV53I8TW84pQaJDdGiY= -github.com/openshift/sriov-network-device-plugin v0.0.0-20210719073155-2acaea488d32 h1:Af105l8/FcUIXNntPvakUPkmxtvYWC3WCrk0OALrFdM= -github.com/openshift/sriov-network-device-plugin v0.0.0-20210719073155-2acaea488d32/go.mod h1:7pf6W82kvMJAPmPhP7MtdgEZzO2PgrGEaaZBDUl9EOs= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= @@ -536,15 +439,15 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.49.0 h1:caQO65I0GsYqrQsbZkIA7T941XVq2N6n3z2jIUPuzdo= -github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.49.0/go.mod h1:3WYi4xqXxGGXWDdQIITnLNmuDzO5n6wYva9spVhR4fg= +github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.58.0 h1:XbMkJLwj8FN43TzowJYFmEQQxLSudQim5XVXRCl9eDI= +github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring v0.58.0/go.mod h1:EcGdEPiQdQOZL4ABiv5alt8lhWDo+eIAsgT1pJDN9gM= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.11.1 h1:+4eQaD7vAZ6DsfsxB15hbE0odUjGI5ARs9yskGu1v4s= -github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -555,14 +458,15 @@ github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.28.0 h1:vGVfV9KrDTvWt5boZO0I19g2E3CsWfpPPKZM9dt3mEw= -github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= @@ -570,9 +474,9 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= @@ -580,8 +484,9 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -593,21 +498,17 @@ github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= -github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= +github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= @@ -623,42 +524,29 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= -github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df h1:OviZH7qLw/7ZovXvuNyL3XQl8UFofeikI1NW1Gypu7k= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca h1:1CFlNzQhALwjS9mBAUkycX616GzgsuYUOCHA5+HSlXI= github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 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.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= +go.etcd.io/etcd/client/v3 v3.5.1/go.mod h1:OnjH4M8OnAotwaB2l9bVgZzRFKru7/ZMoS46OtKyd3Q= go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -680,14 +568,11 @@ go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16g go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= @@ -695,24 +580,17 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 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= @@ -748,11 +626,10 @@ 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/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= 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-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -760,19 +637,15 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -797,13 +670,13 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY= -golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +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-20220708220712-1185a9018129 h1:vucSRfWwTsoXro7P+3Cjlr6flUMtzCwzlvkxEQtHHB0= +golang.org/x/net v0.0.0-20220708220712-1185a9018129/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 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= @@ -817,8 +690,8 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f h1:Qmd2pbz05z7z6lm0DrgQVVPuBm92jqujBKMHMOlOQEw= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -830,7 +703,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/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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= @@ -838,26 +710,19 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -879,7 +744,6 @@ golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -901,16 +765,16 @@ golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8 h1:M69LAlWZCshgp0QSzyDcSsSIejIEeuaCVpmwcKwyLMk= -golang.org/x/sys v0.0.0-20211029165221-6e7872819dc8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/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-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 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= @@ -921,19 +785,16 @@ 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 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 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= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -943,15 +804,11 @@ golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190930201159-7c411dea38b0/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -992,11 +849,10 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM= +golang.org/x/tools v0.1.10-0.20220218145154-897bd77cd717/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.2.0 h1:4pT439QV83L+G9FkcCriY6EkpcK6r6bK+A5FBUMI7qY= gomodules.xyz/jsonpatch/v2 v2.2.0/go.mod h1:WXp+iVDkoLQqPudfQ9GBlwB2eZ5DKOnjQZCYdOS8GPY= @@ -1075,18 +931,16 @@ google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= @@ -1112,23 +966,23 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= 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 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.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= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.63.2 h1:tGK/CyBg7SMzb60vP1M03vNZ3VDu3wGQJwn7Sxi9r3c= -gopkg.in/ini.v1 v1.63.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= @@ -1146,10 +1000,9 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= @@ -1162,96 +1015,57 @@ 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.18.1/go.mod h1:3My4jorQWzSs5a+l7Ge6JBbIxChLnY8HnuT58ZWolss= -k8s.io/api v0.18.3/go.mod h1:UOaMwERbqJMfeeeHc8XJKawj4P9TgDRnViIqqBeH2QA= -k8s.io/api v0.22.3/go.mod h1:azgiXFiXqiWyLCfI62/eYBOu19rj2LKmIhFPP4+33fs= -k8s.io/api v0.23.0/go.mod h1:8wmDdLBHBNxtOIytwLstXt5E9PddnZb0GaMcqsvDBpg= -k8s.io/api v0.23.2/go.mod h1:sYuDb3flCtRPI8ghn6qFrcK5ZBu2mhbElxRE95qpwlI= -k8s.io/api v0.23.4 h1:85gnfXQOWbJa1SiWGpE9EEtHs0UVvDyIsSMpEtl2D4E= -k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= -k8s.io/apiextensions-apiserver v0.18.3/go.mod h1:TMsNGs7DYpMXd+8MOCX8KzPOCx8fnZMoIGB24m03+JE= -k8s.io/apiextensions-apiserver v0.23.0 h1:uii8BYmHYiT2ZTAJxmvc3X8UhNYMxl2A0z0Xq3Pm+WY= -k8s.io/apiextensions-apiserver v0.23.0/go.mod h1:xIFAEEDlAZgpVBl/1VSjGDmLoXAWRG40+GsWhKhAxY4= -k8s.io/apimachinery v0.18.1/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= -k8s.io/apimachinery v0.18.3/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= -k8s.io/apimachinery v0.22.3/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= -k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc= -k8s.io/apimachinery v0.23.2/go.mod h1:zDqeV0AK62LbCI0CI7KbWCAYdLg+E+8UXJ0rIz5gmS8= -k8s.io/apimachinery v0.23.4 h1:fhnuMd/xUL3Cjfl64j5ULKZ1/J9n8NuQEgNL+WXWfdM= -k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= -k8s.io/apiserver v0.18.3/go.mod h1:tHQRmthRPLUtwqsOnJJMoI8SW3lnoReZeE861lH8vUw= -k8s.io/apiserver v0.23.0/go.mod h1:Cec35u/9zAepDPPFyT+UMrgqOCjgJ5qtfVJDxjZYmt4= -k8s.io/cli-runtime v0.22.3/go.mod h1:um6JvCxV9Hrhq0zCUxcqYoY7/wF64g6IYgOViI8sg6Q= -k8s.io/cli-runtime v0.23.2 h1:4zOZX78mFSakwe4gef81XDBu94Yu0th6bfveTOx8ZQk= -k8s.io/cli-runtime v0.23.2/go.mod h1:Ag70akCDvwux4HxY+nH2J3UqE2e6iwSSdG1HE6p1VTU= -k8s.io/client-go v0.18.3/go.mod h1:4a/dpQEvzAhT1BbuWW09qvIaGw6Gbu1gZYiQZIi1DMw= -k8s.io/client-go v0.22.3/go.mod h1:ElDjYf8gvZsKDYexmsmnMQ0DYO8W9RwBjfQ1PI53yow= -k8s.io/client-go v0.23.0/go.mod h1:hrDnpnK1mSr65lHHcUuIZIXDgEbzc7/683c6hyG4jTA= -k8s.io/client-go v0.23.2/go.mod h1:k3YbsWg6GWdHF1THHTQP88X9RhB1DWPo3Dq7KfU/D1c= -k8s.io/client-go v0.23.4 h1:YVWvPeerA2gpUudLelvsolzH7c2sFoXXR5wM/sWqNFU= -k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= -k8s.io/code-generator v0.18.3/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= -k8s.io/code-generator v0.22.3/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o= -k8s.io/code-generator v0.23.0/go.mod h1:vQvOhDXhuzqiVfM/YHp+dmg10WDZCchJVObc9MvowsE= -k8s.io/component-base v0.18.3/go.mod h1:bp5GzGR0aGkYEfTj+eTY0AN/vXTgkJdQXjNTTVUaa3k= -k8s.io/component-base v0.22.3/go.mod h1:kuybv1miLCMoOk3ebrqF93GbQHQx6W2287FC0YEQY6s= -k8s.io/component-base v0.23.0 h1:UAnyzjvVZ2ZR1lF35YwtNY6VMN94WtOnArcXBu34es8= -k8s.io/component-base v0.23.0/go.mod h1:DHH5uiFvLC1edCpvcTDV++NKULdYYU6pR9Tt3HIKMKI= -k8s.io/component-helpers v0.22.3/go.mod h1:7OVySVH5elhHKuJKUOxZEfpT1Bm3ChmBQZHmuFfbGHk= -k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/api v0.24.3 h1:tt55QEmKd6L2k5DP6G/ZzdMQKvG5ro4H4teClqm0sTY= +k8s.io/api v0.24.3/go.mod h1:elGR/XSZrS7z7cSZPzVWaycpJuGIw57j9b95/1PdJNI= +k8s.io/apiextensions-apiserver v0.24.3 h1:kyx+Tmro1qEsTUr07ZGQOfvTsF61yn+AxnxytBWq8As= +k8s.io/apiextensions-apiserver v0.24.3/go.mod h1:cL0xkmUefpYM4f6IuOau+6NMFEIh6/7wXe/O4vPVJ8A= +k8s.io/apimachinery v0.24.3 h1:hrFiNSA2cBZqllakVYyH/VyEh4B581bQRmqATJSeQTg= +k8s.io/apimachinery v0.24.3/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apiserver v0.24.3/go.mod h1:aXfwtIn4U27B7lYs5f2BKgz6DRbgWy+HJeYReN1jLJ8= +k8s.io/cli-runtime v0.24.3 h1:O9YvUHrDSCQUPlsqVmaqDrueqjpJ7IO6Yas9B6xGSoo= +k8s.io/cli-runtime v0.24.3/go.mod h1:In84wauoMOqa7JDvDSXGbf8lTNlr70fOGpYlYfJtSqA= +k8s.io/client-go v0.24.3 h1:Nl1840+6p4JqkFWEW2LnMKU667BUxw03REfLAVhuKQY= +k8s.io/client-go v0.24.3/go.mod h1:AAovolf5Z9bY1wIg2FZ8LPQlEdKHjLI7ZD4rw920BJw= +k8s.io/code-generator v0.24.3/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w= +k8s.io/component-base v0.24.3 h1:u99WjuHYCRJjS1xeLOx72DdRaghuDnuMgueiGMFy1ec= +k8s.io/component-base v0.24.3/go.mod h1:bqom2IWN9Lj+vwAkPNOv2TflsP1PeVDIwIN0lRthxYY= +k8s.io/component-helpers v0.24.3/go.mod h1:/1WNW8TfBOijQ1ED2uCHb4wtXYWDVNMqUll8h36iNVo= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= -k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= -k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ= +k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4= -k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= -k8s.io/kubectl v0.22.3 h1:xziSHHyFHg2nt9vE6A0XqW5dOePNSlzxG8z3z+IY63E= -k8s.io/kubectl v0.22.3/go.mod h1:gcpQHPOx+Jke9Og6Li7YxR/ZuaOtFUeJw7xHH617tHs= -k8s.io/kubelet v0.18.1/go.mod h1:wlhv8yVMnbTp0haWYfuOzD7fqq7F35bWcIFIpdy9w9A= -k8s.io/metrics v0.22.3/go.mod h1:HbLFLRKtXzoC/6tHLQAlO9AeOBXZp2eB6SsgkbujoNI= -k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 h1:Gii5eqf+GmIEwGNKQYQClCayuJCe2/4fZUvF7VG99sU= +k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= +k8s.io/kubectl v0.24.3 h1:PqY8ho/S/KuE2/hCC3Iee7X+lOtARYo0LQsNzvV/edE= +k8s.io/kubectl v0.24.3/go.mod h1:PYLcvw96sC1NLbxZEDbdlOEd6/C76VIWjGmWV5QjSk0= +k8s.io/metrics v0.24.3/go.mod h1:p1M0lhMySWfhISkSd3HEj8xIgrVnJTK3PPhFq2rA3To= k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -k8s.io/utils v0.0.0-20211116205334-6203023598ed h1:ck1fRPWPJWsMd8ZRFsWc6mh/zHp5fZ/shhbrgPUxDAE= -k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20220713171938-56c0de1e6f5e h1:W1yba+Bpkwb5BatGKZALQ1yylhwnuD6CkYmrTibyLDM= +k8s.io/utils v0.0.0-20220713171938-56c0de1e6f5e/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= 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/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.25/go.mod h1:Mlj9PNLmG9bZ6BHFwFKDo5afkpWyUISkb9Me0GnK66I= -sigs.k8s.io/controller-runtime v0.11.0 h1:DqO+c8mywcZLFJWILq4iktoECTyn30Bkj0CwgqMpZWQ= -sigs.k8s.io/controller-runtime v0.11.0/go.mod h1:KKwLiTooNGu+JmLZGn9Sl3Gjmfj66eMbCQznLP5zcqA= -sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 h1:fD1pz4yfdADVNfFmcP2aBEtudwUQ1AlLnRBALr33v3s= -sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= -sigs.k8s.io/kustomize/api v0.8.11/go.mod h1:a77Ls36JdfCWojpUqR6m60pdGY1AYFix4AH83nJtY1g= -sigs.k8s.io/kustomize/api v0.10.1 h1:KgU7hfYoscuqag84kxtzKdEC3mKMb99DPI3a0eaV1d0= -sigs.k8s.io/kustomize/api v0.10.1/go.mod h1:2FigT1QN6xKdcnGS2Ppp1uIWrtWN28Ms8A3OZUZhwr8= -sigs.k8s.io/kustomize/cmd/config v0.9.13/go.mod h1:7547FLF8W/lTaDf0BDqFTbZxM9zqwEJqCKN9sSR0xSs= -sigs.k8s.io/kustomize/kustomize/v4 v4.2.0/go.mod h1:MOkR6fmhwG7hEDRXBYELTi5GSFcLwfqwzTRHW3kv5go= -sigs.k8s.io/kustomize/kyaml v0.11.0/go.mod h1:GNMwjim4Ypgp/MueD3zXHLRJEjz7RvtPae0AwlvEMFM= -sigs.k8s.io/kustomize/kyaml v0.13.0 h1:9c+ETyNfSrVhxvphs+K2dzT3dh5oVPPEqPOE/cUpScY= -sigs.k8s.io/kustomize/kyaml v0.13.0/go.mod h1:FTJxEZ86ScK184NpGSAQcfEqee0nul8oLCK30D47m4E= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw= +sigs.k8s.io/controller-runtime v0.12.3 h1:FCM8xeY/FI8hoAfh/V4XbbYMY20gElh9yh+A98usMio= +sigs.k8s.io/controller-runtime v0.12.3/go.mod h1:qKsk4WE6zW2Hfj0G4v10EnNB2jMG1C+NTb8h+DwCoU0= +sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= +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/kustomize/api v0.11.4 h1:/0Mr3kfBBNcNPOW5Qwk/3eb8zkswCwnqQxxKtmrTkRo= +sigs.k8s.io/kustomize/api v0.11.4/go.mod h1:k+8RsqYbgpkIrJ4p9jcdPqe8DprLxFUUO0yNOq8C+xI= +sigs.k8s.io/kustomize/cmd/config v0.10.6/go.mod h1:/S4A4nUANUa4bZJ/Edt7ZQTyKOY9WCER0uBS1SW2Rco= +sigs.k8s.io/kustomize/kustomize/v4 v4.5.4/go.mod h1:Zo/Xc5FKD6sHl0lilbrieeGeZHVYCA4BzxeAaLI05Bg= +sigs.k8s.io/kustomize/kyaml v0.13.6 h1:eF+wsn4J7GOAXlvajv6OknSunxpcOBQQqsnPxObtkGs= +sigs.k8s.io/kustomize/kyaml v0.13.6/go.mod h1:yHP031rn1QX1lr/Xd934Ri/xdVNG8BE2ECa78Ht/kEg= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/structured-merge-diff/v4 v4.2.0/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= sigs.k8s.io/structured-merge-diff/v4 v4.2.1 h1:bKCqE9GvQ5tiVHn5rfn1r+yao3aLQEaLzkkmAkf+A6Y= sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/hack/boilerplate.go.txt b/hack/boilerplate.go.txt index 9ffbc3c..899084a 100644 --- a/hack/boilerplate.go.txt +++ b/hack/boilerplate.go.txt @@ -1,2 +1,2 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation diff --git a/main.go b/main.go index a1af3d6..2a415c0 100644 --- a/main.go +++ b/main.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation /* @@ -21,17 +21,24 @@ package main import ( "context" + "crypto/tls" "flag" "fmt" + "os" + "strings" + "time" + "github.com/go-logr/logr" "github.com/smart-edge-open/sriov-fec-operator/pkg/common/assets" "github.com/smart-edge-open/sriov-fec-operator/pkg/common/utils" "k8s.io/client-go/discovery" "k8s.io/client-go/rest" - "os" - "strings" - "time" + "sigs.k8s.io/controller-runtime/pkg/healthz" + "sigs.k8s.io/controller-runtime/pkg/manager" + "sigs.k8s.io/controller-runtime/pkg/webhook" + sriovfecv2 "github.com/smart-edge-open/sriov-fec-operator/api/v2" + "github.com/smart-edge-open/sriov-fec-operator/controllers" secv1 "github.com/openshift/api/security/v1" appsv1 "k8s.io/api/apps/v1" "k8s.io/apimachinery/pkg/runtime" @@ -40,10 +47,6 @@ import ( _ "k8s.io/client-go/plugin/pkg/client/auth/gcp" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/healthz" - - sriovfecv2 "github.com/smart-edge-open/sriov-fec-operator/api/v2" - "github.com/smart-edge-open/sriov-fec-operator/controllers" // +kubebuilder:scaffold:imports ) @@ -78,67 +81,27 @@ func main() { ctrl.SetLogger(logr.New(utils.NewLogWrapper())) config := ctrl.GetConfigOrDie() - mgr, err := ctrl.NewManager(config, ctrl.Options{ - Scheme: scheme, - MetricsBindAddress: metricsAddr, - HealthProbeBindAddress: healthProbeAddr, - Port: 9443, - LeaderElection: enableLeaderElection, - LeaderElectionID: "98e78623.intel.com", - Namespace: controllers.NAMESPACE, - }) - if err != nil { - setupLog.WithError(err).Error("unable to start manager") - os.Exit(1) - } + mgr := createAndConfigureManager(config, metricsAddr, healthProbeAddr, enableLeaderElection) - log := utils.NewLogger() - if err = (&controllers.SriovFecClusterConfigReconciler{ - Client: mgr.GetClient(), - Log: log, - Scheme: mgr.GetScheme(), - }).SetupWithManager(mgr); err != nil { - setupLog.WithField("controller", "SriovFecClusterConfig").WithError(err).Error("unable to create controller") - os.Exit(1) - } - if err = (&sriovfecv2.SriovFecClusterConfig{}).SetupWebhookWithManager(mgr); err != nil { - setupLog.WithError(err).WithField("webhook", "SriovFecClusterConfig").Error("unable to create webhook") - os.Exit(1) - } + initializeSriovFecClusterConfigReconciler(mgr) // +kubebuilder:scaffold:builder - if err := mgr.AddHealthzCheck("health", healthz.Ping); err != nil { - setupLog.WithError(err).Error("unable to set up health check") - os.Exit(1) - } - if err := mgr.AddReadyzCheck("check", healthz.Ping); err != nil { - setupLog.WithError(err).Error("unable to set up ready check") - os.Exit(1) - } + c := createClient(config) - c, err := client.New(config, client.Options{Scheme: scheme}) - if err != nil { - setupLog.WithError(err).Error("failed to create client") - os.Exit(1) - } + operatorDeployment := fetchOperatorDeployment(c) - namespace := os.Getenv("SRIOV_FEC_NAMESPACE") - owner := &appsv1.Deployment{} - err = c.Get(context.Background(), client.ObjectKey{ - Namespace: namespace, - Name: operatorDeploymentName, - }, owner) - if err != nil { - setupLog.WithError(err).Error("Unable to get operator deployment") - os.Exit(1) - } + determineClusterType(config) - err = getClusterType(config) - if err != nil { - setupLog.Error(err, "unable to determine cluster type") + deployOperatorAssets(c, operatorDeployment) + + setupLog.Info("starting manager") + if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil { + setupLog.WithError(err).Error("problem running manager") os.Exit(1) } +} +func deployOperatorAssets(c client.Client, operatorDeployment *appsv1.Deployment) { logger := utils.NewLogger() assetsManager := &assets.Manager{ Client: c, @@ -146,7 +109,7 @@ func main() { Log: logger, EnvPrefix: utils.SriovPrefix, Scheme: scheme, - Owner: owner, + Owner: operatorDeployment, Assets: []assets.Asset{ { ConfigMapName: "labeler-config", @@ -173,12 +136,92 @@ func main() { setupLog.WithError(err).Error("failed to deploy the assets") os.Exit(1) } +} - setupLog.Info("starting manager") - if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil { - setupLog.WithError(err).Error("problem running manager") +func determineClusterType(config *rest.Config) { + if err := getClusterType(config); err != nil { + setupLog.Error(err, "unable to determine cluster type") + os.Exit(1) + } +} + +func fetchOperatorDeployment(c client.Client) *appsv1.Deployment { + namespace := os.Getenv("SRIOV_FEC_NAMESPACE") + owner := &appsv1.Deployment{} + err := c.Get(context.Background(), client.ObjectKey{ + Namespace: namespace, + Name: operatorDeploymentName, + }, owner) + if err != nil { + setupLog.WithError(err).Error("Unable to get operator deployment") + os.Exit(1) + } + return owner +} + +func createClient(config *rest.Config) client.Client { + c, err := client.New(config, client.Options{Scheme: scheme}) + if err != nil { + setupLog.WithError(err).Error("failed to create client") os.Exit(1) } + return c +} + +func initializeSriovFecClusterConfigReconciler(mgr manager.Manager) { + log := utils.NewLogger() + if err := (&controllers.SriovFecClusterConfigReconciler{ + Client: mgr.GetClient(), + Log: log, + }).SetupWithManager(mgr); err != nil { + setupLog.WithField("controller", "SriovFecClusterConfig").WithError(err).Error("unable to create controller") + os.Exit(1) + } + if err := (&sriovfecv2.SriovFecClusterConfig{}).SetupWebhookWithManager(mgr); err != nil { + setupLog.WithError(err).WithField("webhook", "SriovFecClusterConfig").Error("unable to create webhook") + os.Exit(1) + } +} + +func createAndConfigureManager(config *rest.Config, metricsAddr string, healthProbeAddr string, enableLeaderElection bool) manager.Manager { + ws := webhook.Server{ + TLSMinVersion: "1.2", + TLSOpts: []func(*tls.Config){ + func(cfg *tls.Config) { + // Enabled TLS 1.2 cipher suites. TLS 1.3 cipher suites are not configurable. + cfg.CipherSuites = []uint16{ + tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, + tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, + tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256, + } + }, + }, + } + + mgr, err := ctrl.NewManager(config, ctrl.Options{ + Scheme: scheme, + MetricsBindAddress: metricsAddr, + HealthProbeBindAddress: healthProbeAddr, + Port: 9443, + LeaderElection: enableLeaderElection, + LeaderElectionID: "98e78623.intel.com", + Namespace: controllers.NAMESPACE, + WebhookServer: &ws, + }) + if err != nil { + setupLog.WithError(err).Error("unable to start manager") + os.Exit(1) + } + + if err := mgr.AddHealthzCheck("health", healthz.Ping); err != nil { + setupLog.WithError(err).Error("unable to set up health check") + os.Exit(1) + } + if err := mgr.AddReadyzCheck("check", healthz.Ping); err != nil { + setupLog.WithError(err).Error("unable to set up ready check") + os.Exit(1) + } + return mgr } func getClusterType(restConfig *rest.Config) error { @@ -205,6 +248,12 @@ func getClusterType(restConfig *rest.Config) error { setupLog.Info("couldn't find 'route.openshift.io' API - operator is running on Kubernetes") err = utils.SetOsEnvIfNotSet(utils.SriovPrefix+"GENERIC_K8S", "true", logr.New(utils.NewLogWrapper())) + + if err != nil { + setupLog.Error(err, "unable to determine cluster type") + os.Exit(1) + } + if err != nil { return fmt.Errorf("failed to set SRIOV_FEC_GENERIC_K8S env variable - %v", err) } diff --git a/pkg/common/assets/asset.go b/pkg/common/assets/asset.go index 6ce5762..6b8b456 100644 --- a/pkg/common/assets/asset.go +++ b/pkg/common/assets/asset.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package assets @@ -162,65 +162,64 @@ func (a *Asset) setOwner(owner metav1.Object, obj runtime.Object, s *runtime.Sch return nil } -func (a *Asset) createOrUpdate(ctx context.Context, c client.Client, o metav1.Object, s *runtime.Scheme) error { +func (a *Asset) createOrUpdate(ctx context.Context, c client.Client, owner metav1.Object, s *runtime.Scheme) error { for _, obj := range a.objects { - a.log.WithField("asset", a.Path).WithField("kind", obj.GetObjectKind()). - Info("create or update") + if err := a.createOrUpdateObject(ctx, c, obj, owner, s); err != nil { + return err + } + } + return nil +} - err := a.setOwner(o, obj, s) - if err != nil { +func (a *Asset) createOrUpdateObject(ctx context.Context, c client.Client, toBeCreated client.Object, owner metav1.Object, s *runtime.Scheme) error { + + a.log.WithField("asset", a.Path).WithField("kind", toBeCreated.GetObjectKind()).Info("create or update") + + if err := a.setOwner(owner, toBeCreated, s); err != nil { + return err + } + + gvk := toBeCreated.GetObjectKind().GroupVersionKind() + old := &unstructured.Unstructured{} + old.SetGroupVersionKind(gvk) + key := client.ObjectKeyFromObject(toBeCreated) + + if err := c.Get(ctx, key, old); err != nil { + if !apierr.IsNotFound(err) { + a.log.WithError(err).WithField("key", key).WithField("GroupVersionKind", gvk).Error("Failed to get an object") return err } - gvk := obj.GetObjectKind().GroupVersionKind() - old := &unstructured.Unstructured{} - old.SetGroupVersionKind(gvk) - key := client.ObjectKeyFromObject(obj) - if err := c.Get(ctx, key, old); err != nil { - if !apierr.IsNotFound(err) { - a.log.WithError(err).WithField("key", key).WithField("GroupVersionKind", gvk). - Error("Failed to get an object") - return err + // Object does not exist + if err := c.Create(ctx, toBeCreated); err != nil { + a.log.WithError(err).WithField("key", key).WithField("GroupVersionKind", gvk).Error("Create failed") + return err + } + a.log.WithField("key", key).WithField("GroupVersionKind", gvk).Info("Object created") + } else { + if strings.ToLower(old.GetObjectKind().GroupVersionKind().Kind) == "configmap" { + isImmutable, ok := old.Object["immutable"].(bool) + if !ok { + a.log.WithField("key", key).WithField("GroupVersionKind", gvk). + Info("Failed to read 'immutable' field.") + } else if isImmutable { + a.log.WithField("key", key).WithField("GroupVersionKind", gvk).Info("Skipping update because it is marked as immutable") + return nil } + } - // Object does not exist - if err := c.Create(ctx, obj); err != nil { - a.log.WithError(err).WithField("key", key).WithField("GroupVersionKind", gvk). - Error("Create failed") + if !equality.Semantic.DeepDerivative(toBeCreated, old) { + toBeCreated.SetResourceVersion(old.GetResourceVersion()) + if err := c.Update(ctx, toBeCreated); err != nil { + a.log.WithError(err).WithField("key", key).WithField("GroupVersionKind", gvk).Error("Update failed") return err } - a.log.WithField("key", key).WithField("GroupVersionKind", gvk). - Info("Object created") + a.log.WithField("key", key).WithField("GroupVersionKind", gvk).Info("Object updated") } else { - if strings.ToLower(old.GetObjectKind().GroupVersionKind().Kind) == "configmap" { - isImmutable, ok := old.Object["immutable"].(bool) - if !ok { - a.log.WithField("key", key).WithField("GroupVersionKind", gvk). - Info("Failed to read 'immutable' field.") - } else { - if isImmutable { - a.log.WithField("key", key).WithField("GroupVersionKind", gvk). - Info("Skipping update because it is marked as immutable") - continue - } - } - } - - if !equality.Semantic.DeepDerivative(obj, old) { - obj.SetResourceVersion(old.GetResourceVersion()) - if err := c.Update(ctx, obj); err != nil { - a.log.WithError(err).WithField("key", key).WithField("GroupVersionKind", gvk). - Error("Update failed") - return err - } - a.log.WithField("key", key).WithField("GroupVersionKind", gvk). - Info("Object updated") - } else { - a.log.WithField("key", key).WithField("GroupVersionKind", gvk). - Info("Object has not changed") - } + a.log.WithField("key", key).WithField("GroupVersionKind", gvk).Info("Object has not changed") } } + return nil } diff --git a/pkg/common/assets/manager.go b/pkg/common/assets/manager.go index 00ce046..f9c1c43 100644 --- a/pkg/common/assets/manager.go +++ b/pkg/common/assets/manager.go @@ -1,11 +1,13 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package assets import ( "context" "errors" + "fmt" + "github.com/google/uuid" "github.com/smart-edge-open/sriov-fec-operator/pkg/common/utils" "github.com/sirupsen/logrus" "os" @@ -47,12 +49,22 @@ func (m *Manager) buildTemplateVars(ctx context.Context, setKernelVar bool) (map } } + //default value for VFIO_TOKEN + vfioTokenName := m.EnvPrefix + "VFIO_TOKEN" + if tp[vfioTokenName] == "" { + tp[vfioTokenName] = "02bddbbf-bbb0-4d79-886b-91bad3fbb510" + } + _, err := uuid.Parse(tp[vfioTokenName]) + if err != nil { + return tp, fmt.Errorf("provided VFIO token '%v' is not a valid UUID", tp[vfioTokenName]) + } + if !setKernelVar { return tp, nil } nodes := &corev1.NodeList{} - err := m.Client.List(ctx, nodes, &client.MatchingLabels{"fpga.intel.com/intel-accelerator-present": ""}) + err = m.Client.List(ctx, nodes, &client.MatchingLabels{"fpga.intel.com/intel-accelerator-present": ""}) if err != nil { return nil, err } diff --git a/pkg/common/assets/manager_test.go b/pkg/common/assets/manager_test.go index 13e4a37..e3cf63d 100644 --- a/pkg/common/assets/manager_test.go +++ b/pkg/common/assets/manager_test.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package assets @@ -50,8 +50,8 @@ func (*InvalidRuntimeType) GetFinalizers() []string func (*InvalidRuntimeType) SetFinalizers(finalizers []string) {} func (*InvalidRuntimeType) GetOwnerReferences() []v1.OwnerReference { return nil } func (*InvalidRuntimeType) SetOwnerReferences([]v1.OwnerReference) {} -func (*InvalidRuntimeType) GetClusterName() string { return "" } -func (*InvalidRuntimeType) SetClusterName(clusterName string) {} +func (*InvalidRuntimeType) GetZZZ_DeprecatedClusterName() string { return "" } +func (*InvalidRuntimeType) SetZZZ_DeprecatedClusterName(clusterName string) {} func (*InvalidRuntimeType) GetManagedFields() []v1.ManagedFieldsEntry { return nil } func (*InvalidRuntimeType) SetManagedFields(managedFields []v1.ManagedFieldsEntry) {} diff --git a/pkg/common/assets/suite_test.go b/pkg/common/assets/suite_test.go index 40b3c39..ae0963c 100644 --- a/pkg/common/assets/suite_test.go +++ b/pkg/common/assets/suite_test.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package assets diff --git a/pkg/common/assets/test/101-fake-labeler.yaml b/pkg/common/assets/test/101-fake-labeler.yaml index 02135bb..231d15a 100644 --- a/pkg/common/assets/test/101-fake-labeler.yaml +++ b/pkg/common/assets/test/101-fake-labeler.yaml @@ -1,5 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 -# Copyright (c) 2020-2021 Intel Corporation +# Copyright (c) 2020-2022 Intel Corporation apiVersion: v1 kind: ConfigMap diff --git a/pkg/common/drainhelper/drainhelper.go b/pkg/common/drainhelper/drainhelper.go index b8e9a02..2c37e1c 100644 --- a/pkg/common/drainhelper/drainhelper.go +++ b/pkg/common/drainhelper/drainhelper.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package drainhelper @@ -196,12 +196,7 @@ func (dh *DrainHelper) Run(f func(context.Context) bool, drain bool) error { OnStoppedLeading: func() { dh.log.Info("stopped leading") }, - OnNewLeader: func(id string) { - if id != dh.nodeName { - dh.log.WithField("this", dh.nodeName).WithField("leader", id). - Info("new leader elected") - } - }, + OnNewLeader: dh.onNewLeaderFunction, } le, err := leaderelection.NewLeaderElector(lec) @@ -219,6 +214,12 @@ func (dh *DrainHelper) Run(f func(context.Context) bool, drain bool) error { return innerErr } +func (dh *DrainHelper) onNewLeaderFunction(id string) { + if id != dh.nodeName { + dh.log.WithField("this", dh.nodeName).WithField("leader", id).Info("new leader elected") + } +} + func (dh *DrainHelper) cordonAndDrain(ctx context.Context) error { node, nodeGetErr := dh.clientSet.CoreV1().Nodes().Get(ctx, dh.nodeName, metav1.GetOptions{}) if nodeGetErr != nil { diff --git a/pkg/common/drainhelper/suite_test.go b/pkg/common/drainhelper/suite_test.go index 7c9c0e4..0f25834 100644 --- a/pkg/common/drainhelper/suite_test.go +++ b/pkg/common/drainhelper/suite_test.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package drainhelper diff --git a/pkg/common/utils/logger_wrapper.go b/pkg/common/utils/logger_wrapper.go index 505258d..172f340 100644 --- a/pkg/common/utils/logger_wrapper.go +++ b/pkg/common/utils/logger_wrapper.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package utils diff --git a/pkg/common/utils/slices.go b/pkg/common/utils/slices.go new file mode 100644 index 0000000..7444b8e --- /dev/null +++ b/pkg/common/utils/slices.go @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright (c) 2022 Intel Corporation + +package utils + +func Filter[T any](slice []T, filter func(T) bool) []T { + var n []T + for _, e := range slice { + if filter(e) { + n = append(n, e) + } + } + return n +} diff --git a/pkg/common/utils/utils.go b/pkg/common/utils/utils.go index bcb1b43..d6210f6 100644 --- a/pkg/common/utils/utils.go +++ b/pkg/common/utils/utils.go @@ -9,7 +9,6 @@ import ( "github.com/go-logr/logr" "os" "path/filepath" - "strings" ) type AcceleratorDiscoveryConfig struct { @@ -57,11 +56,6 @@ func LoadDiscoveryConfig(cfgPath string) (AcceleratorDiscoveryConfig, error) { return cfg, nil } -func IsK8sDeployment() bool { - value := os.Getenv(SriovPrefix + "GENERIC_K8S") - return strings.ToLower(value) == "true" -} - func SetOsEnvIfNotSet(key, value string, logger logr.Logger) error { if osValue := os.Getenv(key); osValue != "" { logger.Info("skipping ENV because it is already set", "key", key, "value", osValue) diff --git a/pkg/daemon/bbdevconfig.go b/pkg/daemon/bbdevconfig.go index 722d0fa..f0f5d2e 100644 --- a/pkg/daemon/bbdevconfig.go +++ b/pkg/daemon/bbdevconfig.go @@ -1,156 +1,22 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package daemon import ( - "bytes" - "errors" "fmt" sriovv2 "github.com/smart-edge-open/sriov-fec-operator/api/v2" "github.com/sirupsen/logrus" - "gopkg.in/ini.v1" - "io" "os" "os/exec" "path/filepath" - "strconv" "strings" ) const ( - ul = "UL" - dl = "DL" - flr = "FLR" - bandwidth = "bandwidth" - load_balance = "load_balance" - vfqmap = "vfqmap" - flr_time_out = "flr_time_out" - - vfbundles = "VFBUNDLES" - maxqsize = "MAXQSIZE" - uplink4g = "QUL4G" - downlink4g = "QDL4G" - uplink5g = "QUL5G" - downlink5g = "QDL5G" - num_vf_bundles = "num_vf_bundles" - max_queue_size = "max_queue_size" - num_qgroups = "num_qgroups" - num_aqs_per_groups = "num_aqs_per_groups" - aq_depth_log2 = "aq_depth_log2" - maxQueueGroups = 8 - - mode = "MODE" - pf_mode_en = "pf_mode_en" pfConfigAppFilepath = "/sriov_workdir/pf_bb_config" ) -func generateN3000BBDevConfigFile(log *logrus.Logger, nc *sriovv2.N3000BBDevConfig, file string) error { - if nc == nil { - return errors.New("received nil N3000BBDevConfig") - } - - cfg := ini.Empty() - err := cfg.NewSections(mode, ul, dl, flr) - if err != nil { - return fmt.Errorf("Unable to create sections in bbdevconfig") - } - - var modeValue string - if nc.PFMode { - modeValue = "1" - } else { - modeValue = "0" - } - cfg.Section(mode).Key(pf_mode_en).SetValue(modeValue) - cfg.Section(ul).Key(bandwidth).SetValue(strconv.Itoa(nc.Uplink.Bandwidth)) - cfg.Section(ul).Key(load_balance).SetValue(strconv.Itoa(nc.Uplink.LoadBalance)) - cfg.Section(ul).Key(vfqmap).SetValue(nc.Uplink.Queues.String()) - cfg.Section(dl).Key(bandwidth).SetValue(strconv.Itoa(nc.Downlink.Bandwidth)) - cfg.Section(dl).Key(load_balance).SetValue(strconv.Itoa(nc.Downlink.LoadBalance)) - cfg.Section(dl).Key(vfqmap).SetValue(nc.Downlink.Queues.String()) - cfg.Section(flr).Key(flr_time_out).SetValue(strconv.Itoa(nc.FLRTimeOut)) - - err = logBBDevConfigFile(log, cfg) - if err != nil { - return err - } - - err = cfg.SaveTo(file) - if err != nil { - return fmt.Errorf("Unable to write config to file: %s", file) - } - return nil -} - -func generateACC100BBDevConfigFile(log *logrus.Logger, nc *sriovv2.ACC100BBDevConfig, file string) error { - if nc == nil { - return errors.New("received nil ACC100BBDevConfig") - } - - total4GQueueGroups := nc.Uplink4G.NumQueueGroups + nc.Downlink4G.NumQueueGroups - total5GQueueGroups := nc.Uplink5G.NumQueueGroups + nc.Downlink5G.NumQueueGroups - totalQueueGroups := total4GQueueGroups + total5GQueueGroups - if totalQueueGroups > maxQueueGroups { - return fmt.Errorf("Total number of requested queue groups (4G/5G) exceeds the maximum (%d)", maxQueueGroups) - } - - cfg := ini.Empty() - err := cfg.NewSections(mode, vfbundles, maxqsize, uplink4g, downlink4g, uplink5g, downlink5g) - if err != nil { - return fmt.Errorf("Unable to create sections in bbdevconfig") - } - - var modeValue string - if nc.PFMode { - modeValue = "1" - } else { - modeValue = "0" - } - cfg.Section(mode).Key(pf_mode_en).SetValue(modeValue) - cfg.Section(vfbundles).Key(num_vf_bundles).SetValue(strconv.Itoa(nc.NumVfBundles)) - cfg.Section(maxqsize).Key(max_queue_size).SetValue(strconv.Itoa(nc.MaxQueueSize)) - cfg.Section(uplink4g).Key(num_qgroups).SetValue(strconv.Itoa(nc.Uplink4G.NumQueueGroups)) - cfg.Section(uplink4g).Key(num_aqs_per_groups).SetValue(strconv.Itoa(nc.Uplink4G.NumAqsPerGroups)) - cfg.Section(uplink4g).Key(aq_depth_log2).SetValue(strconv.Itoa(nc.Uplink4G.AqDepthLog2)) - cfg.Section(downlink4g).Key(num_qgroups).SetValue(strconv.Itoa(nc.Downlink4G.NumQueueGroups)) - cfg.Section(downlink4g).Key(num_aqs_per_groups).SetValue(strconv.Itoa(nc.Downlink4G.NumAqsPerGroups)) - cfg.Section(downlink4g).Key(aq_depth_log2).SetValue(strconv.Itoa(nc.Downlink4G.AqDepthLog2)) - cfg.Section(uplink5g).Key(num_qgroups).SetValue(strconv.Itoa(nc.Uplink5G.NumQueueGroups)) - cfg.Section(uplink5g).Key(num_aqs_per_groups).SetValue(strconv.Itoa(nc.Uplink5G.NumAqsPerGroups)) - cfg.Section(uplink5g).Key(aq_depth_log2).SetValue(strconv.Itoa(nc.Uplink5G.AqDepthLog2)) - cfg.Section(downlink5g).Key(num_qgroups).SetValue(strconv.Itoa(nc.Downlink5G.NumQueueGroups)) - cfg.Section(downlink5g).Key(num_aqs_per_groups).SetValue(strconv.Itoa(nc.Downlink5G.NumAqsPerGroups)) - cfg.Section(downlink5g).Key(aq_depth_log2).SetValue(strconv.Itoa(nc.Downlink5G.AqDepthLog2)) - - err = logBBDevConfigFile(log, cfg) - if err != nil { - return err - } - - err = cfg.SaveTo(file) - if err != nil { - return fmt.Errorf("Unable to write config to file: %s", file) - } - return nil -} - -func generateBBDevConfigFile(log *logrus.Logger, pfCfg sriovv2.BBDevConfig, file string) error { - if pfCfg.ACC100 != nil { - if err := generateACC100BBDevConfigFile(log, pfCfg.ACC100, file); err != nil { - return fmt.Errorf("ACC100 config file creation failed, %s", err) - } - } else if pfCfg.N3000 != nil { - if err := generateN3000BBDevConfigFile(log, pfCfg.N3000, file); err != nil { - return fmt.Errorf("N3000 config file creation failed, %s", err) - } - } else { - return fmt.Errorf("Received nil configs") - } - - return nil -} - func NewPfBBConfigController(log *logrus.Logger, sharedVfioToken string) *pfBBConfigController { return &pfBBConfigController{ log: log, @@ -164,9 +30,9 @@ type pfBBConfigController struct { } func (p *pfBBConfigController) initializePfBBConfig(acc sriovv2.SriovAccelerator, pf *sriovv2.PhysicalFunctionConfigExt) error { - if pf.BBDevConfig.N3000 != nil || pf.BBDevConfig.ACC100 != nil { + if pf.BBDevConfig.N3000 != nil || pf.BBDevConfig.ACC100 != nil || pf.BBDevConfig.ACC200 != nil { bbdevConfigFilepath := filepath.Join(workdir, fmt.Sprintf("%s.ini", pf.PCIAddress)) - if err := generateBBDevConfigFile(p.log, pf.BBDevConfig, bbdevConfigFilepath); err != nil { + if err := generateBBDevConfigFile(pf.BBDevConfig, bbdevConfigFilepath); err != nil { p.log.WithError(err).WithField("pci", pf.PCIAddress).Error("failed to create bbdev config file") return err } @@ -188,7 +54,7 @@ func (p *pfBBConfigController) initializePfBBConfig(acc sriovv2.SriovAccelerator return err } } else { - p.log.Info("N3000 and ACC100 BBDevConfig are nil - queues will not be (re)configured") + p.log.Info("All sections of 'BBDevConfig' are nil - queues will not be (re)configured") } return nil @@ -200,7 +66,7 @@ func (p *pfBBConfigController) initializePfBBConfig(acc sriovv2.SriovAccelerator // pciAddress points to a specific PF device func (p *pfBBConfigController) runPFConfig(deviceName, cfgFilepath, pciAddress string, token *string) error { switch deviceName { - case "FPGA_LTE", "FPGA_5GNR", "ACC100": + case "FPGA_LTE", "FPGA_5GNR", "ACC100", "ACC200": default: return fmt.Errorf("incorrect deviceName for pf config: %s", deviceName) } @@ -241,14 +107,3 @@ func (p *pfBBConfigController) stopPfBBConfig(pciAddress string) error { return err } - -func logBBDevConfigFile(log *logrus.Logger, cfg *ini.File) error { - var b bytes.Buffer - writer := io.Writer(&b) - _, err := cfg.WriteTo(writer) - if err != nil { - return fmt.Errorf("Unable to write config to log writer, %s", err) - } - log.WithField("generated BBDevConfig", b.String()).Info("logBBDevConfigFile") - return nil -} diff --git a/pkg/daemon/bbdevconfig_ini_generator.go b/pkg/daemon/bbdevconfig_ini_generator.go new file mode 100644 index 0000000..085cb7d --- /dev/null +++ b/pkg/daemon/bbdevconfig_ini_generator.go @@ -0,0 +1,210 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright (c) 2020-2022 Intel Corporation + +package daemon + +import ( + "bytes" + "errors" + "fmt" + sriovv2 "github.com/smart-edge-open/sriov-fec-operator/api/v2" + "gopkg.in/ini.v1" + "io" +) + +func generateBBDevConfigFile(bbDevConfig sriovv2.BBDevConfig, file string) (err error) { + + if err = bbDevConfig.Validate(); err != nil { + return err + } + + var iniFile *ini.File + + switch { + case bbDevConfig.ACC100 != nil: + if iniFile, err = createIniFileContent(acc100BBDevConfigToIniStruct, bbDevConfig.ACC100); err != nil { + return fmt.Errorf("creation of pf_bb_config config file for ACC100 failed, %s", err) + } + case bbDevConfig.ACC200 != nil: + if iniFile, err = createIniFileContent(acc200BBDevConfigToIniStruct, bbDevConfig.ACC200); err != nil { + return fmt.Errorf("creation of pf_bb_config config file for ACC200 failed, %s", err) + } + case bbDevConfig.N3000 != nil: + if iniFile, err = createIniFileContent(n3000BBDevConfigToIniStruct, bbDevConfig.N3000); err != nil { + return fmt.Errorf("creation of pf_bb_config config file for N3000 failed, %s", err) + } + default: + return fmt.Errorf("received BBDevConfig is empty") + } + + if err := logIniFile(iniFile); err != nil { + return err + } + + if err := iniFile.SaveTo(file); err != nil { + return fmt.Errorf("unable to write config to file: %s", file) + } + + return nil +} + +type bbDeviceConfig interface { + *sriovv2.ACC100BBDevConfig | *sriovv2.ACC200BBDevConfig | *sriovv2.N3000BBDevConfig +} + +func createIniFileContent[BB bbDeviceConfig, C func(BB) interface{}](convertToIniStruct C, bbDevConfig BB) (*ini.File, error) { + if bbDevConfig == nil { + return nil, errors.New("received nil pf_bb_config") + } + + iniFile := ini.Empty() + if err := iniFile.ReflectFrom(convertToIniStruct(bbDevConfig)); err != nil { + return nil, fmt.Errorf("creation of pf_bb_config config file for ACC200 failed, %s", err) + } + + return iniFile, nil +} + +func logIniFile(cfg *ini.File) error { + var b bytes.Buffer + writer := io.Writer(&b) + _, err := cfg.WriteTo(writer) + if err != nil { + return fmt.Errorf("unable to write config to log writer, %s", err) + } + log.WithField("generated BBDevConfig", b.String()).Info("logIniFile") + return nil +} + +type queueGroupConfigIniWrapper struct { + NumQueueGroups int `ini:"num_qgroups"` + NumAqsPerGroups int `ini:"num_aqs_per_groups"` + AqDepthLog2 int `ini:"aq_depth_log2"` +} + +func queueGroupConfigToIniStruct(in sriovv2.QueueGroupConfig) queueGroupConfigIniWrapper { + return queueGroupConfigIniWrapper{ + NumQueueGroups: in.NumQueueGroups, + NumAqsPerGroups: in.NumAqsPerGroups, + AqDepthLog2: in.AqDepthLog2, + } +} + +type acc100BBDevConfigIniWrapper struct { + PFMode struct { + PFMode string `ini:"pf_mode_en"` + } `ini:"MODE"` + + NumVfBundles struct { + NumVfBundles int `ini:"num_vf_bundles"` + } `ini:"VFBUNDLES"` + + MaxQueueSize struct { + MaxQueueSize int `ini:"max_queue_size"` + } `ini:"MAXQSIZE"` + + Uplink4G queueGroupConfigIniWrapper `ini:"QUL4G"` + Downlink4G queueGroupConfigIniWrapper `ini:"QDL4G"` + Uplink5G queueGroupConfigIniWrapper `ini:"QUL5G"` + Downlink5G queueGroupConfigIniWrapper `ini:"QDL5G"` +} + +func acc100BBDevConfigToIniStruct(in *sriovv2.ACC100BBDevConfig) interface{} { + return &acc100BBDevConfigIniWrapper{ + PFMode: struct { + PFMode string `ini:"pf_mode_en"` + }{ + boolToIntStringMapping[in.PFMode], + }, + NumVfBundles: struct { + NumVfBundles int `ini:"num_vf_bundles"` + }{ + in.NumVfBundles, + }, + MaxQueueSize: struct { + MaxQueueSize int `ini:"max_queue_size"` + }{ + in.MaxQueueSize, + }, + Uplink5G: queueGroupConfigToIniStruct(in.Uplink5G), + Uplink4G: queueGroupConfigToIniStruct(in.Uplink4G), + Downlink5G: queueGroupConfigToIniStruct(in.Downlink5G), + Downlink4G: queueGroupConfigToIniStruct(in.Downlink4G), + } +} + +type acc200BBDevConfigIniWrapper struct { + Wrapper acc100BBDevConfigIniWrapper `ini:"DEFAULT"` + QFFT queueGroupConfigIniWrapper `ini:"QFFT"` +} + +func acc200BBDevConfigToIniStruct(in *sriovv2.ACC200BBDevConfig) interface{} { + delegate := acc100BBDevConfigToIniStruct(&in.ACC100BBDevConfig).(*acc100BBDevConfigIniWrapper) + return &acc200BBDevConfigIniWrapper{ + Wrapper: *delegate, + QFFT: queueGroupConfigToIniStruct(in.QFFT), + } +} + +type n3000BBDevConfigIniWrapper struct { + PFMode struct { + PFMode string `ini:"pf_mode_en"` + } `ini:"MODE"` + + Uplink struct { + Bandwidth int `ini:"bandwidth"` + LoadBalance int `ini:"load_balance"` + Vfqmap string `ini:"vfqmap"` + } `ini:"UL"` + + Downlink struct { + Bandwidth int `ini:"bandwidth"` + LoadBalance int `ini:"load_balance"` + Vfqmap string `ini:"vfqmap"` + } `ini:"DL"` + + FLR struct { + FLR int `ini:"flr_time_out"` + } `ini:"FLR"` +} + +func n3000BBDevConfigToIniStruct(in *sriovv2.N3000BBDevConfig) interface{} { + return &n3000BBDevConfigIniWrapper{ + PFMode: struct { + PFMode string `ini:"pf_mode_en"` + }{ + PFMode: AsIntString(in.PFMode), + }, + FLR: struct { + FLR int `ini:"flr_time_out"` + }{ + FLR: in.FLRTimeOut, + }, + + Downlink: struct { + Bandwidth int `ini:"bandwidth"` + LoadBalance int `ini:"load_balance"` + Vfqmap string `ini:"vfqmap"` + }{ + Bandwidth: in.Downlink.Bandwidth, + LoadBalance: in.Downlink.LoadBalance, + Vfqmap: in.Downlink.Queues.String(), + }, + + Uplink: struct { + Bandwidth int `ini:"bandwidth"` + LoadBalance int `ini:"load_balance"` + Vfqmap string `ini:"vfqmap"` + }{ + Bandwidth: in.Uplink.Bandwidth, + LoadBalance: in.Uplink.LoadBalance, + Vfqmap: in.Uplink.Queues.String(), + }, + } +} + +var boolToIntStringMapping = map[bool]string{false: "0", true: "1"} + +func AsIntString(v bool) string { + return boolToIntStringMapping[v] +} diff --git a/pkg/daemon/bbdevconfig_test.go b/pkg/daemon/bbdevconfig_test.go index 30539b4..85a2ca6 100644 --- a/pkg/daemon/bbdevconfig_test.go +++ b/pkg/daemon/bbdevconfig_test.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package daemon @@ -8,6 +8,7 @@ import ( "fmt" "io/ioutil" "path/filepath" + "testing" sriovv2 "github.com/smart-edge-open/sriov-fec-operator/api/v2" "github.com/smart-edge-open/sriov-fec-operator/pkg/common/utils" @@ -31,94 +32,97 @@ func compareFiles(firstFilepath, secondFilepath string) error { } var _ = Describe("bbdevconfig", func() { - sampleBBDevConfig0 := sriovv2.N3000BBDevConfig{ - PFMode: true, - Uplink: sriovv2.UplinkDownlink{ - Bandwidth: 8, - LoadBalance: 128, - Queues: sriovv2.UplinkDownlinkQueues{ - VF0: 15, - VF1: 13, - VF2: 11, - VF3: 9, - VF4: 14, - VF5: 3, - VF6: 5, - VF7: 7, + sampleBBDevConfig0 := sriovv2.BBDevConfig{ + N3000: &sriovv2.N3000BBDevConfig{ + PFMode: true, + Uplink: sriovv2.UplinkDownlink{ + Bandwidth: 8, + LoadBalance: 128, + Queues: sriovv2.UplinkDownlinkQueues{ + VF0: 15, + VF1: 13, + VF2: 11, + VF3: 9, + VF4: 14, + VF5: 3, + VF6: 5, + VF7: 7, + }, }, - }, - Downlink: sriovv2.UplinkDownlink{ - Bandwidth: 6, - LoadBalance: 64, - Queues: sriovv2.UplinkDownlinkQueues{ - VF0: 16, - VF1: 8, - VF2: 4, - VF3: 2, - VF4: 6, - VF5: 1, - VF6: 0, - VF7: 0, + Downlink: sriovv2.UplinkDownlink{ + Bandwidth: 6, + LoadBalance: 64, + Queues: sriovv2.UplinkDownlinkQueues{ + VF0: 16, + VF1: 8, + VF2: 4, + VF3: 2, + VF4: 6, + VF5: 1, + VF6: 0, + VF7: 0, + }, }, + FLRTimeOut: 21, }, - FLRTimeOut: 21, } - sampleBBDevConfig1 := sriovv2.ACC100BBDevConfig{ - PFMode: true, - NumVfBundles: 16, - MaxQueueSize: 1024, - Uplink4G: sriovv2.QueueGroupConfig{ - NumQueueGroups: 2, - NumAqsPerGroups: 16, - AqDepthLog2: 4, - }, - Downlink4G: sriovv2.QueueGroupConfig{ - NumQueueGroups: 2, - NumAqsPerGroups: 16, - AqDepthLog2: 4, - }, - Uplink5G: sriovv2.QueueGroupConfig{ - NumQueueGroups: 2, - NumAqsPerGroups: 16, - AqDepthLog2: 4, - }, - Downlink5G: sriovv2.QueueGroupConfig{ - NumQueueGroups: 2, - NumAqsPerGroups: 16, - AqDepthLog2: 4, + sampleBBDevConfig1 := sriovv2.BBDevConfig{ + ACC100: &sriovv2.ACC100BBDevConfig{ + PFMode: true, + NumVfBundles: 16, + MaxQueueSize: 1024, + Uplink4G: sriovv2.QueueGroupConfig{ + NumQueueGroups: 2, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, + Downlink4G: sriovv2.QueueGroupConfig{ + NumQueueGroups: 2, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, + Uplink5G: sriovv2.QueueGroupConfig{ + NumQueueGroups: 2, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, + Downlink5G: sriovv2.QueueGroupConfig{ + NumQueueGroups: 2, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, }, } - sampleBBDevConfig2 := sriovv2.ACC100BBDevConfig{ - PFMode: true, - NumVfBundles: 16, - MaxQueueSize: 1024, - Uplink4G: sriovv2.QueueGroupConfig{ - NumQueueGroups: 4, - NumAqsPerGroups: 16, - AqDepthLog2: 4, - }, - Downlink4G: sriovv2.QueueGroupConfig{ - NumQueueGroups: 4, - NumAqsPerGroups: 16, - AqDepthLog2: 4, - }, - Uplink5G: sriovv2.QueueGroupConfig{ - NumQueueGroups: 4, - NumAqsPerGroups: 16, - AqDepthLog2: 4, - }, - Downlink5G: sriovv2.QueueGroupConfig{ - NumQueueGroups: 4, - NumAqsPerGroups: 16, - AqDepthLog2: 4, + + sampleBBDevConfig2 := sriovv2.BBDevConfig{ + ACC100: &sriovv2.ACC100BBDevConfig{ + PFMode: true, + NumVfBundles: 16, + MaxQueueSize: 1024, + Uplink4G: sriovv2.QueueGroupConfig{ + NumQueueGroups: 4, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, + Downlink4G: sriovv2.QueueGroupConfig{ + NumQueueGroups: 4, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, + Uplink5G: sriovv2.QueueGroupConfig{ + NumQueueGroups: 4, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, + Downlink5G: sriovv2.QueueGroupConfig{ + NumQueueGroups: 4, + NumAqsPerGroups: 16, + AqDepthLog2: 4, + }, }, } - sampleBBDevConfig3 := sriovv2.BBDevConfig{ - N3000: &sampleBBDevConfig0, - } - sampleBBDevConfig4 := sriovv2.BBDevConfig{ - ACC100: &sampleBBDevConfig1, - } + sampleBBDevConfig3 := &sampleBBDevConfig0 + sampleBBDevConfig5 := sriovv2.BBDevConfig{} log = utils.NewLogger() @@ -126,51 +130,92 @@ var _ = Describe("bbdevconfig", func() { var _ = Context("generateBBDevConfigFile", func() { var _ = It("will create valid config ", func() { filename := "config.cfg" - err := generateN3000BBDevConfigFile(log, &sampleBBDevConfig0, filepath.Join(testTmpFolder, filename)) + err := generateBBDevConfigFile(sampleBBDevConfig0, filepath.Join(testTmpFolder, filename)) Expect(err).ToNot(HaveOccurred()) err = compareFiles(filepath.Join(testTmpFolder, filename), "testdata/bbdevconfig_test1.cfg") Expect(err).ToNot(HaveOccurred()) }) var _ = It("will return error when config is nil ", func() { - filename := "config.cfg" - err := generateN3000BBDevConfigFile(log, nil, filepath.Join(testTmpFolder, filename)) + err := generateBBDevConfigFile(sriovv2.BBDevConfig{}, "anyFile") Expect(err).To(HaveOccurred()) }) var _ = It("will create valid ACC100 config ", func() { - filename := "config.cfg" - err := generateACC100BBDevConfigFile(log, &sampleBBDevConfig1, filepath.Join(testTmpFolder, filename)) + filename := filepath.Join(testTmpFolder, "config.cfg") + err := generateBBDevConfigFile(sampleBBDevConfig1, filename) Expect(err).ToNot(HaveOccurred()) - err = compareFiles(filepath.Join(testTmpFolder, filename), "testdata/bbdevconfig_test2.cfg") + err = compareFiles(filename, "testdata/bbdevconfig_test2.cfg") Expect(err).ToNot(HaveOccurred()) }) var _ = It("will return error when ACC100 config is nil ", func() { - filename := "config.cfg" - err := generateACC100BBDevConfigFile(log, nil, filepath.Join(testTmpFolder, filename)) + err := generateBBDevConfigFile(sriovv2.BBDevConfig{}, "anyFile") Expect(err).To(HaveOccurred()) }) var _ = It("will return error when total number of queue groups for ACC100 exceeds 8 ", func() { - filename := "config.cfg" - err := generateACC100BBDevConfigFile(log, &sampleBBDevConfig2, filepath.Join(testTmpFolder, filename)) + err := generateBBDevConfigFile(sampleBBDevConfig2, "anyFile") Expect(err).To(HaveOccurred()) }) var _ = It("will create valid N3000 config ", func() { filename := "config.cfg" - err := generateBBDevConfigFile(log, sampleBBDevConfig3, filepath.Join(testTmpFolder, filename)) + err := generateBBDevConfigFile(*sampleBBDevConfig3, filepath.Join(testTmpFolder, filename)) Expect(err).ToNot(HaveOccurred()) err = compareFiles(filepath.Join(testTmpFolder, filename), "testdata/bbdevconfig_test1.cfg") Expect(err).ToNot(HaveOccurred()) }) var _ = It("will create valid ACC100 config ", func() { filename := "config.cfg" - err := generateBBDevConfigFile(log, sampleBBDevConfig4, filepath.Join(testTmpFolder, filename)) + err := generateBBDevConfigFile(sampleBBDevConfig1, filepath.Join(testTmpFolder, filename)) Expect(err).ToNot(HaveOccurred()) err = compareFiles(filepath.Join(testTmpFolder, filename), "testdata/bbdevconfig_test2.cfg") Expect(err).ToNot(HaveOccurred()) }) var _ = It("will return an error when N3000 and ACC100 configs are nil ", func() { filename := "config.cfg" - err := generateBBDevConfigFile(log, sampleBBDevConfig5, filepath.Join(testTmpFolder, filename)) + err := generateBBDevConfigFile(sampleBBDevConfig5, filepath.Join(testTmpFolder, filename)) Expect(err).To(HaveOccurred()) }) }) }) + +func Test(t *testing.T) { + bbDevConfig := sriovv2.BBDevConfig{ + ACC200: &sriovv2.ACC200BBDevConfig{ + ACC100BBDevConfig: sriovv2.ACC100BBDevConfig{ + PFMode: true, + NumVfBundles: 1, + MaxQueueSize: 2, + Uplink4G: sriovv2.QueueGroupConfig{ + NumQueueGroups: 1, + NumAqsPerGroups: 2, + AqDepthLog2: 3, + }, + Downlink4G: sriovv2.QueueGroupConfig{ + NumQueueGroups: 1, + NumAqsPerGroups: 5, + AqDepthLog2: 6, + }, + Uplink5G: sriovv2.QueueGroupConfig{ + NumQueueGroups: 1, + NumAqsPerGroups: 8, + AqDepthLog2: 9, + }, + Downlink5G: sriovv2.QueueGroupConfig{ + NumQueueGroups: 1, + NumAqsPerGroups: 11, + AqDepthLog2: 12, + }, + }, + QFFT: sriovv2.QueueGroupConfig{ + NumQueueGroups: 1, + NumAqsPerGroups: 14, + AqDepthLog2: 15, + }, + }, + } + + filename := "config.cfg" + err := generateBBDevConfigFile(bbDevConfig, filepath.Join(testTmpFolder, filename)) + + if err != nil { + panic(err) + } +} diff --git a/pkg/daemon/daemon.go b/pkg/daemon/daemon.go index cc60bdc..705a86c 100644 --- a/pkg/daemon/daemon.go +++ b/pkg/daemon/daemon.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package daemon @@ -373,10 +373,8 @@ func validateNodeConfig(nodeConfig fec.SriovFecNodeConfigSpec) error { } cmdline := string(cmdlineBytes) //common attributes for SRIOV - for _, param := range kernelParams { - if !strings.Contains(cmdline, param) { - return fmt.Errorf("missing kernel param(%s)", param) - } + if err := validateOrdinalKernelParams(cmdline); err != nil { + return err } for _, physFunc := range nodeConfig.PhysicalFunctions { @@ -391,10 +389,8 @@ func validateNodeConfig(nodeConfig fec.SriovFecNodeConfigSpec) error { return fmt.Errorf("'%s' driver doesn't supports SecureBoot. It is supported only by 'vfio-pci'", physFunc.PFDriver) } case "vfio-pci": - for _, param := range kernelParamsVfio { - if !strings.Contains(cmdline, param) { - return fmt.Errorf("missing kernel param for vfio-pci(%s)", param) - } + if err := validateVfioKernelParams(cmdline); err != nil { + return err } default: return fmt.Errorf("unknown driver '%s'", physFunc.PFDriver) @@ -402,3 +398,21 @@ func validateNodeConfig(nodeConfig fec.SriovFecNodeConfigSpec) error { } return nil } + +func validateVfioKernelParams(cmdline string) error { + for _, param := range kernelParamsVfio { + if !strings.Contains(cmdline, param) { + return fmt.Errorf("missing kernel param for vfio-pci(%s)", param) + } + } + return nil +} + +func validateOrdinalKernelParams(cmdline string) error { + for _, param := range kernelParams { + if !strings.Contains(cmdline, param) { + return fmt.Errorf("missing kernel param(%s)", param) + } + } + return nil +} diff --git a/pkg/daemon/daemon_reconcile_test.go b/pkg/daemon/daemon_reconcile_test.go index 392cedf..b8d9d8b 100644 --- a/pkg/daemon/daemon_reconcile_test.go +++ b/pkg/daemon/daemon_reconcile_test.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package daemon diff --git a/pkg/daemon/daemon_test.go b/pkg/daemon/daemon_test.go index 1441b69..6c073d8 100644 --- a/pkg/daemon/daemon_test.go +++ b/pkg/daemon/daemon_test.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package daemon @@ -181,6 +181,8 @@ var _ = Describe("NodeConfigReconciler", func() { Return("", nil). onCall([]string{"chroot", "/host/", "modprobe", "v"}). Return("", nil). + onCall([]string{"chroot", "/host/", "setpci", "-v", "-s", "0000:14:00.1", "COMMAND=06"}). + Return("", nil). onCall([]string{"/sriov_workdir/pf_bb_config", "FPGA_5GNR", "-c", fmt.Sprintf("%s.ini", filepath.Join(workdir, pciAddress)), "-p", pciAddress}). Return("", nil) diff --git a/pkg/daemon/device_plugin_controller.go b/pkg/daemon/device_plugin_controller.go index eb04369..135aef0 100644 --- a/pkg/daemon/device_plugin_controller.go +++ b/pkg/daemon/device_plugin_controller.go @@ -9,7 +9,6 @@ import ( "github.com/pkg/errors" "github.com/sirupsen/logrus" corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" "sigs.k8s.io/controller-runtime/pkg/client" @@ -43,21 +42,16 @@ func (d *devicePluginController) RestartDevicePlugin() error { d.log.Info("there is no running instance of device plugin, nothing to restart") } - for _, p := range pods.Items { - if p.Spec.NodeName != d.nodeNameRef.Name { + for _, pod := range pods.Items { + if pod.Spec.NodeName != d.nodeNameRef.Name { continue } - if err := d.Delete(context.TODO(), &corev1.Pod{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: p.Namespace, - Name: p.Name, - }, - }, &client.DeleteOptions{}); err != nil { + if err := d.Delete(context.TODO(), &pod, &client.DeleteOptions{}); err != nil { return errors.Wrap(err, "failed to delete sriov-device-plugin-daemonset pod") } backoff := wait.Backoff{Steps: 300, Duration: 1 * time.Second, Factor: 1} - err = wait.ExponentialBackoff(backoff, d.waitForDevicePluginRestart(p.Name)) + err = wait.ExponentialBackoff(backoff, d.waitForDevicePluginRestart(pod.Name)) if err == wait.ErrWaitTimeout { return fmt.Errorf("failed to restart sriov-device-plugin within specified time") } diff --git a/pkg/daemon/inventory.go b/pkg/daemon/inventory.go index cf128f6..149797e 100644 --- a/pkg/daemon/inventory.go +++ b/pkg/daemon/inventory.go @@ -1,10 +1,12 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package daemon import ( "errors" + commonUtils "github.com/smart-edge-open/sriov-fec-operator/pkg/common/utils" + "github.com/jaypipes/ghw/pkg/pci" "github.com/sirupsen/logrus" sriovv2 "github.com/smart-edge-open/sriov-fec-operator/api/v2" @@ -13,13 +15,13 @@ import ( ) func GetSriovInventory(log *logrus.Logger) (*sriovv2.NodeInventory, error) { - pci, err := ghw.PCI() + pciInfo, err := ghw.PCI() if err != nil { log.WithError(err).Error("failed to get PCI info") return nil, err } - devices := pci.ListDevices() + devices := pciInfo.ListDevices() if len(devices) == 0 { log.Info("got 0 pci devices") err := errors.New("pci.ListDevices() returned 0 devices") @@ -30,19 +32,7 @@ func GetSriovInventory(log *logrus.Logger) (*sriovv2.NodeInventory, error) { SriovAccelerators: []sriovv2.SriovAccelerator{}, } - for _, device := range devices { - - _, isWhitelisted := supportedAccelerators.VendorID[device.Vendor.ID] - if !(isWhitelisted && - device.Class.ID == supportedAccelerators.Class && - device.Subclass.ID == supportedAccelerators.SubClass) { - continue - } - - if _, ok := supportedAccelerators.Devices[device.Product.ID]; !ok { - continue - } - + for _, device := range commonUtils.Filter(devices, isKnownDevice) { if !utils.IsSriovPF(device.Address) { log.WithField("pci", device.Address).Info("ignoring non SriovPF capable device") continue @@ -84,7 +74,7 @@ func GetSriovInventory(log *logrus.Logger) (*sriovv2.NodeInventory, error) { vfInfo.Driver = driver } - if vfDeviceInfo := pci.GetDevice(vf); vfDeviceInfo == nil { + if vfDeviceInfo := pciInfo.GetDevice(vf); vfDeviceInfo == nil { log.WithField("pci", vf).Info("failed to get device info for vf") } else { vfInfo.DeviceID = vfDeviceInfo.Product.ID @@ -98,3 +88,13 @@ func GetSriovInventory(log *logrus.Logger) (*sriovv2.NodeInventory, error) { return accelerators, nil } + +func isKnownDevice(device *pci.Device) bool { + _, hasKnownVendor := supportedAccelerators.VendorID[device.Vendor.ID] + _, hasKnownDeviceId := supportedAccelerators.Devices[device.Product.ID] + + return hasKnownVendor && + hasKnownDeviceId && + device.Class.ID == supportedAccelerators.Class && + device.Subclass.ID == supportedAccelerators.SubClass +} diff --git a/pkg/daemon/node_management.go b/pkg/daemon/node_management.go index a466e5c..cd62f98 100644 --- a/pkg/daemon/node_management.go +++ b/pkg/daemon/node_management.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package daemon @@ -12,11 +12,8 @@ import ( "k8s.io/apimachinery/pkg/types" "os" "path/filepath" - "regexp" "sigs.k8s.io/controller-runtime/pkg/client" "strconv" - "strings" - "time" ) const ( @@ -129,40 +126,16 @@ func (n *NodeConfigurator) bindDeviceToDriver(pciAddress, driver string) error { return err } -func (n *NodeConfigurator) enableMasterBus(pciAddr string) error { - const MASTER_BUS_BIT int64 = 4 - cmd := []string{"chroot", "/host/", "setpci", "-v", "-s", pciAddr, "COMMAND"} - out, err := runExecCmd(cmd, n.Log) +func (n *NodeConfigurator) configureCommandRegister(pciAddr string) error { + // Configures PCI COMMAND register that enables + // 0X02 bit - PCI_COMMAND_MEMORY which is required for MMIO in pf-bb-config + // 0X04 bit - PCI_COMMAND_MASTER which required for PF to correctly manage VFs + cmd := []string{"chroot", "/host/", "setpci", "-v", "-s", pciAddr, "COMMAND=06"} + _, err := runExecCmd(cmd, n.Log) if err != nil { - n.Log.WithError(err).Error("failed to get the PCI flags for: " + pciAddr) + n.Log.WithError(err).Error("failed to configure PCI command bridge for card: " + pciAddr) return err } - - values := strings.Split(out, " = ") - if len(values) != 2 { - return fmt.Errorf("unexpected output form \"%s\": %s", strings.Join(cmd, " "), out) - } - - v, err := strconv.ParseInt(strings.Replace(values[1], "\n", "", 1), 16, 16) - if err != nil { - n.Log.WithError(err).WithField("value", v).Error("failed to parse the value") - return err - } - - if v&MASTER_BUS_BIT == MASTER_BUS_BIT { - n.Log.Info("MasterBus already set for " + pciAddr) - return nil - } - - v = v | MASTER_BUS_BIT - cmd = []string{"chroot", "/host/", "setpci", "-v", "-s", pciAddr, fmt.Sprintf("COMMAND=0%x", v)} - out, err = runExecCmd(cmd, n.Log) - if err != nil { - n.Log.WithField("output", out).WithError(err).Error("failed to set MasterBus bit") - return err - } - - n.Log.WithField("pci", pciAddr).WithField("output", out).Info("MasterBus set") return nil } @@ -213,14 +186,10 @@ func (n *NodeConfigurator) flrReset(pfPCIAddress string) error { return fmt.Errorf("failed to execute Function Level Reset for PF (%s): %s", pfPCIAddress, err) } - // In some cases we have noticed that FLR can take a while - according to spec it shouldn't be longer than 100ms. - // if FLR is running on card, then pf-bb-config will fail. - time.Sleep(500 * time.Millisecond) return nil } func (n *NodeConfigurator) cleanAcceleratorConfig(acc sriovv2.SriovAccelerator) error { - n.Log.Infof("cleaning configuration on %s", acc.PCIAddress) if err := unbindVFs(n, acc); err != nil { @@ -322,15 +291,16 @@ func (n *NodeConfigurator) configureAccelerator(acc sriovv2.SriovAccelerator, re return err } - if err := n.changeAmountOfVFs(requestedConfig.PFDriver, requestedConfig.PCIAddress, requestedConfig.VFAmount); err != nil { + if err := n.configureCommandRegister(requestedConfig.PCIAddress); err != nil { return err } - pciStubRegex := regexp.MustCompile("pci[-_]pf[-_]stub") - if pciStubRegex.MatchString(requestedConfig.PFDriver) { - if err := n.enableMasterBus(requestedConfig.PCIAddress); err != nil { - return err - } + if err := n.pfBBConfigController.initializePfBBConfig(acc, requestedConfig); err != nil { + return err + } + + if err := n.changeAmountOfVFs(requestedConfig.PFDriver, requestedConfig.PCIAddress, requestedConfig.VFAmount); err != nil { + return err } createdVfs, err := getVFList(acc.PCIAddress) @@ -345,10 +315,6 @@ func (n *NodeConfigurator) configureAccelerator(acc sriovv2.SriovAccelerator, re } } - if err := n.pfBBConfigController.initializePfBBConfig(acc, requestedConfig); err != nil { - return err - } - return nil } diff --git a/pkg/daemon/package_config.go b/pkg/daemon/package_config.go new file mode 100644 index 0000000..d0e159d --- /dev/null +++ b/pkg/daemon/package_config.go @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright (c) 2020-2021 Intel Corporation + +package daemon + +import "github.com/smart-edge-open/sriov-fec-operator/pkg/common/utils" + +var log = utils.NewLogger() diff --git a/pkg/daemon/suite_test.go b/pkg/daemon/suite_test.go index c2875a9..36f844e 100644 --- a/pkg/daemon/suite_test.go +++ b/pkg/daemon/suite_test.go @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -// Copyright (c) 2020-2021 Intel Corporation +// Copyright (c) 2020-2022 Intel Corporation package daemon @@ -23,10 +23,10 @@ import ( var ( testTmpFolder string - log = logrus.New() ) func TestAPIs(t *testing.T) { + log = logrus.New() RegisterFailHandler(Fail) RunSpecsWithDefaultAndCustomReporters(t, diff --git a/pkg/daemon/testdata/bbdevconfig_test1.cfg b/pkg/daemon/testdata/bbdevconfig_test1.cfg index 517ea0c..e33ad0b 100644 --- a/pkg/daemon/testdata/bbdevconfig_test1.cfg +++ b/pkg/daemon/testdata/bbdevconfig_test1.cfg @@ -13,4 +13,3 @@ vfqmap = 16,8,4,2,6,1,0,0 [FLR] flr_time_out = 21 - diff --git a/pkg/daemon/testdata/bbdevconfig_test2.cfg b/pkg/daemon/testdata/bbdevconfig_test2.cfg index 16a090f..8e34b94 100644 --- a/pkg/daemon/testdata/bbdevconfig_test2.cfg +++ b/pkg/daemon/testdata/bbdevconfig_test2.cfg @@ -26,4 +26,3 @@ aq_depth_log2 = 4 num_qgroups = 2 num_aqs_per_groups = 16 aq_depth_log2 = 4 - diff --git a/spec/kubernetes-deployment.md b/spec/kubernetes-deployment.md index d96eed6..587f76b 100644 --- a/spec/kubernetes-deployment.md +++ b/spec/kubernetes-deployment.md @@ -1,3 +1,6 @@ +## SPDX-License-Identifier: Apache-2.0 +## Copyright (c) 2020-2022 Intel Corporation + ## Technical Requirements and Dependencies The SEO Operator for Wireless FEC Accelerators has the following requirements: diff --git a/spec/openshift-deployment.md b/spec/openshift-deployment.md index c51599c..649bbaa 100644 --- a/spec/openshift-deployment.md +++ b/spec/openshift-deployment.md @@ -1,3 +1,6 @@ +## SPDX-License-Identifier: Apache-2.0 +## Copyright (c) 2020-2022 Intel Corporation + ## Technical Requirements and Dependencies The SEO Operator for Wireless FEC Accelerators has the following requirements: @@ -65,4 +68,4 @@ NAME READY STATUS RESTARTS AGE sriov-device-plugin-hkq6f 1/1 Running 0 35s sriov-fec-controller-manager-78488c4c65-cpknc 2/2 Running 0 44s sriov-fec-daemonset-7h8kb 1/1 Running 0 35s -``` \ No newline at end of file +``` diff --git a/spec/sriov-fec-operator-release-notes.md b/spec/sriov-fec-operator-release-notes.md index 3137148..a86f5dd 100644 --- a/spec/sriov-fec-operator-release-notes.md +++ b/spec/sriov-fec-operator-release-notes.md @@ -25,25 +25,30 @@ This document provides high-level system features, issues, and limitations infor ### SRIOV-FEC Operator -| Version | Release Date | OCP Version(s) compatibility | Verified on OCP | -|---------|----------------|------------------------------|--------------------------| -| 1.0.0 | January 2021 | 4.6 | 4.6.4 | -| 1.1.0 | March 2021 | 4.6 | 4.6.16 | -| 1.2.0 | June 2021 | 4.7 | 4.7.8 | -| 1.2.1 | June 2021 | 4.7 | 4.7.8 | -| 1.3.0 | August 2021 | 4.8 | 4.8.2 | -| 2.0.0 | September 2021 | 4.8 | 4.8.5 | -| 2.0.1 | October 2021 | 4.8 | 4.8.13 | -| 2.0.2 | November 2021 | 4.8 | 4.8.12 | -| 2.1.0 | November 2021 | 4.9 | 4.9.7 | -| 2.1.1 | January 2022 | 4.9 | 4.9.7 | -| 2.2.0 | March 2022 | 4.8, 4.9, 4.10 | 4.8.35, 4.9.23, 4.10.5 | -| 2.2.1 | April 2022 | 4.8, 4.9, 4.10 | 4.8.35, 4.9.23, 4.10.5 | -| 2.3.0 | May 2022 | 4.8, 4.9, 4.10 | 4.8.42, 4.9.36, 4.10.17 | -| 2.3.1 | July 2022 | 4.8, 4.9, 4.10 | 4.8.46, 4.9.41, 4.10.21 | -| 2.4.0 | September 2022 | 4.9, 4.10, 4.11 | 4.9.41, 4.10.21, 4.11.2 | +| Version | Release Date | OCP Version(s) compatibility | Verified on OCP | +|---------|----------------|------------------------------|-------------------------| +| 1.0.0 | January 2021 | 4.6 | 4.6.4 | +| 1.1.0 | March 2021 | 4.6 | 4.6.16 | +| 1.2.0 | June 2021 | 4.7 | 4.7.8 | +| 1.2.1 | June 2021 | 4.7 | 4.7.8 | +| 1.3.0 | August 2021 | 4.8 | 4.8.2 | +| 2.0.0 | September 2021 | 4.8 | 4.8.5 | +| 2.0.1 | October 2021 | 4.8 | 4.8.13 | +| 2.0.2 | November 2021 | 4.8 | 4.8.12 | +| 2.1.0 | November 2021 | 4.9 | 4.9.7 | +| 2.1.1 | January 2022 | 4.9 | 4.9.7 | +| 2.2.0 | March 2022 | 4.8, 4.9, 4.10 | 4.8.35, 4.9.23, 4.10.5 | +| 2.2.1 | April 2022 | 4.8, 4.9, 4.10 | 4.8.35, 4.9.23, 4.10.5 | +| 2.3.0 | May 2022 | 4.8, 4.9, 4.10 | 4.8.42, 4.9.36, 4.10.17 | +| 2.3.1 | July 2022 | 4.8, 4.9, 4.10 | 4.8.46, 4.9.41, 4.10.21 | +| 2.4.0 | September 2022 | 4.9, 4.10, 4.11 | 4.9.41, 4.10.21, 4.11.2 | +| 2.5.0 | September 2022 | 4.9, 4.10, 4.11 | 4.9.48, 4.10.34, 4.11.5 | # Features for Release +***v2.5.0*** +- pf-bb-config updated (22.03 -> 22.07) +- Added support for Ubuntu 22.04 +- Improved documentation for VFIO token ***v2.4.0*** - Support for OCP4.11.x @@ -101,6 +106,8 @@ This document provides high-level system features, issues, and limitations infor - Deploys an instance of K8s SRIOV device plugin which manages the FEC VFs as an OpenShift cluster resource and configures this device plugin to detect the resources # Changes to Existing Features +***v2.4.0*** +- SriovFecClusterConfig.spec.physicalFunction.bbDevConfig field is now marked as 'required' ***v2.3.0*** - Flattened sriov-fec operator structure by removing the `sriov-fec` directory @@ -187,6 +194,16 @@ This document provides high-level system features, issues, and limitations infor - Documentation # Supported Operating Systems +***v2.5.0*** +- OpenShift: 4.11.5 +- OS: Red Hat Enterprise Linux CoreOS 411.86.202209140028-0 (Ootpa) +- Kubernetes: v1.24.0+3882f8f +- RT Kernel: 4.18.0-372.26.1.rt7.183.el8_6.x86_64 + +***v2.5.0*** +- Kubernetes 1.23.5+c285e78 +- OS: Ubuntu 22.04 LTS (Jammy Jellyfish) +- Kernel: 5.15.0-43-generic ***v2.4.0*** - OpenShift: 4.11.2 @@ -286,5 +303,5 @@ This document provides high-level system features, issues, and limitations infor # Package Versions Package: - Golang: 1.18 -- DPDK: v20.11 -- pf-bb-config-app: v22.03 +- DPDK: v21.11 +- pf-bb-config-app: v22.07 diff --git a/spec/sriov-fec-operator.md b/spec/sriov-fec-operator.md index 93445b8..0feb00d 100644 --- a/spec/sriov-fec-operator.md +++ b/spec/sriov-fec-operator.md @@ -26,6 +26,7 @@ Copyright (c) 2020-2022 Intel Corporation - [Sample CR for Wireless FEC (ACC100)](#sample-cr-for-wireless-fec-acc100) - [Sample Status for Wireless FEC (ACC100)](#sample-status-for-wireless-fec-acc100) - [Sample Daemon log for Wireless FEC (ACC100)](#sample-daemon-log-for-wireless-fec-acc100) +- [Appendix 3 - Gathering logs for bug report](#appendix-3---gathering-logs-for-bug-report) ## Overview @@ -362,6 +363,10 @@ Please be aware that usage of `vfio-pci` driver requires following arguments add - vfio_pci.enable_sriov=1 - vfio_pci.disable_idle_d3=1 +If `vfio-pci` PF driver is used, then access to VF requires `UUID` token. Token is identical for all nodes in cluster, has default value of `02bddbbf-bbb0-4d79-886b-91bad3fbb510` and could be changed by + setting `SRIOV_FEC_VFIO_TOKEN` in `subscription.spec.config.env` field. Applications that are using VFs should provide token via EAL parameters - e.g + `./test-bbdev.py -e="--vfio-vf-token=02bddbbf-bbb0-4d79-886b-91bad3fbb510 -a0000:f7:00.1"` + ## Deploying the Operator The SEO Operator for Wireless FEC Accelerators is easily deployable from the OpenShift or Kubernetes cluster via provisioning and application of the following YAML spec files: @@ -578,3 +583,31 @@ ors":[{"vendorID":"8086","deviceID":"0b32","pciAddress":"0000:20:00.0","driver": {"level":"Level(-4)","ts":1616794346.9058325,"logger":"daemon","msg":"Update ignored, generation unchanged"} {"level":"Level(-2)","ts":1616794346.9065044,"logger":"daemon.Reconcile","msg":"Reconciled","namespace":"vran-acceleration-operators","name":"pg-itengdvs02r.altera.com"} ``` + +## Appendix 3 - Gathering logs for bug report +To gather logs for filing bug report please run `gather_sriovfec_logs.sh` script downloaded from https://github.com/smart-edge-open/sriov-fec-operator/blob/main/gather_sriovfec_logs.sh + +``` +Usage: ./gather_sriovfec_gather_sriovfec_logs.sh [K8S_BIN] [NAMESPACE] + +Positional arguments: + K8S_BIN Orchestrator binary (default: oc) + NAMESPACE Namespace with SRIOV-FEC operator pods (default: vran-acceleration-operators) +``` + +Example +```shell +[user@ctrl1 /home]# ./gather_sriovfec_gather_sriovfec_logs.sh +Getting information about nodes +Getting information about pods in vran-acceleration-operators +Getting information about ClusterConfigs in vran-acceleration-operators +Getting information about NodeConfigs in vran-acceleration-operators +Getting information about system configurations in vran-acceleration-operators +sriov-fec-ctrl1-Wed Aug 24 15:09:57 UTC 2022/ +... +sriov-fec-ctrl1-Wed Aug 24 15:09:57 UTC 2022/systemLogs/lspci-worker-1.log +Please attach 'sriov-fec.logs.tar.gz' to bug report. If you had to apply some configs and deleted them to reproduce issue, attach them as well. + +[user@ctrl1 /home]# ls -F + gather_sriovfec_logs.sh* 'sriov-fec-ctrl1-Wed Aug 24 15:09:57 UTC 2022'/ sriov-fec.logs.tar.gz +``` diff --git a/spec/sriov-fec-selector-based-api.puml b/spec/sriov-fec-selector-based-api.puml index cbf5bb1..163b3b2 100644 --- a/spec/sriov-fec-selector-based-api.puml +++ b/spec/sriov-fec-selector-based-api.puml @@ -115,6 +115,7 @@ package common <> { class BBDevConfig { ACC100 *ACC100BBDevConfig + ACC200 *ACC200BBDevConfig } class ACC100BBDevConfig { @@ -127,6 +128,17 @@ package common <> { Downlink5G QueueGroupConfig } + class ACC200BBDevConfig { + PFMode bool + NumVfBundles int + MaxQueueSize int + Uplink4G QueueGroupConfig + Downlink4G QueueGroupConfig + Uplink5G QueueGroupConfig + Downlink5G QueueGroupConfig + QFFT QueueGroupConfig + } + class QueueGroupConfig { NumQueueGroups NumAqsPerGroups @@ -138,7 +150,9 @@ package common <> { PhysicalFunctionConfig --> BBDevConfig BBDevConfig --> ACC100BBDevConfig +BBDevConfig --> ACC200BBDevConfig ACC100BBDevConfig -- QueueGroupConfig +ACC200BBDevConfig -- QueueGroupConfig PhysicalFunctionConfig <|---- PhysicalFunctionExtConfig PhysicalFunctionConfig <--- SriovFecClusterConfigSpec SriovFecClusterConfigSpec --> SriovAcceleratorSelector diff --git a/spec/vran-accelerators-supported-by-operator.md b/spec/vran-accelerators-supported-by-operator.md index 8446b41..e829f0d 100644 --- a/spec/vran-accelerators-supported-by-operator.md +++ b/spec/vran-accelerators-supported-by-operator.md @@ -1,6 +1,6 @@ ```text SPDX-License-Identifier: Apache-2.0 -Copyright (c) 2020-2021 Intel Corporation +Copyright (c) 2020-2022 Intel Corporation ``` # Intel's vRAN accelerators supported by SEO Operators on OpenShift