diff --git a/microceph/client/client_configs.go b/microceph/client/client_configs.go index 2f7e132c..fd365f42 100644 --- a/microceph/client/client_configs.go +++ b/microceph/client/client_configs.go @@ -3,13 +3,14 @@ package client import ( "context" "fmt" - "github.com/canonical/microceph/microceph/interfaces" "time" "github.com/canonical/lxd/shared/api" "github.com/canonical/lxd/shared/logger" - "github.com/canonical/microceph/microceph/api/types" "github.com/canonical/microcluster/client" + + "github.com/canonical/microceph/microceph/api/types" + "github.com/canonical/microceph/microceph/interfaces" ) func SetClientConfig(ctx context.Context, c *client.Client, data *types.ClientConfig) error { @@ -80,7 +81,7 @@ func UpdateClientConf(ctx context.Context, c *client.Client) error { // Sends the update conf request to every other member of the cluster. func SendUpdateClientConfRequestToClusterMembers(s interfaces.StateInterface) error { // Get a collection of clients to every other cluster member, with the notification user-agent set. - cluster, err := s.ClusterState().Cluster(nil) + cluster, err := s.ClusterState().Cluster(false) if err != nil { logger.Errorf("failed to get a client for every cluster member: %v", err) return err diff --git a/microceph/client/services.go b/microceph/client/services.go index 069c7b16..16426f50 100644 --- a/microceph/client/services.go +++ b/microceph/client/services.go @@ -8,9 +8,10 @@ import ( "github.com/canonical/lxd/shared/api" "github.com/canonical/lxd/shared/logger" - "github.com/canonical/microceph/microceph/api/types" "github.com/canonical/microcluster/client" "github.com/canonical/microcluster/state" + + "github.com/canonical/microceph/microceph/api/types" ) // GetServices returns the list of configured ceph services. @@ -84,7 +85,7 @@ func SendRestartRequestToClusterMembers(s *state.State, services []string) error } // Get a collection of clients to every other cluster member, with the notification user-agent set. - cluster, err := s.Cluster(nil) + cluster, err := s.Cluster(false) if err != nil { logger.Errorf("failed to get a client for every cluster member: %v", err) return err diff --git a/microceph/cmd/microceph/client_config_get.go b/microceph/cmd/microceph/client_config_get.go index dc59444e..c1fb3fdc 100644 --- a/microceph/cmd/microceph/client_config_get.go +++ b/microceph/cmd/microceph/client_config_get.go @@ -5,11 +5,12 @@ import ( "fmt" lxdCmd "github.com/canonical/lxd/shared/cmd" + "github.com/canonical/microcluster/microcluster" + "github.com/spf13/cobra" + "github.com/canonical/microceph/microceph/api/types" "github.com/canonical/microceph/microceph/ceph" "github.com/canonical/microceph/microceph/client" - "github.com/canonical/microcluster/microcluster" - "github.com/spf13/cobra" ) type cmdClientConfigGet struct { @@ -45,7 +46,7 @@ func (c *cmdClientConfigGet) Run(cmd *cobra.Command, args []string) error { return fmt.Errorf("key %s is invalid. \nSupported Keys: %v", args[0], allowList.Keys()) } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return fmt.Errorf("unable to configure MicroCeph: %w", err) } diff --git a/microceph/cmd/microceph/client_config_list.go b/microceph/cmd/microceph/client_config_list.go index 408ee12f..7a485b31 100644 --- a/microceph/cmd/microceph/client_config_list.go +++ b/microceph/cmd/microceph/client_config_list.go @@ -5,10 +5,11 @@ import ( "fmt" lxdCmd "github.com/canonical/lxd/shared/cmd" - "github.com/canonical/microceph/microceph/api/types" - "github.com/canonical/microceph/microceph/client" "github.com/canonical/microcluster/microcluster" "github.com/spf13/cobra" + + "github.com/canonical/microceph/microceph/api/types" + "github.com/canonical/microceph/microceph/client" ) type cmdClientConfigList struct { @@ -36,7 +37,7 @@ func (c *cmdClientConfigList) Run(cmd *cobra.Command, args []string) error { return cmd.Help() } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return fmt.Errorf("unable to configure MicroCeph: %w", err) } diff --git a/microceph/cmd/microceph/client_config_reset.go b/microceph/cmd/microceph/client_config_reset.go index 9086ba53..745a68a9 100644 --- a/microceph/cmd/microceph/client_config_reset.go +++ b/microceph/cmd/microceph/client_config_reset.go @@ -3,13 +3,14 @@ package main import ( "context" "fmt" - "github.com/canonical/microceph/microceph/constants" + + "github.com/canonical/microcluster/microcluster" + "github.com/spf13/cobra" "github.com/canonical/microceph/microceph/api/types" "github.com/canonical/microceph/microceph/ceph" "github.com/canonical/microceph/microceph/client" - "github.com/canonical/microcluster/microcluster" - "github.com/spf13/cobra" + "github.com/canonical/microceph/microceph/constants" ) type cmdClientConfigReset struct { @@ -52,7 +53,7 @@ func (c *cmdClientConfigReset) Run(cmd *cobra.Command, args []string) error { args[0], constants.CliForcePrompt) } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return fmt.Errorf("unable to configure MicroCeph: %w", err) } diff --git a/microceph/cmd/microceph/client_config_set.go b/microceph/cmd/microceph/client_config_set.go index 300b6699..ad94f78e 100644 --- a/microceph/cmd/microceph/client_config_set.go +++ b/microceph/cmd/microceph/client_config_set.go @@ -4,11 +4,12 @@ import ( "context" "fmt" + "github.com/canonical/microcluster/microcluster" + "github.com/spf13/cobra" + "github.com/canonical/microceph/microceph/api/types" "github.com/canonical/microceph/microceph/ceph" "github.com/canonical/microceph/microceph/client" - "github.com/canonical/microcluster/microcluster" - "github.com/spf13/cobra" ) type cmdClientConfigSet struct { @@ -44,7 +45,7 @@ func (c *cmdClientConfigSet) Run(cmd *cobra.Command, args []string) error { return fmt.Errorf("configuring key %s is not supported.\nSupported Keys: %v", args[0], allowList.Keys()) } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return fmt.Errorf("unable to configure MicroCeph: %w", err) } diff --git a/microceph/cmd/microceph/cluster_add.go b/microceph/cmd/microceph/cluster_add.go index 9347636f..85c142b2 100644 --- a/microceph/cmd/microceph/cluster_add.go +++ b/microceph/cmd/microceph/cluster_add.go @@ -28,12 +28,12 @@ func (c *cmdClusterAdd) Run(cmd *cobra.Command, args []string) error { return cmd.Help() } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } - token, err := m.NewJoinToken(args[0]) + token, err := m.NewJoinToken(context.Background(), args[0]) if err != nil { return err } diff --git a/microceph/cmd/microceph/cluster_bootstrap.go b/microceph/cmd/microceph/cluster_bootstrap.go index c6e2e59b..a765de1a 100644 --- a/microceph/cmd/microceph/cluster_bootstrap.go +++ b/microceph/cmd/microceph/cluster_bootstrap.go @@ -6,12 +6,12 @@ import ( "os" "time" - "github.com/canonical/microceph/microceph/constants" - "github.com/canonical/lxd/lxd/util" - "github.com/canonical/microceph/microceph/common" "github.com/canonical/microcluster/microcluster" "github.com/spf13/cobra" + + "github.com/canonical/microceph/microceph/common" + "github.com/canonical/microceph/microceph/constants" ) type cmdClusterBootstrap struct { @@ -43,7 +43,7 @@ func (c *cmdClusterBootstrap) Run(cmd *cobra.Command, args []string) error { return cmd.Help() } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return fmt.Errorf("unable to configure MicroCeph: %w", err) } @@ -74,7 +74,10 @@ func (c *cmdClusterBootstrap) Run(cmd *cobra.Command, args []string) error { } // Bootstrap microcluster. - err = m.NewCluster(hostname, address, common.EncodeBootstrapConfig(data), time.Second*60) + ctx, cancel := context.WithTimeout(context.Background(), time.Second*60) + defer cancel() + + err = m.NewCluster(ctx, hostname, address, common.EncodeBootstrapConfig(data)) if err != nil { return err } diff --git a/microceph/cmd/microceph/cluster_config_get.go b/microceph/cmd/microceph/cluster_config_get.go index eacf8b06..8e502843 100644 --- a/microceph/cmd/microceph/cluster_config_get.go +++ b/microceph/cmd/microceph/cluster_config_get.go @@ -5,11 +5,12 @@ import ( "fmt" lxdCmd "github.com/canonical/lxd/shared/cmd" + "github.com/canonical/microcluster/microcluster" + "github.com/spf13/cobra" + "github.com/canonical/microceph/microceph/api/types" "github.com/canonical/microceph/microceph/ceph" "github.com/canonical/microceph/microceph/client" - "github.com/canonical/microcluster/microcluster" - "github.com/spf13/cobra" ) type cmdClusterConfigGet struct { @@ -40,7 +41,7 @@ func (c *cmdClusterConfigGet) Run(cmd *cobra.Command, args []string) error { return fmt.Errorf("Key %s is invalid. \nPermitted Keys: %v", args[0], allowList.Keys()) } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return fmt.Errorf("Unable to configure MicroCeph: %w", err) } diff --git a/microceph/cmd/microceph/cluster_config_list.go b/microceph/cmd/microceph/cluster_config_list.go index 31dafa40..c92c5d7f 100644 --- a/microceph/cmd/microceph/cluster_config_list.go +++ b/microceph/cmd/microceph/cluster_config_list.go @@ -5,10 +5,11 @@ import ( "fmt" lxdCmd "github.com/canonical/lxd/shared/cmd" - "github.com/canonical/microceph/microceph/api/types" - "github.com/canonical/microceph/microceph/client" "github.com/canonical/microcluster/microcluster" "github.com/spf13/cobra" + + "github.com/canonical/microceph/microceph/api/types" + "github.com/canonical/microceph/microceph/client" ) type cmdClusterConfigList struct { @@ -32,7 +33,7 @@ func (c *cmdClusterConfigList) Run(cmd *cobra.Command, args []string) error { return cmd.Help() } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return fmt.Errorf("Unable to configure MicroCeph: %w", err) } diff --git a/microceph/cmd/microceph/cluster_config_reset.go b/microceph/cmd/microceph/cluster_config_reset.go index e0db3daf..a5b82c2e 100644 --- a/microceph/cmd/microceph/cluster_config_reset.go +++ b/microceph/cmd/microceph/cluster_config_reset.go @@ -4,11 +4,12 @@ import ( "context" "fmt" + "github.com/canonical/microcluster/microcluster" + "github.com/spf13/cobra" + "github.com/canonical/microceph/microceph/api/types" "github.com/canonical/microceph/microceph/ceph" "github.com/canonical/microceph/microceph/client" - "github.com/canonical/microcluster/microcluster" - "github.com/spf13/cobra" ) type cmdClusterConfigReset struct { @@ -40,7 +41,7 @@ func (c *cmdClusterConfigReset) Run(cmd *cobra.Command, args []string) error { return fmt.Errorf("Resetting key %s is not allowed", args[0]) } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return fmt.Errorf("Unable to configure MicroCeph: %w", err) } diff --git a/microceph/cmd/microceph/cluster_config_set.go b/microceph/cmd/microceph/cluster_config_set.go index 16046247..2b8bfb38 100644 --- a/microceph/cmd/microceph/cluster_config_set.go +++ b/microceph/cmd/microceph/cluster_config_set.go @@ -4,11 +4,12 @@ import ( "context" "fmt" + "github.com/canonical/microcluster/microcluster" + "github.com/spf13/cobra" + "github.com/canonical/microceph/microceph/api/types" "github.com/canonical/microceph/microceph/ceph" "github.com/canonical/microceph/microceph/client" - "github.com/canonical/microcluster/microcluster" - "github.com/spf13/cobra" ) type cmdClusterConfigSet struct { @@ -40,7 +41,7 @@ func (c *cmdClusterConfigSet) Run(cmd *cobra.Command, args []string) error { return fmt.Errorf("Configuring key %s is not allowed. \nPermitted Keys: %v", args[0], allowList.Keys()) } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return fmt.Errorf("Unable to configure MicroCeph: %w", err) } diff --git a/microceph/cmd/microceph/cluster_join.go b/microceph/cmd/microceph/cluster_join.go index 292ff7ee..40461663 100644 --- a/microceph/cmd/microceph/cluster_join.go +++ b/microceph/cmd/microceph/cluster_join.go @@ -7,9 +7,10 @@ import ( "time" "github.com/canonical/lxd/lxd/util" - "github.com/canonical/microceph/microceph/constants" "github.com/canonical/microcluster/microcluster" "github.com/spf13/cobra" + + "github.com/canonical/microceph/microceph/constants" ) type cmdClusterJoin struct { @@ -35,7 +36,7 @@ func (c *cmdClusterJoin) Run(cmd *cobra.Command, args []string) error { return cmd.Help() } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return fmt.Errorf("unable to configure MicroCluster: %w", err) } @@ -54,5 +55,8 @@ func (c *cmdClusterJoin) Run(cmd *cobra.Command, args []string) error { address = util.CanonicalNetworkAddress(address, constants.BootstrapPortConst) token := args[0] - return m.JoinCluster(hostname, address, token, nil, time.Minute*5) + ctx, cancel := context.WithTimeout(context.Background(), time.Minute*5) + defer cancel() + + return m.JoinCluster(ctx, hostname, address, token, nil) } diff --git a/microceph/cmd/microceph/cluster_list.go b/microceph/cmd/microceph/cluster_list.go index 1a7a9eba..bc3ff549 100644 --- a/microceph/cmd/microceph/cluster_list.go +++ b/microceph/cmd/microceph/cluster_list.go @@ -26,7 +26,7 @@ func (c *cmdClusterList) Command() *cobra.Command { } func (c *cmdClusterList) Run(cmd *cobra.Command, args []string) error { - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microceph/cluster_migrate.go b/microceph/cmd/microceph/cluster_migrate.go index bf7e430b..d1ff94b4 100644 --- a/microceph/cmd/microceph/cluster_migrate.go +++ b/microceph/cmd/microceph/cluster_migrate.go @@ -4,10 +4,11 @@ import ( "context" "github.com/canonical/lxd/shared/logger" - "github.com/canonical/microceph/microceph/api/types" - "github.com/canonical/microceph/microceph/client" "github.com/canonical/microcluster/microcluster" "github.com/spf13/cobra" + + "github.com/canonical/microceph/microceph/api/types" + "github.com/canonical/microceph/microceph/client" ) type cmdClusterMigrate struct { @@ -29,7 +30,7 @@ func (c *cmdClusterMigrate) Run(cmd *cobra.Command, args []string) error { return cmd.Help() } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microceph/cluster_remove.go b/microceph/cmd/microceph/cluster_remove.go index 8a4a79d5..55d7bcba 100644 --- a/microceph/cmd/microceph/cluster_remove.go +++ b/microceph/cmd/microceph/cluster_remove.go @@ -1,11 +1,10 @@ package main import ( - "context" "fmt" + "github.com/canonical/lxd/shared/logger" microCli "github.com/canonical/microcluster/client" - "github.com/canonical/microcluster/microcluster" "github.com/spf13/cobra" @@ -36,7 +35,7 @@ func (c *cmdClusterRemove) Run(cmd *cobra.Command, args []string) error { return cmd.Help() } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microceph/cluster_sql.go b/microceph/cmd/microceph/cluster_sql.go index 1f35589b..42b581f5 100644 --- a/microceph/cmd/microceph/cluster_sql.go +++ b/microceph/cmd/microceph/cluster_sql.go @@ -37,13 +37,13 @@ func (c *cmdClusterSQL) Run(cmd *cobra.Command, args []string) error { } } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } query := args[0] - dump, batch, err := m.SQL(query) + dump, batch, err := m.SQL(context.Background(), query) if err != nil { return err } diff --git a/microceph/cmd/microceph/disable_rgw.go b/microceph/cmd/microceph/disable_rgw.go index 15b37760..d0bbcdf0 100644 --- a/microceph/cmd/microceph/disable_rgw.go +++ b/microceph/cmd/microceph/disable_rgw.go @@ -27,7 +27,7 @@ func (c *cmdDisableRGW) Command() *cobra.Command { // Run handles the disable rgw command. func (c *cmdDisableRGW) Run(cmd *cobra.Command, args []string) error { - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microceph/disk_add.go b/microceph/cmd/microceph/disk_add.go index a680b932..75015543 100644 --- a/microceph/cmd/microceph/disk_add.go +++ b/microceph/cmd/microceph/disk_add.go @@ -3,7 +3,6 @@ package main import ( "context" "fmt" - "github.com/canonical/microceph/microceph/constants" "sort" "strings" @@ -13,6 +12,7 @@ import ( "github.com/canonical/microceph/microceph/api/types" "github.com/canonical/microceph/microceph/client" + "github.com/canonical/microceph/microceph/constants" ) type cmdDiskAdd struct { @@ -75,7 +75,7 @@ func (c *cmdDiskAdd) Run(cmd *cobra.Command, args []string) error { return fmt.Errorf("arg validation failed: %w", err) } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microceph/disk_list.go b/microceph/cmd/microceph/disk_list.go index 1106f129..938a6609 100644 --- a/microceph/cmd/microceph/disk_list.go +++ b/microceph/cmd/microceph/disk_list.go @@ -4,11 +4,10 @@ import ( "context" "encoding/json" "fmt" - "github.com/canonical/lxd/shared/api" - "github.com/canonical/microceph/microceph/constants" "os" "sort" + "github.com/canonical/lxd/shared/api" lxdCmd "github.com/canonical/lxd/shared/cmd" "github.com/canonical/lxd/shared/logger" "github.com/canonical/lxd/shared/units" @@ -19,6 +18,7 @@ import ( "github.com/canonical/microceph/microceph/api/types" "github.com/canonical/microceph/microceph/client" "github.com/canonical/microceph/microceph/common" + "github.com/canonical/microceph/microceph/constants" ) type cmdDiskList struct { @@ -52,7 +52,7 @@ type DiskListOutput struct { } func (c *cmdDiskList) Run(cmd *cobra.Command, args []string) error { - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microceph/disk_remove.go b/microceph/cmd/microceph/disk_remove.go index 0995d358..f70fade8 100644 --- a/microceph/cmd/microceph/disk_remove.go +++ b/microceph/cmd/microceph/disk_remove.go @@ -42,7 +42,7 @@ func (c *cmdDiskRemove) Run(cmd *cobra.Command, args []string) error { return cmd.Help() } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microceph/enable_mds.go b/microceph/cmd/microceph/enable_mds.go index 69d26e54..ada5da86 100644 --- a/microceph/cmd/microceph/enable_mds.go +++ b/microceph/cmd/microceph/enable_mds.go @@ -3,10 +3,11 @@ package main import ( "context" - "github.com/canonical/microceph/microceph/api/types" - "github.com/canonical/microceph/microceph/client" "github.com/canonical/microcluster/microcluster" "github.com/spf13/cobra" + + "github.com/canonical/microceph/microceph/api/types" + "github.com/canonical/microceph/microceph/client" ) type cmdEnableMDS struct { @@ -28,7 +29,7 @@ func (c *cmdEnableMDS) Command() *cobra.Command { // Run handles the enable mds command. func (c *cmdEnableMDS) Run(cmd *cobra.Command, args []string) error { - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microceph/enable_mgr.go b/microceph/cmd/microceph/enable_mgr.go index 0e75173e..ce618f65 100644 --- a/microceph/cmd/microceph/enable_mgr.go +++ b/microceph/cmd/microceph/enable_mgr.go @@ -29,7 +29,7 @@ func (c *cmdEnableMGR) Command() *cobra.Command { // Run handles the enable mgr command. func (c *cmdEnableMGR) Run(cmd *cobra.Command, args []string) error { - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microceph/enable_mon.go b/microceph/cmd/microceph/enable_mon.go index e3eb4313..1c150648 100644 --- a/microceph/cmd/microceph/enable_mon.go +++ b/microceph/cmd/microceph/enable_mon.go @@ -29,7 +29,7 @@ func (c *cmdEnableMON) Command() *cobra.Command { // Run handles the enable mon command. func (c *cmdEnableMON) Run(cmd *cobra.Command, args []string) error { - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microceph/enable_rgw.go b/microceph/cmd/microceph/enable_rgw.go index f429911b..890b2b34 100644 --- a/microceph/cmd/microceph/enable_rgw.go +++ b/microceph/cmd/microceph/enable_rgw.go @@ -33,7 +33,7 @@ func (c *cmdEnableRGW) Command() *cobra.Command { // Run handles the enable rgw command. func (c *cmdEnableRGW) Run(cmd *cobra.Command, args []string) error { - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microceph/init.go b/microceph/cmd/microceph/init.go index cba3928c..21c9e005 100644 --- a/microceph/cmd/microceph/init.go +++ b/microceph/cmd/microceph/init.go @@ -31,7 +31,7 @@ func (c *cmdInit) Command() *cobra.Command { func (c *cmdInit) Run(cmd *cobra.Command, args []string) error { // Connect to the daemon. - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } @@ -80,7 +80,10 @@ func (c *cmdInit) Run(cmd *cobra.Command, args []string) error { } // Bootstrap the cluster. - err = m.NewCluster(hostName, address, nil, time.Minute*2) + ctx, cancel := context.WithTimeout(context.Background(), time.Minute*2) + defer cancel() + + err = m.NewCluster(ctx, hostName, address, nil) if err != nil { return err } @@ -92,7 +95,10 @@ func (c *cmdInit) Run(cmd *cobra.Command, args []string) error { return err } - err = m.JoinCluster(hostName, address, token, nil, time.Minute*2) + ctx, cancel := context.WithTimeout(context.Background(), time.Minute*2) + defer cancel() + + err = m.JoinCluster(ctx, hostName, address, token, nil) if err != nil { return err } @@ -120,7 +126,7 @@ func (c *cmdInit) Run(cmd *cobra.Command, args []string) error { } // Issue the token. - token, err := m.NewJoinToken(tokenName) + token, err := m.NewJoinToken(context.Background(), tokenName) if err != nil { return err } diff --git a/microceph/cmd/microceph/log.go b/microceph/cmd/microceph/log.go index 118b6a7c..56311b02 100644 --- a/microceph/cmd/microceph/log.go +++ b/microceph/cmd/microceph/log.go @@ -50,7 +50,7 @@ func (c *cmdLogGetLevel) Command() *cobra.Command { cmd := &cobra.Command{ Use: "get-level", Short: "Get the current log level, as an integer", - RunE: c.Run, + RunE: c.Run, } return cmd @@ -61,7 +61,7 @@ func (c *cmdLogSetLevel) Run(cmd *cobra.Command, args []string) error { return cmd.Help() } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } @@ -83,7 +83,7 @@ func (c *cmdLogGetLevel) Run(cmd *cobra.Command, args []string) error { return cmd.Help() } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microceph/pool.go b/microceph/cmd/microceph/pool.go index 12e11fe6..5f9bdb76 100644 --- a/microceph/cmd/microceph/pool.go +++ b/microceph/cmd/microceph/pool.go @@ -3,11 +3,11 @@ package main import ( "context" - "github.com/canonical/microcluster/microcluster" "github.com/spf13/cobra" "github.com/canonical/microceph/microceph/api/types" "github.com/canonical/microceph/microceph/client" + "github.com/canonical/microcluster/microcluster" ) type cmdPool struct { @@ -17,7 +17,7 @@ type cmdPool struct { type cmdPoolSetRF struct { common *CmdControl poolRF *cmdPool - poolSize int64 + poolSize int64 } func (c *cmdPoolSetRF) Command() *cobra.Command { @@ -32,18 +32,18 @@ func (c *cmdPoolSetRF) Command() *cobra.Command { RunE: c.Run, } - cmd.Flags().Int64Var(&c.poolSize, "size", 3, "Pool size") - cmd.MarkFlagRequired("size") + cmd.Flags().Int64Var(&c.poolSize, "size", 3, "Pool size") + cmd.MarkFlagRequired("size") return cmd } func (c *cmdPoolSetRF) Run(cmd *cobra.Command, args []string) error { - if len(args) < 1 { + if len(args) < 1 { return cmd.Help() } - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microceph/status.go b/microceph/cmd/microceph/status.go index bf9ef23b..4190cef3 100644 --- a/microceph/cmd/microceph/status.go +++ b/microceph/cmd/microceph/status.go @@ -27,7 +27,7 @@ func (c *cmdStatus) Command() *cobra.Command { } func (c *cmdStatus) Run(cmd *cobra.Command, args []string) error { - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir, Verbose: c.common.FlagLogVerbose, Debug: c.common.FlagLogDebug}) if err != nil { return err } diff --git a/microceph/cmd/microcephd/main.go b/microceph/cmd/microcephd/main.go index ef93ff56..454bfa0d 100644 --- a/microceph/cmd/microcephd/main.go +++ b/microceph/cmd/microcephd/main.go @@ -3,7 +3,6 @@ package main import ( "context" - "github.com/canonical/microceph/microceph/interfaces" "math/rand" "os" "time" @@ -18,6 +17,7 @@ import ( "github.com/canonical/microceph/microceph/ceph" "github.com/canonical/microceph/microceph/common" "github.com/canonical/microceph/microceph/database" + "github.com/canonical/microceph/microceph/interfaces" "github.com/canonical/microceph/microceph/version" ) @@ -63,7 +63,7 @@ func (c *cmdDaemon) Command() *cobra.Command { } func (c *cmdDaemon) Run(cmd *cobra.Command, args []string) error { - m, err := microcluster.App(context.Background(), microcluster.Args{StateDir: c.flagStateDir, Verbose: c.global.flagLogVerbose, Debug: c.global.flagLogDebug}) + m, err := microcluster.App(microcluster.Args{StateDir: c.flagStateDir, Verbose: c.global.flagLogVerbose, Debug: c.global.flagLogDebug}) if err != nil { return err } @@ -86,7 +86,7 @@ func (c *cmdDaemon) Run(cmd *cobra.Command, args []string) error { return ceph.Start(interf) } - return m.Start(api.Endpoints, database.SchemaExtensions, h) + return m.Start(context.Background(), api.Endpoints, database.SchemaExtensions, nil, h) } func init() { diff --git a/microceph/database/schema.go b/microceph/database/schema.go index 7a7b5285..876beb1a 100644 --- a/microceph/database/schema.go +++ b/microceph/database/schema.go @@ -10,10 +10,10 @@ import ( // SchemaExtensions is a list of schema extensions that can be passed to the MicroCluster daemon. // Each entry will increase the database schema version by one, and will be applied after internal schema updates. -var SchemaExtensions = map[int]schema.Update{ - 1: schemaUpdate1, - 2: schemaUpdate2, - 3: schemaUpdate3, +var SchemaExtensions = []schema.Update{ + schemaUpdate1, + schemaUpdate2, + schemaUpdate3, } func schemaUpdate1(ctx context.Context, tx *sql.Tx) error { diff --git a/microceph/go.mod b/microceph/go.mod index fccd83b0..32fbfd4d 100644 --- a/microceph/go.mod +++ b/microceph/go.mod @@ -1,18 +1,20 @@ module github.com/canonical/microceph/microceph -go 1.21 +go 1.22.0 + +toolchain go1.22.4 require ( github.com/Rican7/retry v0.3.1 - github.com/canonical/lxd v0.0.0-20240212112812-adfaa529e9b6 - github.com/canonical/microcluster v0.0.0-20240208164706-7d8d3f4c1e7b + github.com/canonical/lxd v0.0.0-20240416183821-50ee226c5522 + github.com/canonical/microcluster v0.0.0-20240610151851-0870f2fa6a21 github.com/google/go-cmp v0.6.0 github.com/gorilla/mux v1.8.1 github.com/olekukonko/tablewriter v0.0.5 github.com/pborman/uuid v1.2.1 github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.8.0 - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.9.0 github.com/tidwall/gjson v1.17.1 github.com/tidwall/sjson v1.2.5 ) @@ -25,10 +27,9 @@ require ( github.com/flosch/pongo2 v0.0.0-20200913210552-0d938eb266f3 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fvbommel/sortorder v1.1.0 // indirect - github.com/golang/protobuf v1.5.3 // indirect github.com/google/renameio v1.0.1 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/gorilla/schema v1.2.1 // indirect + github.com/gorilla/schema v1.3.0 // indirect github.com/gorilla/securecookie v1.1.2 // indirect github.com/gorilla/websocket v1.5.1 // indirect github.com/gosexy/gettext v0.0.0-20160830220431-74466a0a0c4a // indirect @@ -36,7 +37,7 @@ require ( github.com/jaypipes/pcidb v1.0.0 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/kr/fs v0.1.0 // indirect - github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect github.com/mattn/go-sqlite3 v1.14.22 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect @@ -47,22 +48,18 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/robfig/cron/v3 v3.0.1 // indirect - github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/stretchr/objx v0.5.1 // indirect + github.com/stretchr/objx v0.5.2 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.1 // indirect github.com/zitadel/oidc/v2 v2.12.0 // indirect - golang.org/x/crypto v0.19.0 // indirect - golang.org/x/net v0.21.0 // indirect - golang.org/x/oauth2 v0.17.0 // indirect - golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.17.0 // indirect - golang.org/x/term v0.17.0 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/oauth2 v0.19.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/term v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/protobuf v1.33.0 // indirect - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/square/go-jose.v2 v2.6.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/microceph/go.sum b/microceph/go.sum index e1e311cd..145f0878 100644 --- a/microceph/go.sum +++ b/microceph/go.sum @@ -52,10 +52,10 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= github.com/canonical/go-dqlite v1.21.0 h1:4gLDdV2GF+vg0yv9Ff+mfZZNQ1JGhnQ3GnS2GeZPHfA= github.com/canonical/go-dqlite v1.21.0/go.mod h1:Uvy943N8R4CFUAs59A1NVaziWY9nJ686lScY7ywurfg= -github.com/canonical/lxd v0.0.0-20240212112812-adfaa529e9b6 h1:szjA3cygzm6zKyjsz/Od5/59GZO6ezuT+2i+yt9KhmA= -github.com/canonical/lxd v0.0.0-20240212112812-adfaa529e9b6/go.mod h1:gSJeb4COdMY0t5aZGUcEztX0SqdGQkTU9BvaBD1hYws= -github.com/canonical/microcluster v0.0.0-20240208164706-7d8d3f4c1e7b h1:WOmT+Xt05bWUsPHjwSnlprxMajWYMRjqJ8PsWBMpCSM= -github.com/canonical/microcluster v0.0.0-20240208164706-7d8d3f4c1e7b/go.mod h1:8zvuZWWjApuB3/lH0D8iwZ7C7XV8knBia64HL5lJ9zY= +github.com/canonical/lxd v0.0.0-20240416183821-50ee226c5522 h1:vPnKbGBCOPbDQdVBxQQNfsEXsvYUG1pzdkPkF6Yr/aE= +github.com/canonical/lxd v0.0.0-20240416183821-50ee226c5522/go.mod h1:3pCPTB78sWmKB/GPsEtbvwLsoHpa7XS/ucEuqoSfWUk= +github.com/canonical/microcluster v0.0.0-20240610151851-0870f2fa6a21 h1:fwfhkeAs8D3BzJy7VJyyg4s9Q6LeFwzowMszsyEqsr0= +github.com/canonical/microcluster v0.0.0-20240610151851-0870f2fa6a21/go.mod h1:e+5/TvKFuQaphV6Aaw7nGDZi2TJ6fls04FV9kBOjcDA= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= 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= @@ -129,8 +129,6 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= 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/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -175,8 +173,8 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/gorilla/schema v1.2.1 h1:tjDxcmdb+siIqkTNoV+qRH2mjYdr2hHe5MKXbp61ziM= -github.com/gorilla/schema v1.2.1/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4FggUMnM= +github.com/gorilla/schema v1.3.0 h1:rbciOzXAx3IB8stEFnfTwO3sYa6EWlQk79XdyustPDA= +github.com/gorilla/schema v1.3.0/go.mod h1:Dg5SSm5PV60mhF2NFaTV1xuYYj8tV8NOPRo4FggUMnM= github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA= github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo= github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= @@ -224,7 +222,6 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -268,7 +265,6 @@ github.com/pborman/uuid v1.2.1 h1:+ZZIw58t/ozdjRaXh/3awHfmWRbzYxJoAdNJxe/3pvw= github.com/pborman/uuid v1.2.1/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/peterh/liner v1.2.1/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -289,7 +285,6 @@ github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo= @@ -314,9 +309,8 @@ github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.1 h1:4VhoImhV/Bm0ToFkXFi8hXNXwpDRZ/ynw3amt82mzq0= -github.com/stretchr/objx v0.5.1/go.mod h1:/iHQpkQwBD6DLUmQ4pE+s1TXdob1mORJ4/UFdrifcy0= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= +github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= @@ -325,9 +319,8 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/gjson v1.17.1 h1:wlYEnwqAHgzmhNUFfw7Xalt2JzQvsMx2Se4PcoFCT/U= @@ -357,12 +350,12 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/otel v1.23.1 h1:Za4UzOqJYS+MUczKI320AtqZHZb7EqxO00jAHE0jmQY= -go.opentelemetry.io/otel v1.23.1/go.mod h1:Td0134eafDLcTS4y+zQ26GE8u3dEuRBiBCTUIRHaikA= -go.opentelemetry.io/otel/metric v1.23.1 h1:PQJmqJ9u2QaJLBOELl1cxIdPcpbwzbkjfEyelTl2rlo= -go.opentelemetry.io/otel/metric v1.23.1/go.mod h1:mpG2QPlAfnK8yNhNJAxDZruU9Y1/HubbC+KyH8FaCWI= -go.opentelemetry.io/otel/trace v1.23.1 h1:4LrmmEd8AU2rFvU1zegmvqW7+kWarxtNOPyeL6HmYY8= -go.opentelemetry.io/otel/trace v1.23.1/go.mod h1:4IpnpJFwr1mo/6HL8XIPJaE9y0+u1KcVmuW7dwFSVrI= +go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= +go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= +go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= +go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= +go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= +go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= @@ -375,8 +368,8 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= 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= @@ -451,8 +444,8 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.21.0 h1:AQyQV4dYCvJ7vGmJyKki9+PBdyvhkSd8EIx/qb0AYv4= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= 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= @@ -465,8 +458,8 @@ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 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.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ= -golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= +golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg= +golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= 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= @@ -479,8 +472,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 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-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -529,13 +522,13 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= +golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= +golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= 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= @@ -544,7 +537,6 @@ 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.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= @@ -636,8 +628,6 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -711,8 +701,6 @@ 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.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=