diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index b08114f212fe..a07d88a2a2a9 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -29,6 +29,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Move output.elasticsearch.ilm settings to setup.ilm. {pull}10347[10347] - ILM will be available by default if Elasticsearch > 7.0 is used. {pull}10347[10347] - Allow Central Management to send events back to kibana. {issue}9382[9382] +- Initialize the Paths before the keystore and save the keystore into `data/{beatname}.keystore`. {pull}10706[10706] *Auditbeat* diff --git a/libbeat/cmd/instance/beat.go b/libbeat/cmd/instance/beat.go index 44615ccef334..3ab2507486ec 100644 --- a/libbeat/cmd/instance/beat.go +++ b/libbeat/cmd/instance/beat.go @@ -519,6 +519,10 @@ func (b *Beat) configure(settings Settings) error { return fmt.Errorf("error loading config file: %v", err) } + if err := initPaths(cfg); err != nil { + return err + } + // We have to initialize the keystore before any unpack or merging the cloud // options. store, err := LoadKeystore(cfg, b.Info.Beat) @@ -551,11 +555,6 @@ func (b *Beat) configure(settings Settings) error { b.Info.Name = name } - err = paths.InitPaths(&b.Config.Path) - if err != nil { - return fmt.Errorf("error setting default paths: %v", err) - } - if err := configure.Logging(b.Info.Beat, b.Config.Logging); err != nil { return fmt.Errorf("error initializing logging: %v", err) } @@ -908,3 +907,22 @@ func initKibanaConfig(beatConfig beatConfig) (*common.Config, error) { } return kibanaConfig, nil } + +func initPaths(cfg *common.Config) error { + // To Fix the chicken-egg problem with the Keystore and the loading of the configuration + // files we are doing a partial unpack of the configuration file and only take into consideration + // the paths field. After we will unpack the complete configuration and keystore reference + // will be correctly replaced. + partialConfig := struct { + Path paths.Path `config:"path"` + }{} + + if err := cfg.Unpack(&partialConfig); err != nil { + return fmt.Errorf("error extracting default paths: %+v", err) + } + + if err := paths.InitPaths(&partialConfig.Path); err != nil { + return fmt.Errorf("error setting default paths: %+v", err) + } + return nil +}