config/network: Prepare for multiple networks

This commit futures proofs the code to allow for usage of more than one
docker network.
This commit is contained in:
Tom Wiesing 2023-03-13 10:10:37 +01:00
parent db1989a299
commit e969351f8e
No known key found for this signature in database
13 changed files with 40 additions and 28 deletions

View file

@ -135,18 +135,20 @@ func (si systemupdate) Run(context wisski_distillery.Context) (err error) {
}
}
// create the docker network
// create the docker networks
{
logging.LogMessage(context.Stderr, context.Context, "Configuring docker networks")
name := dis.Config.Docker.Network
id, existed, err := dis.Docker().CreateNetwork(context.Context, name)
if err != nil {
return errNetworkCreateFailed.Wrap(err)
}
if existed {
context.Printf("Network %s (id %s) already existed\n", name, id)
} else {
context.Printf("Network %s (id %s) created\n", name, id)
for _, name := range dis.Config.Docker.Networks() {
id, existed, err := dis.Docker().CreateNetwork(context.Context, name)
if err != nil {
return errNetworkCreateFailed.Wrap(err)
}
if existed {
context.Printf("Network %s (id %s) already existed\n", name, id)
} else {
context.Printf("Network %s (id %s) created\n", name, id)
}
}
}

View file

@ -45,7 +45,8 @@ theme:
home: null
docker:
# The name of the (global) docker network to run the distillery services in.
# The distillery uses several global docker networks.
# This determines the prefix to use for those networks.
network: null
# Configuration of the sql backend

View file

@ -1,6 +1,15 @@
package config
type DockerConfig struct {
// name of docker network to use
Network string `yaml:"network" default:"distillery" validate:"nonempty"`
NetworkPrefix string `yaml:"network" default:"distillery" validate:"nonempty"`
}
// Networks returns a list of all docker networks to be created for purposes of the distillery.
func (dc DockerConfig) Networks() []string {
return []string{dc.Network()}
}
// Network returns the name of the default network to attach all docker containers to.
func (dc DockerConfig) Network() string {
return dc.NetworkPrefix
}

View file

@ -22,8 +22,8 @@ type Template struct {
SQLAdminUsername string
SQLAdminPassword string
DockerNetworkName string
SessionSecret string
DockerNetworkPrefix string
SessionSecret string
}
// SetDefaults sets defaults on the template
@ -58,12 +58,12 @@ func (tpl *Template) SetDefaults() (err error) {
}
}
if tpl.DockerNetworkName == "" {
tpl.DockerNetworkName, err = password.Generate(rand.Reader, 10, passwordx.Identifier)
if tpl.DockerNetworkPrefix == "" {
tpl.DockerNetworkPrefix, err = password.Generate(rand.Reader, 10, passwordx.Identifier)
if err != nil {
return err
}
tpl.DockerNetworkName = `distillery-` + tpl.DockerNetworkName
tpl.DockerNetworkPrefix = `distillery-` + tpl.DockerNetworkPrefix
}
if tpl.SessionSecret == "" {
@ -93,7 +93,7 @@ func (tpl Template) Generate() Config {
ExtraDomains: []string{},
},
Docker: DockerConfig{
tpl.DockerNetworkName,
NetworkPrefix: tpl.DockerNetworkPrefix,
},
SQL: SQLConfig{
DatabaseConfig: DatabaseConfig{

View file

@ -82,7 +82,7 @@ func (binder *Binder) Stack() component.StackWithResources {
},
EnvContext: map[string]string{
"DOCKER_NETWORK_NAME": binder.Config.Docker.Network,
"DOCKER_NETWORK_NAME": binder.Config.Docker.Network(),
},
})
}

View file

@ -25,7 +25,7 @@ func (server *Server) Stack() component.StackWithResources {
EnvPath: "server.env",
EnvContext: map[string]string{
"DOCKER_NETWORK_NAME": server.Config.Docker.Network,
"DOCKER_NETWORK_NAME": server.Config.Docker.Network(),
"HOST_RULE": server.Config.HTTP.DefaultHostRule(),
"HTTPS_ENABLED": server.Config.HTTP.HTTPSEnabledEnv(),

View file

@ -39,7 +39,7 @@ func (solr *Solr) Stack() component.StackWithResources {
EnvPath: "solr.env",
EnvContext: map[string]string{
"DOCKER_NETWORK_NAME": solr.Config.Docker.Network,
"DOCKER_NETWORK_NAME": solr.Config.Docker.Network(),
},
MakeDirs: []string{

View file

@ -46,7 +46,7 @@ func (sql *SQL) Stack() component.StackWithResources {
EnvPath: "sql.env",
EnvContext: map[string]string{
"DOCKER_NETWORK_NAME": sql.Config.Docker.Network,
"DOCKER_NETWORK_NAME": sql.Config.Docker.Network(),
"HTTPS_ENABLED": sql.Config.HTTP.HTTPSEnabledEnv(),
},

View file

@ -22,7 +22,7 @@ func (ssh *SSH2) Stack() component.StackWithResources {
EnvPath: "ssh2.env",
EnvContext: map[string]string{
"DOCKER_NETWORK_NAME": ssh.Config.Docker.Network,
"DOCKER_NETWORK_NAME": ssh.Config.Docker.Network(),
"HOST_RULE": ssh.Config.HTTP.DefaultHostRule(),
"CONFIG_PATH": ssh.Config.ConfigPath,

View file

@ -44,7 +44,7 @@ func (ts *Triplestore) Stack() component.StackWithResources {
EnvPath: "triplestore.env",
EnvContext: map[string]string{
"DOCKER_NETWORK_NAME": ts.Config.Docker.Network,
"DOCKER_NETWORK_NAME": ts.Config.Docker.Network(),
},
MakeDirs: []string{

View file

@ -43,7 +43,7 @@ func (web *Web) Stack() component.StackWithResources {
stack.EnvPath = "web.env"
stack.EnvContext = map[string]string{
"DOCKER_NETWORK_NAME": web.Config.Docker.Network,
"DOCKER_NETWORK_NAME": web.Config.Docker.Network(),
"CERT_EMAIL": web.Config.HTTP.CertbotEmail,
}

View file

@ -22,7 +22,7 @@ func (barrel *Barrel) Stack() component.StackWithResources {
EnvPath: filepath.Join("barrel.env"),
EnvContext: map[string]string{
"DOCKER_NETWORK_NAME": barrel.Malt.Config.Docker.Network,
"DOCKER_NETWORK_NAME": barrel.Malt.Config.Docker.Network(),
"SLUG": barrel.Slug,
"VIRTUAL_HOST": barrel.Domain(),

View file

@ -29,7 +29,7 @@ func (reserve *Reserve) Stack() component.StackWithResources {
EnvPath: filepath.Join("reserve.env"),
EnvContext: map[string]string{
"DOCKER_NETWORK_NAME": reserve.Malt.Config.Docker.Network,
"DOCKER_NETWORK_NAME": reserve.Malt.Config.Docker.Network(),
"SLUG": reserve.Slug,
"VIRTUAL_HOST": reserve.Domain(),