diff --git a/controllers/backup_controller_test.go b/controllers/backup_controller_test.go index 19e8f8933..7b2a3fa70 100644 --- a/controllers/backup_controller_test.go +++ b/controllers/backup_controller_test.go @@ -22,7 +22,6 @@ package controllers import ( "fmt" - "github.com/FoundationDB/fdb-kubernetes-operator/pkg/fdbadminclient/mock" "github.com/FoundationDB/fdb-kubernetes-operator/internal" diff --git a/fdbclient/admin_client.go b/fdbclient/admin_client.go index 9f6c7333f..7ca298356 100644 --- a/fdbclient/admin_client.go +++ b/fdbclient/admin_client.go @@ -211,9 +211,13 @@ func (client *cliAdminClient) getArgsAndTimeout(command cliCommand) ([]string, t args = append(args, "--exec", command.command) } - args = append(args, command.getClusterFileFlag(), client.clusterFilePath, "--log") + // If we want to print out the version we don't have to pass the cluster file path + if len(args) == 0 || args[0] != "--version" { + args = append(args, command.getClusterFileFlag(), client.clusterFilePath) + } + // We only want to pass the knobs to fdbbackup and fdbrestore - if command.isFdbCli() { + if !command.isFdbCli() { args = append(args, client.knobs...) } diff --git a/fdbclient/admin_client_test.go b/fdbclient/admin_client_test.go index aa8b669e7..ded591686 100644 --- a/fdbclient/admin_client_test.go +++ b/fdbclient/admin_client_test.go @@ -193,170 +193,337 @@ var _ = Describe("admin_client_test", func() { ) }) - When("getting the args for the command", func() { - var command cliCommand - var client *cliAdminClient - var args, expectedArgs []string - var timeout, expectedTimeout time.Duration - - JustBeforeEach(func() { - Expect(client).NotTo(BeNil()) - args, timeout = client.getArgsAndTimeout(command) - Expect(timeout).To(Equal(expectedTimeout)) - Expect(args).To(ContainElements(expectedArgs)) - Expect(len(args)).To(BeNumerically("==", len(expectedArgs))) - }) - - When("the used command defines args", func() { - BeforeEach(func() { - command = cliCommand{ - args: []string{"--version"}, - version: "7.1.25", - timeout: 1 * time.Second, - } - - client = &cliAdminClient{ - Cluster: nil, - clusterFilePath: "test", - log: logr.Discard(), - } - }) - - When("trace options are disabled", func() { - BeforeEach(func() { - expectedTimeout = 2 * time.Second - expectedArgs = []string{ - "--version", - "--timeout", - "1", - } - }) - }) - }) - - When("the used command is a fdbcli command", func() { - BeforeEach(func() { - command = cliCommand{ - command: "maintenance off", - timeout: 1 * time.Second, - } - - client = &cliAdminClient{ - Cluster: nil, - clusterFilePath: "test", - log: logr.Discard(), - } - }) - - When("trace options are disabled", func() { - BeforeEach(func() { - expectedTimeout = 2 * time.Second - expectedArgs = []string{ - "--exec", - "maintenance off", - "test", - "--timeout", - "1", - } - }) - }) - - When("trace options are enabled", func() { - BeforeEach(func() { - GinkgoT().Setenv("FDB_NETWORK_OPTION_TRACE_ENABLE", "/tmp") - expectedTimeout = 2 * time.Second - expectedArgs = []string{ - "--exec", - "maintenance off", - "test", - "--log", - "--trace_format", - "xml", - "--log-dir", - "/tmp", - "--timeout", - "1", - } - }) - - When("a different trace format is defined", func() { - BeforeEach(func() { - GinkgoT().Setenv("FDB_NETWORK_OPTION_TRACE_FORMAT", "json") - expectedTimeout = 2 * time.Second - expectedArgs = []string{ - "--exec", - "maintenance off", - "test", - "--log", - "--trace_format", - "json", - "--log-dir", - "/tmp", - "--timeout", - "1", - } - }) - }) - }) - }) - - When("the used command is a fdbrestore command", func() { - BeforeEach(func() { - command = cliCommand{ - binary: fdbrestoreStr, - args: []string{ - "status", - }, - timeout: 1 * time.Second, - } - - client = &cliAdminClient{ - Cluster: nil, - clusterFilePath: "test", - log: logr.Discard(), - } - }) - - When("trace options are disabled", func() { - BeforeEach(func() { - expectedTimeout = 2 * time.Second - expectedArgs = []string{ - "status", - } - }) - }) - - When("trace options are enabled", func() { - BeforeEach(func() { - GinkgoT().Setenv("FDB_NETWORK_OPTION_TRACE_ENABLE", "/tmp") - expectedTimeout = 2 * time.Second - expectedArgs = []string{ - "status", - "--log", - "--trace_format", - "xml", - "--logdir", - "/tmp", - } - }) - - When("a different trace format is defined", func() { - BeforeEach(func() { - GinkgoT().Setenv("FDB_NETWORK_OPTION_TRACE_FORMAT", "json") - expectedTimeout = 2 * time.Second - expectedArgs = []string{ - "status", - "--log", - "--trace_format", - "json", - "--logdir", - "/tmp", - } - }) - }) - }) - }) - }) + DescribeTable("getting the args for the command", func(command cliCommand, client *cliAdminClient, traceOption string, traceFormat string, expectedArgs []string, expectedTimeout time.Duration) { + Expect(client).NotTo(BeNil()) + if traceOption != "" { + GinkgoT().Setenv("FDB_NETWORK_OPTION_TRACE_ENABLE", traceOption) + } + if traceFormat != "" { + GinkgoT().Setenv("FDB_NETWORK_OPTION_TRACE_FORMAT", traceFormat) + } + + args, timeout := client.getArgsAndTimeout(command) + Expect(timeout).To(Equal(expectedTimeout)) + Expect(args).To(HaveExactElements(expectedArgs)) + }, + Entry("using fdbcli and trace options are disabled", + cliCommand{ + args: []string{"--version"}, + version: "7.1.25", + timeout: 1 * time.Second, + }, + &cliAdminClient{ + Cluster: nil, + clusterFilePath: "test", + log: logr.Discard(), + }, + "", + "", + []string{ + "--version", + "--timeout", + "1", + }, + 2*time.Second, + ), + Entry("using fdbcli and trace options are disabled", + cliCommand{ + command: "maintenance off", + version: "7.1.25", + timeout: 1 * time.Second, + }, + &cliAdminClient{ + Cluster: nil, + clusterFilePath: "test", + log: logr.Discard(), + }, + "", + "", + []string{ + "--exec", + "maintenance off", + "-C", + "test", + "--timeout", + "1", + }, + 2*time.Second, + ), + Entry("using fdbcli and trace options are enabled", + cliCommand{ + command: "maintenance off", + version: "7.1.25", + timeout: 1 * time.Second, + }, + &cliAdminClient{ + Cluster: nil, + clusterFilePath: "test", + log: logr.Discard(), + }, + "/tmp", + "", + []string{ + "--exec", + "maintenance off", + "-C", + "test", + "--log", + "--trace_format", + "xml", + "--log-dir", + "/tmp", + "--timeout", + "1", + }, + 2*time.Second, + ), + Entry("using fdbcli and trace options are enabled with a different format", + cliCommand{ + command: "maintenance off", + version: "7.1.25", + timeout: 1 * time.Second, + }, + &cliAdminClient{ + Cluster: nil, + clusterFilePath: "test", + log: logr.Discard(), + }, + "/tmp", + "json", + []string{ + "--exec", + "maintenance off", + "-C", + "test", + "--log", + "--trace_format", + "json", + "--log-dir", + "/tmp", + "--timeout", + "1", + }, + 2*time.Second, + ), + Entry("using fdbcli and trace options are disabled and client knobs are passed", + cliCommand{ + command: "maintenance off", + version: "7.1.25", + timeout: 1 * time.Second, + }, + &cliAdminClient{ + Cluster: nil, + clusterFilePath: "test", + log: logr.Discard(), + knobs: []string{"--knob-testing=1"}, + }, + "", + "", + []string{ + "--exec", + "maintenance off", + "-C", + "test", + "--timeout", + "1", + }, + 2*time.Second, + ), + // Tests for fdbrestore + Entry("using fdbrestore and trace options are disabled", + cliCommand{ + binary: fdbrestoreStr, + command: "status", + version: "7.1.25", + timeout: 1 * time.Second, + }, + &cliAdminClient{ + Cluster: nil, + clusterFilePath: "test", + log: logr.Discard(), + }, + "", + "", + []string{ + "--exec", + "status", + "--dest_cluster_file", + "test", + }, + 1*time.Second, + ), + Entry("using fdbrestore and trace options are enabled", + cliCommand{ + binary: fdbrestoreStr, + command: "status", + version: "7.1.25", + timeout: 1 * time.Second, + }, + &cliAdminClient{ + Cluster: nil, + clusterFilePath: "test", + log: logr.Discard(), + }, + "/tmp", + "", + []string{ + "--exec", + "status", + "--dest_cluster_file", + "test", + "--log", + "--logdir", + "/tmp", + }, + 1*time.Second, + ), + Entry("using fdbrestore and trace options are enabled and a different format is set", + cliCommand{ + binary: fdbrestoreStr, + command: "status", + version: "7.1.25", + timeout: 1 * time.Second, + }, + &cliAdminClient{ + Cluster: nil, + clusterFilePath: "test", + log: logr.Discard(), + }, + "/tmp", + "json", + []string{ + "--exec", + "status", + "--dest_cluster_file", + "test", + "--log", + "--logdir", + "/tmp", + }, + 1*time.Second, + ), + Entry("using fdbrestore and trace options are disabled and client knobs are set", + cliCommand{ + binary: fdbrestoreStr, + command: "status", + version: "7.1.25", + timeout: 1 * time.Second, + }, + &cliAdminClient{ + Cluster: nil, + clusterFilePath: "test", + log: logr.Discard(), + knobs: []string{"--knob-testing=1"}, + }, + "", + "", + []string{ + "--exec", + "status", + "--dest_cluster_file", + "test", + "--knob-testing=1", + }, + 1*time.Second, + ), + // Tests for fdbbackup + Entry("using fdbbackup and trace options are disabled", + cliCommand{ + binary: fdbbackupStr, + command: "status", + version: "7.1.25", + timeout: 1 * time.Second, + }, + &cliAdminClient{ + Cluster: nil, + clusterFilePath: "test", + log: logr.Discard(), + }, + "", + "", + []string{ + "--exec", + "status", + "-C", + "test", + }, + 1*time.Second, + ), + Entry("using fdbbackup and trace options are enabled", + cliCommand{ + binary: fdbbackupStr, + command: "status", + version: "7.1.25", + timeout: 1 * time.Second, + }, + &cliAdminClient{ + Cluster: nil, + clusterFilePath: "test", + log: logr.Discard(), + }, + "/tmp", + "", + []string{ + "--exec", + "status", + "-C", + "test", + "--log", + "--logdir", + "/tmp", + }, + 1*time.Second, + ), + Entry("using fdbbackup and trace options are enabled and a different format is set", + cliCommand{ + binary: fdbbackupStr, + command: "status", + version: "7.1.25", + timeout: 1 * time.Second, + }, + &cliAdminClient{ + Cluster: nil, + clusterFilePath: "test", + log: logr.Discard(), + }, + "/tmp", + "json", + []string{ + "--exec", + "status", + "-C", + "test", + "--log", + "--logdir", + "/tmp", + }, + 1*time.Second, + ), + Entry("using fdbbackup and trace options are disabled and client knobs are set", + cliCommand{ + binary: fdbbackupStr, + command: "status", + version: "7.1.25", + timeout: 1 * time.Second, + }, + &cliAdminClient{ + Cluster: nil, + clusterFilePath: "test", + log: logr.Discard(), + knobs: []string{"--knob-testing=1"}, + }, + "", + "", + []string{ + "--exec", + "status", + "-C", + "test", + "--knob-testing=1", + }, + 1*time.Second, + ), + ) When("getting the protocol version from fdbcli", func() { var mockRunner *mockCommandRunner diff --git a/go.mod b/go.mod index c59d61989..c28ae0276 100644 --- a/go.mod +++ b/go.mod @@ -8,11 +8,11 @@ require ( github.com/apple/foundationdb/fdbkubernetesmonitor v0.0.0-20220513200452-e6fa4d7422d2 github.com/chaos-mesh/chaos-mesh/api v0.0.0-20230613082117-03097981f627 github.com/fatih/color v1.14.1 - github.com/go-logr/logr v1.2.3 + github.com/go-logr/logr v1.2.4 github.com/google/go-cmp v0.5.9 github.com/hashicorp/go-retryablehttp v0.7.2 - github.com/onsi/ginkgo/v2 v2.8.0 - github.com/onsi/gomega v1.26.0 + github.com/onsi/ginkgo/v2 v2.9.7 + github.com/onsi/gomega v1.27.8 github.com/prometheus/client_golang v1.14.0 github.com/prometheus/common v0.39.0 github.com/spf13/cobra v1.6.1 @@ -45,12 +45,14 @@ require ( github.com/go-openapi/jsonpointer v0.19.5 // indirect github.com/go-openapi/jsonreference v0.20.0 // indirect github.com/go-openapi/swag v0.21.1 // indirect + github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/google/btree v1.0.1 // indirect github.com/google/gnostic v0.5.7-v3refs // indirect github.com/google/gofuzz v1.2.0 // indirect + github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.3.0 // indirect github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect @@ -87,12 +89,13 @@ require ( go.uber.org/atomic v1.9.0 // indirect go.uber.org/multierr v1.8.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/net v0.7.0 // indirect + golang.org/x/net v0.10.0 // indirect golang.org/x/oauth2 v0.4.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/term v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect + golang.org/x/sys v0.8.0 // indirect + golang.org/x/term v0.8.0 // indirect + golang.org/x/text v0.9.0 // indirect golang.org/x/time v0.3.0 // indirect + golang.org/x/tools v0.9.1 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/protobuf v1.28.1 // indirect diff --git a/go.sum b/go.sum index 9fcb53e52..43f5960be 100644 --- a/go.sum +++ b/go.sum @@ -122,8 +122,8 @@ github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTg github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ= +github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v0.4.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v1.2.3 h1:a9vnzlIBPQBBkeaR9IuMUfmVOrQlkoC4YfPoFkX3T7A= github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= @@ -140,6 +140,8 @@ github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= +github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= @@ -171,8 +173,9 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= @@ -208,6 +211,8 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38 h1:yAJXTCF9TqKcTiHJAE8dj7HMvPfh66eeA2JYW7eFpSE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 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= @@ -299,12 +304,12 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLA 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/v2 v2.8.0 h1:pAM+oBNPrpXRs+E/8spkeGx9QgekbRVyr74EUvRVOUI= -github.com/onsi/ginkgo/v2 v2.8.0/go.mod h1:6JsQiECmxCa3V5st74AL/AmsV482EDdVrGaVW6z3oYU= +github.com/onsi/ginkgo/v2 v2.9.7 h1:06xGQy5www2oN160RtEZoTvnP2sPhEfePYmCDc2szss= +github.com/onsi/ginkgo/v2 v2.9.7/go.mod h1:cxrmXWykAwTwhQsJOPfdIDiJ+l2RYq7U8hFU+M/1uw0= 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.26.0 h1:03cDLK28U6hWvCAns6NeydX3zIm4SF3ci69ulidS32Q= -github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= +github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= +github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= @@ -429,6 +434,7 @@ golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= 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= @@ -464,8 +470,8 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -529,19 +535,19 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 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.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 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= @@ -600,6 +606,8 @@ golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.9.1 h1:8WMNJAz3zrtPmnYC7ISf5dEn3MT0gY7jBJfw27yrrLo= +golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=