Check token and cert file existence in promtool

This commit is contained in:
Fabian Reinartz 2015-08-05 18:30:37 +02:00
parent 7a67472fc1
commit 73f1cc807d
4 changed files with 38 additions and 19 deletions

View File

@ -170,7 +170,7 @@ type Reloadable interface {
func reloadConfig(filename string, rls ...Reloadable) bool { func reloadConfig(filename string, rls ...Reloadable) bool {
log.Infof("Loading configuration file %s", filename) log.Infof("Loading configuration file %s", filename)
conf, err := config.LoadFromFile(filename) conf, err := config.LoadFile(filename)
if err != nil { if err != nil {
log.Errorf("Couldn't load configuration (-config.file=%s): %v", filename, err) log.Errorf("Couldn't load configuration (-config.file=%s): %v", filename, err)
log.Errorf("Note: The configuration format has changed with version 0.14. Please see the documentation (http://prometheus.io/docs/operating/configuration/) and the provided configuration migration tool (https://github.com/prometheus/migrate).") log.Errorf("Note: The configuration format has changed with version 0.14. Please see the documentation (http://prometheus.io/docs/operating/configuration/) and the provided configuration migration tool (https://github.com/prometheus/migrate).")

View File

@ -22,8 +22,6 @@ import (
"strings" "strings"
"text/template" "text/template"
"gopkg.in/yaml.v2"
"github.com/prometheus/prometheus/config" "github.com/prometheus/prometheus/config"
"github.com/prometheus/prometheus/promql" "github.com/prometheus/prometheus/promql"
"github.com/prometheus/prometheus/util/cli" "github.com/prometheus/prometheus/util/cli"
@ -73,32 +71,53 @@ func checkConfig(t cli.Term, filename string) ([]string, error) {
return nil, fmt.Errorf("is a directory") return nil, fmt.Errorf("is a directory")
} }
content, err := ioutil.ReadFile(filename) cfg, err := config.LoadFile(filename)
if err != nil { if err != nil {
return nil, err return nil, err
} }
var cfg config.Config check := func(fn string) error {
if err := yaml.Unmarshal(content, &cfg); err != nil { // Nothing set, nothing to error on.
return nil, err if fn == "" {
return nil
}
_, err := os.Stat(fn)
return err
} }
var ruleFiles []string var ruleFiles []string
for _, rf := range cfg.RuleFiles { for _, rf := range cfg.RuleFiles {
if !filepath.IsAbs(rf) {
rf = filepath.Join(filepath.Dir(filename), rf)
}
rfs, err := filepath.Glob(rf) rfs, err := filepath.Glob(rf)
if err != nil { if err != nil {
return nil, err return nil, err
} }
// If an explicit file was given, error if it doesn't exist. // If an explicit file was given, error if it is not accessible.
if !strings.Contains(rf, "*") && len(rfs) == 0 { if !strings.Contains(rf, "*") {
return nil, fmt.Errorf("%q does not point to an existing file", rf) if len(rfs) == 0 {
return nil, fmt.Errorf("%q does not point to an existing file", rf)
}
if err := check(rfs[0]); err != nil {
return nil, fmt.Errorf("error checking rule file %q: %s", rfs[0], err)
}
} }
ruleFiles = append(ruleFiles, rfs...) ruleFiles = append(ruleFiles, rfs...)
} }
for _, scfg := range cfg.ScrapeConfigs {
if err := check(scfg.BearerTokenFile); err != nil {
return nil, fmt.Errorf("error checking bearer token file %q: %s", scfg.BearerTokenFile, err)
}
if scfg.ClientCert != nil {
if err := check(scfg.ClientCert.Cert); err != nil {
return nil, fmt.Errorf("error checking client cert file %q: %s", scfg.ClientCert.Cert, err)
}
if err := check(scfg.ClientCert.Key); err != nil {
return nil, fmt.Errorf("error checking client key file %q: %s", scfg.ClientCert.Key, err)
}
}
}
return ruleFiles, nil return ruleFiles, nil
} }

View File

@ -40,8 +40,8 @@ func Load(s string) (*Config, error) {
return cfg, nil return cfg, nil
} }
// LoadFromFile parses the given YAML file into a Config. // LoadFile parses the given YAML file into a Config.
func LoadFromFile(filename string) (*Config, error) { func LoadFile(filename string) (*Config, error) {
content, err := ioutil.ReadFile(filename) content, err := ioutil.ReadFile(filename)
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -181,11 +181,11 @@ var expectedConf = &Config{
func TestLoadConfig(t *testing.T) { func TestLoadConfig(t *testing.T) {
// Parse a valid file that sets a global scrape timeout. This tests whether parsing // Parse a valid file that sets a global scrape timeout. This tests whether parsing
// an overwritten default field in the global config permanently changes the default. // an overwritten default field in the global config permanently changes the default.
if _, err := LoadFromFile("testdata/global_timeout.good.yml"); err != nil { if _, err := LoadFile("testdata/global_timeout.good.yml"); err != nil {
t.Errorf("Error parsing %s: %s", "testdata/conf.good.yml", err) t.Errorf("Error parsing %s: %s", "testdata/conf.good.yml", err)
} }
c, err := LoadFromFile("testdata/conf.good.yml") c, err := LoadFile("testdata/conf.good.yml")
if err != nil { if err != nil {
t.Fatalf("Error parsing %s: %s", "testdata/conf.good.yml", err) t.Fatalf("Error parsing %s: %s", "testdata/conf.good.yml", err)
} }
@ -252,7 +252,7 @@ var expectedErrors = []struct {
func TestBadConfigs(t *testing.T) { func TestBadConfigs(t *testing.T) {
for _, ee := range expectedErrors { for _, ee := range expectedErrors {
_, err := LoadFromFile("testdata/" + ee.filename) _, err := LoadFile("testdata/" + ee.filename)
if err == nil { if err == nil {
t.Errorf("Expected error parsing %s but got none", ee.filename) t.Errorf("Expected error parsing %s but got none", ee.filename)
continue continue