diff --git a/.github/workflows/pluto.yaml b/.github/workflows/pluto.yaml new file mode 100644 index 000000000..57bc7a5ac --- /dev/null +++ b/.github/workflows/pluto.yaml @@ -0,0 +1,26 @@ +name: k8s api version check +on: + pull_request: {} + push: {} + +jobs: + + build: + name: Build + runs-on: ubuntu-latest + steps: + + - name: Checkout + uses: actions/checkout@v2 + + # https://pluto.docs.fairwinds.com/advanced/#display-options + - name: Download pluto + uses: FairwindsOps/pluto/github-action@master + + - name: Check deploy folder + run: | + pluto detect-files -d deploy + + - name: Check example folder + run: | + pluto detect-files -d deploy/example diff --git a/Dockerfile b/Dockerfile index 04ca3c233..f9f5590a2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -23,6 +23,6 @@ COPY bin/${ARCH}/nfsplugin /nfsplugin RUN apt update && apt-mark unhold libcap2 RUN clean-install ca-certificates mount nfs-common netbase # install updated packages to fix CVE issues -RUN clean-install libssl1.1 libgssapi-krb5-2 libk5crypto3 libkrb5-3 libkrb5support0 +RUN clean-install libssl1.1 libgssapi-krb5-2 libk5crypto3 libkrb5-3 libkrb5support0 libgmp10 ENTRYPOINT ["/nfsplugin"] diff --git a/README.md b/README.md index 2829eea71..ed2b8a6ca 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ### Overview -This is a repository for [NFS](https://en.wikipedia.org/wiki/Network_File_System) [CSI](https://kubernetes-csi.github.io/docs/) Driver, csi plugin name: `nfs.csi.k8s.io` +This is a repository for [NFS](https://en.wikipedia.org/wiki/Network_File_System) [CSI](https://kubernetes-csi.github.io/docs/) driver, csi plugin name: `nfs.csi.k8s.io`. This driver requires existing and already configured NFSv3 or NFSv4 server, it supports dynamic provisioning of Persistent Volumes via Persistent Volume Claims by creating a new sub directory under NFS server. ### Project status: Beta @@ -14,10 +14,6 @@ This is a repository for [NFS](https://en.wikipedia.org/wiki/Network_File_System |v3.0.0 | 1.19+ | beta | |v2.0.0 | 1.14+ | alpha | -### Requirements - -This driver requires existing NFSv3 or NFSv4 server. - ### Install driver on a Kubernetes cluster - install by [kubectl](./docs/install-nfs-csi-driver.md) - install by [helm charts](./charts) diff --git a/charts/README.md b/charts/README.md index f7d22d302..b5eb43fbc 100644 --- a/charts/README.md +++ b/charts/README.md @@ -38,6 +38,7 @@ The following table lists the configurable parameters of the latest NFS CSI Driv | Parameter | Description | Default | |---------------------------------------------------|------------------------------------------------------------|-------------------------------------------------------------------| | `driver.name` | alternative driver name | `nfs.csi.k8s.io` | +| `driver.mountPermissions` | mounted folder permissions name | `0777` | `feature.enableFSGroupPolicy` | enable `fsGroupPolicy` on a k8s 1.20+ cluster | `false` | | `image.nfs.repository` | csi-driver-nfs docker image | `gcr.io/k8s-staging-sig-storage/nfsplugin` | | `image.nfs.tag` | csi-driver-nfs docker image tag | `amd64-linux-canary` | @@ -58,31 +59,26 @@ The following table lists the configurable parameters of the latest NFS CSI Driv | `controller.runOnMaster` | run controller on master node | `false` | | `controller.logLevel` | controller driver log level |`5` | | `controller.tolerations` | controller pod tolerations | | -| `controller.resources.csiProvisioner.limits.cpu` | csi-provisioner cpu limits | 1 | | `controller.resources.csiProvisioner.limits.memory` | csi-provisioner memory limits | 100Mi | | `controller.resources.csiProvisioner.requests.cpu` | csi-provisioner cpu requests limits | 10m | | `controller.resources.csiProvisioner.requests.memory` | csi-provisioner memory requests limits | 20Mi | -| `controller.resources.livenessProbe.limits.cpu` | liveness-probe cpu limits | 1 | | `controller.resources.livenessProbe.limits.memory` | liveness-probe memory limits | 100Mi | | `controller.resources.livenessProbe.requests.cpu` | liveness-probe cpu requests limits | 10m | | `controller.resources.livenessProbe.requests.memory` | liveness-probe memory requests limits | 20Mi | -| `controller.resources.nfs.limits.cpu` | csi-driver-nfs cpu limits | 1 | | `controller.resources.nfs.limits.memory` | csi-driver-nfs memory limits | 200Mi | | `controller.resources.nfs.requests.cpu` | csi-driver-nfs cpu requests limits | 10m | | `controller.resources.nfs.requests.memory` | csi-driver-nfs memory requests limits | 20Mi | +| `node.name` | driver node daemonset name | `csi-nfs-node` | `node.maxUnavailable` | `maxUnavailable` value of driver node daemonset | `1` | `node.logLevel` | node driver log level |`5` | | `node.livenessProbe.healthPort ` | the health check port for liveness probe |`29653` | | `node.tolerations` | node pod tolerations | | -| `node.resources.livenessProbe.limits.cpu` | liveness-probe cpu limits | 1 | | `node.resources.livenessProbe.limits.memory` | liveness-probe memory limits | 100Mi | | `node.resources.livenessProbe.requests.cpu` | liveness-probe cpu requests limits | 10m | | `node.resources.livenessProbe.requests.memory` | liveness-probe memory requests limits | 20Mi | -| `node.resources.nodeDriverRegistrar.limits.cpu` | csi-node-driver-registrar cpu limits | 1 | | `node.resources.nodeDriverRegistrar.limits.memory` | csi-node-driver-registrar memory limits | 100Mi | | `node.resources.nodeDriverRegistrar.requests.cpu` | csi-node-driver-registrar cpu requests limits | 10m | | `node.resources.nodeDriverRegistrar.requests.memory` | csi-node-driver-registrar memory requests limits | 20Mi | -| `node.resources.nfs.limits.cpu` | csi-driver-nfs cpu limits | 1 | | `node.resources.nfs.limits.memory` | csi-driver-nfs memory limits | 300Mi | | `node.resources.nfs.requests.cpu` | csi-driver-nfs cpu requests limits | 10m | | `node.resources.nfs.requests.memory` | csi-driver-nfs memory requests limits | 20Mi | diff --git a/charts/latest/csi-driver-nfs-v3.1.0.tgz b/charts/latest/csi-driver-nfs-v3.1.0.tgz index 9ac82022d..9716a4e2f 100644 Binary files a/charts/latest/csi-driver-nfs-v3.1.0.tgz and b/charts/latest/csi-driver-nfs-v3.1.0.tgz differ diff --git a/charts/latest/csi-driver-nfs/templates/csi-nfs-controller.yaml b/charts/latest/csi-driver-nfs/templates/csi-nfs-controller.yaml index f0f932bcc..b449d2c06 100644 --- a/charts/latest/csi-driver-nfs/templates/csi-nfs-controller.yaml +++ b/charts/latest/csi-driver-nfs/templates/csi-nfs-controller.yaml @@ -72,6 +72,7 @@ spec: - "--nodeid=$(NODE_ID)" - "--endpoint=$(CSI_ENDPOINT)" - "--drivername={{ .Values.driver.name }}" + - "--mount-permissions={{ .Values.driver.mountPermissions }}" env: - name: NODE_ID valueFrom: diff --git a/charts/latest/csi-driver-nfs/templates/csi-nfs-node.yaml b/charts/latest/csi-driver-nfs/templates/csi-nfs-node.yaml index 3cb29d0f2..03135e53b 100644 --- a/charts/latest/csi-driver-nfs/templates/csi-nfs-node.yaml +++ b/charts/latest/csi-driver-nfs/templates/csi-nfs-node.yaml @@ -84,6 +84,7 @@ spec: - "--nodeid=$(NODE_ID)" - "--endpoint=$(CSI_ENDPOINT)" - "--drivername={{ .Values.driver.name }}" + - "--mount-permissions={{ .Values.driver.mountPermissions }}" env: - name: NODE_ID valueFrom: diff --git a/charts/latest/csi-driver-nfs/values.yaml b/charts/latest/csi-driver-nfs/values.yaml index de9e13341..17a862f79 100755 --- a/charts/latest/csi-driver-nfs/values.yaml +++ b/charts/latest/csi-driver-nfs/values.yaml @@ -24,6 +24,13 @@ rbac: create: true name: nfs +driver: + name: nfs.csi.k8s.io + mountPermissions: "0777" + +feature: + enableFSGroupPolicy: false + controller: name: csi-nfs-controller replicas: 2 @@ -41,21 +48,18 @@ controller: resources: csiProvisioner: limits: - cpu: 1 memory: 400Mi requests: cpu: 10m memory: 20Mi livenessProbe: limits: - cpu: 1 memory: 100Mi requests: cpu: 10m memory: 20Mi nfs: limits: - cpu: 1 memory: 200Mi requests: cpu: 10m @@ -72,32 +76,23 @@ node: resources: livenessProbe: limits: - cpu: 1 memory: 100Mi requests: cpu: 10m memory: 20Mi nodeDriverRegistrar: limits: - cpu: 1 memory: 100Mi requests: cpu: 10m memory: 20Mi nfs: limits: - cpu: 1 memory: 300Mi requests: cpu: 10m memory: 20Mi -feature: - enableFSGroupPolicy: false - -driver: - name: nfs.csi.k8s.io - ## Reference to one or more secrets to be used when pulling images ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ ## diff --git a/cmd/nfsplugin/main.go b/cmd/nfsplugin/main.go index 876ca842e..ddc48a66c 100644 --- a/cmd/nfsplugin/main.go +++ b/cmd/nfsplugin/main.go @@ -30,7 +30,7 @@ import ( var ( endpoint = flag.String("endpoint", "unix://tmp/csi.sock", "CSI endpoint") nodeID = flag.String("nodeid", "", "node id") - perm = flag.String("mount-permissions", "", "mounted folder permissions") + perm = flag.String("mount-permissions", "0777", "mounted folder permissions") driverName = flag.String("drivername", nfs.DefaultDriverName, "name of the driver") ) diff --git a/deploy/csi-nfs-controller.yaml b/deploy/csi-nfs-controller.yaml index 93f4b53aa..b934d13a1 100644 --- a/deploy/csi-nfs-controller.yaml +++ b/deploy/csi-nfs-controller.yaml @@ -42,7 +42,6 @@ spec: name: socket-dir resources: limits: - cpu: 1 memory: 400Mi requests: cpu: 10m @@ -59,7 +58,6 @@ spec: mountPath: /csi resources: limits: - cpu: 1 memory: 100Mi requests: cpu: 10m @@ -103,7 +101,6 @@ spec: name: socket-dir resources: limits: - cpu: 1 memory: 200Mi requests: cpu: 10m diff --git a/deploy/csi-nfs-node.yaml b/deploy/csi-nfs-node.yaml index 821a3db49..4a413a432 100644 --- a/deploy/csi-nfs-node.yaml +++ b/deploy/csi-nfs-node.yaml @@ -38,7 +38,6 @@ spec: mountPath: /csi resources: limits: - cpu: 1 memory: 100Mi requests: cpu: 10m @@ -71,7 +70,6 @@ spec: mountPath: /registration resources: limits: - cpu: 1 memory: 100Mi requests: cpu: 10m @@ -115,7 +113,6 @@ spec: mountPropagation: "Bidirectional" resources: limits: - cpu: 1 memory: 300Mi requests: cpu: 10m diff --git a/go.mod b/go.mod index 2d75e473b..9abe783d9 100644 --- a/go.mod +++ b/go.mod @@ -23,6 +23,7 @@ require ( ) replace ( + golang.org/x/text => golang.org/x/text v0.3.7 k8s.io/api => k8s.io/api v0.22.3 k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.22.3 k8s.io/apimachinery => k8s.io/apimachinery v0.22.3 diff --git a/go.sum b/go.sum index 5658ed119..2457f81da 100644 --- a/go.sum +++ b/go.sum @@ -1064,17 +1064,8 @@ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXR golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.0.0-20170915090833-1cbadb444a80/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= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -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= diff --git a/hack/verify-helm-chart-files.sh b/hack/verify-helm-chart-files.sh index 13e2af8f6..1930627cd 100755 --- a/hack/verify-helm-chart-files.sh +++ b/hack/verify-helm-chart-files.sh @@ -50,6 +50,6 @@ echo "chart tgz files verified." echo "verify helm chart index ..." curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash -helm repo add csi-driver-smb https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts +helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts helm search repo -l csi-driver-nfs echo "helm chart index verified." diff --git a/pkg/nfs/controllerserver.go b/pkg/nfs/controllerserver.go index 63a05e23c..3478f1b84 100644 --- a/pkg/nfs/controllerserver.go +++ b/pkg/nfs/controllerserver.go @@ -98,14 +98,17 @@ func (cs *ControllerServer) CreateVolume(ctx context.Context, req *csi.CreateVol } }() + fileMode := os.FileMode(0777) + if cs.Driver.perm != nil { + fileMode = os.FileMode(*cs.Driver.perm) + } // Create subdirectory under base-dir - // TODO: revisit permissions internalVolumePath := cs.getInternalVolumePath(nfsVol) - if err = os.Mkdir(internalVolumePath, 0777); err != nil && !os.IsExist(err) { + if err = os.Mkdir(internalVolumePath, fileMode); err != nil && !os.IsExist(err) { return nil, status.Errorf(codes.Internal, "failed to make subdirectory: %v", err.Error()) } // Reset directory permissions because of umask problems - if err = os.Chmod(internalVolumePath, 0777); err != nil { + if err = os.Chmod(internalVolumePath, fileMode); err != nil { klog.Warningf("failed to chmod subdirectory: %v", err.Error()) } return &csi.CreateVolumeResponse{Volume: cs.nfsVolToCSI(nfsVol)}, nil diff --git a/pkg/nfs/nodeserver.go b/pkg/nfs/nodeserver.go index 43b6a5dab..b87ab113c 100644 --- a/pkg/nfs/nodeserver.go +++ b/pkg/nfs/nodeserver.go @@ -94,6 +94,7 @@ func (ns *NodeServer) NodePublishVolume(ctx context.Context, req *csi.NodePublis } if ns.Driver.perm != nil { + klog.V(2).Infof("volumeID(%v): mount targetPath(%s) with permissions(0%o)", volumeID, targetPath, *ns.Driver.perm) if err := os.Chmod(targetPath, os.FileMode(*ns.Driver.perm)); err != nil { return nil, status.Error(codes.Internal, err.Error()) } diff --git a/test/external-e2e/run.sh b/test/external-e2e/run.sh index b08df4c79..d5d0f537c 100644 --- a/test/external-e2e/run.sh +++ b/test/external-e2e/run.sh @@ -26,11 +26,11 @@ install_ginkgo () { setup_e2e_binaries() { # download k8s external e2e binary - curl -sL https://storage.googleapis.com/kubernetes-release/release/v1.21.0/kubernetes-test-linux-amd64.tar.gz --output e2e-tests.tar.gz + curl -sL https://storage.googleapis.com/kubernetes-release/release/v1.23.0/kubernetes-test-linux-amd64.tar.gz --output e2e-tests.tar.gz tar -xvf e2e-tests.tar.gz && rm e2e-tests.tar.gz # enable fsGroupPolicy (only available from k8s 1.20) - export EXTRA_HELM_OPTIONS="--set feature.enableFSGroupPolicy=true --set driver.name=$DRIVER.csi.k8s.io --set controller.name=csi-$DRIVER-controller --set node.name=csi-$DRIVER-node --set image.csiProvisioner.tag=v3.0.0" + export EXTRA_HELM_OPTIONS="--set feature.enableFSGroupPolicy=true --set driver.name=$DRIVER.csi.k8s.io --set controller.name=csi-$DRIVER-controller --set node.name=csi-$DRIVER-node --set image.csiProvisioner.tag=v3.0.0 --set driver.mountPermissions=0777" # test on alternative driver name sed -i "s/nfs.csi.k8s.io/$DRIVER.csi.k8s.io/g" deploy/example/storageclass-nfs.yaml diff --git a/vendor/golang.org/x/text/internal/language/language.go b/vendor/golang.org/x/text/internal/language/language.go index f41aedcfc..6105bc7fa 100644 --- a/vendor/golang.org/x/text/internal/language/language.go +++ b/vendor/golang.org/x/text/internal/language/language.go @@ -251,6 +251,13 @@ func (t Tag) Parent() Tag { // ParseExtension parses s as an extension and returns it on success. func ParseExtension(s string) (ext string, err error) { + defer func() { + if recover() != nil { + ext = "" + err = ErrSyntax + } + }() + scan := makeScannerString(s) var end int if n := len(scan.token); n != 1 { @@ -461,7 +468,14 @@ func (t Tag) findTypeForKey(key string) (start, sep, end int, hasExt bool) { // ParseBase parses a 2- or 3-letter ISO 639 code. // It returns a ValueError if s is a well-formed but unknown language identifier // or another error if another error occurred. -func ParseBase(s string) (Language, error) { +func ParseBase(s string) (l Language, err error) { + defer func() { + if recover() != nil { + l = 0 + err = ErrSyntax + } + }() + if n := len(s); n < 2 || 3 < n { return 0, ErrSyntax } @@ -472,7 +486,14 @@ func ParseBase(s string) (Language, error) { // ParseScript parses a 4-letter ISO 15924 code. // It returns a ValueError if s is a well-formed but unknown script identifier // or another error if another error occurred. -func ParseScript(s string) (Script, error) { +func ParseScript(s string) (scr Script, err error) { + defer func() { + if recover() != nil { + scr = 0 + err = ErrSyntax + } + }() + if len(s) != 4 { return 0, ErrSyntax } @@ -489,7 +510,14 @@ func EncodeM49(r int) (Region, error) { // ParseRegion parses a 2- or 3-letter ISO 3166-1 or a UN M.49 code. // It returns a ValueError if s is a well-formed but unknown region identifier // or another error if another error occurred. -func ParseRegion(s string) (Region, error) { +func ParseRegion(s string) (r Region, err error) { + defer func() { + if recover() != nil { + r = 0 + err = ErrSyntax + } + }() + if n := len(s); n < 2 || 3 < n { return 0, ErrSyntax } @@ -578,7 +606,14 @@ type Variant struct { // ParseVariant parses and returns a Variant. An error is returned if s is not // a valid variant. -func ParseVariant(s string) (Variant, error) { +func ParseVariant(s string) (v Variant, err error) { + defer func() { + if recover() != nil { + v = Variant{} + err = ErrSyntax + } + }() + s = strings.ToLower(s) if id, ok := variantIndex[s]; ok { return Variant{id, s}, nil diff --git a/vendor/golang.org/x/text/internal/language/parse.go b/vendor/golang.org/x/text/internal/language/parse.go index c696fd0bd..47ee0fed1 100644 --- a/vendor/golang.org/x/text/internal/language/parse.go +++ b/vendor/golang.org/x/text/internal/language/parse.go @@ -232,6 +232,13 @@ func Parse(s string) (t Tag, err error) { if s == "" { return Und, ErrSyntax } + defer func() { + if recover() != nil { + t = Und + err = ErrSyntax + return + } + }() if len(s) <= maxAltTaglen { b := [maxAltTaglen]byte{} for i, c := range s { diff --git a/vendor/golang.org/x/text/language/parse.go b/vendor/golang.org/x/text/language/parse.go index 11acfd885..59b041008 100644 --- a/vendor/golang.org/x/text/language/parse.go +++ b/vendor/golang.org/x/text/language/parse.go @@ -43,6 +43,13 @@ func Parse(s string) (t Tag, err error) { // https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers. // The resulting tag is canonicalized using the canonicalization type c. func (c CanonType) Parse(s string) (t Tag, err error) { + defer func() { + if recover() != nil { + t = Tag{} + err = language.ErrSyntax + } + }() + tt, err := language.Parse(s) if err != nil { return makeTag(tt), err @@ -79,6 +86,13 @@ func Compose(part ...interface{}) (t Tag, err error) { // tag is returned after canonicalizing using CanonType c. If one or more errors // are encountered, one of the errors is returned. func (c CanonType) Compose(part ...interface{}) (t Tag, err error) { + defer func() { + if recover() != nil { + t = Tag{} + err = language.ErrSyntax + } + }() + var b language.Builder if err = update(&b, part...); err != nil { return und, err @@ -142,6 +156,14 @@ var errInvalidWeight = errors.New("ParseAcceptLanguage: invalid weight") // Tags with a weight of zero will be dropped. An error will be returned if the // input could not be parsed. func ParseAcceptLanguage(s string) (tag []Tag, q []float32, err error) { + defer func() { + if recover() != nil { + tag = nil + q = nil + err = language.ErrSyntax + } + }() + var entry string for s != "" { if entry, s = split(s, ','); entry == "" { diff --git a/vendor/modules.txt b/vendor/modules.txt index 3bc41b31a..605d4c547 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -269,7 +269,7 @@ golang.org/x/sys/unix golang.org/x/sys/windows # golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d golang.org/x/term -# golang.org/x/text v0.3.6 +# golang.org/x/text v0.3.6 => golang.org/x/text v0.3.7 golang.org/x/text/encoding golang.org/x/text/encoding/charmap golang.org/x/text/encoding/htmlindex @@ -887,6 +887,7 @@ sigs.k8s.io/structured-merge-diff/v4/value # sigs.k8s.io/yaml v1.2.0 ## explicit sigs.k8s.io/yaml +# golang.org/x/text => golang.org/x/text v0.3.7 # k8s.io/api => k8s.io/api v0.22.3 # k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.22.3 # k8s.io/apimachinery => k8s.io/apimachinery v0.22.3