diff --git a/cmd/crowdsec-cli/dashboard.go b/cmd/crowdsec-cli/dashboard.go index a653fcb3a47..d704f76df5f 100644 --- a/cmd/crowdsec-cli/dashboard.go +++ b/cmd/crowdsec-cli/dashboard.go @@ -36,10 +36,11 @@ var ( metabaseConfigFile = "metabase.yaml" metabaseImage = "metabase/metabase:v0.46.6.1" /**/ - metabaseListenAddress = "127.0.0.1" - metabaseListenPort = "3000" - metabaseContainerID = "crowdsec-metabase" - crowdsecGroup = "crowdsec" + metabaseListenAddress = "127.0.0.1" + metabaseListenPort = "3000" + metabaseContainerID = "crowdsec-metabase" + metabaseContainerNetworks []string + crowdsecGroup = "crowdsec" forceYes bool @@ -166,7 +167,7 @@ cscli dashboard setup -l 0.0.0.0 -p 443 --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, metabaseContainerNetworks) if err != nil { return err } @@ -193,6 +194,7 @@ cscli dashboard setup -l 0.0.0.0 -p 443 --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.StringSliceVar(&metabaseContainerNetworks, "network", nil, "Network to attach to the container") return cmd } diff --git a/pkg/metabase/container.go b/pkg/metabase/container.go index 8b3dd4084c0..54cf7f53ebb 100644 --- a/pkg/metabase/container.go +++ b/pkg/metabase/container.go @@ -25,9 +25,10 @@ type Container struct { CLI *client.Client MBDBUri string DockerGroupID string + Networks []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, networks []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, + Networks: networks, }, nil } @@ -100,6 +102,13 @@ func (c *Container) Create() error { } c.ID = resp.ID + for _, network := range c.Networks { + log.Infof("connecting container '%s' to network '%s'", c.Name, network) + if err := c.CLI.NetworkConnect(ctx, network, c.ID, nil); err != nil { + return fmt.Errorf("failed to connect container to network : %s", err) + } + } + return nil } diff --git a/pkg/metabase/metabase.go b/pkg/metabase/metabase.go index 324a05666a1..5a262061dc5 100644 --- a/pkg/metabase/metabase.go +++ b/pkg/metabase/metabase.go @@ -39,6 +39,7 @@ type Config struct { DBPath string `yaml:"metabase_db_path"` DockerGroupID string `yaml:"-"` Image string `yaml:"image"` + Networks []string `yaml:"networks"` } 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.Networks) if err != nil { return fmt.Errorf("container init: %w", err) } @@ -140,7 +141,7 @@ func (m *Metabase) LoadConfig(configPath string) error { } -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, containerNetworks []string) (*Metabase, error) { metabase := &Metabase{ Config: &Config{ Database: dbConfig, @@ -152,6 +153,7 @@ func SetupMetabase(dbConfig *csconfig.DatabaseCfg, listenAddr string, listenPort DBPath: mbDBPath, DockerGroupID: dockerGroupID, Image: image, + Networks: containerNetworks, }, } if err := metabase.Init(containerName, image); err != nil {