mirror of
https://github.com/edgelesssys/constellation.git
synced 2024-12-15 10:54:29 -05:00
9a282df846
* separate logs and metrics indices * tidy
122 lines
3.2 KiB
Go
122 lines
3.2 KiB
Go
/*
|
|
Copyright (c) Edgeless Systems GmbH
|
|
|
|
SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/edgelesssys/constellation/v2/hack/logcollector/fields"
|
|
"github.com/edgelesssys/constellation/v2/hack/logcollector/internal"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func newTemplateCmd() *cobra.Command {
|
|
templateCmd := &cobra.Command{
|
|
Use: "template",
|
|
Short: "Templates filebeat and logstash configurations and prepares them for deployment",
|
|
Long: `Templates filebeat and logstash configurations and prepares them for deployment by placing them in the specified directory.`,
|
|
RunE: runTemplate,
|
|
}
|
|
|
|
templateCmd.Flags().String("dir", "", "Directory to place the templated configurations in (required)")
|
|
must(templateCmd.MarkFlagRequired("dir"))
|
|
must(templateCmd.MarkFlagDirname("dir"))
|
|
templateCmd.Flags().String("username", "", "OpenSearch username (required)")
|
|
must(templateCmd.MarkFlagRequired("username"))
|
|
templateCmd.Flags().String("password", "", "OpenSearch password (required)")
|
|
must(templateCmd.MarkFlagRequired("password"))
|
|
templateCmd.Flags().Int("port", 5045, "Logstash port")
|
|
templateCmd.Flags().StringToString("fields", nil, "Additional fields for the Logstash pipeline")
|
|
|
|
return templateCmd
|
|
}
|
|
|
|
func runTemplate(cmd *cobra.Command, _ []string) error {
|
|
flags, err := parseTemplateFlags(cmd)
|
|
if err != nil {
|
|
return fmt.Errorf("parse template flags: %w", err)
|
|
}
|
|
|
|
if err := flags.extraFields.Check(); err != nil {
|
|
return fmt.Errorf("validating extra fields: %w", err)
|
|
}
|
|
|
|
logstashPreparer := internal.NewLogstashPreparer(
|
|
flags.extraFields,
|
|
flags.username,
|
|
flags.password,
|
|
flags.port,
|
|
)
|
|
if err := logstashPreparer.Prepare(flags.dir); err != nil {
|
|
return fmt.Errorf("prepare logstash: %w", err)
|
|
}
|
|
|
|
filebeatPreparer := internal.NewFilebeatPreparer(
|
|
flags.port,
|
|
)
|
|
if err := filebeatPreparer.Prepare(flags.dir); err != nil {
|
|
return fmt.Errorf("prepare filebeat: %w", err)
|
|
}
|
|
|
|
metricbeatPreparer := internal.NewMetricbeatPreparer(
|
|
flags.port,
|
|
)
|
|
if err := metricbeatPreparer.Prepare(flags.dir); err != nil {
|
|
return fmt.Errorf("prepare metricbeat: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func parseTemplateFlags(cmd *cobra.Command) (templateFlags, error) {
|
|
dir, err := cmd.Flags().GetString("dir")
|
|
if err != nil {
|
|
return templateFlags{}, fmt.Errorf("parse dir string: %w", err)
|
|
}
|
|
|
|
username, err := cmd.Flags().GetString("username")
|
|
if err != nil {
|
|
return templateFlags{}, fmt.Errorf("parse username string: %w", err)
|
|
}
|
|
|
|
password, err := cmd.Flags().GetString("password")
|
|
if err != nil {
|
|
return templateFlags{}, fmt.Errorf("parse password string: %w", err)
|
|
}
|
|
|
|
extraFields, err := cmd.Flags().GetStringToString("fields")
|
|
if err != nil {
|
|
return templateFlags{}, fmt.Errorf("parse fields map: %w", err)
|
|
}
|
|
|
|
port, err := cmd.Flags().GetInt("port")
|
|
if err != nil {
|
|
return templateFlags{}, fmt.Errorf("parse port int: %w", err)
|
|
}
|
|
|
|
return templateFlags{
|
|
dir: dir,
|
|
username: username,
|
|
password: password,
|
|
extraFields: extraFields,
|
|
port: port,
|
|
}, nil
|
|
}
|
|
|
|
type templateFlags struct {
|
|
dir string
|
|
username string
|
|
password string
|
|
extraFields fields.Fields
|
|
port int
|
|
}
|
|
|
|
func must(err error) {
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|