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