TUN-3527: More specific error for invalid YAML/JSON
This commit is contained in:
parent
350a6f2bf5
commit
196762d9d3
|
@ -391,7 +391,7 @@ func ReadConfigFile(c *cli.Context, log logger.Service) (*configFileSettings, er
|
||||||
}
|
}
|
||||||
defer file.Close()
|
defer file.Close()
|
||||||
if err := yaml.NewDecoder(file).Decode(&configuration); err != nil {
|
if err := yaml.NewDecoder(file).Decode(&configuration); err != nil {
|
||||||
return nil, errors.Wrap(err, "error parsing config file at "+configFile)
|
return nil, errors.Wrap(err, "error parsing YAML in config file at "+configFile)
|
||||||
}
|
}
|
||||||
configuration.sourceFile = configFile
|
configuration.sourceFile = configFile
|
||||||
return &configuration, nil
|
return &configuration, nil
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/cloudflare/cloudflared/logger"
|
"github.com/cloudflare/cloudflared/logger"
|
||||||
"github.com/cloudflare/cloudflared/watcher"
|
"github.com/cloudflare/cloudflared/watcher"
|
||||||
|
"github.com/pkg/errors"
|
||||||
"gopkg.in/yaml.v2"
|
"gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -80,7 +80,7 @@ func readConfigFromPath(configPath string) (Root, error) {
|
||||||
|
|
||||||
var config Root
|
var config Root
|
||||||
if err := yaml.NewDecoder(file).Decode(&config); err != nil {
|
if err := yaml.NewDecoder(file).Decode(&config); err != nil {
|
||||||
return Root{}, err
|
return Root{}, errors.Wrap(err, "error parsing YAML in config file at "+configPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
return config, nil
|
return config, nil
|
||||||
|
|
|
@ -20,6 +20,15 @@ import (
|
||||||
"github.com/cloudflare/cloudflared/tunnelstore"
|
"github.com/cloudflare/cloudflared/tunnelstore"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type errInvalidJSONCredential struct {
|
||||||
|
err error
|
||||||
|
path string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e errInvalidJSONCredential) Error() string {
|
||||||
|
return "Invalid JSON when parsing tunnel credentials file"
|
||||||
|
}
|
||||||
|
|
||||||
// subcommandContext carries structs shared between subcommands, to reduce number of arguments needed to
|
// subcommandContext carries structs shared between subcommands, to reduce number of arguments needed to
|
||||||
// pass between subcommands, and make sure they are only initialized once
|
// pass between subcommands, and make sure they are only initialized once
|
||||||
type subcommandContext struct {
|
type subcommandContext struct {
|
||||||
|
@ -111,7 +120,7 @@ func (sc *subcommandContext) readTunnelCredentials(tunnelID uuid.UUID) (*pogs.Tu
|
||||||
|
|
||||||
var auth pogs.TunnelAuth
|
var auth pogs.TunnelAuth
|
||||||
if err = json.Unmarshal(body, &auth); err != nil {
|
if err = json.Unmarshal(body, &auth); err != nil {
|
||||||
return nil, err
|
return nil, errInvalidJSONCredential{path: filePath, err: err}
|
||||||
}
|
}
|
||||||
return &auth, nil
|
return &auth, nil
|
||||||
}
|
}
|
||||||
|
@ -244,6 +253,10 @@ func (sc *subcommandContext) delete(tunnelIDs []uuid.UUID) error {
|
||||||
func (sc *subcommandContext) run(tunnelID uuid.UUID) error {
|
func (sc *subcommandContext) run(tunnelID uuid.UUID) error {
|
||||||
credentials, err := sc.readTunnelCredentials(tunnelID)
|
credentials, err := sc.readTunnelCredentials(tunnelID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if e, ok := err.(errInvalidJSONCredential); ok {
|
||||||
|
sc.logger.Errorf("The credentials file at %s contained invalid JSON. This is probably caused by passing the wrong filepath. Reminder: the credentials file is a .json file created via `cloudflared tunnel create`.", e.path)
|
||||||
|
sc.logger.Errorf("Invalid JSON when parsing credentials file: %s", e.err.Error())
|
||||||
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue