Documentation
¶
Overview ¶
Package stack contains stacks that can be deployed with the instance manager. Stacks have parameters as their input which are used to render helmfile templates. Stacks might depend on other stacks to provide a parameter (consumed parameter). Stack parameters declared here are kept in sync with the helmfile template. No cycle is allowed within our stacks as this would lead to undeployable stacks. No two stacks are allowed to provide the same parameter for another stack as this is an ambiguity that cannot be automatically resolved.
Index ¶
- Variables
- func OneOf(validValues ...string) func(value string) error
- func Routes(r *gin.Engine, authenticator gin.HandlerFunc, handler Handler)
- func ValidateConsumedParameters(stacks []model.Stack) error
- func ValidateNoCycles(stacks []model.Stack) (graph.Graph[string, model.Stack], error)
- type Handler
- type Service
- type Stack
- type StackParameter
- type Stacks
Constants ¶
This section is empty.
Variables ¶
var DHIS2 = model.Stack{ HostnamePattern: "%s-database-postgresql.%s.svc", Name: "dhis2", Parameters: model.StackParameters{ "IMAGE_TAG": {Priority: 1, DisplayName: "Image Tag", DefaultValue: &dhis2CoreDefaults.imageTag}, "IMAGE_REPOSITORY": {Priority: 2, DisplayName: "Image Repository", DefaultValue: &dhis2CoreDefaults.imageRepository}, "IMAGE_PULL_POLICY": {Priority: 3, DisplayName: "Image Pull Policy", DefaultValue: &dhis2CoreDefaults.imagePullPolicy, Validator: imagePullPolicy}, "DATABASE_ID": {Priority: 4, DisplayName: "Database"}, "DATABASE_NAME": {Priority: 5, DisplayName: "Database Name", DefaultValue: &dhis2DBDefaults.dbName}, "DATABASE_PASSWORD": {Priority: 6, DisplayName: "Database Password", DefaultValue: &dhis2DBDefaults.dbPassword, Sensitive: true}, "DATABASE_SIZE": {Priority: 7, DisplayName: "Database Size", DefaultValue: &dhis2DBDefaults.dbSize}, "DATABASE_USERNAME": {Priority: 8, DisplayName: "Database Username", DefaultValue: &dhis2DBDefaults.dbUsername, Sensitive: true}, "DATABASE_VERSION": {Priority: 9, DisplayName: "Database Version", DefaultValue: &dhis2DBDefaults.dbVersion}, "INSTALL_REDIS": {Priority: 10, DisplayName: "Install Redis", DefaultValue: &dhis2Defaults.installRedis}, "DHIS2_HOME": {Priority: 11, DisplayName: "DHIS2 Home Directory", DefaultValue: &dhis2CoreDefaults.dhis2Home}, "FLYWAY_MIGRATE_OUT_OF_ORDER": {Priority: 12, DisplayName: "Flyway Migrate Out Of Order", DefaultValue: &dhis2CoreDefaults.flywayMigrateOutOfOrder}, "FLYWAY_REPAIR_BEFORE_MIGRATION": {Priority: 13, DisplayName: "Flyway Repair Before Migration", DefaultValue: &dhis2CoreDefaults.flywayRepairBeforeMigration}, "CORE_RESOURCES_REQUESTS_CPU": {Priority: 14, DisplayName: "Core Resources Requests CPU", DefaultValue: &dhis2CoreDefaults.resourcesRequestsCPU}, "CORE_RESOURCES_REQUESTS_MEMORY": {Priority: 15, DisplayName: "Core Resources Requests Memory", DefaultValue: &dhis2CoreDefaults.resourcesRequestsMemory}, "DB_RESOURCES_REQUESTS_CPU": {Priority: 16, DisplayName: "DB Resources Requests CPU", DefaultValue: &dhis2DBDefaults.resourcesRequestsCPU}, "DB_RESOURCES_REQUESTS_MEMORY": {Priority: 17, DisplayName: "DB Resources Requests Memory", DefaultValue: &dhis2DBDefaults.resourcesRequestsMemory}, "MIN_READY_SECONDS": {Priority: 18, DisplayName: "Minimum Ready Seconds", DefaultValue: &dhis2CoreDefaults.minReadySeconds}, "LIVENESS_PROBE_TIMEOUT_SECONDS": {Priority: 19, DisplayName: "Liveness Probe Timeout Seconds", DefaultValue: &dhis2CoreDefaults.livenessProbeTimeoutSeconds}, "READINESS_PROBE_TIMEOUT_SECONDS": {Priority: 20, DisplayName: "Readiness Probe Timeout Seconds", DefaultValue: &dhis2CoreDefaults.readinessProbeTimeoutSeconds}, "STARTUP_PROBE_FAILURE_THRESHOLD": {Priority: 21, DisplayName: "Startup Probe Failure Threshold", DefaultValue: &dhis2CoreDefaults.startupProbeFailureThreshold}, "STARTUP_PROBE_PERIOD_SECONDS": {Priority: 22, DisplayName: "Startup Probe Period Seconds", DefaultValue: &dhis2CoreDefaults.startupProbePeriodSeconds}, "CHART_VERSION": {Priority: 23, DisplayName: "Chart Version", DefaultValue: &dhis2CoreDefaults.chartVersion}, "JAVA_OPTS": {Priority: 24, DisplayName: "JAVA Options", DefaultValue: &dhis2CoreDefaults.javaOpts}, "ENABLE_QUERY_LOGGING": {Priority: 25, DisplayName: "Enable Query Logging", DefaultValue: &dhis2CoreDefaults.enableQueryLogging}, "GOOGLE_AUTH_PROJECT_ID": {Priority: 0, DisplayName: "Google auth project id", DefaultValue: &dhis2CoreDefaults.googleAuthClientId, Sensitive: true}, "GOOGLE_AUTH_PRIVATE_KEY": {Priority: 0, DisplayName: "Google auth private key", DefaultValue: &dhis2CoreDefaults.googleAuthPrivateKey, Sensitive: true}, "GOOGLE_AUTH_PRIVATE_KEY_ID": {Priority: 0, DisplayName: "Google auth private key id", DefaultValue: &dhis2CoreDefaults.googleAuthPrivateKeyId, Sensitive: true}, "GOOGLE_AUTH_CLIENT_EMAIL": {Priority: 0, DisplayName: "Google auth client email", DefaultValue: &dhis2CoreDefaults.googleAuthClientEmail, Sensitive: true}, "GOOGLE_AUTH_CLIENT_ID": {Priority: 0, DisplayName: "Google auth client id", DefaultValue: &dhis2CoreDefaults.googleAuthClientId, Sensitive: true}, }, ParameterProviders: model.ParameterProviders{ "DATABASE_HOSTNAME": postgresHostnameProvider, }, }
Stack representing ../../stacks/dhis2/helmfile.yaml.gotmpl
var DHIS2Core = model.Stack{ Name: "dhis2-core", Parameters: model.StackParameters{ "IMAGE_TAG": {Priority: 1, DisplayName: "Image Tag", DefaultValue: &dhis2CoreDefaults.imageTag}, "IMAGE_REPOSITORY": {Priority: 2, DisplayName: "Image Repository", DefaultValue: &dhis2CoreDefaults.imageRepository}, "IMAGE_PULL_POLICY": {Priority: 3, DisplayName: "Image Pull Policy", DefaultValue: &dhis2CoreDefaults.imagePullPolicy, Validator: imagePullPolicy}, "STORAGE_TYPE": {Priority: 4, DisplayName: "Storage type", DefaultValue: &dhis2CoreDefaults.storageType, Validator: storage}, "S3_BUCKET": {Priority: 5, DisplayName: "S3 bucket", DefaultValue: &dhis2CoreDefaults.s3Bucket}, "S3_REGION": {Priority: 6, DisplayName: "S3 region", DefaultValue: &dhis2CoreDefaults.s3Region, Sensitive: true}, "S3_IDENTITY": {Priority: 7, DisplayName: "S3 identity", DefaultValue: &dhis2CoreDefaults.s3Identity, Sensitive: true}, "S3_SECRET": {Priority: 8, DisplayName: "S3 secret", DefaultValue: &dhis2CoreDefaults.s3Secret, Sensitive: true}, "DHIS2_HOME": {Priority: 9, DisplayName: "DHIS2 Home Directory", DefaultValue: &dhis2CoreDefaults.dhis2Home}, "FLYWAY_MIGRATE_OUT_OF_ORDER": {Priority: 10, DisplayName: "Flyway Migrate Out Of Order", DefaultValue: &dhis2CoreDefaults.flywayMigrateOutOfOrder}, "FLYWAY_REPAIR_BEFORE_MIGRATION": {Priority: 11, DisplayName: "Flyway Repair Before Migration", DefaultValue: &dhis2CoreDefaults.flywayRepairBeforeMigration}, "RESOURCES_REQUESTS_CPU": {Priority: 12, DisplayName: "Resources Requests CPU", DefaultValue: &dhis2CoreDefaults.resourcesRequestsCPU}, "RESOURCES_REQUESTS_MEMORY": {Priority: 13, DisplayName: "Resources Requests Memory", DefaultValue: &dhis2CoreDefaults.resourcesRequestsMemory}, "MIN_READY_SECONDS": {Priority: 14, DisplayName: "Minimum Ready Seconds", DefaultValue: &dhis2CoreDefaults.minReadySeconds}, "LIVENESS_PROBE_TIMEOUT_SECONDS": {Priority: 15, DisplayName: "Liveness Probe Timeout Seconds", DefaultValue: &dhis2CoreDefaults.livenessProbeTimeoutSeconds}, "READINESS_PROBE_TIMEOUT_SECONDS": {Priority: 16, DisplayName: "Readiness Probe Timeout Seconds", DefaultValue: &dhis2CoreDefaults.readinessProbeTimeoutSeconds}, "STARTUP_PROBE_FAILURE_THRESHOLD": {Priority: 17, DisplayName: "Startup Probe Failure Threshold", DefaultValue: &dhis2CoreDefaults.startupProbeFailureThreshold}, "STARTUP_PROBE_PERIOD_SECONDS": {Priority: 18, DisplayName: "Startup Probe Period Seconds", DefaultValue: &dhis2CoreDefaults.startupProbePeriodSeconds}, "JAVA_OPTS": {Priority: 19, DisplayName: "JAVA_OPTS", DefaultValue: &dhis2CoreDefaults.javaOpts}, "CHART_VERSION": {Priority: 20, DisplayName: "Chart Version", DefaultValue: &dhis2CoreDefaults.chartVersion}, "MINIO_CHART_VERSION": {Priority: 21, DisplayName: "MinIO Chart Version", DefaultValue: &dhis2CoreDefaults.minIOChartVersion}, "MINIO_STORAGE_SIZE": {Priority: 22, DisplayName: "MinIO Storage Size", DefaultValue: &dhis2CoreDefaults.minIOStorageSize}, "ENABLE_QUERY_LOGGING": {Priority: 23, DisplayName: "Enable Query Logging", DefaultValue: &dhis2CoreDefaults.enableQueryLogging}, "FILESYSTEM_VOLUME_SIZE": {Priority: 24, DisplayName: "Filesystem volume size (only in effect if \"Storage\" is set to \"filesystem\")", DefaultValue: &dhis2CoreDefaults.filesystemVolumeSize, Sensitive: true}, "SAME_SITE_COOKIES": {Priority: 24, DisplayName: "Same site cookies", DefaultValue: &dhis2CoreDefaults.sameSiteCookies, Validator: sameSiteCookies}, "CUSTOM_DHIS2_CONFIG": {Priority: 25, DisplayName: "Custom DHIS2 config (applied to top of dhis.conf)", DefaultValue: &dhis2CoreDefaults.customDhis2Config, Sensitive: true}, "ALLOW_SUSPEND": {Priority: 26, DisplayName: "Allow the application to be suspended", DefaultValue: &dhis2CoreDefaults.allowSuspend}, "GOOGLE_AUTH_PROJECT_ID": {Priority: 0, DisplayName: "Google auth project id", DefaultValue: &dhis2CoreDefaults.googleAuthClientId, Sensitive: true}, "GOOGLE_AUTH_PRIVATE_KEY": {Priority: 0, DisplayName: "Google auth private key", DefaultValue: &dhis2CoreDefaults.googleAuthPrivateKey, Sensitive: true}, "GOOGLE_AUTH_PRIVATE_KEY_ID": {Priority: 0, DisplayName: "Google auth private key id", DefaultValue: &dhis2CoreDefaults.googleAuthPrivateKeyId, Sensitive: true}, "GOOGLE_AUTH_CLIENT_EMAIL": {Priority: 0, DisplayName: "Google auth client email", DefaultValue: &dhis2CoreDefaults.googleAuthClientEmail, Sensitive: true}, "GOOGLE_AUTH_CLIENT_ID": {Priority: 0, DisplayName: "Google auth client id", DefaultValue: &dhis2CoreDefaults.googleAuthClientId, Sensitive: true}, "DATABASE_ID": {Priority: 0, DisplayName: "Database", Consumed: true}, "DATABASE_HOSTNAME": {Priority: 0, DisplayName: "Database Hostname", Consumed: true}, "DATABASE_NAME": {Priority: 0, DisplayName: "Database Name", Consumed: true}, "DATABASE_PASSWORD": {Priority: 0, DisplayName: "Database Password", Consumed: true, Sensitive: true}, "DATABASE_USERNAME": {Priority: 0, DisplayName: "Database Username", Consumed: true, Sensitive: true}, }, Requires: []model.Stack{ DHIS2DB, }, KubernetesResource: model.DeploymentResource, }
Stack representing ../../stacks/dhis2-core/helmfile.yaml.gotmpl
var DHIS2DB = model.Stack{ HostnamePattern: "%s-database-postgresql.%s.svc", Name: "dhis2-db", Parameters: model.StackParameters{ "DATABASE_ID": {Priority: 1, DisplayName: "Database"}, "DATABASE_SIZE": {Priority: 2, DisplayName: "Database Size", DefaultValue: &dhis2DBDefaults.dbSize}, "DATABASE_NAME": {Priority: 3, DisplayName: "Database Name", DefaultValue: &dhis2DBDefaults.dbName}, "DATABASE_PASSWORD": {Priority: 4, DisplayName: "Database Password", DefaultValue: &dhis2DBDefaults.dbPassword, Sensitive: true}, "DATABASE_USERNAME": {Priority: 5, DisplayName: "Database Username", DefaultValue: &dhis2DBDefaults.dbUsername, Sensitive: true}, "DATABASE_VERSION": {Priority: 6, DisplayName: "Database Version", DefaultValue: &dhis2DBDefaults.dbVersion}, "RESOURCES_REQUESTS_CPU": {Priority: 7, DisplayName: "Resources Requests CPU", DefaultValue: &dhis2DBDefaults.resourcesRequestsCPU}, "RESOURCES_REQUESTS_MEMORY": {Priority: 8, DisplayName: "Resources Requests Memory", DefaultValue: &dhis2DBDefaults.resourcesRequestsMemory}, "CHART_VERSION": {Priority: 9, DisplayName: "Chart Version", DefaultValue: &dhis2DBDefaults.chartVersion}, }, ParameterProviders: model.ParameterProviders{ "DATABASE_HOSTNAME": postgresHostnameProvider, }, KubernetesResource: model.StatefulSetResource, }
Stack representing ../../stacks/dhis2-db/helmfile.yaml.gotmpl
var IMJobRunner = model.Stack{ Name: "im-job-runner", Parameters: model.StackParameters{ "COMMAND": {Priority: 0, DisplayName: "Command"}, "PAYLOAD": {Priority: 0, DisplayName: "Payload", DefaultValue: &imJobRunnerDefaults.payload}, "DHIS2_DATABASE_DATABASE": {Priority: 0, DisplayName: "DHIS2 Database Name", DefaultValue: &dhis2DBDefaults.dbName}, "DHIS2_DATABASE_HOSTNAME": {Priority: 0, DisplayName: "DHIS2 Database Hostname", DefaultValue: &imJobRunnerDefaults.dbHostname}, "DHIS2_DATABASE_PASSWORD": {Priority: 0, DisplayName: "DHIS2 Database Password", DefaultValue: &dhis2DBDefaults.dbPassword, Sensitive: true}, "DHIS2_DATABASE_PORT": {Priority: 0, DisplayName: "DHIS2 Database Port", DefaultValue: &imJobRunnerDefaults.dbPort}, "DHIS2_DATABASE_USERNAME": {Priority: 0, DisplayName: "DHIS2 Database Username", DefaultValue: &dhis2DBDefaults.dbUsername, Sensitive: true}, "DHIS2_HOSTNAME": {Priority: 0, DisplayName: "DHIS2 Hostname", DefaultValue: &imJobRunnerDefaults.dhis2Hostname}, "CHART_VERSION": {Priority: 0, DisplayName: "Chart Version", DefaultValue: &imJobRunnerDefaults.chartVersion}, }, }
Stack representing ../../stacks/im-job-runner/helmfile.yaml.gotmpl
var PgAdmin = model.Stack{ Name: "pgadmin", Parameters: model.StackParameters{ "PGADMIN_USERNAME": {Priority: 1, DisplayName: "pgAdmin Username", Sensitive: true}, "PGADMIN_PASSWORD": {Priority: 2, DisplayName: "pgAdmin Password", Sensitive: true}, "CHART_VERSION": {Priority: 3, DisplayName: "Chart Version", DefaultValue: &pgAdminDefaults.chartVersion}, "DATABASE_HOSTNAME": {Priority: 0, DisplayName: "Database Hostname", Consumed: true}, "DATABASE_NAME": {Priority: 0, DisplayName: "Database Name", Consumed: true}, "DATABASE_USERNAME": {Priority: 0, DisplayName: "Database Username", Consumed: true, Sensitive: true}, }, Requires: []model.Stack{ DHIS2DB, }, KubernetesResource: model.StatefulSetResource, }
Stack representing ../../stacks/pgadmin/helmfile.yaml.gotmpl
var WhoamiGo = model.Stack{ Name: "whoami-go", Parameters: model.StackParameters{ "IMAGE_TAG": {Priority: 1, DisplayName: "Image Tag", DefaultValue: &whoamiGoDefaults.imageTag}, "IMAGE_REPOSITORY": {Priority: 2, DisplayName: "Image Repository", DefaultValue: &whoamiGoDefaults.imageRepository}, "IMAGE_PULL_POLICY": {Priority: 3, DisplayName: "Image Pull Policy", DefaultValue: &whoamiGoDefaults.imagePullPolicy, Validator: imagePullPolicy}, "REPLICA_COUNT": {Priority: 4, DisplayName: "Replica Count", DefaultValue: &whoamiGoDefaults.replicaCount}, "CHART_VERSION": {Priority: 5, DisplayName: "Chart Version", DefaultValue: &whoamiGoDefaults.chartVersion}, }, KubernetesResource: model.DeploymentResource, }
Stack representing ../../stacks/whoami-go/helmfile.yaml.gotmpl
Functions ¶
func OneOf ¶
OneOf creates a function returning an error when called with a value that is not any of the given validValues.
func ValidateConsumedParameters ¶
ValidateConsumedParameters validates all consumed parameters are provided by exactly one of the required stacks. Required stacks need to provide at least one consumed parameter.
func ValidateNoCycles ¶
ValidateNoCycles validates that the stacks graph does not contain a cycle. The stacks form a graph via the required stacks forming a directed edge from the stack to the required stack. Stacks with cycles would lead to undeployable instances. There would not be an order (no solution to topological sort) in which we could deploy instances in.
Types ¶
type Stack ¶
type Stack struct {
Name string `json:"name"`
Parameters []StackParameter `json:"parameters,omitempty"`
Requires []Stack `json:"requires,omitempty"`
}
swagger:model Stack
type StackParameter ¶
type StackParameter struct {
ParameterName string `json:"parameterName"`
DisplayName string `json:"displayName"`
DefaultValue *string `json:"defaultValue,omitempty"`
Consumed bool `json:"consumed"`
Priority uint `json:"priority"`
Sensitive bool `json:"sensitive"`
}
swagger:model StackParameter