Files
2026-09-03 21:57:42 -04:00

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"
}
}