Rework error messages
This commit reworks error messages for all commands and makes sure they pass liniting.
This commit is contained in:
parent
d22784e6f5
commit
c31c46ee44
40 changed files with 249 additions and 110 deletions
|
|
@ -34,11 +34,13 @@ func (blindUpdate) Description() wisski_distillery.Description {
|
|||
}
|
||||
|
||||
var errBlindUpdateFailed = exit.Error{
|
||||
Message: "failed to run blind update script for instance %q: exited with code %s",
|
||||
Message: "failed to run blind update",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (bu blindUpdate) Run(context wisski_distillery.Context) error {
|
||||
func (bu blindUpdate) Run(context wisski_distillery.Context) (err error) {
|
||||
defer errBlindUpdateFailed.DeferWrap(&err)
|
||||
|
||||
// find all the instances!
|
||||
wissKIs, err := context.Environment.Instances().Load(context.Context, bu.Positionals.Slug...)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ func (cBootstrap) Description() wisski_distillery.Description {
|
|||
}
|
||||
|
||||
var errBootstrapDifferent = exit.Error{
|
||||
Message: "refusing to bootstrap: base directory is already set to %s.",
|
||||
Message: "refusing to bootstrap: base directory is already set to %s",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
|
|
@ -54,17 +54,17 @@ var errBoostrapFailedToCopyExe = exit.Error{
|
|||
}
|
||||
|
||||
var errBootstrapWriteConfig = exit.Error{
|
||||
Message: "failed to write configuration file: %s",
|
||||
Message: "failed to write configuration file",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
var errBootstrapOpenConfig = exit.Error{
|
||||
Message: "failed to open configuration file: %s",
|
||||
Message: "failed to open configuration file",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
var errBootstrapCreateFile = exit.Error{
|
||||
Message: "failed to touch configuration file: %s",
|
||||
Message: "failed to touch configuration file",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
|
|
@ -82,10 +82,10 @@ func (bs cBootstrap) Run(context wisski_distillery.Context) error {
|
|||
{
|
||||
logging.LogMessage(context.Stderr, context.Context, "Creating root deployment directory")
|
||||
if err := fsx.MkdirAll(root, fsx.DefaultDirPerm); err != nil {
|
||||
return errBootstrapFailedToCreateDirectory.WithMessageF(root)
|
||||
return errBootstrapFailedToCreateDirectory.WithMessageF(root).Wrap(err)
|
||||
}
|
||||
if err := cli.WriteBaseDirectory(root); err != nil {
|
||||
return errBootstrapFailedToSaveDirectory.WithMessageF(root)
|
||||
return errBootstrapFailedToSaveDirectory.WithMessageF(root).Wrap(err)
|
||||
}
|
||||
context.Println(root)
|
||||
}
|
||||
|
|
@ -101,7 +101,7 @@ func (bs cBootstrap) Run(context wisski_distillery.Context) error {
|
|||
|
||||
// and use thge defaults
|
||||
if err := tpl.SetDefaults(); err != nil {
|
||||
return errBootstrapWriteConfig.WithMessageF(err)
|
||||
return errBootstrapWriteConfig.Wrap(err)
|
||||
}
|
||||
|
||||
{
|
||||
|
|
@ -145,7 +145,7 @@ func (bs cBootstrap) Run(context wisski_distillery.Context) error {
|
|||
|
||||
return nil
|
||||
}, context.Stderr, context.Context, "Creating custom config files"); err != nil {
|
||||
return errBootstrapCreateFile.WithMessageF(err)
|
||||
return errBootstrapCreateFile.Wrap(err)
|
||||
}
|
||||
|
||||
// Validate configuration file!
|
||||
|
|
@ -171,7 +171,7 @@ func (bs cBootstrap) Run(context wisski_distillery.Context) error {
|
|||
return err
|
||||
}
|
||||
}, context.Stderr, context.Context, "Installing primary configuration file"); err != nil {
|
||||
return errBootstrapWriteConfig.WithMessageF(err)
|
||||
return errBootstrapWriteConfig.Wrap(err)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -181,13 +181,13 @@ func (bs cBootstrap) Run(context wisski_distillery.Context) error {
|
|||
logging.LogMessage(context.Stderr, context.Context, "Configuration is now complete")
|
||||
f, err := os.Open(cfgPath)
|
||||
if err != nil {
|
||||
return errBootstrapOpenConfig.WithMessageF(err)
|
||||
return errBootstrapOpenConfig.Wrap(err)
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
var cfg config.Config
|
||||
if err := cfg.Unmarshal(f); err != nil {
|
||||
return errBootstrapOpenConfig.WithMessageF(err)
|
||||
return errBootstrapOpenConfig.Wrap(err)
|
||||
}
|
||||
context.Println(cfg)
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package cmd
|
|||
import (
|
||||
wisski_distillery "github.com/FAU-CDI/wisski-distillery"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/cli"
|
||||
"github.com/tkw1536/goprogram/exit"
|
||||
)
|
||||
|
||||
// Config is the configuration command
|
||||
|
|
@ -20,6 +21,14 @@ func (c cfg) Description() wisski_distillery.Description {
|
|||
}
|
||||
}
|
||||
|
||||
func (cfg) Run(context wisski_distillery.Context) error {
|
||||
return context.Environment.Config.Marshal(context.Stdout)
|
||||
var errMarshalConfig = exit.Error{
|
||||
Message: "unable to marshal config",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (cfg) Run(context wisski_distillery.Context) error {
|
||||
if err := context.Environment.Config.Marshal(context.Stdout); err != nil {
|
||||
return errMarshalConfig.Wrap(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
10
cmd/cron.go
10
cmd/cron.go
|
|
@ -7,6 +7,7 @@ import (
|
|||
wisski_distillery "github.com/FAU-CDI/wisski-distillery"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/cli"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/wisski"
|
||||
"github.com/tkw1536/goprogram/exit"
|
||||
"github.com/tkw1536/goprogram/status"
|
||||
)
|
||||
|
||||
|
|
@ -31,7 +32,14 @@ func (cron) Description() wisski_distillery.Description {
|
|||
}
|
||||
}
|
||||
|
||||
func (cr cron) Run(context wisski_distillery.Context) error {
|
||||
var errCronFailed = exit.Error{
|
||||
Message: "failed to run cron",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (cr cron) Run(context wisski_distillery.Context) (err error) {
|
||||
defer errCronFailed.DeferWrap(&err)
|
||||
|
||||
// find all the instances!
|
||||
wissKIs, err := context.Environment.Instances().Load(context.Context, cr.Positionals.Slug...)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -63,7 +63,14 @@ func (dg disGrant) AfterParse() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (dg disGrant) Run(context wisski_distillery.Context) error {
|
||||
var errFailedGrant = exit.Error{
|
||||
Message: "unable to manage grants",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (dg disGrant) Run(context wisski_distillery.Context) (err error) {
|
||||
defer errFailedGrant.DeferWrap(&err)
|
||||
|
||||
switch {
|
||||
case dg.AddUser:
|
||||
return dg.runAddUser(context)
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ type disSSH struct {
|
|||
|
||||
Positionals struct {
|
||||
User string `positional-arg-name:"USER" required:"1-1" description:"distillery username"`
|
||||
Path string `positional-arg-name:"PATH" required:"1-1" description:"Path of key to add"`
|
||||
Path string `positional-arg-name:"PATH" required:"1-1" description:"path of key to add"`
|
||||
} `positional-args:"true"`
|
||||
}
|
||||
|
||||
|
|
@ -53,6 +53,11 @@ func (ds disSSH) AfterParse() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
var errSSHManageFailed = exit.Error{
|
||||
Message: "unable to manage ssh keys",
|
||||
ExitCode: exit.ExitCommandArguments,
|
||||
}
|
||||
|
||||
func (ds disSSH) Run(context wisski_distillery.Context) error {
|
||||
switch {
|
||||
case ds.Add:
|
||||
|
|
@ -71,12 +76,12 @@ var errNoKey = exit.Error{
|
|||
func (ds disSSH) parseOpts(context wisski_distillery.Context) (user *auth.AuthUser, key gossh.PublicKey, err error) {
|
||||
user, err = context.Environment.Auth().User(context.Context, ds.Positionals.User)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
return nil, nil, errSSHManageFailed.Wrap(err)
|
||||
}
|
||||
|
||||
content, err := os.ReadFile(ds.Positionals.Path)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
return nil, nil, errSSHManageFailed.Wrap(err)
|
||||
}
|
||||
|
||||
pk, _, _, _, err := gossh.ParseAuthorizedKey(content)
|
||||
|
|
@ -93,7 +98,10 @@ func (ds disSSH) runAdd(context wisski_distillery.Context) error {
|
|||
return err
|
||||
}
|
||||
|
||||
return context.Environment.Keys().Add(context.Context, user.User.User, ds.Comment, key)
|
||||
if err := context.Environment.Keys().Add(context.Context, user.User.User, ds.Comment, key); err != nil {
|
||||
return errSSHManageFailed.Wrap(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (ds disSSH) runRemove(context wisski_distillery.Context) error {
|
||||
|
|
@ -102,5 +110,8 @@ func (ds disSSH) runRemove(context wisski_distillery.Context) error {
|
|||
return err
|
||||
}
|
||||
|
||||
return context.Environment.Keys().Remove(context.Context, user.User.User, key)
|
||||
if err := context.Environment.Keys().Remove(context.Context, user.User.User, key); err != nil {
|
||||
return errSSHManageFailed.Wrap(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ type disUser struct {
|
|||
DisableTOTP bool `short:"v" long:"disable-totp" description:"disable totp for a user"`
|
||||
|
||||
Positionals struct {
|
||||
User string `positional-arg-name:"USER" description:"username to manage. May be omitted for some actions"`
|
||||
User string `positional-arg-name:"USER" description:"username to manage. may be omitted for some actions"`
|
||||
} `positional-args:"true"`
|
||||
}
|
||||
|
||||
|
|
@ -78,7 +78,14 @@ func (du disUser) AfterParse() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (du disUser) Run(context wisski_distillery.Context) error {
|
||||
var errDisUserActionFailed = exit.Error{
|
||||
Message: "action failed",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (du disUser) Run(context wisski_distillery.Context) (err error) {
|
||||
defer errDisUserActionFailed.DeferWrap(&err)
|
||||
|
||||
switch {
|
||||
case du.InfoUser:
|
||||
return du.runInfo(context)
|
||||
|
|
|
|||
|
|
@ -39,10 +39,15 @@ var errSettingSet = exit.Error{
|
|||
Message: "unable to set setting",
|
||||
}
|
||||
|
||||
var errSettingWissKI = exit.Error{
|
||||
Message: "unable to get WissKI",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (ds setting) Run(context wisski_distillery.Context) error {
|
||||
instance, err := context.Environment.Instances().WissKI(context.Context, ds.Positionals.Slug)
|
||||
if err != nil {
|
||||
return err
|
||||
return errSettingWissKI.Wrap(err)
|
||||
}
|
||||
|
||||
if ds.Positionals.Value == "" {
|
||||
|
|
|
|||
|
|
@ -74,7 +74,14 @@ var errPasswordsNotIdentical = exit.Error{
|
|||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (du drupalUser) Run(context wisski_distillery.Context) error {
|
||||
var errDrupalUserActionFailed = exit.Error{
|
||||
Message: "action failed",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (du drupalUser) Run(context wisski_distillery.Context) (err error) {
|
||||
defer errDrupalUserActionFailed.DeferWrap(&err)
|
||||
|
||||
instance, err := context.Environment.Instances().WissKI(context.Context, du.Positionals.Slug)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -102,11 +109,6 @@ func (du drupalUser) login(context wisski_distillery.Context, instance *wisski.W
|
|||
return nil
|
||||
}
|
||||
|
||||
var errPasswordFound = exit.Error{
|
||||
Message: "user had a dictionary password",
|
||||
ExitCode: 5,
|
||||
}
|
||||
|
||||
func (du drupalUser) checkCommonPassword(context wisski_distillery.Context, instance *wisski.WissKI) error {
|
||||
users := instance.Users()
|
||||
|
||||
|
|
|
|||
10
cmd/info.go
10
cmd/info.go
|
|
@ -5,6 +5,7 @@ import (
|
|||
|
||||
wisski_distillery "github.com/FAU-CDI/wisski-distillery"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/cli"
|
||||
"github.com/tkw1536/goprogram/exit"
|
||||
"github.com/tkw1536/pkglib/collection"
|
||||
)
|
||||
|
||||
|
|
@ -28,7 +29,14 @@ func (info) Description() wisski_distillery.Description {
|
|||
}
|
||||
}
|
||||
|
||||
func (i info) Run(context wisski_distillery.Context) error {
|
||||
var errInfoFailed = exit.Error{
|
||||
Message: "failed to get info",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (i info) Run(context wisski_distillery.Context) (err error) {
|
||||
defer errInfoFailed.DeferWrap(&err)
|
||||
|
||||
instance, err := context.Environment.Instances().WissKI(context.Context, i.Positionals.Slug)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
|||
|
|
@ -45,10 +45,15 @@ var errNotUnlock = exit.Error{
|
|||
ExitCode: exit.ExitCommandArguments,
|
||||
}
|
||||
|
||||
var errInstanceLockWissKI = exit.Error{
|
||||
Message: "unable to get WissKI",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (l instanceLock) Run(context wisski_distillery.Context) error {
|
||||
instance, err := context.Environment.Instances().WissKI(context.Context, l.Positionals.Slug)
|
||||
if err != nil {
|
||||
return err
|
||||
return errInstanceLockWissKI.Wrap(err)
|
||||
}
|
||||
|
||||
if l.Unlock {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package cmd
|
|||
import (
|
||||
wisski_distillery "github.com/FAU-CDI/wisski-distillery"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/cli"
|
||||
"github.com/tkw1536/goprogram/exit"
|
||||
)
|
||||
|
||||
// InstancePause is the 'instance_pause' command
|
||||
|
|
@ -33,10 +34,15 @@ func (i instancepause) AfterParse() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
var errInstancePauseWissKI = exit.Error{
|
||||
Message: "unable to get WissKI",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (i instancepause) Run(context wisski_distillery.Context) error {
|
||||
instance, err := context.Environment.Instances().WissKI(context.Context, i.Positionals.Slug)
|
||||
if err != nil {
|
||||
return err
|
||||
return errInstancePauseWissKI.Wrap(err)
|
||||
}
|
||||
|
||||
if i.Stop {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package cmd
|
|||
import (
|
||||
wisski_distillery "github.com/FAU-CDI/wisski-distillery"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/cli"
|
||||
"github.com/tkw1536/goprogram/exit"
|
||||
)
|
||||
|
||||
// Ls is the 'ls' command
|
||||
|
|
@ -24,10 +25,15 @@ func (ls) Description() wisski_distillery.Description {
|
|||
}
|
||||
}
|
||||
|
||||
var errLsWissKI = exit.Error{
|
||||
Message: "unable to get WissKIs",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (l ls) Run(context wisski_distillery.Context) error {
|
||||
instances, err := context.Environment.Instances().Load(context.Context, l.Positionals.Slug...)
|
||||
if err != nil {
|
||||
return err
|
||||
return errLsWissKI.Wrap(err)
|
||||
}
|
||||
|
||||
for _, instance := range instances {
|
||||
|
|
|
|||
|
|
@ -27,12 +27,17 @@ func (makeMysqlAccount) Description() wisski_distillery.Description {
|
|||
|
||||
var errUnableToReadUsername = exit.Error{
|
||||
ExitCode: exit.ExitGeneric,
|
||||
Message: "unable to read username: %s",
|
||||
Message: "unable to read username",
|
||||
}
|
||||
|
||||
var errUnableToReadPassword = exit.Error{
|
||||
ExitCode: exit.ExitGeneric,
|
||||
Message: "unable to read password: %s",
|
||||
Message: "unable to read password",
|
||||
}
|
||||
|
||||
var errUnableToMakeAccount = exit.Error{
|
||||
ExitCode: exit.ExitGeneric,
|
||||
Message: "unable to create account",
|
||||
}
|
||||
|
||||
func (mma makeMysqlAccount) Run(context wisski_distillery.Context) error {
|
||||
|
|
@ -41,17 +46,17 @@ func (mma makeMysqlAccount) Run(context wisski_distillery.Context) error {
|
|||
context.Printf("Username>")
|
||||
username, err := context.ReadLine()
|
||||
if err != nil {
|
||||
return errUnableToReadUsername.WithMessageF(err)
|
||||
return errUnableToReadUsername.Wrap(err)
|
||||
}
|
||||
|
||||
context.Printf("Password>")
|
||||
password, err := context.ReadPassword()
|
||||
if err != nil {
|
||||
return errUnableToReadPassword.WithMessageF(err)
|
||||
return errUnableToReadPassword.Wrap(err)
|
||||
}
|
||||
|
||||
if err := dis.SQL().CreateSuperuser(context.Context, username, password, false); err != nil {
|
||||
return err
|
||||
return errUnableToMakeAccount.Wrap(err)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ func (pathbuilders) Description() wisski_distillery.Description {
|
|||
}
|
||||
|
||||
var errPathbuilders = exit.Error{
|
||||
Message: "unable to export pathbuilder: %s",
|
||||
Message: "unable to export pathbuilder",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
|
|
@ -36,19 +36,24 @@ var errNoPathbuilder = exit.Error{
|
|||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
var errPathbuilderWissKI = exit.Error{
|
||||
Message: "unable to find WissKI",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (pb pathbuilders) Run(context wisski_distillery.Context) error {
|
||||
|
||||
// get the wisski
|
||||
instance, err := context.Environment.Instances().WissKI(context.Context, pb.Positionals.Slug)
|
||||
if err != nil {
|
||||
return err
|
||||
return errPathbuilderWissKI.Wrap(err)
|
||||
}
|
||||
|
||||
// get all of the pathbuilders
|
||||
if pb.Positionals.Name == "" {
|
||||
names, err := instance.Pathbuilder().All(context.Context, nil)
|
||||
if err != nil {
|
||||
return errPathbuilders.WithMessageF(err)
|
||||
return errPathbuilders.Wrap(err)
|
||||
}
|
||||
for _, name := range names {
|
||||
context.Println(name)
|
||||
|
|
|
|||
|
|
@ -30,10 +30,15 @@ var errPrefixesGeneric = exit.Error{
|
|||
Message: "unable to load prefixes",
|
||||
}
|
||||
|
||||
var errPrefixesWissKI = exit.Error{
|
||||
Message: "unable to find WissKI",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (p prefixes) Run(context wisski_distillery.Context) error {
|
||||
instance, err := context.Environment.Instances().WissKI(context.Context, p.Positionals.Slug)
|
||||
if err != nil {
|
||||
return err
|
||||
return errPrefixesWissKI.Wrap(err)
|
||||
}
|
||||
|
||||
prefixes, err := instance.Prefixes().All(context.Context, nil)
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ func (pv) Description() wisski_distillery.Description {
|
|||
}
|
||||
|
||||
var errProvisionGeneric = exit.Error{
|
||||
Message: "unable to provision instance %s: %s",
|
||||
Message: "unable to provision instance %s",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
|
|
@ -39,7 +39,7 @@ func (p pv) Run(context wisski_distillery.Context) error {
|
|||
Slug: p.Positionals.Slug,
|
||||
})
|
||||
if err != nil {
|
||||
return errProvisionGeneric.WithMessageF(p.Positionals.Slug, err)
|
||||
return errProvisionGeneric.WithMessageF(p.Positionals.Slug).Wrap(err)
|
||||
}
|
||||
|
||||
// and we're done!
|
||||
|
|
|
|||
11
cmd/purge.go
11
cmd/purge.go
|
|
@ -31,6 +31,11 @@ var errPurgeNoConfirmation = exit.Error{
|
|||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
var errPurgeFailed = exit.Error{
|
||||
Message: "failed to run purge",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (p purge) Run(context wisski_distillery.Context) error {
|
||||
dis := context.Environment
|
||||
slug := p.Positionals.Slug
|
||||
|
|
@ -45,5 +50,9 @@ func (p purge) Run(context wisski_distillery.Context) error {
|
|||
}
|
||||
}
|
||||
|
||||
return dis.Purger().Purge(context.Context, context.Stdout, slug)
|
||||
// do the purge!
|
||||
if err := dis.Purger().Purge(context.Context, context.Stdout, slug); err != nil {
|
||||
return errPurgeFailed.Wrap(err)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,11 +32,13 @@ func (rebuild) Description() wisski_distillery.Description {
|
|||
}
|
||||
|
||||
var errRebuildFailed = exit.Error{
|
||||
Message: "failed to run rebuild script for instance %q: exited with code %s",
|
||||
Message: "failed to run rebuild",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (rb rebuild) Run(context wisski_distillery.Context) error {
|
||||
func (rb rebuild) Run(context wisski_distillery.Context) (err error) {
|
||||
defer errRebuildFailed.DeferWrap(&err)
|
||||
|
||||
dis := context.Environment
|
||||
|
||||
// find the instances
|
||||
|
|
|
|||
|
|
@ -36,11 +36,13 @@ var errReserveAlreadyExists = exit.Error{
|
|||
}
|
||||
|
||||
var errReserveGeneric = exit.Error{
|
||||
Message: "unable to provision instance %s: %s",
|
||||
Message: "unable to provision instance",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (r reserve) Run(context wisski_distillery.Context) error {
|
||||
func (r reserve) Run(context wisski_distillery.Context) (err error) {
|
||||
defer errReserveGeneric.DeferWrap(&err)
|
||||
|
||||
dis := context.Environment
|
||||
slug := r.Positionals.Slug
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import (
|
|||
"github.com/FAU-CDI/wisski-distillery/internal/cli"
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/tkw1536/goprogram/exit"
|
||||
"github.com/tkw1536/pkglib/errorx"
|
||||
)
|
||||
|
||||
// Server is the 'server' command
|
||||
|
|
@ -34,12 +35,24 @@ var errServerListen = exit.Error{
|
|||
Message: "unable to listen",
|
||||
}
|
||||
|
||||
var errServerTrigger = exit.Error{
|
||||
Message: "failed to trigger",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
var errServerGeneric = exit.Error{
|
||||
ExitCode: exit.ExitGeneric,
|
||||
Message: "unable to instantiate server",
|
||||
}
|
||||
|
||||
func (s server) Run(context wisski_distillery.Context) error {
|
||||
dis := context.Environment
|
||||
|
||||
// if the caller requested a trigger, just trigger the cron tasks
|
||||
if s.Trigger {
|
||||
return dis.Control().Trigger(context.Context)
|
||||
if err := dis.Control().Trigger(context.Context); err != nil {
|
||||
return errServerTrigger.Wrap(err)
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
|
|
@ -57,7 +70,7 @@ func (s server) Run(context wisski_distillery.Context) error {
|
|||
// and start the server
|
||||
public, internal, err := dis.Control().Server(context.Context, context.Stderr)
|
||||
if err != nil {
|
||||
return err
|
||||
return errServerGeneric.Wrap(err)
|
||||
}
|
||||
|
||||
// start the public listener
|
||||
|
|
@ -92,17 +105,11 @@ func (s server) Run(context wisski_distillery.Context) error {
|
|||
|
||||
go func() {
|
||||
<-context.Context.Done()
|
||||
|
||||
zerolog.Ctx(context.Context).Info().Msg("shutting down server")
|
||||
publicS.Shutdown(context.Context)
|
||||
internalS.Shutdown(context.Context)
|
||||
}()
|
||||
|
||||
if err2 := <-internalC; err2 != nil {
|
||||
err = err2
|
||||
}
|
||||
if err1 := <-publicC; err1 != nil {
|
||||
err = err1
|
||||
}
|
||||
|
||||
return errServerListen.Wrap(err)
|
||||
return errServerListen.Wrap(errorx.First(<-internalC, <-publicC, err))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,15 +32,15 @@ func (shell) Description() wisski_distillery.Description {
|
|||
}
|
||||
}
|
||||
|
||||
var errShell = exit.Error{
|
||||
Message: "unable to start shell: %s",
|
||||
var errShellWissKI = exit.Error{
|
||||
Message: "unable to find WissKI",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (sh shell) Run(context wisski_distillery.Context) error {
|
||||
instance, err := context.Environment.Instances().WissKI(context.Context, sh.Positionals.Slug)
|
||||
if err != nil {
|
||||
return err
|
||||
return errShellWissKI.Wrap(err)
|
||||
}
|
||||
|
||||
code := instance.Barrel().Shell(context.Context, context.IOStream, sh.Positionals.Args...)()
|
||||
|
|
|
|||
|
|
@ -35,13 +35,18 @@ var errSnapshotFailed = exit.Error{
|
|||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
var errSnapshotWissKI = exit.Error{
|
||||
Message: "unable to find WissKI",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (sn snapshot) Run(context wisski_distillery.Context) error {
|
||||
dis := context.Environment
|
||||
|
||||
// find the instance!
|
||||
instance, err := dis.Instances().WissKI(context.Context, sn.Positionals.Slug)
|
||||
if err != nil {
|
||||
return err
|
||||
return errSnapshotWissKI.Wrap(err)
|
||||
}
|
||||
|
||||
// do a snapshot of it!
|
||||
|
|
|
|||
|
|
@ -26,6 +26,11 @@ func (s ssh) Description() wisski_distillery.Description {
|
|||
}
|
||||
}
|
||||
|
||||
var errSSHServer = exit.Error{
|
||||
ExitCode: exit.ExitGeneric,
|
||||
Message: "unable to listen server",
|
||||
}
|
||||
|
||||
var errSSHListen = exit.Error{
|
||||
ExitCode: exit.ExitGeneric,
|
||||
Message: "unable to listen",
|
||||
|
|
@ -35,7 +40,7 @@ func (s ssh) Run(context wisski_distillery.Context) error {
|
|||
dis := context.Environment
|
||||
server, err := dis.SSH().Server(context.Context, s.PrivateKeyPath, context.Stderr)
|
||||
if err != nil {
|
||||
return err
|
||||
return errSSHServer.Wrap(err)
|
||||
}
|
||||
|
||||
context.Printf("Listening on %s\n", s.Bind)
|
||||
|
|
@ -43,7 +48,7 @@ func (s ssh) Run(context wisski_distillery.Context) error {
|
|||
// make a new listener
|
||||
listener, err := net.Listen("tcp", s.Bind)
|
||||
if err != nil {
|
||||
return errServerListen.Wrap(err)
|
||||
return errSSHListen.Wrap(err)
|
||||
}
|
||||
|
||||
go func() {
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import (
|
|||
|
||||
wisski_distillery "github.com/FAU-CDI/wisski-distillery"
|
||||
"github.com/FAU-CDI/wisski-distillery/internal/cli"
|
||||
"github.com/tkw1536/goprogram/exit"
|
||||
)
|
||||
|
||||
// Info is then 'info' command
|
||||
|
|
@ -24,10 +25,15 @@ func (cStatus) Description() wisski_distillery.Description {
|
|||
}
|
||||
}
|
||||
|
||||
var errStatusGeneric = exit.Error{
|
||||
ExitCode: exit.ExitGeneric,
|
||||
Message: "unable to get status",
|
||||
}
|
||||
|
||||
func (s cStatus) Run(context wisski_distillery.Context) error {
|
||||
status, _, err := context.Environment.Info().Status(context.Context, true)
|
||||
if err != nil {
|
||||
return err
|
||||
return errStatusGeneric.Wrap(err)
|
||||
}
|
||||
|
||||
if s.JSON {
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ func (systempause) Description() wisski_distillery.Description {
|
|||
}
|
||||
|
||||
var errStopStartExcluded = exit.Error{
|
||||
Message: "exactly one of `--stop` and `--start` must be provied",
|
||||
Message: "exactly one of `--stop` and `--start` must be provided",
|
||||
ExitCode: exit.ExitCommandArguments,
|
||||
}
|
||||
|
||||
|
|
@ -44,7 +44,14 @@ func (s systempause) AfterParse() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (sp systempause) Run(context wisski_distillery.Context) error {
|
||||
var errPauseGeneric = exit.Error{
|
||||
ExitCode: exit.ExitGeneric,
|
||||
Message: "unable to pause or resume system",
|
||||
}
|
||||
|
||||
func (sp systempause) Run(context wisski_distillery.Context) (err error) {
|
||||
defer errPauseGeneric.DeferWrap(&err)
|
||||
|
||||
if sp.Start {
|
||||
return sp.start(context, context.Environment)
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -53,26 +53,33 @@ func (s systemupdate) AfterParse() error {
|
|||
}
|
||||
|
||||
var errBoostrapFailedToCreateDirectory = exit.Error{
|
||||
Message: "failed to create directory %s: %s",
|
||||
Message: "failed to create directory %s",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
var errBootstrapComponent = exit.Error{
|
||||
Message: "unable to bootstrap %s: %s",
|
||||
Message: "unable to bootstrap %s",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
var errDockerUnreachable = exit.Error{
|
||||
Message: "unable to reach docker api: %s",
|
||||
Message: "unable to reach docker api",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
var errNetworkCreateFailed = exit.Error{
|
||||
Message: "unable to create docker network: %s",
|
||||
Message: "unable to create docker network",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (si systemupdate) Run(context wisski_distillery.Context) error {
|
||||
var errSystemUpdateGeneric = exit.Error{
|
||||
Message: "generic system update error",
|
||||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (si systemupdate) Run(context wisski_distillery.Context) (err error) {
|
||||
defer errSystemUpdateGeneric.DeferWrap(&err)
|
||||
|
||||
dis := context.Environment
|
||||
|
||||
// create all the other directories
|
||||
|
|
@ -86,7 +93,7 @@ func (si systemupdate) Run(context wisski_distillery.Context) error {
|
|||
} {
|
||||
context.Println(d)
|
||||
if err := fsx.MkdirAll(d, fsx.DefaultDirPerm); err != nil {
|
||||
return errBoostrapFailedToCreateDirectory.WithMessageF(d, err)
|
||||
return errBoostrapFailedToCreateDirectory.WithMessageF(d).Wrap(err)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -116,7 +123,7 @@ func (si systemupdate) Run(context wisski_distillery.Context) error {
|
|||
logging.LogMessage(context.Stderr, context.Context, "Checking that the 'docker' api is reachable")
|
||||
ping, err := dis.Docker().Ping(context.Context)
|
||||
if err != nil {
|
||||
return errDockerUnreachable.WithMessageF(err)
|
||||
return errDockerUnreachable.Wrap(err)
|
||||
}
|
||||
context.Printf("API Version: %s (experimental: %t)\nBuilder Version: %s\n", ping.APIVersion, ping.Experimental, ping.BuilderVersion)
|
||||
}
|
||||
|
|
@ -134,7 +141,7 @@ func (si systemupdate) Run(context wisski_distillery.Context) error {
|
|||
name := dis.Config.Docker.Network
|
||||
id, existed, err := dis.Docker().CreateNetwork(context.Context, name)
|
||||
if err != nil {
|
||||
return errNetworkCreateFailed.WithMessageF(err)
|
||||
return errNetworkCreateFailed.Wrap(err)
|
||||
}
|
||||
if existed {
|
||||
context.Printf("Network %s (id %s) already existed\n", name, id)
|
||||
|
|
@ -198,7 +205,7 @@ func (si systemupdate) Run(context wisski_distillery.Context) error {
|
|||
}
|
||||
return item.Update(context.Context, context.Stderr)
|
||||
}, context.Stderr, context.Context, "Updating Component: %s", name); err != nil {
|
||||
return errBootstrapComponent.WithMessageF(name, err)
|
||||
return errBootstrapComponent.WithMessageF(name).Wrap(err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -35,19 +35,21 @@ var errPrefixUpdateFailed = exit.Error{
|
|||
ExitCode: exit.ExitGeneric,
|
||||
}
|
||||
|
||||
func (upc updateprefixconfig) Run(context wisski_distillery.Context) error {
|
||||
func (upc updateprefixconfig) Run(context wisski_distillery.Context) (err error) {
|
||||
defer errPrefixUpdateFailed.DeferWrap(&err)
|
||||
|
||||
dis := context.Environment
|
||||
|
||||
wissKIs, err := dis.Instances().All(context.Context)
|
||||
if err != nil {
|
||||
return errPrefixUpdateFailed.Wrap(err)
|
||||
return err
|
||||
}
|
||||
|
||||
return status.WriterGroup(context.Stderr, upc.Parallel, func(instance *wisski.WissKI, writer io.Writer) error {
|
||||
logging.Progress(writer, context.Context, "reading prefixes")
|
||||
err := instance.Prefixes().Update(context.Context)
|
||||
if err != nil {
|
||||
return errPrefixUpdateFailed.Wrap(err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}, wissKIs, status.SmartMessage(func(item *wisski.WissKI) string {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue