100 lines
2.1 KiB
Go
100 lines
2.1 KiB
Go
package data
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"coopcloud.tech/abra/pkg/app"
|
|
"coopcloud.tech/abra/pkg/envfile"
|
|
"coopcloud.tech/abra/pkg/recipe"
|
|
)
|
|
|
|
type AppModifier func(*app.App)
|
|
|
|
// func App() app.App {
|
|
// return app.App{
|
|
// Name: "nextcloud",
|
|
// Domain: "cloud.example.com",
|
|
// Server: "server.example.com",
|
|
// Path: "/home/test/.abra/servers/hetzner/cloud.example.com.env",
|
|
// Env: envfile.AppEnv{
|
|
// "DOMAIN": "cloud.example.com",
|
|
// "LETS_ENCRYPT_ENABLED": "1",
|
|
// },
|
|
// Recipe: recipe.Recipe{
|
|
// Name: "nextcloud",
|
|
// },
|
|
// }
|
|
// }
|
|
func App(modifiers ...AppModifier) app.App {
|
|
a := app.App{
|
|
Name: "nextcloud.example.com",
|
|
Domain: "cloud.example.com",
|
|
Server: "example.com",
|
|
Path: "/home/test/.abra/servers/hetzner/cloud.example.com.env",
|
|
Env: envfile.AppEnv{
|
|
"DOMAIN": "cloud.example.com",
|
|
"LETS_ENCRYPT_ENABLED": "1",
|
|
},
|
|
Recipe: recipe.Recipe{
|
|
Name: "nextcloud",
|
|
},
|
|
}
|
|
for _, mod := range modifiers {
|
|
mod(&a)
|
|
}
|
|
return a
|
|
}
|
|
|
|
func RecipeName(name string) AppModifier {
|
|
return func(a *app.App) {
|
|
domainName := fmt.Sprintf("%s.%s", name, a.Server)
|
|
a.Name = name
|
|
a.Domain = domainName
|
|
a.Recipe.Name = name
|
|
a.Env["DOMAIN"] = domainName
|
|
}
|
|
}
|
|
|
|
func Broken() AppModifier {
|
|
return func(a *app.App) {
|
|
delete(a.Env, "DOMAIN")
|
|
}
|
|
}
|
|
func WithServer(server string) AppModifier {
|
|
return func(a *app.App) {
|
|
a.Server = server
|
|
}
|
|
}
|
|
|
|
func WithDomain(domain string) AppModifier {
|
|
return func(a *app.App) {
|
|
a.Domain = domain
|
|
a.Env["DOMAIN"] = domain
|
|
}
|
|
}
|
|
|
|
// version, chaosVersion, chaos, status
|
|
type AppStatusModifier func(map[string]map[string]string)
|
|
|
|
func AppStatus(modifiers ...AppStatusModifier) map[string]map[string]string {
|
|
a := map[string]map[string]string{
|
|
"nextcloud": {
|
|
"version": "1.0.0",
|
|
"chaos": "false",
|
|
"chaosVersion": "unknown",
|
|
"status": "running",
|
|
},
|
|
}
|
|
for _, mod := range modifiers {
|
|
mod(a)
|
|
}
|
|
return a
|
|
}
|
|
|
|
func WithChaos(app string) AppStatusModifier {
|
|
return func(a map[string]map[string]string) {
|
|
a[app]["chaos"] = "true"
|
|
a[app]["chaosVersion"] = "version"
|
|
}
|
|
}
|