mirror of
https://github.com/crowdsecurity/crowdsec.git
synced 2025-05-11 12:25:53 +02:00
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:
parent
303ce8e42c
commit
e9c1ed05d9
3 changed files with 52 additions and 47 deletions
|
@ -36,10 +36,11 @@ var (
|
||||||
metabaseConfigFile = "metabase.yaml"
|
metabaseConfigFile = "metabase.yaml"
|
||||||
metabaseImage = "metabase/metabase:v0.46.6.1"
|
metabaseImage = "metabase/metabase:v0.46.6.1"
|
||||||
/**/
|
/**/
|
||||||
metabaseListenAddress = "127.0.0.1"
|
metabaseListenAddress = "127.0.0.1"
|
||||||
metabaseListenPort = "3000"
|
metabaseListenPort = "3000"
|
||||||
metabaseContainerID = "crowdsec-metabase"
|
metabaseContainerID = "crowdsec-metabase"
|
||||||
crowdsecGroup = "crowdsec"
|
metabaseContainerEnvironmentVariables []string
|
||||||
|
crowdsecGroup = "crowdsec"
|
||||||
|
|
||||||
forceYes bool
|
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 {
|
if err = cli.chownDatabase(dockerGroup.Gid); err != nil {
|
||||||
return err
|
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 {
|
if err != nil {
|
||||||
return err
|
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.BoolVarP(&forceYes, "yes", "y", false, "force yes")
|
||||||
// flags.StringVarP(&metabaseUser, "user", "u", "crowdsec@crowdsec.net", "metabase user")
|
// flags.StringVarP(&metabaseUser, "user", "u", "crowdsec@crowdsec.net", "metabase user")
|
||||||
flags.StringVar(&metabasePassword, "password", "", "metabase password")
|
flags.StringVar(&metabasePassword, "password", "", "metabase password")
|
||||||
|
flags.StringSliceVarP(&metabaseContainerEnvironmentVariables, "env", "e", nil, "Additional environment variables to pass to the metabase container")
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,31 +16,33 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Container struct {
|
type Container struct {
|
||||||
ListenAddr string
|
ListenAddr string
|
||||||
ListenPort string
|
ListenPort string
|
||||||
SharedFolder string
|
SharedFolder string
|
||||||
Image string
|
Image string
|
||||||
Name string
|
Name string
|
||||||
ID string
|
ID string
|
||||||
CLI *client.Client
|
CLI *client.Client
|
||||||
MBDBUri string
|
MBDBUri string
|
||||||
DockerGroupID 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())
|
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to create docker client : %s", err)
|
return nil, fmt.Errorf("failed to create docker client : %s", err)
|
||||||
}
|
}
|
||||||
return &Container{
|
return &Container{
|
||||||
ListenAddr: listenAddr,
|
ListenAddr: listenAddr,
|
||||||
ListenPort: listenPort,
|
ListenPort: listenPort,
|
||||||
SharedFolder: sharedFolder,
|
SharedFolder: sharedFolder,
|
||||||
Image: image,
|
Image: image,
|
||||||
Name: containerName,
|
Name: containerName,
|
||||||
CLI: cli,
|
CLI: cli,
|
||||||
MBDBUri: mbDBURI,
|
MBDBUri: mbDBURI,
|
||||||
DockerGroupID: dockerGroupID,
|
DockerGroupID: dockerGroupID,
|
||||||
|
EnvironmentVariables: environmentVariables,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,9 +81,9 @@ func (c *Container) Create() error {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
env := []string{
|
env := c.EnvironmentVariables
|
||||||
fmt.Sprintf("MB_DB_FILE=%s/metabase.db", containerSharedFolder),
|
|
||||||
}
|
env = append(env, fmt.Sprintf("MB_DB_FILE=%s/metabase.db", containerSharedFolder))
|
||||||
if c.MBDBUri != "" {
|
if c.MBDBUri != "" {
|
||||||
env = append(env, c.MBDBUri)
|
env = append(env, c.MBDBUri)
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,15 +30,16 @@ type Metabase struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Database *csconfig.DatabaseCfg `yaml:"database"`
|
Database *csconfig.DatabaseCfg `yaml:"database"`
|
||||||
ListenAddr string `yaml:"listen_addr"`
|
ListenAddr string `yaml:"listen_addr"`
|
||||||
ListenPort string `yaml:"listen_port"`
|
ListenPort string `yaml:"listen_port"`
|
||||||
ListenURL string `yaml:"listen_url"`
|
ListenURL string `yaml:"listen_url"`
|
||||||
Username string `yaml:"username"`
|
Username string `yaml:"username"`
|
||||||
Password string `yaml:"password"`
|
Password string `yaml:"password"`
|
||||||
DBPath string `yaml:"metabase_db_path"`
|
DBPath string `yaml:"metabase_db_path"`
|
||||||
DockerGroupID string `yaml:"-"`
|
DockerGroupID string `yaml:"-"`
|
||||||
Image string `yaml:"image"`
|
Image string `yaml:"image"`
|
||||||
|
EnvironmentVariables []string `yaml:"environment_variables"`
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -88,7 +89,7 @@ func (m *Metabase) Init(containerName string, image string) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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 {
|
if err != nil {
|
||||||
return fmt.Errorf("container init: %w", err)
|
return fmt.Errorf("container init: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -137,21 +138,21 @@ func (m *Metabase) LoadConfig(configPath string) error {
|
||||||
m.Config = config
|
m.Config = config
|
||||||
|
|
||||||
return nil
|
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{
|
metabase := &Metabase{
|
||||||
Config: &Config{
|
Config: &Config{
|
||||||
Database: dbConfig,
|
Database: dbConfig,
|
||||||
ListenAddr: listenAddr,
|
ListenAddr: listenAddr,
|
||||||
ListenPort: listenPort,
|
ListenPort: listenPort,
|
||||||
Username: username,
|
Username: username,
|
||||||
Password: password,
|
Password: password,
|
||||||
ListenURL: fmt.Sprintf("http://%s:%s", listenAddr, listenPort),
|
ListenURL: fmt.Sprintf("http://%s:%s", listenAddr, listenPort),
|
||||||
DBPath: mbDBPath,
|
DBPath: mbDBPath,
|
||||||
DockerGroupID: dockerGroupID,
|
DockerGroupID: dockerGroupID,
|
||||||
Image: image,
|
Image: image,
|
||||||
|
EnvironmentVariables: environmentVariables,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
if err := metabase.Init(containerName, image); err != nil {
|
if err := metabase.Init(containerName, image); err != nil {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue