feat(cscli): add env variable flag for dashboard setup (#3110)

Signed-off-by: Nathanael DEMACON <quantumsheep@users.noreply.github.com>
Co-authored-by: Nathanael DEMACON <quantumsheep@users.noreply.github.com>
Co-authored-by: Laurence Jones <laurence.jones@live.co.uk>
This commit is contained in:
Nathanael Demacon 2025-01-13 09:17:18 +01:00 committed by GitHub
parent 303ce8e42c
commit e9c1ed05d9
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 52 additions and 47 deletions

View file

@ -39,6 +39,7 @@ var (
metabaseListenAddress = "127.0.0.1"
metabaseListenPort = "3000"
metabaseContainerID = "crowdsec-metabase"
metabaseContainerEnvironmentVariables []string
crowdsecGroup = "crowdsec"
forceYes bool
@ -166,7 +167,7 @@ cscli dashboard setup -l 0.0.0.0 -p 443 --password <password>
if err = cli.chownDatabase(dockerGroup.Gid); err != nil {
return err
}
mb, err := metabase.SetupMetabase(cli.cfg().API.Server.DbConfig, metabaseListenAddress, metabaseListenPort, metabaseUser, metabasePassword, metabaseDBPath, dockerGroup.Gid, metabaseContainerID, metabaseImage)
mb, err := metabase.SetupMetabase(cli.cfg().API.Server.DbConfig, metabaseListenAddress, metabaseListenPort, metabaseUser, metabasePassword, metabaseDBPath, dockerGroup.Gid, metabaseContainerID, metabaseImage, metabaseContainerEnvironmentVariables)
if err != nil {
return err
}
@ -193,6 +194,7 @@ cscli dashboard setup -l 0.0.0.0 -p 443 --password <password>
flags.BoolVarP(&forceYes, "yes", "y", false, "force yes")
// flags.StringVarP(&metabaseUser, "user", "u", "crowdsec@crowdsec.net", "metabase user")
flags.StringVar(&metabasePassword, "password", "", "metabase password")
flags.StringSliceVarP(&metabaseContainerEnvironmentVariables, "env", "e", nil, "Additional environment variables to pass to the metabase container")
return cmd
}

View file

@ -25,9 +25,10 @@ type Container struct {
CLI *client.Client
MBDBUri string
DockerGroupID string
EnvironmentVariables []string
}
func NewContainer(listenAddr string, listenPort string, sharedFolder string, containerName string, image string, mbDBURI string, dockerGroupID string) (*Container, error) {
func NewContainer(listenAddr string, listenPort string, sharedFolder string, containerName string, image string, mbDBURI string, dockerGroupID string, environmentVariables []string) (*Container, error) {
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil {
return nil, fmt.Errorf("failed to create docker client : %s", err)
@ -41,6 +42,7 @@ func NewContainer(listenAddr string, listenPort string, sharedFolder string, con
CLI: cli,
MBDBUri: mbDBURI,
DockerGroupID: dockerGroupID,
EnvironmentVariables: environmentVariables,
}, nil
}
@ -79,9 +81,9 @@ func (c *Container) Create() error {
},
}
env := []string{
fmt.Sprintf("MB_DB_FILE=%s/metabase.db", containerSharedFolder),
}
env := c.EnvironmentVariables
env = append(env, fmt.Sprintf("MB_DB_FILE=%s/metabase.db", containerSharedFolder))
if c.MBDBUri != "" {
env = append(env, c.MBDBUri)
}

View file

@ -39,6 +39,7 @@ type Config struct {
DBPath string `yaml:"metabase_db_path"`
DockerGroupID string `yaml:"-"`
Image string `yaml:"image"`
EnvironmentVariables []string `yaml:"environment_variables"`
}
var (
@ -88,7 +89,7 @@ func (m *Metabase) Init(containerName string, image string) error {
if err != nil {
return err
}
m.Container, err = NewContainer(m.Config.ListenAddr, m.Config.ListenPort, m.Config.DBPath, containerName, image, DBConnectionURI, m.Config.DockerGroupID)
m.Container, err = NewContainer(m.Config.ListenAddr, m.Config.ListenPort, m.Config.DBPath, containerName, image, DBConnectionURI, m.Config.DockerGroupID, m.Config.EnvironmentVariables)
if err != nil {
return fmt.Errorf("container init: %w", err)
}
@ -137,10 +138,9 @@ func (m *Metabase) LoadConfig(configPath string) error {
m.Config = config
return nil
}
func SetupMetabase(dbConfig *csconfig.DatabaseCfg, listenAddr string, listenPort string, username string, password string, mbDBPath string, dockerGroupID string, containerName string, image string) (*Metabase, error) {
func SetupMetabase(dbConfig *csconfig.DatabaseCfg, listenAddr string, listenPort string, username string, password string, mbDBPath string, dockerGroupID string, containerName string, image string, environmentVariables []string) (*Metabase, error) {
metabase := &Metabase{
Config: &Config{
Database: dbConfig,
@ -152,6 +152,7 @@ func SetupMetabase(dbConfig *csconfig.DatabaseCfg, listenAddr string, listenPort
DBPath: mbDBPath,
DockerGroupID: dockerGroupID,
Image: image,
EnvironmentVariables: environmentVariables,
},
}
if err := metabase.Init(containerName, image); err != nil {