From facacca8ab3391d213945ad77a1c1e69a7ca326e Mon Sep 17 00:00:00 2001 From: Benjamin Ernst Date: Fri, 11 Oct 2024 13:08:16 +0200 Subject: [PATCH 1/8] WIP test dogu-sort with v2 dogus --- core/dogu-sort_test.go | 27 +- resources/test/dogu-sort-009.json | 3529 +++++++++++++++++++++++++++++ 2 files changed, 3542 insertions(+), 14 deletions(-) create mode 100644 resources/test/dogu-sort-009.json diff --git a/core/dogu-sort_test.go b/core/dogu-sort_test.go index 1821ad3..0c0930d 100644 --- a/core/dogu-sort_test.go +++ b/core/dogu-sort_test.go @@ -10,21 +10,20 @@ import ( func TestSortByDependency(t *testing.T) { dogus := []*Dogu{} - dogus, _, err := ReadDogusFromFile("../resources/test/dogu-sort-001.json") - assert.Nil(t, err) + dogus, _, err := ReadDogusFromFile("../resources/test/dogu-sort-009.json") + require.NoError(t, err) ordered := SortDogusByDependency(dogus) - assert.Equal(t, "ldap", ordered[0].GetSimpleName()) - assert.Equal(t, "mysql", ordered[1].GetSimpleName()) - assert.Equal(t, "postfix", ordered[2].GetSimpleName()) - assert.Equal(t, "registrator", ordered[3].GetSimpleName()) - assert.Equal(t, "nginx", ordered[4].GetSimpleName()) - assert.Equal(t, "cas", ordered[5].GetSimpleName()) - assert.Equal(t, "jenkins", ordered[6].GetSimpleName()) - assert.Equal(t, "nexus", ordered[7].GetSimpleName()) - assert.Equal(t, "scm", ordered[8].GetSimpleName()) - assert.Equal(t, "usermgt", ordered[9].GetSimpleName()) - assert.Equal(t, "redmine", ordered[10].GetSimpleName()) - assert.Equal(t, "sonar", ordered[11].GetSimpleName()) + assert.Equal(t, "gotenberg", ordered[0].GetSimpleName()) + assert.Equal(t, "postfix", ordered[1].GetSimpleName()) + assert.Equal(t, "nginx", ordered[2].GetSimpleName()) + assert.Equal(t, "cas", ordered[3].GetSimpleName()) + assert.Equal(t, "backup", ordered[4].GetSimpleName()) + assert.Equal(t, "nexus", ordered[5].GetSimpleName()) + assert.Equal(t, "redmine", ordered[6].GetSimpleName()) + assert.Equal(t, "scm", ordered[7].GetSimpleName()) + assert.Equal(t, "smeagol", ordered[8].GetSimpleName()) + assert.Equal(t, "sonar", ordered[9].GetSimpleName()) + assert.Equal(t, "usermgt", ordered[10].GetSimpleName()) } func TestSortByDependencyWithSmallList(t *testing.T) { diff --git a/resources/test/dogu-sort-009.json b/resources/test/dogu-sort-009.json new file mode 100644 index 0000000..b8a7202 --- /dev/null +++ b/resources/test/dogu-sort-009.json @@ -0,0 +1,3529 @@ +[ + { + "Name": "official/smeagol", + "Version": "1.7.3-4", + "DisplayName": "Smeagol", + "Description": "Store your technical documentation with in your git repositories", + "Category": "Development Apps", + "Tags": [ + "warp", + "wiki", + "docs", + "gollum", + "git" + ], + "Logo": "", + "URL": "https://cloudogu.com", + "Image": "registry.cloudogu.com/official/smeagol", + "ExposedPorts": null, + "ExposedCommands": [ + { + "Name": "upgrade-notification", + "Description": "", + "Command": "/upgrade-notification.sh" + } + ], + "Volumes": [ + { + "Name": "data", + "Path": "/var/lib/smeagol", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + } + ], + "HealthCheck": { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + "HealthChecks": null, + "ServiceAccounts": [ + { + "Type": "cas", + "Params": [ + "cas" + ] + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "WARN", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/java_max_ram_percentage", + "Description": "Limits the heap stack size of the Smeagol process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Smeagol: 25%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "25.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "container_config/java_min_ram_percentage", + "Description": "Limits the heap stack size of the Smeagol process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Smeagol: 50%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" + }, + { + "type": "dogu", + "name": "nginx", + "version": "" + }, + { + "type": "dogu", + "name": "scm", + "version": ">=2.20.0-1" + } + ], + "OptionalDependencies": null + }, + { + "Name": "premium/backup", + "Version": "1.11.2-2", + "DisplayName": "Backup & Restore", + "Description": "Backup Dogu for the Cloudogu EcoSystem", + "Category": "Administration Apps", + "Tags": [ + "backup", + "warp" + ], + "Logo": "https://cloudogu.com/images/dogus/backup.png", + "URL": "https://github.com/cloudogu", + "Image": "registry.cloudogu.com/premium/backup", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": null, + "HealthCheck": { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + "HealthChecks": null, + "ServiceAccounts": [ + { + "Type": "cas", + "Params": [ + "cas" + ] + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "active", + "Description": "Choose if the automatic backup-mechanism is active.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ignore_dogu_health", + "Description": "Skip dogu health checks before backup", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "time", + "Description": "The time of a scheduled backup. A backup is scheduled then every day at this time. Format HH:MM, ex.: 12:30", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "encryption_key", + "Description": "A key which is needed to access the backup.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "backup_type", + "Description": "Choose a backup-type. Currently 'SFTP', 'S3' and 'local' are possible options.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "sftp_config/address", + "Description": "The address of a sftp server.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "s3_bucket_config/address", + "Description": "The address of a S3-bucket.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "s3_bucket_config/access_key_id", + "Description": "The access id of the S3-bucket.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "s3_bucket_config/secret_access_key", + "Description": "The secret key of the S3-bucket.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "local_config/path", + "Description": "The absolute path to a local directory.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "retention_enabled", + "Description": "Choose if the automatic backup removal mechanism is active. (true/false)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "retention_strategy", + "Description": "Select the strategy which governs how backups are kept or removed. (e.g. removeAllButKeepLatest, keepLastSevenDays, keep7Days1Month1Quarter1Year)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "metrics_token", + "Description": "Access token for healthcheck- and metric-endpoint.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "rest_token", + "Description": "Access token for API-calls.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "admin_role", + "Description": "Role required to access the backup-dogu. If not configured the global admin_group will be used.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "deny_cross_blueprint_restores", + "Description": "Value can be true or false. When true all backups are bound to a specific blueprintId and cannot be restored after a blueprint-upgrade. When false or not set this feature is disabled.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "pre_backup_script", + "Description": "Value can be set to an absolute path to a bash script. That script is executed before a backup is started.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "post_backup_script", + "Description": "Value can be set to an absolute path to a bash script. That script is executed after a backup has finished successfully.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "pre_restore_script", + "Description": "Value can be set to an absolute path to a bash script. That script is executed before a restore is started.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "post_restore_script", + "Description": "Value can be set to an absolute path to a bash script. That script is executed after a restore has finished successfully.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" + }, + { + "type": "dogu", + "name": "nginx", + "version": "" + }, + { + "type": "package", + "name": "backup-watcher", + "version": "" + }, + { + "type": "package", + "name": "cesapp", + "version": ">=7.3.0" + } + ], + "OptionalDependencies": null + }, + { + "Name": "official/gotenberg", + "Version": "8.8.0-3", + "DisplayName": "Gotenberg", + "Description": "A Docker-powered stateless API for PDF files.", + "Category": "Documentation", + "Tags": [ + "documentation", + "pdf", + "office", + "convert" + ], + "Logo": "https://gotenberg.dev/img/logo_jed.png", + "URL": "https://gotenberg.dev/", + "Image": "registry.cloudogu.com/official/gotenberg", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": [ + { + "Name": "fonts", + "Path": "/home/gotenberg/.fonts", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 3000, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO or DEBUG. Default is INFO", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "info", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "warn", + "error", + "info", + "debug" + ] + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": null, + "OptionalDependencies": null + }, + + { + "Name": "official/scm", + "Version": "3.4.1-3", + "DisplayName": "SCM-Manager", + "Description": "The easiest way to share and manage your Git, Mercurial and Subversion repositories over http.", + "Category": "Development Apps", + "Tags": [ + "warp", + "code", + "scm", + "git", + "mercurial", + "subversion" + ], + "Logo": "https://cloudogu.com/images/dogus/scm-manager.png", + "URL": "https://www.scm-manager.org", + "Image": "registry.cloudogu.com/official/scm", + "ExposedPorts": [ + { + "Type": "tcp", + "Container": 2222, + "Host": 2222 + } + ], + "ExposedCommands": [ + { + "Name": "service-account-create", + "Description": "Creates a new service account", + "Command": "/create-sa.sh" + }, + { + "Name": "service-account-remove", + "Description": "Removes a service account", + "Command": "/remove-sa.sh" + }, + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + }, + { + "Name": "upgrade-notification", + "Description": "", + "Command": "/upgrade-notification.sh" + } + ], + "Volumes": [ + { + "Name": "data", + "Path": "/var/lib/scm", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "custom.init.script.d", + "Path": "/var/lib/custom.init.script.d", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "cache", + "Path": "/var/cache", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + }, + { + "Name": "temp", + "Path": "/tmp", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + }, + { + "Name": "localConfig", + "Path": "/var/ces/config", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + "HealthChecks": null, + "ServiceAccounts": [ + { + "Type": "cas", + "Params": [ + "cas" + ] + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "plugin_center_url", + "Description": "URL of SCM-Manager Plugin Center", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "plugin_center_authentication_url", + "Description": "URL of SCM-Manager Plugin Center authentication service. To delete the URL and hence disable plugin center authentication, set this to 'none'.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "release_feed_url", + "Description": "URL of SCM-Manager release RSS feed", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "login_info_url", + "Description": "URL for the login info. To delete the URL and hence disable the login info feature, set this to 'none'", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "alerts_url", + "Description": "URL for alerts in SCM-Manager. To delete the URL and hence disable the alerts feature, set this to 'none'", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "disable_release_feed", + "Description": "If set to 'true', SCM-Manager will not query for new releases", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "additional_plugins", + "Description": "Comma separated list of plugin names to install on start. Uninstalled plugins will also be installed again, since they are defined as default.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "update_plugins", + "Description": "Set to 'true' to install available plugin updates on startup", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend at least 1200m of memory for SCM.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/java_max_ram_percentage", + "Description": "Limits the heap stack size of the SCM process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for SCM: 25%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "25.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "container_config/java_min_ram_percentage", + "Description": "Limits the heap stack size of the SCM process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for SCM: 50%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "redmine_type", + "Description": "If both, Redmine and EasyRedmine are installed, this sets which instance should be configured", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "EASY_REDMINE", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "REDMINE", + "EASY_REDMINE" + ] + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG or TRACE. Default is INFO", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "INFO", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "ERROR", + "INFO", + "DEBUG", + "TRACE" + ] + } + }, + { + "Name": "caching/workdir/size", + "Description": "Size of cache for working directories used to edit repository content, for example using the editor or the review plugin. To disable cache, clean this value.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "5", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "700m", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_limit", + "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "1.0", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/storage_limit", + "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/storage_request", + "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "caching/stores/enabled", + "Description": "To enable store caches, set this to 'true'.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "false", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "caching/dataFiles/size", + "Description": "To enable data file caches, set this to an integer value > 0.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "0", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "install_smeagol_plugin", + "Description": "", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "false", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "true", + "false" + ] + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" + }, + { + "type": "dogu", + "name": "nginx", + "version": "" + }, + { + "type": "dogu", + "name": "postfix", + "version": "" + } + ], + "OptionalDependencies": [ + { + "type": "dogu", + "name": "redmine", + "version": "" + }, + { + "type": "dogu", + "name": "easyredmine", + "version": "" + }, + { + "type": "dogu", + "name": "jenkins", + "version": "" + }, + { + "type": "dogu", + "name": "cockpit", + "version": "" + }, + { + "type": "dogu", + "name": "jira", + "version": "" + }, + { + "type": "dogu", + "name": "gotenberg", + "version": "" + } + ] + }, + + { + "Name": "official/cas", + "Version": "7.0.8-2", + "DisplayName": "Central Authentication Service", + "Description": "The Central Authentication Service (CAS) is a single sign-on protocol for the web.", + "Category": "Base", + "Tags": [ + "authentication", + "sso", + "cas" + ], + "Logo": "https://cloudogu.com/images/dogus/cas.png", + "URL": "https://apereo.github.io/cas", + "Image": "registry.cloudogu.com/official/cas", + "ExposedPorts": null, + "ExposedCommands": [ + { + "Name": "service-account-create", + "Description": "Creates a new service account", + "Command": "/create-sa.sh" + }, + { + "Name": "service-account-remove", + "Description": "Removes an existing service account", + "Command": "/remove-sa.sh" + }, + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + }, + { + "Name": "post-upgrade", + "Description": "", + "Command": "/post-upgrade.sh" + }, + { + "Name": "upgrade-notification", + "Description": "", + "Command": "/upgrade-notification.sh" + } + ], + "Volumes": [ + { + "Name": "logs", + "Path": "/logs", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + }, + { + "Name": "localConfig", + "Path": "/var/ces/config", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": [ + { + "Type": "ldap", + "Params": [ + "rw" + ] + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "limit/failure_threshold", + "Description": "Number of failed login attempts. This number is used to calculate the failure rate in conjunction with limit/range_seconds. (0 means disabled; defaults to 500)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "500", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "limit/range_seconds", + "Description": "Time in seconds defines timeframe over which the login failures are taken into account (must be a positive number, takes only effect if limit/failure_threshold is > 0; defaults to 10 seconds)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "10", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "limit/stale_removal_interval", + "Description": "Time in seconds between background runs which finds and removes clean expired and stale login failures (must be a positive number, takes only effect if limit/failure_threshold is > 0; defaults to 60 seconds)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "60", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "limit/lock_time", + "Description": "Time in seconds to lock an account if the throttling threshold was met; (must be a positive number, takes only effect if limit/failure_threshold is > 0; defaults to 600 seconds)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "600", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "mail_sender", + "Description": "Email address to use as sender of the CAS dogu", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "password_management/enable_password_reset_via_email", + "Description": "Specifies whether the functionality for resetting the password via a link sent by e-mail should be activated. This entry is set to 'true' by default.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "true", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "true", + "false" + ] + } + }, + { + "Name": "password_management/reset_password_subject", + "Description": "Specifies the subject of the e-mail when resetting the password.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "password_management/reset_password_text", + "Description": "Specifies the text for the password reset email. Note: The password reset link must be inserted mandatory with ${url}", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "forgot_password_text", + "Description": "Text which shall be shown if a user clicks 'Forgot Password'. Note: The button 'Forgot password' is only visible if the value 'enable_password_reset_via_email' is not `true`.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "legal_urls/terms_of_service", + "Description": "This URL links to the Terms of Service and will be the first link at the bottom of login or logout pages. If empty the whole link will be omitted. If changed the CAS dogu must be restarted to take effect.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "legal_urls/imprint", + "Description": "This URL links to the Imprint and will be the second link at the bottom of login or logout pages. If empty the whole link will be omitted. If changed the CAS dogu must be restarted to take effect.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "legal_urls/privacy_policy", + "Description": "This URL links to the Privacy Policy and will be the last link at the bottom of login or logout pages. If empty the whole link will be omitted. If changed the CAS dogu must be restarted to take effect.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "session_tgt/max_time_to_live_in_seconds", + "Description": "Maximum session timeout - TGT will expire after defined timespan regardless the usage", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "session_tgt/time_to_kill_in_seconds", + "Description": "Idle session timeout - TGT will expire sooner if no further requests keep the session alive", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/host", + "Description": "The host of the LDAP (without protocol and without port), e.g. ldap if LDAP dogu is used.", + "Optional": false, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/port", + "Description": "The port of the LDAP, e.g. 389", + "Optional": false, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/base_dn", + "Description": "Base DN of users to be authenticated, \"(dc=cloudogu,dc=com)\". This value is only used when using an external LDAP.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/connection_dn", + "Description": "Manager DN for authenticated searches, e.g. \"(cn=admin,dc=cloudogu,dc=com)\" This value is only used when using an external LDAP.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/password", + "Description": "The password for connection to ldap in encrypted form. This value is only used when using an external LDAP.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/search_filter", + "Description": "Search filter used for configurations that require searching for DNs, e.g. (objectClass=person)", + "Optional": false, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/ds_type", + "Description": "Type of the LDAP", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "embedded", + "external" + ] + } + }, + { + "Name": "ldap/encryption", + "Description": "Type of the encryption of the LDAP. Defaults to 'none'.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "none", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "", + "none", + "startTLS", + "startTLSAny", + "ssl", + "sslAny" + ] + } + }, + { + "Name": "ldap/attribute_id", + "Description": "The attribute for the user ID in the LDAP", + "Optional": false, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/attribute_given_name", + "Description": "The attribute for the user's given name in the LDAP", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/attribute_surname", + "Description": "The attribute for the user's surname in the LDAP", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/attribute_fullname", + "Description": "The attribute for the user's fullname in the LDAP, which can also be seen as display name like \"John Doe\"", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/attribute_mail", + "Description": "The attribute for the user's mail address in the LDAP", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/attribute_group", + "Description": "The user's group membership attribute (e.g. memberOf)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/group_attribute_name", + "Description": "Name of the attribute for groups (the group's user membership attribute) in LDAP, e.g. member", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/group_base_dn", + "Description": "Settings for ldap group search by member. Base dn for group search e.g.: o=ces.local,dc=cloudogu,dc=com", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/group_search_filter", + "Description": "Search filter for group search. If this property is empty, group search by member will be skipped", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "WARN", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "1g", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_limit", + "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 virtual CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 virtual CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "0.5", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/storage_limit", + "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/storage_request", + "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/java_max_ram_percentage", + "Description": "Limits the heap stack size of the CAS process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for CAS: 25%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "25.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "container_config/java_min_ram_percentage", + "Description": "Limits the heap stack size of the CAS process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for CAS: 50%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "oidc/enabled", + "Description": "Determines whether the CAS should use the configured OIDC provider for delegated authentication. This entry is set to 'false' by default.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "false", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "true", + "false" + ] + } + }, + { + "Name": "oidc/discovery_uri", + "Description": "Describes the URI that contains the description for the OIDC protocol of the target provider.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/client_id", + "Description": "Contains the identifier that should be used to identify the client against the OIDC provider.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/client_secret", + "Description": "Contains the secret that should be used along the client ID to identify the client against the OIDC provider.", + "Optional": true, + "Encrypted": true, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/display_name", + "Description": "The display name is used for the OIDC provider in the user interface.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "OIDC Provider", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/redirect_uri", + "Description": "The url which will be used as redirect target after a successful delegated logout. The url has to match the patterns which are allowed for the configured client. [defaults to /cas/logout]", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/optional", + "Description": "Determines whether the authentication via the configured OIDC provider is optional. The user is automatically redirected to the login page of the OIDC provider if this property is set to 'false'. The 'true' entry makes authentication via the OIDC provider optional. For this, an additional button for the OIDC provider is displayed on the login page of the CAS, which can be used for authentication with the OIDC provider. This entry is set to 'false' by default.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "false", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "true", + "false" + ] + } + }, + { + "Name": "oidc/scopes", + "Description": "Specifies the resource to be queried against OIDC. Normally, this enumeration should contain at least the openid, user's email, profile information, and the groups assigned to the user. This entry is set to `openid email profile groups` by default.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "openid email profile groups", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/attribute_mapping", + "Description": "The attributes provided by OIDC do not exactly match the attributes required by the CAS. It is necessary to transform the OIDC attributes into attributes accepted by the cas. Therefore, this entry should contain rules to transform an attribute provided by the OIDC provider into an attribute required by CAS. The rules should be provided in the following format: 'email:mail,family_name:surname'. With the given example the OIDC attribute 'email' and 'family_name' are transformed into 'mail' and 'surname' respectively. The CAS requires the following attributes to function properly: 'mail,surname,givenName,username,displayName'.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/principal_attribute", + "Description": "Specifies an attribute that should be used as principal id inside the CES. CAS uses the ID provided by the OIDC provider when this property is empty.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "nginx", + "version": ">=1.26.1-5" + }, + { + "type": "dogu", + "name": "postfix", + "version": "" + } + ], + "OptionalDependencies": [ + { + "type": "dogu", + "name": "ldap", + "version": "" + } + ] + }, + + { + "Name": "official/nginx", + "Version": "1.26.1-11", + "DisplayName": "Nginx", + "Description": "Nginx WebServer.", + "Category": "Base", + "Tags": [ + "webserver", + "proxy", + "reverse-proxy" + ], + "Logo": "https://cloudogu.com/images/dogus/nginx.png", + "URL": "http://nginx.org/", + "Image": "registry.cloudogu.com/official/nginx", + "ExposedPorts": [ + { + "Type": "tcp", + "Container": 80, + "Host": 80 + }, + { + "Type": "tcp", + "Container": 443, + "Host": 443 + } + ], + "ExposedCommands": null, + "Volumes": [ + { + "Name": "customhtml", + "Path": "/var/www/customhtml", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "app.conf.d", + "Path": "/etc/nginx/app.conf.d", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "appconf", + "Path": "/var/nginx/conf.d/", + "Owner": "0", + "Group": "0", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 80, + "Path": "", + "Parameters": null + }, + { + "Type": "tcp", + "State": "", + "Port": 443, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "WARN", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + }, + { + "Name": "disable_access_log", + "Description": "Disable logging of incoming requests", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "google_tracking_id", + "Description": "Google Analytics Tracking ID", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "html_content_url", + "Description": "URL path to reach all custom html content pages. Default value when unset: static", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ignore_service_health", + "Description": "Option to ignore the health status of all dogus. Makes it possible to access dogus even if they are unhealthy", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "false", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend to have at least allocated 20m for additional tools (ces-confd) running inside the container.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + } + ], + "Properties": { + "stopAtBackup": "false" + }, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "registrator", + "version": ">=0.10.0-1" + } + ], + "OptionalDependencies": null + }, + { + "Name": "official/postfix", + "Version": "3.9.0-3", + "DisplayName": "Postfix", + "Description": "Postfix - Mail Transfer Agent", + "Category": "Base", + "Tags": [ + "mail", + "smtp" + ], + "Logo": "https://cloudogu.com/images/dogus/postfix.png", + "URL": "http://www.postfix.org/", + "Image": "registry.cloudogu.com/official/postfix", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": null, + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 25, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "relayhost", + "Description": "The next-hop destination of non-local mail", + "Optional": false, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "sasl_username", + "Description": "username for sasl authentication", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "sasl_password", + "Description": "password for sasl authentication, if the mail relay server needs an md5 encrypted password pass the encrypted password in here otherwise plain", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_security_level", + "Description": "The default SMTP TLS security level for the Postfix SMTP client", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_cert_file", + "Description": "Postfix SMTP client RSA certificate in PEM format", + "Optional": true, + "Encrypted": true, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_key_file", + "Description": "Postfix SMTP client RSA private key in PEM format", + "Optional": true, + "Encrypted": true, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_CAfile", + "Description": "CA certificates of root CAs trusted to sign either remote SMTP server certificates or intermediate CA certificates", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_loglevel", + "Description": "Enable additional Postfix SMTP client logging of TLS activity", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_exclude_ciphers", + "Description": "List of ciphers or cipher types to exclude from the Postfix SMTP client cipher list at all TLS security levels", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_mandatory_ciphers", + "Description": "The minimum TLS cipher grade that the Postfix SMTP client will use with mandatory TLS encryption", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_mandatory_protocols", + "Description": "List of SSL/TLS protocols that the Postfix SMTP client will use with mandatory TLS encryption", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtpd_forbid_bare_newline", + "Description": "Disables support for malformed line endings in SMTP. This fixes CVE-2023-51764 but could break (rare) clients that mis-implement SMTP.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "yes", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "yes", + "no" + ] + } + }, + { + "Name": "smtpd_forbid_bare_newline_exclusions", + "Description": "List of clients for which bare newlines should still be allowed. See https://www.postfix.org/postconf.5.html#smtpd_forbid_bare_newline_exclusions", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "$mynetworks", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "INFO", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50m", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_limit", + "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "0.05", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/storage_limit", + "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/storage_request", + "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": null, + "OptionalDependencies": null + }, + { + "Name": "official/sonar", + "Version": "9.9.5-5", + "DisplayName": "SonarQube", + "Description": "SonarQube is an open source quality management platform, dedicated to continuously analyze and measure source code quality", + "Category": "Development Apps", + "Tags": [ + "warp", + "code", + "quality", + "analysis" + ], + "Logo": "https://cloudogu.com/images/dogus/sonarqube.png", + "URL": "http://www.sonarqube.org/", + "Image": "registry.cloudogu.com/official/sonar", + "ExposedPorts": null, + "ExposedCommands": [ + { + "Name": "post-upgrade", + "Description": "", + "Command": "/post-upgrade.sh" + }, + { + "Name": "upgrade-notification", + "Description": "", + "Command": "/upgrade-notification.sh" + }, + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + } + ], + "Volumes": [ + { + "Name": "data", + "Path": "/opt/sonar/data/", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "qualityprofiles", + "Path": "/var/lib/qualityprofiles", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + }, + { + "Name": "extensions", + "Path": "/opt/sonar/extensions", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "localConfig", + "Path": "/var/ces/config", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 9000, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": [ + { + "Type": "postgresql", + "Params": null + }, + { + "Type": "cas", + "Params": [ + "cas" + ] + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "sonar.updatecenter.url", + "Description": "Set custom SonarQube UpdateCenter URL", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "sonar.plugins.default", + "Description": "Comma separated list of plugin names to install on start", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/java_sonar_main_max_ram_percentage", + "Description": "Limits the heap stack size of the Sonar main process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Sonar main: 25%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "25.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "container_config/java_sonar_main_min_ram_percentage", + "Description": "Limits the heap stack size of the Sonar main process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Sonar main: 50%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "container_config/java_sonar_web_max_min_ram_percentage", + "Description": "Limits the heap stack size of the Sonar web background process to the configured percentage of the available physical memory. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Sonar web: 10%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "10.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "container_config/java_sonar_search_max_min_ram_percentage", + "Description": "Limits the heap stack size of the Sonar search background process to the configured percentage of the available physical memory. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Sonar search: 10%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "10.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "container_config/java_sonar_cengine_max_min_ram_percentage", + "Description": "Limits the heap stack size of the Sonar compute engine background process to the configured percentage of the available physical memory. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Sonar compute engine: 10%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "10.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "amend_projects_with_ces_admin_permissions", + "Description": "If set to 'all', the ces-admin group will be enabled to administer all projects. This key will automatically reset to 'none' afterwards.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG, TRACE.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "INFO", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR", + "TRACE" + ] + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "1300m", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_limit", + "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "1.0", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/storage_limit", + "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/storage_request", + "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "postgresql", + "version": "" + }, + { + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" + }, + { + "type": "dogu", + "name": "nginx", + "version": "" + }, + { + "type": "dogu", + "name": "postfix", + "version": "" + } + ], + "OptionalDependencies": null + }, + + { + "Name": "official/redmine", + "Version": "5.1.3-4", + "DisplayName": "Redmine", + "Description": "Redmine is a flexible project management web application", + "Category": "Development Apps", + "Tags": [ + "warp", + "pm", + "projectmanagement", + "issue", + "task" + ], + "Logo": "https://cloudogu.com/images/dogus/redmine.png", + "URL": "http://www.redmine.org", + "Image": "registry.cloudogu.com/official/redmine", + "ExposedPorts": null, + "ExposedCommands": [ + { + "Name": "post-upgrade", + "Description": "", + "Command": "/post-upgrade.sh" + }, + { + "Name": "upgrade-notification", + "Description": "", + "Command": "/upgrade-notification.sh" + }, + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + }, + { + "Name": "delete-plugin", + "Description": "", + "Command": "/delete-plugin.sh" + } + ], + "Volumes": [ + { + "Name": "files", + "Path": "/usr/share/webapps/redmine/files", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "plugins", + "Path": "/var/tmp/redmine/plugins", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "logs", + "Path": "/usr/share/webapps/redmine/log", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + }, + { + "Name": "localConfig", + "Path": "/var/ces/config", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 3000, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": [ + { + "Type": "postgresql", + "Params": null + }, + { + "Type": "cas", + "Params": [ + "cas" + ] + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "INFO", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "etcd_redmine_config", + "Description": "Applies default configuration to redmine.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "postgresql", + "version": "" + }, + { + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" + }, + { + "type": "dogu", + "name": "nginx", + "version": "" + }, + { + "type": "dogu", + "name": "postfix", + "version": "" + } + ], + "OptionalDependencies": null + }, + + { + "Name": "official/usermgt", + "Version": "1.16.3-1", + "DisplayName": "User Management", + "Description": "User and Group Management.", + "Category": "Administration Apps", + "Tags": [ + "warp", + "users", + "groups" + ], + "Logo": "https://cloudogu.com/images/dogus/usermanagement.png", + "URL": "https://github.com/cloudogu/usermgt", + "Image": "registry.cloudogu.com/official/usermgt", + "ExposedPorts": null, + "ExposedCommands": [ + { + "Name": "post-upgrade", + "Description": "", + "Command": "/post-upgrade.sh" + } + ], + "Volumes": [ + { + "Name": "data", + "Path": "/var/lib/usermgt", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + }, + { + "Name": "importHistory", + "Path": "/var/lib/usermgt/importHistory", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + "HealthChecks": null, + "ServiceAccounts": [ + { + "Type": "ldap", + "Params": [ + "rw" + ] + }, + { + "Type": "cas", + "Params": [ + "cas" + ] + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "pwd_reset_selected_by_default", + "Description": "Specifies whether the checkbox for the password change at the next login attribute should be preselected by default ", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "false", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "true", + "false" + ] + } + }, + { + "Name": "mail/sender", + "Description": "Email address to use as sender of the User Management dogu", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "mail/import/subject", + "Description": "The subject of the mail, which is send when a user is imported via the csv import feature", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "mail/import/content", + "Description": "The content of the mail, which is send when a User is imported via the csv import feature. Within the content the placeholders ${username} and ${password} need to be included.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "mail/import/max_retries", + "Description": "The number of maximum retries to send a mail, before an error occurs", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "mail/import/max_retry_delay", + "Description": "The maximum delay for sending an email as part of a retry. By using a backoff strategy, the waiting time increases for each failed send until max_retry_delay is reached before the mail is sent again.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "mail/import/retry_interval", + "Description": "The interval in which failed mails will be checked to be sent again.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend at least 200m of memory for usermgt.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/java_max_ram_percentage", + "Description": "Limits the heap stack size of the Usermgt process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Usermgt: 25%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "25.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "container_config/java_min_ram_percentage", + "Description": "Limits the heap stack size of the Usermgt process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Usermgt: 50%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "WARN", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" + }, + { + "type": "dogu", + "name": "ldap", + "version": ">=2.6.2-7" + }, + { + "type": "dogu", + "name": "nginx", + "version": "" + }, + { + "type": "dogu", + "name": "postfix", + "version": "" + } + ], + "OptionalDependencies": null + }, + + { + "Name": "official/nexus", + "Version": "3.70.2-3", + "DisplayName": "Sonatype Nexus", + "Description": "The Nexus Repository is like the local warehouse where all of the parts and finished goods used in your software supply chain are stored and distributed.", + "Category": "Development Apps", + "Tags": [ + "warp", + "build", + "artifact", + "maven" + ], + "Logo": "https://cloudogu.com/images/dogus/nexus.png", + "URL": "http://www.sonatype.org/nexus", + "Image": "registry.cloudogu.com/official/nexus", + "ExposedPorts": null, + "ExposedCommands": [ + { + "Name": "service-account-create", + "Description": "Creates a new service account", + "Command": "/create-sa.sh" + }, + { + "Name": "service-account-remove", + "Description": "Removes a service account", + "Command": "/remove-sa.sh" + }, + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + }, + { + "Name": "upgrade-notification", + "Description": "", + "Command": "/upgrade-notification.sh" + } + ], + "Volumes": [ + { + "Name": "data", + "Path": "/var/lib/nexus", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "migration", + "Path": "/var/lib/migration", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "localConfig", + "Path": "/var/ces/config", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 8082, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": [ + { + "Type": "cas", + "Params": [ + "cas" + ] + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "claim/once", + "Description": "A claim script definition which is only executed once. After that, it will set the claim/once.lock key which prevents further execution.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "claim/once.lock", + "Description": "If this key is set to true it will prevent the claim/once script from being executed.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "claim/always", + "Description": "A claim script definition which will always be executed at startup.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "nexus.repository.sandbox.enable", + "Description": "Enable repository sandboxing", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "installDefaultDockerRegistry", + "Description": "If set to false, the default docker registry is not installed", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "disableOutreachManagement", + "Description": "Disable the outreach management capability", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG. The default log level is set to \"WARN\"", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "WARN", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend to add 50m for additional tools running inside the container.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/java_max_ram_percentage", + "Description": "Limits the heap stack size of the Nexus process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Nexus: 25%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "25.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "container_config/java_min_ram_percentage", + "Description": "Limits the heap stack size of the Nexus process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Nexus: 50%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "cleanup_policy/notes", + "Description": "Notes to the default cleanup-policy. Default: \"Do not edit. CES will re-generate this default policy during each Nexus start-up that will overwrite your changes. You may want to create your own policies which will stay untouched during the start-up.\"", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "Do not edit. CES will re-generate this default policy during each Nexus start-up that will overwrite your changes. You may want to create your own policies which will stay untouched during the start-up.", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "cleanup_policy/policy_format", + "Description": "Repository format on which the default cleanup-policy can be applied. The default is \"maven2\" which corresponds to maven repositories", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "maven2", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "apt", + "bower", + "cocoapods", + "conan", + "conda", + "docker", + "gitlfs", + "go", + "helm", + "maven2", + "npm", + "nuget", + "p2", + "pypi", + "r", + "raw", + "rubygems", + "yum" + ] + } + }, + { + "Name": "cleanup_policy/criteria/regex", + "Description": "Regex which will be used to match fitting artifacts. Default: \".*SNAPSHOT\"", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": ".*SNAPSHOT", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "cleanup_policy/criteria/release_type", + "Description": "The release type on which this policy will be applied. This configuration can only be applied if the 'policy_format' is of type \"maven2\", \"yum\" and \"npm\". Default: \"PRERELEASES\"", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "PRERELEASES", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "cleanup_policy/criteria/days_till_recognition_for_delete", + "Description": "The number of days after which an artifact is recognised for deletion. Default: \"14\"", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "14", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "compact_blobstore_task/enabled", + "Description": "Switch to control whether the policy should be switched on or off. Default: \"true\"", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "true", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "true", + "false" + ] + } + }, + { + "Name": "compact_blobstore_task/blobstore", + "Description": "The specific blobstore instance to that the task should be applied. This configuration should only be used if the task type is 'blobstore.compact' (or other tasks that need to choose a blobstore instance). Default: \"default\"", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "default", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "compact_blobstore_task/cron", + "Description": "Cron string (in Quartz syntax) that sets the task's schedule. The default \"0 0 3 * * ?\" value will run the task daily at 3:00 AM.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "0 0 3 * * ?", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "carp-limiter/token-rate", + "Description": "The token-rate of the carp-limiter in which tokens are added to the bucket in tokens/second. Default is 50", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "carp-limiter/burst-size", + "Description": "The size of the bucket for the carp-limiter. It sets the amount of tokens the bucket can hold. Defaults to 150", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "150", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "carp-limiter/clean-interval", + "Description": "The clean interval in seconds for the carp-limiter, in which old limits from the limiter are cleaned. Defaults to 300 seconds (5 minutes)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "30", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "2500m", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_limit", + "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "1.0", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/storage_limit", + "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/storage_request", + "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" + }, + { + "type": "dogu", + "name": "nginx", + "version": "" + }, + { + "type": "dogu", + "name": "postfix", + "version": "" + } + ], + "OptionalDependencies": null + } + + + +] From e90e3b6e8398389bedff77bac1effb053fd6ebe9 Mon Sep 17 00:00:00 2001 From: meiserloh Date: Mon, 14 Oct 2024 16:29:05 +0200 Subject: [PATCH 2/8] Fix sorting problems Due to using an insertion sort algorithm without a linear data structure (we have tree-dependencies), the sorting could be false somethimes. By using a topological sorting algorithm that operates on a graph we can fix the issues. Secondly the SortDogusByInvertedDependency returned the initial unsorted dogu array in reverse. This one is fixed aswell. --- core/dogu-sort.go | 72 +- core/dogu-sort_test.go | 135 +- go.mod | 1 + go.sum | 2 + ...{dogu-sort-009.json => dogu-sort-004.json} | 5972 +++++++++++++---- 5 files changed, 4597 insertions(+), 1585 deletions(-) rename resources/test/{dogu-sort-009.json => dogu-sort-004.json} (54%) diff --git a/core/dogu-sort.go b/core/dogu-sort.go index 70b500a..a69d6f5 100644 --- a/core/dogu-sort.go +++ b/core/dogu-sort.go @@ -1,6 +1,8 @@ package core import ( + "fmt" + "github.com/gammazero/toposort" "sort" ) @@ -8,8 +10,7 @@ import ( // importance of their dependencies descending, that is: the most needed dogu will be the first element. func SortDogusByDependency(dogus []*Dogu) []*Dogu { ordered := sortByDependency{dogus} - sort.Stable(&ordered) - return ordered.dogus + return ordered.sortDogus() } // SortDogusByInvertedDependency takes an unsorted slice of Dogu structs and returns a new slice of Dogus ordered by the @@ -19,7 +20,7 @@ func SortDogusByInvertedDependency(dogus []*Dogu) []*Dogu { orderedAsc := []*Dogu{} for i := len(orderedDesc) - 1; i >= 0; i-- { - orderedAsc = append(orderedAsc, dogus[i]) + orderedAsc = append(orderedAsc, orderedDesc[i]) } return orderedAsc @@ -64,48 +65,47 @@ func contains(slice []Dependency, item string) bool { return false } -func (bd *sortByDependency) Len() int { - return len(bd.dogus) -} - -func (bd *sortByDependency) Swap(i, j int) { - bd.dogus[i], bd.dogus[j] = bd.dogus[j], bd.dogus[i] -} - -func (bd *sortByDependency) Less(i, j int) bool { - leftName := bd.dogus[i].GetSimpleName() - rightName := bd.dogus[j].GetSimpleName() - - leftDependenciesRecursive := bd.getAllDoguDependenciesRecursive(bd.dogus[i]) - rightDependenciesRecursive := bd.getAllDoguDependenciesRecursive(bd.dogus[j]) - - leftDependenciesDirect := bd.dogus[i].GetAllDependenciesOfType(DependencyTypeDogu) - rightDependenciesDirect := bd.dogus[j].GetAllDependenciesOfType(DependencyTypeDogu) +func (bd *sortByDependency) sortDogus() []*Dogu { + dependencyEdges := bd.getDependencyEdges() + sorted, err := toposort.Toposort(dependencyEdges) + if err != nil { + return nil + } - if contains(rightDependenciesRecursive, leftName) { - return true - } else if contains(leftDependenciesRecursive, rightName) { - return false - } else if len(leftDependenciesDirect) == len(rightDependenciesDirect) { - return leftName < rightName + sortedDogus, err := toDoguSlice(sorted) + if err != nil { + return nil } - return len(leftDependenciesDirect) < len(rightDependenciesDirect) + return sortedDogus } -func (bd *sortByDependency) getAllDoguDependenciesRecursive(inputDogu *Dogu) []Dependency { - dependencies := inputDogu.GetAllDependenciesOfType(DependencyTypeDogu) - dependenciesAsDogus := bd.dependenciesToDogus(dependencies) - - for _, dogu := range dependenciesAsDogus { - for _, dep := range bd.getAllDoguDependenciesRecursive(dogu) { - if !contains(dependencies, dep.Name) { - dependencies = append(dependencies, dep) +func (bd *sortByDependency) getDependencyEdges() []toposort.Edge { + var dependencyEdges []toposort.Edge + for _, dogu := range bd.dogus { + dependencies := dogu.GetAllDependenciesOfType(DependencyTypeDogu) + if len(dependencies) > 0 { + dependentDogus := bd.dependenciesToDogus(dependencies) + for _, dependency := range dependentDogus { + dependencyEdges = append(dependencyEdges, toposort.Edge{dependency, dogu}) } + } else { + dependencyEdges = append(dependencyEdges, toposort.Edge{nil, dogu}) } } + return dependencyEdges +} - return dependencies +func toDoguSlice(dogus []interface{}) ([]*Dogu, error) { + result := make([]*Dogu, len(dogus)) + for i, dogu := range dogus { + if castedDogu, ok := dogu.(*Dogu); ok { + result[i] = castedDogu + } else { + return nil, fmt.Errorf("expected Dogu, got %T", dogu) + } + } + return result, nil } func (bd *sortByDependency) dependenciesToDogus(dependencies []Dependency) []*Dogu { diff --git a/core/dogu-sort_test.go b/core/dogu-sort_test.go index 0c0930d..d68d242 100644 --- a/core/dogu-sort_test.go +++ b/core/dogu-sort_test.go @@ -1,6 +1,7 @@ package core import ( + "slices" "testing" "github.com/stretchr/testify/require" @@ -10,20 +11,29 @@ import ( func TestSortByDependency(t *testing.T) { dogus := []*Dogu{} - dogus, _, err := ReadDogusFromFile("../resources/test/dogu-sort-009.json") + dogus, _, err := ReadDogusFromFile("../resources/test/dogu-sort-004.json") require.NoError(t, err) + var doguNames []string + for _, dogu := range dogus { + doguNames = append(doguNames, dogu.GetSimpleName()) + } ordered := SortDogusByDependency(dogus) - assert.Equal(t, "gotenberg", ordered[0].GetSimpleName()) - assert.Equal(t, "postfix", ordered[1].GetSimpleName()) - assert.Equal(t, "nginx", ordered[2].GetSimpleName()) - assert.Equal(t, "cas", ordered[3].GetSimpleName()) - assert.Equal(t, "backup", ordered[4].GetSimpleName()) - assert.Equal(t, "nexus", ordered[5].GetSimpleName()) - assert.Equal(t, "redmine", ordered[6].GetSimpleName()) - assert.Equal(t, "scm", ordered[7].GetSimpleName()) - assert.Equal(t, "smeagol", ordered[8].GetSimpleName()) - assert.Equal(t, "sonar", ordered[9].GetSimpleName()) - assert.Equal(t, "usermgt", ordered[10].GetSimpleName()) + var installedDogus []string + assert.Equal(t, len(dogus), len(ordered)) + for _, orderedDogu := range ordered { + for _, dependency := range orderedDogu.GetDependenciesOfType(DependencyTypeDogu) { + assert.Contains(t, installedDogus, dependency.Name, + "%s installed before dependency: %s", orderedDogu.GetSimpleName(), dependency.Name) + } + + for _, optionalDependency := range orderedDogu.GetOptionalDependenciesOfType(DependencyTypeDogu) { + if slices.Contains(doguNames, optionalDependency.Name) { + assert.Contains(t, installedDogus, optionalDependency.Name, + "%s installed before dependency: %s", orderedDogu.GetSimpleName(), optionalDependency.Name) + } + } + installedDogus = append(installedDogus, orderedDogu.GetSimpleName()) + } } func TestSortByDependencyWithSmallList(t *testing.T) { @@ -55,12 +65,17 @@ func TestSortByDependencyWithTransitiveDependencies(t *testing.T) { assert.Nil(t, err) ordered := SortDogusByDependency(dogus) + var orderedNames []string + for _, orderedDogu := range ordered { + orderedNames = append(orderedNames, orderedDogu.GetSimpleName()) + } - assert.Equal(t, "dogud", ordered[0].GetSimpleName()) - assert.Equal(t, "dogue", ordered[1].GetSimpleName()) - assert.Equal(t, "doguc", ordered[2].GetSimpleName()) - assert.Equal(t, "dogub", ordered[3].GetSimpleName()) - assert.Equal(t, "dogua", ordered[4].GetSimpleName()) + // Dogu E and Dogu D can both be installed first and the sort algorithm is not deterministic. + assert.Contains(t, orderedNames[0:2], "dogue") + assert.Contains(t, orderedNames[0:2], "dogud") + assert.Equal(t, "doguc", orderedNames[2]) + assert.Equal(t, "dogub", orderedNames[3]) + assert.Equal(t, "dogua", orderedNames[4]) } func TestSortByDependencyWithOptionalDependencies(t *testing.T) { @@ -199,89 +214,3 @@ func TestTransformsDependencyListToDoguList(t *testing.T) { assert.Equal(t, result[3].Name, "testing/dogud") assert.Equal(t, result[4].Name, "testing/dogue") } - -func TestGetDependenciesRecursive(t *testing.T) { - dogus := []*Dogu{} - dogus, _, err := ReadDogusFromFile("../resources/test/dogu-sort-003.json") - require.Nil(t, err) - sorter := sortByDependency{dogus} - - tests := []struct { - name string - dogu *Dogu - expectedDependencies []Dependency - }{ - { - name: "dependencies for dogua", - dogu: getDoguBySimpleName(t, dogus, "dogua"), - expectedDependencies: []Dependency{ - createDependency(t, "nginx"), - createDependency(t, "dogub"), - createDependency(t, "doguc"), - createDependency(t, "dogud"), - createDependency(t, "dogue"), - }, - }, - { - name: "dependencies for dogub", - dogu: getDoguBySimpleName(t, dogus, "dogub"), - expectedDependencies: []Dependency{ - createDependency(t, "nginx"), - createDependency(t, "doguc"), - createDependency(t, "dogud"), - createDependency(t, "dogue"), - }, - }, - { - name: "dependencies for doguc", - dogu: getDoguBySimpleName(t, dogus, "doguc"), - expectedDependencies: []Dependency{ - createDependency(t, "nginx"), - createDependency(t, "dogud"), - createDependency(t, "dogue"), - }, - }, - { - name: "dependencies for dogud", - dogu: getDoguBySimpleName(t, dogus, "dogud"), - expectedDependencies: []Dependency{ - createDependency(t, "nginx"), - }, - }, - { - name: "dependencies for dogue", - dogu: getDoguBySimpleName(t, dogus, "dogue"), - expectedDependencies: []Dependency{ - createDependency(t, "nginx"), - }, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - dependencies := sorter.getAllDoguDependenciesRecursive(test.dogu) - assert.Len(t, dependencies, len(test.expectedDependencies)) - for _, expectedDependency := range test.expectedDependencies { - assert.True(t, contains(dependencies, expectedDependency.Name)) - } - }) - } -} - -func createDependency(t *testing.T, name string) Dependency { - t.Helper() - return Dependency{ - Type: DependencyTypeDogu, - Name: name, - } -} - -func getDoguBySimpleName(t *testing.T, dogus []*Dogu, doguName string) *Dogu { - t.Helper() - for _, dogu := range dogus { - if dogu.GetSimpleName() == doguName { - return dogu - } - } - - return nil -} diff --git a/go.mod b/go.mod index ef68c49..daeb27b 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.18 require ( github.com/eapache/go-resiliency v1.2.0 + github.com/gammazero/toposort v0.1.1 github.com/hashicorp/go-multierror v1.1.1 github.com/pkg/errors v0.9.1 github.com/sirupsen/logrus v1.8.1 diff --git a/go.sum b/go.sum index 8e59cca..b21426e 100644 --- a/go.sum +++ b/go.sum @@ -20,6 +20,8 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/gammazero/toposort v0.1.1 h1:OivGxsWxF3U3+U80VoLJ+f50HcPU1MIqE1JlKzoJ2Eg= +github.com/gammazero/toposort v0.1.1/go.mod h1:H2cozTnNpMw0hg2VHAYsAxmkHXBYroNangj2NTBQDvw= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= diff --git a/resources/test/dogu-sort-009.json b/resources/test/dogu-sort-004.json similarity index 54% rename from resources/test/dogu-sort-009.json rename to resources/test/dogu-sort-004.json index b8a7202..0ed8276 100644 --- a/resources/test/dogu-sort-009.json +++ b/resources/test/dogu-sort-004.json @@ -1,142 +1,4 @@ [ - { - "Name": "official/smeagol", - "Version": "1.7.3-4", - "DisplayName": "Smeagol", - "Description": "Store your technical documentation with in your git repositories", - "Category": "Development Apps", - "Tags": [ - "warp", - "wiki", - "docs", - "gollum", - "git" - ], - "Logo": "", - "URL": "https://cloudogu.com", - "Image": "registry.cloudogu.com/official/smeagol", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "upgrade-notification", - "Description": "", - "Command": "/upgrade-notification.sh" - } - ], - "Volumes": [ - { - "Name": "data", - "Path": "/var/lib/smeagol", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - } - ], - "HealthCheck": { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - "HealthChecks": null, - "ServiceAccounts": [ - { - "Type": "cas", - "Params": [ - "cas" - ] - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/java_max_ram_percentage", - "Description": "Limits the heap stack size of the Smeagol process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Smeagol: 25%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "25.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "container_config/java_min_ram_percentage", - "Description": "Limits the heap stack size of the Smeagol process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Smeagol: 50%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "50.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, - "Dependencies": [ - { - "type": "dogu", - "name": "cas", - "version": ">=7.0.5.1-6" - }, - { - "type": "dogu", - "name": "nginx", - "version": "" - }, - { - "type": "dogu", - "name": "scm", - "version": ">=2.20.0-1" - } - ], - "OptionalDependencies": null - }, { "Name": "premium/backup", "Version": "1.11.2-2", @@ -463,26 +325,69 @@ "OptionalDependencies": null }, { - "Name": "official/gotenberg", - "Version": "8.8.0-3", - "DisplayName": "Gotenberg", - "Description": "A Docker-powered stateless API for PDF files.", - "Category": "Documentation", + "Name": "official/redmine", + "Version": "5.1.3-4", + "DisplayName": "Redmine", + "Description": "Redmine is a flexible project management web application", + "Category": "Development Apps", "Tags": [ - "documentation", - "pdf", - "office", - "convert" + "warp", + "pm", + "projectmanagement", + "issue", + "task" ], - "Logo": "https://gotenberg.dev/img/logo_jed.png", - "URL": "https://gotenberg.dev/", - "Image": "registry.cloudogu.com/official/gotenberg", + "Logo": "https://cloudogu.com/images/dogus/redmine.png", + "URL": "http://www.redmine.org", + "Image": "registry.cloudogu.com/official/redmine", "ExposedPorts": null, - "ExposedCommands": null, + "ExposedCommands": [ + { + "Name": "post-upgrade", + "Description": "", + "Command": "/post-upgrade.sh" + }, + { + "Name": "upgrade-notification", + "Description": "", + "Command": "/upgrade-notification.sh" + }, + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + }, + { + "Name": "delete-plugin", + "Description": "", + "Command": "/delete-plugin.sh" + } + ], "Volumes": [ { - "Name": "fonts", - "Path": "/home/gotenberg/.fonts", + "Name": "files", + "Path": "/usr/share/webapps/redmine/files", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "plugins", + "Path": "/var/tmp/redmine/plugins", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "logs", + "Path": "/usr/share/webapps/redmine/log", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + }, + { + "Name": "localConfig", + "Path": "/var/ces/config", "Owner": "1000", "Group": "1000", "NeedsBackup": true @@ -502,11 +407,46 @@ "Port": 3000, "Path": "", "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": [ + { + "Type": "postgresql", + "Params": null + }, + { + "Type": "cas", + "Params": [ + "cas" + ] } ], - "ServiceAccounts": null, "Privileged": false, "Configuration": [ + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "INFO", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + }, { "Name": "container_config/memory_limit", "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", @@ -532,107 +472,77 @@ } }, { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO or DEBUG. Default is INFO", + "Name": "etcd_redmine_config", + "Description": "Applies default configuration to redmine.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "info", + "Default": "", "Validation": { - "Type": "ONE_OF", - "Values": [ - "warn", - "error", - "info", - "debug" - ] + "Type": "", + "Values": null } } ], "Properties": null, "EnvironmentVariables": null, - "Dependencies": null, + "Dependencies": [ + { + "type": "dogu", + "name": "postgresql", + "version": "" + }, + { + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" + }, + { + "type": "dogu", + "name": "nginx", + "version": "" + }, + { + "type": "dogu", + "name": "postfix", + "version": "" + } + ], "OptionalDependencies": null }, - { - "Name": "official/scm", - "Version": "3.4.1-3", - "DisplayName": "SCM-Manager", - "Description": "The easiest way to share and manage your Git, Mercurial and Subversion repositories over http.", - "Category": "Development Apps", + "Name": "official/usermgt", + "Version": "1.16.3-1", + "DisplayName": "User Management", + "Description": "User and Group Management.", + "Category": "Administration Apps", "Tags": [ "warp", - "code", - "scm", - "git", - "mercurial", - "subversion" - ], - "Logo": "https://cloudogu.com/images/dogus/scm-manager.png", - "URL": "https://www.scm-manager.org", - "Image": "registry.cloudogu.com/official/scm", - "ExposedPorts": [ - { - "Type": "tcp", - "Container": 2222, - "Host": 2222 - } + "users", + "groups" ], + "Logo": "https://cloudogu.com/images/dogus/usermanagement.png", + "URL": "https://github.com/cloudogu/usermgt", + "Image": "registry.cloudogu.com/official/usermgt", + "ExposedPorts": null, "ExposedCommands": [ { - "Name": "service-account-create", - "Description": "Creates a new service account", - "Command": "/create-sa.sh" - }, - { - "Name": "service-account-remove", - "Description": "Removes a service account", - "Command": "/remove-sa.sh" - }, - { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" - }, - { - "Name": "upgrade-notification", + "Name": "post-upgrade", "Description": "", - "Command": "/upgrade-notification.sh" + "Command": "/post-upgrade.sh" } ], "Volumes": [ { "Name": "data", - "Path": "/var/lib/scm", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "custom.init.script.d", - "Path": "/var/lib/custom.init.script.d", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "cache", - "Path": "/var/cache", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - }, - { - "Name": "temp", - "Path": "/tmp", + "Path": "/var/lib/usermgt", "Owner": "1000", "Group": "1000", "NeedsBackup": false }, { - "Name": "localConfig", - "Path": "/var/ces/config", + "Name": "importHistory", + "Path": "/var/lib/usermgt/importHistory", "Owner": "1000", "Group": "1000", "NeedsBackup": true @@ -647,6 +557,12 @@ }, "HealthChecks": null, "ServiceAccounts": [ + { + "Type": "ldap", + "Params": [ + "rw" + ] + }, { "Type": "cas", "Params": [ @@ -657,32 +573,23 @@ "Privileged": false, "Configuration": [ { - "Name": "plugin_center_url", - "Description": "URL of SCM-Manager Plugin Center", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "plugin_center_authentication_url", - "Description": "URL of SCM-Manager Plugin Center authentication service. To delete the URL and hence disable plugin center authentication, set this to 'none'.", + "Name": "pwd_reset_selected_by_default", + "Description": "Specifies whether the checkbox for the password change at the next login attribute should be preselected by default ", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "false", "Validation": { - "Type": "", - "Values": null + "Type": "ONE_OF", + "Values": [ + "true", + "false" + ] } }, { - "Name": "release_feed_url", - "Description": "URL of SCM-Manager release RSS feed", + "Name": "mail/sender", + "Description": "Email address to use as sender of the User Management dogu", "Optional": true, "Encrypted": false, "Global": false, @@ -693,8 +600,8 @@ } }, { - "Name": "login_info_url", - "Description": "URL for the login info. To delete the URL and hence disable the login info feature, set this to 'none'", + "Name": "mail/import/subject", + "Description": "The subject of the mail, which is send when a user is imported via the csv import feature", "Optional": true, "Encrypted": false, "Global": false, @@ -705,8 +612,8 @@ } }, { - "Name": "alerts_url", - "Description": "URL for alerts in SCM-Manager. To delete the URL and hence disable the alerts feature, set this to 'none'", + "Name": "mail/import/content", + "Description": "The content of the mail, which is send when a User is imported via the csv import feature. Within the content the placeholders ${username} and ${password} need to be included.", "Optional": true, "Encrypted": false, "Global": false, @@ -717,8 +624,8 @@ } }, { - "Name": "disable_release_feed", - "Description": "If set to 'true', SCM-Manager will not query for new releases", + "Name": "mail/import/max_retries", + "Description": "The number of maximum retries to send a mail, before an error occurs", "Optional": true, "Encrypted": false, "Global": false, @@ -729,8 +636,8 @@ } }, { - "Name": "additional_plugins", - "Description": "Comma separated list of plugin names to install on start. Uninstalled plugins will also be installed again, since they are defined as default.", + "Name": "mail/import/max_retry_delay", + "Description": "The maximum delay for sending an email as part of a retry. By using a backoff strategy, the waiting time increases for each failed send until max_retry_delay is reached before the mail is sent again.", "Optional": true, "Encrypted": false, "Global": false, @@ -741,8 +648,8 @@ } }, { - "Name": "update_plugins", - "Description": "Set to 'true' to install available plugin updates on startup", + "Name": "mail/import/retry_interval", + "Description": "The interval in which failed mails will be checked to be sent again.", "Optional": true, "Encrypted": false, "Global": false, @@ -754,7 +661,7 @@ }, { "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend at least 1200m of memory for SCM.", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend at least 200m of memory for usermgt.", "Optional": true, "Encrypted": false, "Global": false, @@ -778,7 +685,7 @@ }, { "Name": "container_config/java_max_ram_percentage", - "Description": "Limits the heap stack size of the SCM process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for SCM: 25%", + "Description": "Limits the heap stack size of the Usermgt process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Usermgt: 25%", "Optional": true, "Encrypted": false, "Global": false, @@ -790,7 +697,7 @@ }, { "Name": "container_config/java_min_ram_percentage", - "Description": "Limits the heap stack size of the SCM process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for SCM: 50%", + "Description": "Limits the heap stack size of the Usermgt process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Usermgt: 50%", "Optional": true, "Encrypted": false, "Global": false, @@ -800,114 +707,121 @@ "Values": null } }, - { - "Name": "redmine_type", - "Description": "If both, Redmine and EasyRedmine are installed, this sets which instance should be configured", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "EASY_REDMINE", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "REDMINE", - "EASY_REDMINE" - ] - } - }, { "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG or TRACE. Default is INFO", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "INFO", + "Default": "WARN", "Validation": { "Type": "ONE_OF", "Values": [ "WARN", - "ERROR", - "INFO", "DEBUG", - "TRACE" + "INFO", + "ERROR" ] } - }, - { - "Name": "caching/workdir/size", - "Description": "Size of cache for working directories used to edit repository content, for example using the editor or the review plugin. To disable cache, clean this value.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "5", - "Validation": { - "Type": "", - "Values": null - } - }, + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" }, { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "700m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } + "type": "dogu", + "name": "ldap", + "version": ">=2.6.2-7" }, { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } + "type": "dogu", + "name": "nginx", + "version": "" }, { - "Name": "container_config/cpu_core_limit", - "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, + "type": "dogu", + "name": "postfix", + "version": "" + } + ], + "OptionalDependencies": null + }, + { + "Name": "official/smeagol", + "Version": "1.7.3-4", + "DisplayName": "Smeagol", + "Description": "Store your technical documentation with in your git repositories", + "Category": "Development Apps", + "Tags": [ + "warp", + "wiki", + "docs", + "gollum", + "git" + ], + "Logo": "", + "URL": "https://cloudogu.com", + "Image": "registry.cloudogu.com/official/smeagol", + "ExposedPorts": null, + "ExposedCommands": [ { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Name": "upgrade-notification", + "Description": "", + "Command": "/upgrade-notification.sh" + } + ], + "Volumes": [ + { + "Name": "data", + "Path": "/var/lib/smeagol", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + } + ], + "HealthCheck": { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + "HealthChecks": null, + "ServiceAccounts": [ + { + "Type": "cas", + "Params": [ + "cas" + ] + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "1.0", + "Default": "WARN", "Validation": { - "Type": "", - "Values": null + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] } }, { - "Name": "container_config/storage_limit", - "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", "Optional": true, "Encrypted": false, "Global": false, @@ -918,8 +832,8 @@ } }, { - "Name": "container_config/storage_request", - "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", "Optional": true, "Encrypted": false, "Global": false, @@ -930,43 +844,28 @@ } }, { - "Name": "caching/stores/enabled", - "Description": "To enable store caches, set this to 'true'.", + "Name": "container_config/java_max_ram_percentage", + "Description": "Limits the heap stack size of the Smeagol process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Smeagol: 25%", "Optional": true, "Encrypted": false, "Global": false, - "Default": "false", + "Default": "25.0", "Validation": { - "Type": "", + "Type": "FLOAT_PERCENTAGE_HUNDRED", "Values": null } }, { - "Name": "caching/dataFiles/size", - "Description": "To enable data file caches, set this to an integer value > 0.", + "Name": "container_config/java_min_ram_percentage", + "Description": "Limits the heap stack size of the Smeagol process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Smeagol: 50%", "Optional": true, "Encrypted": false, "Global": false, - "Default": "0", + "Default": "50.0", "Validation": { - "Type": "", + "Type": "FLOAT_PERCENTAGE_HUNDRED", "Values": null } - }, - { - "Name": "install_smeagol_plugin", - "Description": "", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "false", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "true", - "false" - ] - } } ], "Properties": null, @@ -984,59 +883,36 @@ }, { "type": "dogu", - "name": "postfix", - "version": "" + "name": "scm", + "version": ">=2.20.0-1" } ], - "OptionalDependencies": [ - { - "type": "dogu", - "name": "redmine", - "version": "" - }, - { - "type": "dogu", - "name": "easyredmine", - "version": "" - }, - { - "type": "dogu", - "name": "jenkins", - "version": "" - }, - { - "type": "dogu", - "name": "cockpit", - "version": "" - }, - { - "type": "dogu", - "name": "jira", - "version": "" - }, - { - "type": "dogu", - "name": "gotenberg", - "version": "" - } - ] + "OptionalDependencies": null }, - { - "Name": "official/cas", - "Version": "7.0.8-2", - "DisplayName": "Central Authentication Service", - "Description": "The Central Authentication Service (CAS) is a single sign-on protocol for the web.", - "Category": "Base", + "Name": "official/scm", + "Version": "3.4.1-3", + "DisplayName": "SCM-Manager", + "Description": "The easiest way to share and manage your Git, Mercurial and Subversion repositories over http.", + "Category": "Development Apps", "Tags": [ - "authentication", - "sso", - "cas" + "warp", + "code", + "scm", + "git", + "mercurial", + "subversion" + ], + "Logo": "https://cloudogu.com/images/dogus/scm-manager.png", + "URL": "https://www.scm-manager.org", + "Image": "registry.cloudogu.com/official/scm", + "ExposedPorts": [ + { + "Type": "tcp", + "Container": 2222, + "Host": 2222 + } ], - "Logo": "https://cloudogu.com/images/dogus/cas.png", - "URL": "https://apereo.github.io/cas", - "Image": "registry.cloudogu.com/official/cas", - "ExposedPorts": null, "ExposedCommands": [ { "Name": "service-account-create", @@ -1045,7 +921,7 @@ }, { "Name": "service-account-remove", - "Description": "Removes an existing service account", + "Description": "Removes a service account", "Command": "/remove-sa.sh" }, { @@ -1053,11 +929,6 @@ "Description": "", "Command": "/pre-upgrade.sh" }, - { - "Name": "post-upgrade", - "Description": "", - "Command": "/post-upgrade.sh" - }, { "Name": "upgrade-notification", "Description": "", @@ -1066,8 +937,29 @@ ], "Volumes": [ { - "Name": "logs", - "Path": "/logs", + "Name": "data", + "Path": "/var/lib/scm", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "custom.init.script.d", + "Path": "/var/lib/custom.init.script.d", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "cache", + "Path": "/var/cache", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + }, + { + "Name": "temp", + "Path": "/tmp", "Owner": "1000", "Group": "1000", "NeedsBackup": false @@ -1081,89 +973,38 @@ } ], "HealthCheck": { - "Type": "", + "Type": "tcp", "State": "", - "Port": 0, + "Port": 8080, "Path": "", "Parameters": null }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], + "HealthChecks": null, "ServiceAccounts": [ { - "Type": "ldap", + "Type": "cas", "Params": [ - "rw" + "cas" ] } ], "Privileged": false, "Configuration": [ { - "Name": "limit/failure_threshold", - "Description": "Number of failed login attempts. This number is used to calculate the failure rate in conjunction with limit/range_seconds. (0 means disabled; defaults to 500)", + "Name": "plugin_center_url", + "Description": "URL of SCM-Manager Plugin Center", "Optional": true, "Encrypted": false, "Global": false, - "Default": "500", + "Default": "", "Validation": { "Type": "", "Values": null } }, { - "Name": "limit/range_seconds", - "Description": "Time in seconds defines timeframe over which the login failures are taken into account (must be a positive number, takes only effect if limit/failure_threshold is > 0; defaults to 10 seconds)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "10", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "limit/stale_removal_interval", - "Description": "Time in seconds between background runs which finds and removes clean expired and stale login failures (must be a positive number, takes only effect if limit/failure_threshold is > 0; defaults to 60 seconds)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "60", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "limit/lock_time", - "Description": "Time in seconds to lock an account if the throttling threshold was met; (must be a positive number, takes only effect if limit/failure_threshold is > 0; defaults to 600 seconds)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "600", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "mail_sender", - "Description": "Email address to use as sender of the CAS dogu", + "Name": "plugin_center_authentication_url", + "Description": "URL of SCM-Manager Plugin Center authentication service. To delete the URL and hence disable plugin center authentication, set this to 'none'.", "Optional": true, "Encrypted": false, "Global": false, @@ -1174,23 +1015,8 @@ } }, { - "Name": "password_management/enable_password_reset_via_email", - "Description": "Specifies whether the functionality for resetting the password via a link sent by e-mail should be activated. This entry is set to 'true' by default.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "true", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "true", - "false" - ] - } - }, - { - "Name": "password_management/reset_password_subject", - "Description": "Specifies the subject of the e-mail when resetting the password.", + "Name": "release_feed_url", + "Description": "URL of SCM-Manager release RSS feed", "Optional": true, "Encrypted": false, "Global": false, @@ -1201,8 +1027,8 @@ } }, { - "Name": "password_management/reset_password_text", - "Description": "Specifies the text for the password reset email. Note: The password reset link must be inserted mandatory with ${url}", + "Name": "login_info_url", + "Description": "URL for the login info. To delete the URL and hence disable the login info feature, set this to 'none'", "Optional": true, "Encrypted": false, "Global": false, @@ -1213,8 +1039,8 @@ } }, { - "Name": "forgot_password_text", - "Description": "Text which shall be shown if a user clicks 'Forgot Password'. Note: The button 'Forgot password' is only visible if the value 'enable_password_reset_via_email' is not `true`.", + "Name": "alerts_url", + "Description": "URL for alerts in SCM-Manager. To delete the URL and hence disable the alerts feature, set this to 'none'", "Optional": true, "Encrypted": false, "Global": false, @@ -1225,8 +1051,8 @@ } }, { - "Name": "legal_urls/terms_of_service", - "Description": "This URL links to the Terms of Service and will be the first link at the bottom of login or logout pages. If empty the whole link will be omitted. If changed the CAS dogu must be restarted to take effect.", + "Name": "disable_release_feed", + "Description": "If set to 'true', SCM-Manager will not query for new releases", "Optional": true, "Encrypted": false, "Global": false, @@ -1237,8 +1063,8 @@ } }, { - "Name": "legal_urls/imprint", - "Description": "This URL links to the Imprint and will be the second link at the bottom of login or logout pages. If empty the whole link will be omitted. If changed the CAS dogu must be restarted to take effect.", + "Name": "additional_plugins", + "Description": "Comma separated list of plugin names to install on start. Uninstalled plugins will also be installed again, since they are defined as default.", "Optional": true, "Encrypted": false, "Global": false, @@ -1249,8 +1075,8 @@ } }, { - "Name": "legal_urls/privacy_policy", - "Description": "This URL links to the Privacy Policy and will be the last link at the bottom of login or logout pages. If empty the whole link will be omitted. If changed the CAS dogu must be restarted to take effect.", + "Name": "update_plugins", + "Description": "Set to 'true' to install available plugin updates on startup", "Optional": true, "Encrypted": false, "Global": false, @@ -1261,174 +1087,137 @@ } }, { - "Name": "session_tgt/max_time_to_live_in_seconds", - "Description": "Maximum session timeout - TGT will expire after defined timespan regardless the usage", + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend at least 1200m of memory for SCM.", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "session_tgt/time_to_kill_in_seconds", - "Description": "Idle session timeout - TGT will expire sooner if no further requests keep the session alive", + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/host", - "Description": "The host of the LDAP (without protocol and without port), e.g. ldap if LDAP dogu is used.", - "Optional": false, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/port", - "Description": "The port of the LDAP, e.g. 389", - "Optional": false, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "ldap/base_dn", - "Description": "Base DN of users to be authenticated, \"(dc=cloudogu,dc=com)\". This value is only used when using an external LDAP.", + "Name": "container_config/java_max_ram_percentage", + "Description": "Limits the heap stack size of the SCM process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for SCM: 25%", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "25.0", "Validation": { - "Type": "", + "Type": "FLOAT_PERCENTAGE_HUNDRED", "Values": null } }, { - "Name": "ldap/connection_dn", - "Description": "Manager DN for authenticated searches, e.g. \"(cn=admin,dc=cloudogu,dc=com)\" This value is only used when using an external LDAP.", + "Name": "container_config/java_min_ram_percentage", + "Description": "Limits the heap stack size of the SCM process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for SCM: 50%", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "50.0", "Validation": { - "Type": "", + "Type": "FLOAT_PERCENTAGE_HUNDRED", "Values": null } }, { - "Name": "ldap/password", - "Description": "The password for connection to ldap in encrypted form. This value is only used when using an external LDAP.", + "Name": "redmine_type", + "Description": "If both, Redmine and EasyRedmine are installed, this sets which instance should be configured", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/search_filter", - "Description": "Search filter used for configurations that require searching for DNs, e.g. (objectClass=person)", - "Optional": false, - "Encrypted": false, - "Global": false, - "Default": "", + "Default": "EASY_REDMINE", "Validation": { - "Type": "", - "Values": null + "Type": "ONE_OF", + "Values": [ + "REDMINE", + "EASY_REDMINE" + ] } }, { - "Name": "ldap/ds_type", - "Description": "Type of the LDAP", + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG or TRACE. Default is INFO", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "INFO", "Validation": { "Type": "ONE_OF", "Values": [ - "embedded", - "external" + "WARN", + "ERROR", + "INFO", + "DEBUG", + "TRACE" ] } }, { - "Name": "ldap/encryption", - "Description": "Type of the encryption of the LDAP. Defaults to 'none'.", + "Name": "caching/workdir/size", + "Description": "Size of cache for working directories used to edit repository content, for example using the editor or the review plugin. To disable cache, clean this value.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "none", + "Default": "5", "Validation": { - "Type": "ONE_OF", - "Values": [ - "", - "none", - "startTLS", - "startTLSAny", - "ssl", - "sslAny" - ] + "Type": "", + "Values": null } }, { - "Name": "ldap/attribute_id", - "Description": "The attribute for the user ID in the LDAP", - "Optional": false, + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "ldap/attribute_given_name", - "Description": "The attribute for the user's given name in the LDAP", + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "700m", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "ldap/attribute_surname", - "Description": "The attribute for the user's surname in the LDAP", + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "ldap/attribute_fullname", - "Description": "The attribute for the user's fullname in the LDAP, which can also be seen as display name like \"John Doe\"", + "Name": "container_config/cpu_core_limit", + "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", "Optional": true, "Encrypted": false, "Global": false, @@ -1439,121 +1228,230 @@ } }, { - "Name": "ldap/attribute_mail", - "Description": "The attribute for the user's mail address in the LDAP", + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "1.0", "Validation": { "Type": "", "Values": null } }, { - "Name": "ldap/attribute_group", - "Description": "The user's group membership attribute (e.g. memberOf)", + "Name": "container_config/storage_limit", + "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "ldap/group_attribute_name", - "Description": "Name of the attribute for groups (the group's user membership attribute) in LDAP, e.g. member", + "Name": "container_config/storage_request", + "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "ldap/group_base_dn", - "Description": "Settings for ldap group search by member. Base dn for group search e.g.: o=ces.local,dc=cloudogu,dc=com", + "Name": "caching/stores/enabled", + "Description": "To enable store caches, set this to 'true'.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "false", "Validation": { "Type": "", "Values": null } }, { - "Name": "ldap/group_search_filter", - "Description": "Search filter for group search. If this property is empty, group search by member will be skipped", + "Name": "caching/dataFiles/size", + "Description": "To enable data file caches, set this to an integer value > 0.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "0", "Validation": { "Type": "", "Values": null } }, { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Name": "install_smeagol_plugin", + "Description": "", "Optional": true, "Encrypted": false, "Global": false, - "Default": "WARN", + "Default": "false", "Validation": { "Type": "ONE_OF", "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" + "true", + "false" ] } - }, + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" }, { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "1g", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } + "type": "dogu", + "name": "nginx", + "version": "" }, { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } + "type": "dogu", + "name": "postfix", + "version": "" + } + ], + "OptionalDependencies": [ + { + "type": "dogu", + "name": "redmine", + "version": "" }, { - "Name": "container_config/cpu_core_limit", - "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 virtual CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", + "type": "dogu", + "name": "easyredmine", + "version": "" + }, + { + "type": "dogu", + "name": "jenkins", + "version": "" + }, + { + "type": "dogu", + "name": "cockpit", + "version": "" + }, + { + "type": "dogu", + "name": "jira", + "version": "" + }, + { + "type": "dogu", + "name": "gotenberg", + "version": "" + } + ] + }, + { + "Name": "official/nexus", + "Version": "3.70.2-3", + "DisplayName": "Sonatype Nexus", + "Description": "The Nexus Repository is like the local warehouse where all of the parts and finished goods used in your software supply chain are stored and distributed.", + "Category": "Development Apps", + "Tags": [ + "warp", + "build", + "artifact", + "maven" + ], + "Logo": "https://cloudogu.com/images/dogus/nexus.png", + "URL": "http://www.sonatype.org/nexus", + "Image": "registry.cloudogu.com/official/nexus", + "ExposedPorts": null, + "ExposedCommands": [ + { + "Name": "service-account-create", + "Description": "Creates a new service account", + "Command": "/create-sa.sh" + }, + { + "Name": "service-account-remove", + "Description": "Removes a service account", + "Command": "/remove-sa.sh" + }, + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + }, + { + "Name": "upgrade-notification", + "Description": "", + "Command": "/upgrade-notification.sh" + } + ], + "Volumes": [ + { + "Name": "data", + "Path": "/var/lib/nexus", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "migration", + "Path": "/var/lib/migration", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "localConfig", + "Path": "/var/ces/config", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 8082, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": [ + { + "Type": "cas", + "Params": [ + "cas" + ] + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "claim/once", + "Description": "A claim script definition which is only executed once. After that, it will set the claim/once.lock key which prevents further execution.", "Optional": true, "Encrypted": false, "Global": false, @@ -1564,147 +1462,216 @@ } }, { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 virtual CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", + "Name": "claim/once.lock", + "Description": "If this key is set to true it will prevent the claim/once script from being executed.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "0.5", + "Default": "", "Validation": { "Type": "", "Values": null } }, { - "Name": "container_config/storage_limit", - "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Name": "claim/always", + "Description": "A claim script definition which will always be executed at startup.", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "BINARY_MEASUREMENT", + "Type": "", "Values": null } }, { - "Name": "container_config/storage_request", - "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Name": "nexus.repository.sandbox.enable", + "Description": "Enable repository sandboxing", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "BINARY_MEASUREMENT", + "Type": "", "Values": null } }, { - "Name": "container_config/java_max_ram_percentage", - "Description": "Limits the heap stack size of the CAS process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for CAS: 25%", + "Name": "installDefaultDockerRegistry", + "Description": "If set to false, the default docker registry is not installed", "Optional": true, "Encrypted": false, "Global": false, - "Default": "25.0", + "Default": "", "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Type": "", "Values": null } }, { - "Name": "container_config/java_min_ram_percentage", - "Description": "Limits the heap stack size of the CAS process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for CAS: 50%", + "Name": "disableOutreachManagement", + "Description": "Disable the outreach management capability", "Optional": true, "Encrypted": false, "Global": false, - "Default": "50.0", + "Default": "", "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Type": "", "Values": null } }, { - "Name": "oidc/enabled", - "Description": "Determines whether the CAS should use the configured OIDC provider for delegated authentication. This entry is set to 'false' by default.", + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG. The default log level is set to \"WARN\"", "Optional": true, "Encrypted": false, "Global": false, - "Default": "false", + "Default": "WARN", "Validation": { "Type": "ONE_OF", "Values": [ - "true", - "false" + "WARN", + "DEBUG", + "INFO", + "ERROR" ] } }, { - "Name": "oidc/discovery_uri", - "Description": "Describes the URI that contains the description for the OIDC protocol of the target provider.", + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend to add 50m for additional tools running inside the container.", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "oidc/client_id", - "Description": "Contains the identifier that should be used to identify the client against the OIDC provider.", + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "oidc/client_secret", - "Description": "Contains the secret that should be used along the client ID to identify the client against the OIDC provider.", + "Name": "container_config/java_max_ram_percentage", + "Description": "Limits the heap stack size of the Nexus process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Nexus: 25%", "Optional": true, - "Encrypted": true, + "Encrypted": false, "Global": false, - "Default": "", + "Default": "25.0", "Validation": { - "Type": "", + "Type": "FLOAT_PERCENTAGE_HUNDRED", "Values": null } }, { - "Name": "oidc/display_name", - "Description": "The display name is used for the OIDC provider in the user interface.", + "Name": "container_config/java_min_ram_percentage", + "Description": "Limits the heap stack size of the Nexus process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Nexus: 50%", "Optional": true, "Encrypted": false, "Global": false, - "Default": "OIDC Provider", + "Default": "50.0", "Validation": { - "Type": "", + "Type": "FLOAT_PERCENTAGE_HUNDRED", "Values": null } }, { - "Name": "oidc/redirect_uri", - "Description": "The url which will be used as redirect target after a successful delegated logout. The url has to match the patterns which are allowed for the configured client. [defaults to /cas/logout]", + "Name": "cleanup_policy/notes", + "Description": "Notes to the default cleanup-policy. Default: \"Do not edit. CES will re-generate this default policy during each Nexus start-up that will overwrite your changes. You may want to create your own policies which will stay untouched during the start-up.\"", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "Do not edit. CES will re-generate this default policy during each Nexus start-up that will overwrite your changes. You may want to create your own policies which will stay untouched during the start-up.", "Validation": { "Type": "", "Values": null } }, { - "Name": "oidc/optional", - "Description": "Determines whether the authentication via the configured OIDC provider is optional. The user is automatically redirected to the login page of the OIDC provider if this property is set to 'false'. The 'true' entry makes authentication via the OIDC provider optional. For this, an additional button for the OIDC provider is displayed on the login page of the CAS, which can be used for authentication with the OIDC provider. This entry is set to 'false' by default.", + "Name": "cleanup_policy/policy_format", + "Description": "Repository format on which the default cleanup-policy can be applied. The default is \"maven2\" which corresponds to maven repositories", "Optional": true, "Encrypted": false, "Global": false, - "Default": "false", + "Default": "maven2", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "apt", + "bower", + "cocoapods", + "conan", + "conda", + "docker", + "gitlfs", + "go", + "helm", + "maven2", + "npm", + "nuget", + "p2", + "pypi", + "r", + "raw", + "rubygems", + "yum" + ] + } + }, + { + "Name": "cleanup_policy/criteria/regex", + "Description": "Regex which will be used to match fitting artifacts. Default: \".*SNAPSHOT\"", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": ".*SNAPSHOT", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "cleanup_policy/criteria/release_type", + "Description": "The release type on which this policy will be applied. This configuration can only be applied if the 'policy_format' is of type \"maven2\", \"yum\" and \"npm\". Default: \"PRERELEASES\"", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "PRERELEASES", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "cleanup_policy/criteria/days_till_recognition_for_delete", + "Description": "The number of days after which an artifact is recognised for deletion. Default: \"14\"", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "14", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "compact_blobstore_task/enabled", + "Description": "Switch to control whether the policy should be switched on or off. Default: \"true\"", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "true", "Validation": { "Type": "ONE_OF", "Values": [ @@ -1714,113 +1681,2882 @@ } }, { - "Name": "oidc/scopes", - "Description": "Specifies the resource to be queried against OIDC. Normally, this enumeration should contain at least the openid, user's email, profile information, and the groups assigned to the user. This entry is set to `openid email profile groups` by default.", + "Name": "compact_blobstore_task/blobstore", + "Description": "The specific blobstore instance to that the task should be applied. This configuration should only be used if the task type is 'blobstore.compact' (or other tasks that need to choose a blobstore instance). Default: \"default\"", "Optional": true, "Encrypted": false, "Global": false, - "Default": "openid email profile groups", + "Default": "default", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "compact_blobstore_task/cron", + "Description": "Cron string (in Quartz syntax) that sets the task's schedule. The default \"0 0 3 * * ?\" value will run the task daily at 3:00 AM.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "0 0 3 * * ?", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "carp-limiter/token-rate", + "Description": "The token-rate of the carp-limiter in which tokens are added to the bucket in tokens/second. Default is 50", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "carp-limiter/burst-size", + "Description": "The size of the bucket for the carp-limiter. It sets the amount of tokens the bucket can hold. Defaults to 150", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "150", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "carp-limiter/clean-interval", + "Description": "The clean interval in seconds for the carp-limiter, in which old limits from the limiter are cleaned. Defaults to 300 seconds (5 minutes)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "30", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "2500m", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_limit", + "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "1.0", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/storage_limit", + "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/storage_request", + "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" + }, + { + "type": "dogu", + "name": "nginx", + "version": "" + }, + { + "type": "dogu", + "name": "postfix", + "version": "" + } + ], + "OptionalDependencies": null + }, + { + "Name": "official/jenkins", + "Version": "2.462.2-1", + "DisplayName": "Jenkins CI", + "Description": "Jenkins Continuous Integration Server", + "Category": "Development Apps", + "Tags": [ + "warp", + "build", + "ci", + "cd" + ], + "Logo": "https://cloudogu.com/images/dogus/jenkins.png", + "URL": "https://jenkins-ci.org", + "Image": "registry.cloudogu.com/official/jenkins", + "ExposedPorts": null, + "ExposedCommands": [ + { + "Name": "upgrade-notification", + "Description": "", + "Command": "/upgrade-notification.sh" + }, + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + } + ], + "Volumes": [ + { + "Name": "data", + "Path": "/var/lib/jenkins", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "custom.init.groovy.d", + "Path": "/var/lib/custom.init.groovy.d", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "tmp", + "Path": "/tmp", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "additional.plugins", + "Description": "Comma separated list of plugin names to install on start", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "blocked.plugins", + "Description": "Comma separated list of plugin names to remove on start/restart", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/java_max_ram_percentage", + "Description": "Limits the heap stack size of the Jenkins process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Jenkins: 25%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "25.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "container_config/java_min_ram_percentage", + "Description": "Limits the heap stack size of the Jenkins process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Jenkins: 50%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "2g", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_limit", + "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "1.0", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/storage_limit", + "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/storage_request", + "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "additional_java_args", + "Description": "Additional args that are passed to the jenkins process.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "UNSET", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "INFO", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "cas", + "version": "" + }, + { + "type": "dogu", + "name": "nginx", + "version": "" + }, + { + "type": "dogu", + "name": "postfix", + "version": "" + } + ], + "OptionalDependencies": null + }, + { + "Name": "official/cockpit", + "Version": "2.1.0-1", + "DisplayName": "Cockpit", + "Description": "Dashboard for the Cloudogu EcoSystem", + "Category": "Development Apps", + "Tags": [ + "warp", + "dashboard" + ], + "Logo": "https://cloudogu.com/images/dogus/cockpit.png", + "URL": "https://github.com/cloudogu", + "Image": "registry.cloudogu.com/official/cockpit", + "ExposedPorts": null, + "ExposedCommands": [ + { + "Name": "upgrade-notification", + "Description": "", + "Command": "/upgrade-notification.sh" + } + ], + "Volumes": null, + "HealthCheck": { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + "HealthChecks": null, + "ServiceAccounts": [ + { + "Type": "postgresql", + "Params": null + }, + { + "Type": "cas", + "Params": [ + "cas" + ] + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "pinnedDashboard", + "Description": "A dashboard which is pinned for everybody", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "welcomeDashboard", + "Description": "The cockpit welcome dashboard", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "postgresql", + "version": "" + }, + { + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" + }, + { + "type": "dogu", + "name": "nginx", + "version": "" + } + ], + "OptionalDependencies": null + }, + { + "Name": "official/cas", + "Version": "7.0.8-2", + "DisplayName": "Central Authentication Service", + "Description": "The Central Authentication Service (CAS) is a single sign-on protocol for the web.", + "Category": "Base", + "Tags": [ + "authentication", + "sso", + "cas" + ], + "Logo": "https://cloudogu.com/images/dogus/cas.png", + "URL": "https://apereo.github.io/cas", + "Image": "registry.cloudogu.com/official/cas", + "ExposedPorts": null, + "ExposedCommands": [ + { + "Name": "service-account-create", + "Description": "Creates a new service account", + "Command": "/create-sa.sh" + }, + { + "Name": "service-account-remove", + "Description": "Removes an existing service account", + "Command": "/remove-sa.sh" + }, + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + }, + { + "Name": "post-upgrade", + "Description": "", + "Command": "/post-upgrade.sh" + }, + { + "Name": "upgrade-notification", + "Description": "", + "Command": "/upgrade-notification.sh" + } + ], + "Volumes": [ + { + "Name": "logs", + "Path": "/logs", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + }, + { + "Name": "localConfig", + "Path": "/var/ces/config", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": [ + { + "Type": "ldap", + "Params": [ + "rw" + ] + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "limit/failure_threshold", + "Description": "Number of failed login attempts. This number is used to calculate the failure rate in conjunction with limit/range_seconds. (0 means disabled; defaults to 500)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "500", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "limit/range_seconds", + "Description": "Time in seconds defines timeframe over which the login failures are taken into account (must be a positive number, takes only effect if limit/failure_threshold is > 0; defaults to 10 seconds)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "10", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "limit/stale_removal_interval", + "Description": "Time in seconds between background runs which finds and removes clean expired and stale login failures (must be a positive number, takes only effect if limit/failure_threshold is > 0; defaults to 60 seconds)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "60", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "limit/lock_time", + "Description": "Time in seconds to lock an account if the throttling threshold was met; (must be a positive number, takes only effect if limit/failure_threshold is > 0; defaults to 600 seconds)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "600", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "mail_sender", + "Description": "Email address to use as sender of the CAS dogu", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "password_management/enable_password_reset_via_email", + "Description": "Specifies whether the functionality for resetting the password via a link sent by e-mail should be activated. This entry is set to 'true' by default.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "true", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "true", + "false" + ] + } + }, + { + "Name": "password_management/reset_password_subject", + "Description": "Specifies the subject of the e-mail when resetting the password.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "password_management/reset_password_text", + "Description": "Specifies the text for the password reset email. Note: The password reset link must be inserted mandatory with ${url}", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "forgot_password_text", + "Description": "Text which shall be shown if a user clicks 'Forgot Password'. Note: The button 'Forgot password' is only visible if the value 'enable_password_reset_via_email' is not `true`.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "legal_urls/terms_of_service", + "Description": "This URL links to the Terms of Service and will be the first link at the bottom of login or logout pages. If empty the whole link will be omitted. If changed the CAS dogu must be restarted to take effect.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "legal_urls/imprint", + "Description": "This URL links to the Imprint and will be the second link at the bottom of login or logout pages. If empty the whole link will be omitted. If changed the CAS dogu must be restarted to take effect.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "legal_urls/privacy_policy", + "Description": "This URL links to the Privacy Policy and will be the last link at the bottom of login or logout pages. If empty the whole link will be omitted. If changed the CAS dogu must be restarted to take effect.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "session_tgt/max_time_to_live_in_seconds", + "Description": "Maximum session timeout - TGT will expire after defined timespan regardless the usage", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "session_tgt/time_to_kill_in_seconds", + "Description": "Idle session timeout - TGT will expire sooner if no further requests keep the session alive", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/host", + "Description": "The host of the LDAP (without protocol and without port), e.g. ldap if LDAP dogu is used.", + "Optional": false, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/port", + "Description": "The port of the LDAP, e.g. 389", + "Optional": false, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/base_dn", + "Description": "Base DN of users to be authenticated, \"(dc=cloudogu,dc=com)\". This value is only used when using an external LDAP.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/connection_dn", + "Description": "Manager DN for authenticated searches, e.g. \"(cn=admin,dc=cloudogu,dc=com)\" This value is only used when using an external LDAP.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/password", + "Description": "The password for connection to ldap in encrypted form. This value is only used when using an external LDAP.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/search_filter", + "Description": "Search filter used for configurations that require searching for DNs, e.g. (objectClass=person)", + "Optional": false, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/ds_type", + "Description": "Type of the LDAP", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "embedded", + "external" + ] + } + }, + { + "Name": "ldap/encryption", + "Description": "Type of the encryption of the LDAP. Defaults to 'none'.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "none", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "", + "none", + "startTLS", + "startTLSAny", + "ssl", + "sslAny" + ] + } + }, + { + "Name": "ldap/attribute_id", + "Description": "The attribute for the user ID in the LDAP", + "Optional": false, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/attribute_given_name", + "Description": "The attribute for the user's given name in the LDAP", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/attribute_surname", + "Description": "The attribute for the user's surname in the LDAP", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/attribute_fullname", + "Description": "The attribute for the user's fullname in the LDAP, which can also be seen as display name like \"John Doe\"", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/attribute_mail", + "Description": "The attribute for the user's mail address in the LDAP", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/attribute_group", + "Description": "The user's group membership attribute (e.g. memberOf)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/group_attribute_name", + "Description": "Name of the attribute for groups (the group's user membership attribute) in LDAP, e.g. member", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/group_base_dn", + "Description": "Settings for ldap group search by member. Base dn for group search e.g.: o=ces.local,dc=cloudogu,dc=com", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ldap/group_search_filter", + "Description": "Search filter for group search. If this property is empty, group search by member will be skipped", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "WARN", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "1g", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_limit", + "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 virtual CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 virtual CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "0.5", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/storage_limit", + "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/storage_request", + "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/java_max_ram_percentage", + "Description": "Limits the heap stack size of the CAS process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for CAS: 25%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "25.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "container_config/java_min_ram_percentage", + "Description": "Limits the heap stack size of the CAS process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for CAS: 50%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "oidc/enabled", + "Description": "Determines whether the CAS should use the configured OIDC provider for delegated authentication. This entry is set to 'false' by default.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "false", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "true", + "false" + ] + } + }, + { + "Name": "oidc/discovery_uri", + "Description": "Describes the URI that contains the description for the OIDC protocol of the target provider.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/client_id", + "Description": "Contains the identifier that should be used to identify the client against the OIDC provider.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/client_secret", + "Description": "Contains the secret that should be used along the client ID to identify the client against the OIDC provider.", + "Optional": true, + "Encrypted": true, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/display_name", + "Description": "The display name is used for the OIDC provider in the user interface.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "OIDC Provider", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/redirect_uri", + "Description": "The url which will be used as redirect target after a successful delegated logout. The url has to match the patterns which are allowed for the configured client. [defaults to /cas/logout]", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/optional", + "Description": "Determines whether the authentication via the configured OIDC provider is optional. The user is automatically redirected to the login page of the OIDC provider if this property is set to 'false'. The 'true' entry makes authentication via the OIDC provider optional. For this, an additional button for the OIDC provider is displayed on the login page of the CAS, which can be used for authentication with the OIDC provider. This entry is set to 'false' by default.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "false", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "true", + "false" + ] + } + }, + { + "Name": "oidc/scopes", + "Description": "Specifies the resource to be queried against OIDC. Normally, this enumeration should contain at least the openid, user's email, profile information, and the groups assigned to the user. This entry is set to `openid email profile groups` by default.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "openid email profile groups", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/attribute_mapping", + "Description": "The attributes provided by OIDC do not exactly match the attributes required by the CAS. It is necessary to transform the OIDC attributes into attributes accepted by the cas. Therefore, this entry should contain rules to transform an attribute provided by the OIDC provider into an attribute required by CAS. The rules should be provided in the following format: 'email:mail,family_name:surname'. With the given example the OIDC attribute 'email' and 'family_name' are transformed into 'mail' and 'surname' respectively. The CAS requires the following attributes to function properly: 'mail,surname,givenName,username,displayName'.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "oidc/principal_attribute", + "Description": "Specifies an attribute that should be used as principal id inside the CES. CAS uses the ID provided by the OIDC provider when this property is empty.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "nginx", + "version": ">=1.26.1-5" + }, + { + "type": "dogu", + "name": "postfix", + "version": "" + } + ], + "OptionalDependencies": [ + { + "type": "dogu", + "name": "ldap", + "version": "" + } + ] + }, + { + "Name": "official/plantuml", + "Version": "2024.7-1", + "DisplayName": "PlantUML", + "Description": "Create your PlantUML diagrams directly in your browser!", + "Category": "Documentation", + "Tags": [ + "docs", + "uml", + "graph" + ], + "Logo": "http://s.plantuml.com/logoc.png", + "URL": "http://plantuml.com/", + "Image": "registry.cloudogu.com/official/plantuml", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": null, + "HealthCheck": { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + "HealthChecks": null, + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/java_max_ram_percentage", + "Description": "Limits the heap stack size of the PlantUML process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for PlantUML: 25%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "25.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "container_config/java_min_ram_percentage", + "Description": "Limits the heap stack size of the PlantUML process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for PlantUML: 50%", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50.0", + "Validation": { + "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Values": null + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "WARN", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "nginx", + "version": "" + } + ], + "OptionalDependencies": null + }, + { + "Name": "official/nginx", + "Version": "1.26.1-11", + "DisplayName": "Nginx", + "Description": "Nginx WebServer.", + "Category": "Base", + "Tags": [ + "webserver", + "proxy", + "reverse-proxy" + ], + "Logo": "https://cloudogu.com/images/dogus/nginx.png", + "URL": "http://nginx.org/", + "Image": "registry.cloudogu.com/official/nginx", + "ExposedPorts": [ + { + "Type": "tcp", + "Container": 80, + "Host": 80 + }, + { + "Type": "tcp", + "Container": 443, + "Host": 443 + } + ], + "ExposedCommands": null, + "Volumes": [ + { + "Name": "customhtml", + "Path": "/var/www/customhtml", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "app.conf.d", + "Path": "/etc/nginx/app.conf.d", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "appconf", + "Path": "/var/nginx/conf.d/", + "Owner": "0", + "Group": "0", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 80, + "Path": "", + "Parameters": null + }, + { + "Type": "tcp", + "State": "", + "Port": 443, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "WARN", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + }, + { + "Name": "disable_access_log", + "Description": "Disable logging of incoming requests", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "google_tracking_id", + "Description": "Google Analytics Tracking ID", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "html_content_url", + "Description": "URL path to reach all custom html content pages. Default value when unset: static", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "ignore_service_health", + "Description": "Option to ignore the health status of all dogus. Makes it possible to access dogus even if they are unhealthy", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "false", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend to have at least allocated 20m for additional tools (ces-confd) running inside the container.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + } + ], + "Properties": { + "stopAtBackup": "false" + }, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "registrator", + "version": ">=0.10.0-1" + } + ], + "OptionalDependencies": null + }, + { + "Name": "official/registrator", + "Version": "0.12.0-1", + "DisplayName": "Registrator", + "Description": "Service registry bridge for Docker with pluggable adapters", + "Category": "Base", + "Tags": [ + "register", + "container" + ], + "Logo": "https://cloudogu.com/images/dogus/registrator.png", + "URL": "http://gliderlabs.com/registrator/latest/", + "Image": "registry.cloudogu.com/official/registrator", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": null, + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": null, + "ServiceAccounts": null, + "Privileged": true, + "Configuration": [ + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": null, + "OptionalDependencies": null + }, + { + "Name": "official/postgresql", + "Version": "14.12-3", + "DisplayName": "PostgreSQL", + "Description": "PostgreSQL Database.", + "Category": "Base", + "Tags": [ + "database", + "db" + ], + "Logo": "https://cloudogu.com/images/dogus/postgresql.png", + "URL": "https://www.postgresql.org/", + "Image": "registry.cloudogu.com/official/postgresql", + "ExposedPorts": null, + "ExposedCommands": [ + { + "Name": "service-account-create", + "Description": "Creates a new service account", + "Command": "/create-sa.sh" + }, + { + "Name": "service-account-remove", + "Description": "Removes a service account", + "Command": "/remove-sa.sh" + }, + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + }, + { + "Name": "backup-consumer", + "Description": "", + "Command": "/backup-consumer.sh" + }, + { + "Name": "upgrade-notification", + "Description": "", + "Command": "/upgrade-notification.sh" + } + ], + "Volumes": [ + { + "Name": "data", + "Path": "/var/lib/postgresql", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "localConfig", + "Path": "/var/ces/config", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 5432, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50m", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_limit", + "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "0.50", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/storage_limit", + "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/storage_request", + "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "WARN", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": null, + "OptionalDependencies": null + }, + { + "Name": "official/postfix", + "Version": "3.9.0-3", + "DisplayName": "Postfix", + "Description": "Postfix - Mail Transfer Agent", + "Category": "Base", + "Tags": [ + "mail", + "smtp" + ], + "Logo": "https://cloudogu.com/images/dogus/postfix.png", + "URL": "http://www.postfix.org/", + "Image": "registry.cloudogu.com/official/postfix", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": null, + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 25, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "relayhost", + "Description": "The next-hop destination of non-local mail", + "Optional": false, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "sasl_username", + "Description": "username for sasl authentication", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "sasl_password", + "Description": "password for sasl authentication, if the mail relay server needs an md5 encrypted password pass the encrypted password in here otherwise plain", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_security_level", + "Description": "The default SMTP TLS security level for the Postfix SMTP client", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_cert_file", + "Description": "Postfix SMTP client RSA certificate in PEM format", + "Optional": true, + "Encrypted": true, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_key_file", + "Description": "Postfix SMTP client RSA private key in PEM format", + "Optional": true, + "Encrypted": true, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_CAfile", + "Description": "CA certificates of root CAs trusted to sign either remote SMTP server certificates or intermediate CA certificates", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_loglevel", + "Description": "Enable additional Postfix SMTP client logging of TLS activity", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_exclude_ciphers", + "Description": "List of ciphers or cipher types to exclude from the Postfix SMTP client cipher list at all TLS security levels", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_mandatory_ciphers", + "Description": "The minimum TLS cipher grade that the Postfix SMTP client will use with mandatory TLS encryption", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtp_tls_mandatory_protocols", + "Description": "List of SSL/TLS protocols that the Postfix SMTP client will use with mandatory TLS encryption", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "smtpd_forbid_bare_newline", + "Description": "Disables support for malformed line endings in SMTP. This fixes CVE-2023-51764 but could break (rare) clients that mis-implement SMTP.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "yes", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "yes", + "no" + ] + } + }, + { + "Name": "smtpd_forbid_bare_newline_exclusions", + "Description": "List of clients for which bare newlines should still be allowed. See https://www.postfix.org/postconf.5.html#smtpd_forbid_bare_newline_exclusions", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "$mynetworks", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "INFO", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "50m", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_limit", + "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "0.05", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/storage_limit", + "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/storage_request", + "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": null, + "OptionalDependencies": null + }, + { + "Name": "official/ldap", + "Version": "2.6.7-4", + "DisplayName": "OpenLDAP", + "Description": "OpenLDAP server for user and group management.", + "Category": "Base", + "Tags": [ + "authentication", + "ldap", + "users", + "groups" + ], + "Logo": "https://cloudogu.com/images/dogus/openldap.png", + "URL": "http://www.openldap.org", + "Image": "registry.cloudogu.com/official/ldap", + "ExposedPorts": null, + "ExposedCommands": [ + { + "Name": "service-account-create", + "Description": "Creates a new service account", + "Command": "/srv/openldap/create-sa.sh" + }, + { + "Name": "service-account-remove", + "Description": "Removes a service account", + "Command": "/srv/openldap/remove-sa.sh" + }, + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + }, + { + "Name": "post-upgrade", + "Description": "", + "Command": "/post-upgrade.sh" + } + ], + "Volumes": [ + { + "Name": "db", + "Path": "/var/lib/openldap", + "Owner": "100", + "Group": "101", + "NeedsBackup": true + }, + { + "Name": "config", + "Path": "/etc/openldap/slapd.d", + "Owner": "100", + "Group": "101", + "NeedsBackup": true + }, + { + "Name": "crontab-logs", + "Path": "/tmp/logs", + "Owner": "100", + "Group": "101", + "NeedsBackup": false + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 389, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte)", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "password_change/notification_enabled", + "Description": "Enables the e-mail notification when a users password was changed", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "true", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "true", + "false" + ] + } + }, + { + "Name": "password_change/check_interval_minutes", + "Description": "Interval in minutes at which password changes will be checked [default: 1]", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "1", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "password_change/mail_sender_address", + "Description": "Sender address of the e-mail sent to the user after a password change.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "password_change/mail_sender_name", + "Description": "Sender name of the e-mail sent to the user after a password change.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "password_change/mail_subject", + "Description": "Subject of the e-mail sent to the user after a password change.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "password_change/mail_text", + "Description": "Text of the e-mail sent to the user after a password change. As placeholders, '%uid' can be used for the user ID (user name) and '%name' for the complete name (cn).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "INFO", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + }, + { + "Name": "user_search_size_limit", + "Description": "Set how many users can be retrieved in a single search operation", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "4000", + "Validation": { + "Type": "", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "postfix", + "version": "" + } + ], + "OptionalDependencies": null + }, + { + "Name": "official/swaggerui", + "Version": "4.9.0-5", + "DisplayName": "Swagger UI", + "Description": "Swagger UI displays your openAPI specification.", + "Category": "Development Apps", + "Tags": [ + "warp", + "REST", + "API", + "OpenAPI" + ], + "Logo": "https://github.com/cloudogu/swagger-ui/blob/master/src/img/logo_small.png?raw=true", + "URL": "http://swagger.io/tools/swagger-ui/", + "Image": "registry.cloudogu.com/official/swaggerui", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": null, + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "WARN", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + }, + { + "Name": "validator_url", + "Description": "Set the url of the swaggerui validator.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "nginx", + "version": "" + } + ], + "OptionalDependencies": null + + + }, + { + "Name": "premium/monitoring", + "Version": "0.3.3-1", + "DisplayName": "Monitoring", + "Description": "Monitoring for the Cloudogu EcoSystem.", + "Category": "Base", + "Tags": [ + "monitoring", + "rest" + ], + "Logo": "https://cloudogu.com/images/dogus/monitoring.png", + "URL": "https://github.com/cloudogu/monitoring", + "Image": "registry.cloudogu.com/premium/monitoring", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": null, + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "WARN", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] + } + }, + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend at least 200m of memory for usermgt.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "api_user/username", + "Description": "Username of the user required to access the private api endpoints. Default: `api_username`.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "api_username", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "api_user/password", + "Description": "Password of the user required to access the private api endpoints. Default: randomly generated password.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "api_password", + "Validation": { + "Type": "", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "nginx", + "version": "" + } + ], + "OptionalDependencies": [ + { + "type": "dogu", + "name": "backup", + "version": "" + }, + { + "type": "dogu", + "name": "registrator", + "version": "" + } + ] + }, + { + "Name": "official/gotenberg", + "Version": "8.8.0-3", + "DisplayName": "Gotenberg", + "Description": "A Docker-powered stateless API for PDF files.", + "Category": "Documentation", + "Tags": [ + "documentation", + "pdf", + "office", + "convert" + ], + "Logo": "https://gotenberg.dev/img/logo_jed.png", + "URL": "https://gotenberg.dev/", + "Image": "registry.cloudogu.com/official/gotenberg", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": [ + { + "Name": "fonts", + "Path": "/home/gotenberg/.fonts", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 3000, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO or DEBUG. Default is INFO", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "info", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "warn", + "error", + "info", + "debug" + ] + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": null, + "OptionalDependencies": null + }, + { + "Name": "official/redis", + "Version": "6.2.14-4", + "DisplayName": "Redis", + "Description": "Fast in-memory database", + "Category": "Development Apps", + "Tags": [], + "Logo": "https://redis.io/images/redis-small.png", + "URL": "https://www.redis.io/", + "Image": "registry.cloudogu.com/official/redis", + "ExposedPorts": null, + "ExposedCommands": [ + { + "Name": "service-account-create", + "Description": "Creates a new service account", + "Command": "/create-sa.sh" + }, + { + "Name": "service-account-remove", + "Description": "Removes a service account", + "Command": "/remove-sa.sh" + }, + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + }, + { + "Name": "post-upgrade", + "Description": "", + "Command": "/post-upgrade.sh" + } + ], + "Volumes": [ + { + "Name": "data", + "Path": "/usr/local/etc/redis/data", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "localConfig", + "Path": "/var/ces/config", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 6379, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "oidc/attribute_mapping", - "Description": "The attributes provided by OIDC do not exactly match the attributes required by the CAS. It is necessary to transform the OIDC attributes into attributes accepted by the cas. Therefore, this entry should contain rules to transform an attribute provided by the OIDC provider into an attribute required by CAS. The rules should be provided in the following format: 'email:mail,family_name:surname'. With the given example the OIDC attribute 'email' and 'family_name' are transformed into 'mail' and 'surname' respectively. The CAS requires the following attributes to function properly: 'mail,surname,givenName,username,displayName'.", + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "oidc/principal_attribute", - "Description": "Specifies an attribute that should be used as principal id inside the CES. CAS uses the ID provided by the OIDC provider when this property is empty.", + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "WARN", "Validation": { - "Type": "", - "Values": null + "Type": "ONE_OF", + "Values": [ + "INFO", + "DEBUG", + "WARN", + "ERROR", + "FATAL" + ] } } ], "Properties": null, "EnvironmentVariables": null, - "Dependencies": [ - { - "type": "dogu", - "name": "nginx", - "version": ">=1.26.1-5" - }, - { - "type": "dogu", - "name": "postfix", - "version": "" - } - ], - "OptionalDependencies": [ - { - "type": "dogu", - "name": "ldap", - "version": "" - } - ] + "Dependencies": null, + "OptionalDependencies": null }, - { - "Name": "official/nginx", - "Version": "1.26.1-11", - "DisplayName": "Nginx", - "Description": "Nginx WebServer.", + "Name": "official/mysql", + "Version": "8.0.38-3", + "DisplayName": "MySQL", + "Description": "MySQL - Relational database", "Category": "Base", "Tags": [ - "webserver", - "proxy", - "reverse-proxy" + "database", + "db" ], - "Logo": "https://cloudogu.com/images/dogus/nginx.png", - "URL": "http://nginx.org/", - "Image": "registry.cloudogu.com/official/nginx", - "ExposedPorts": [ + "Logo": "https://www.mysql.com/common/logos/mysql-logo.svg?v2", + "URL": "https://www.mysql.com/", + "Image": "registry.cloudogu.com/official/mysql", + "ExposedPorts": null, + "ExposedCommands": [ { - "Type": "tcp", - "Container": 80, - "Host": 80 + "Name": "service-account-create", + "Description": "Creates a new service account", + "Command": "/create-sa.sh" }, { - "Type": "tcp", - "Container": 443, - "Host": 443 + "Name": "service-account-remove", + "Description": "Removes a service account", + "Command": "/remove-sa.sh" + }, + { + "Name": "upgrade-notification", + "Description": "Informs the user on critical updates", + "Command": "/upgrade-notification.sh" + }, + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + }, + { + "Name": "post-upgrade", + "Description": "", + "Command": "/post-upgrade.sh" } ], - "ExposedCommands": null, "Volumes": [ { - "Name": "customhtml", - "Path": "/var/www/customhtml", - "Owner": "1000", - "Group": "1000", + "Name": "data", + "Path": "/var/lib/mysql/", + "Owner": "100", + "Group": "101", "NeedsBackup": true }, { - "Name": "app.conf.d", - "Path": "/etc/nginx/app.conf.d", + "Name": "localConfig", + "Path": "/var/ces/config", "Owner": "1000", "Group": "1000", "NeedsBackup": true - }, - { - "Name": "appconf", - "Path": "/var/nginx/conf.d/", - "Owner": "0", - "Group": "0", - "NeedsBackup": true } ], "HealthCheck": { @@ -1834,14 +4570,14 @@ { "Type": "tcp", "State": "", - "Port": 80, + "Port": 3306, "Path": "", "Parameters": null }, { - "Type": "tcp", + "Type": "state", "State": "", - "Port": 443, + "Port": 0, "Path": "", "Parameters": null } @@ -1867,32 +4603,44 @@ } }, { - "Name": "disable_access_log", - "Description": "Disable logging of incoming requests", + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "google_tracking_id", - "Description": "Google Analytics Tracking ID", + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "400m", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "html_content_url", - "Description": "URL path to reach all custom html content pages. Default value when unset: static", + "Name": "container_config/cpu_core_limit", + "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, @@ -1903,20 +4651,20 @@ } }, { - "Name": "ignore_service_health", - "Description": "Option to ignore the health status of all dogus. Makes it possible to access dogus even if they are unhealthy", + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "false", + "Default": "0.5", "Validation": { "Type": "", "Values": null } }, { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend to have at least allocated 20m for additional tools (ces-confd) running inside the container.", + "Name": "container_config/storage_limit", + "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, @@ -1927,8 +4675,8 @@ } }, { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Name": "container_config/storage_request", + "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, @@ -1939,35 +4687,87 @@ } } ], - "Properties": { - "stopAtBackup": "false" - }, + "Properties": null, "EnvironmentVariables": null, - "Dependencies": [ - { - "type": "dogu", - "name": "registrator", - "version": ">=0.10.0-1" - } - ], + "Dependencies": null, "OptionalDependencies": null }, { - "Name": "official/postfix", - "Version": "3.9.0-3", - "DisplayName": "Postfix", - "Description": "Postfix - Mail Transfer Agent", - "Category": "Base", + "Name": "itz-bund/teamscale", + "Version": "2024.7.3-1", + "DisplayName": "Teamscale", + "Description": "Teamscale Dogu", + "Category": "Development Apps", "Tags": [ - "mail", - "smtp" + "warp" ], - "Logo": "https://cloudogu.com/images/dogus/postfix.png", - "URL": "http://www.postfix.org/", - "Image": "registry.cloudogu.com/official/postfix", + "Logo": "https://cloudogu.com/images/dogus/nginx.png", + "URL": "", + "Image": "registry.cloudogu.com/itz-bund/teamscale", "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": null, + "ExposedCommands": [ + { + "Name": "pre-upgrade", + "Description": "", + "Command": "/pre-upgrade.sh" + }, + { + "Name": "remove-repositories", + "Description": "", + "Command": "/remove-repositories.sh" + } + ], + "Volumes": [ + { + "Name": "teamscale_storage", + "Path": "/opt/teamscale/storage", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "repo", + "Path": "/opt/teamscale/repo", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "backups", + "Path": "/opt/teamscale/backups", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + }, + { + "Name": "default_data_archives", + "Path": "/opt/teamscale/default_data_archives", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + }, + { + "Name": "custom_config", + "Path": "/tmp/custom_config", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + }, + { + "Name": "analysis_profiles", + "Path": "/tmp/analysis_profiles", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + }, + { + "Name": "localConfig", + "Path": "/var/ces/config", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], "HealthCheck": { "Type": "", "State": "", @@ -1979,101 +4779,108 @@ { "Type": "tcp", "State": "", - "Port": 25, + "Port": 8080, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, "Path": "", "Parameters": null } ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ + "ServiceAccounts": [ { - "Name": "relayhost", - "Description": "The next-hop destination of non-local mail", - "Optional": false, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } + "Type": "cas", + "Params": [ + "oidc", + "/api/auth/openid/logout" + ] }, { - "Name": "sasl_username", - "Description": "username for sasl authentication", + "Type": "ldap", + "Params": null + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "sasl_password", - "Description": "password for sasl authentication, if the mail relay server needs an md5 encrypted password pass the encrypted password in here otherwise plain", + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "smtp_tls_security_level", - "Description": "The default SMTP TLS security level for the Postfix SMTP client", + "Name": "container_config/java_max_ram", + "Description": "Limits the heap stack size of the Teamscale process to the configured value in MB. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "4096m", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "smtp_tls_cert_file", - "Description": "Postfix SMTP client RSA certificate in PEM format", + "Name": "base_group_name", + "Description": "The name of the base-group for cas group replication. Any replicated cas group will have the same permissions as this group.", "Optional": true, - "Encrypted": true, + "Encrypted": false, "Global": false, - "Default": "", + "Default": "", "Validation": { "Type": "", "Values": null } }, { - "Name": "smtp_tls_key_file", - "Description": "Postfix SMTP client RSA private key in PEM format", + "Name": "teamscale_license", + "Description": "Teamscale License", "Optional": true, - "Encrypted": true, + "Encrypted": false, "Global": false, - "Default": "", + "Default": "*** no License ***", "Validation": { "Type": "", "Values": null } }, { - "Name": "smtp_tls_CAfile", - "Description": "CA certificates of root CAs trusted to sign either remote SMTP server certificates or intermediate CA certificates", + "Name": "user_sync_interval", + "Description": "The interval in which the users should be synced. For more information see for example here: https://crontab.guru/#0_*_*_*_*", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "0 * * * *", "Validation": { "Type": "", "Values": null } }, { - "Name": "smtp_tls_loglevel", - "Description": "Enable additional Postfix SMTP client logging of TLS activity", + "Name": "mail_sender", + "Description": "Email address to use as sender of the teamscale dogu", "Optional": true, "Encrypted": false, "Global": false, @@ -2084,8 +4891,8 @@ } }, { - "Name": "smtp_tls_exclude_ciphers", - "Description": "List of ciphers or cipher types to exclude from the Postfix SMTP client cipher list at all TLS security levels", + "Name": "mail_sender_name", + "Description": "Name to be used in the FROM field of the mail", "Optional": true, "Encrypted": false, "Global": false, @@ -2096,20 +4903,25 @@ } }, { - "Name": "smtp_tls_mandatory_ciphers", - "Description": "The minimum TLS cipher grade that the Postfix SMTP client will use with mandatory TLS encryption", + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "WARN", "Validation": { - "Type": "", - "Values": null + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] } }, { - "Name": "smtp_tls_mandatory_protocols", - "Description": "List of SSL/TLS protocols that the Postfix SMTP client will use with mandatory TLS encryption", + "Name": "admin_contact_url", + "Description": "The admin contact URL, e.g. a website (https://support.acme.com) or the admin's mail address (mailto:admin@acme.com)", "Optional": true, "Encrypted": false, "Global": false, @@ -2120,39 +4932,137 @@ } }, { - "Name": "smtpd_forbid_bare_newline", - "Description": "Disables support for malformed line endings in SMTP. This fixes CVE-2023-51764 but could break (rare) clients that mis-implement SMTP.", + "Name": "disable_gravatar", + "Description": "Globally disable gravatar. TRUE=disabled, FALSE=enabled. Default: TRUE", "Optional": true, "Encrypted": false, "Global": false, - "Default": "yes", + "Default": "TRUE", "Validation": { "Type": "ONE_OF", "Values": [ - "yes", - "no" + "TRUE", + "FALSE" ] } }, { - "Name": "smtpd_forbid_bare_newline_exclusions", - "Description": "List of clients for which bare newlines should still be allowed. See https://www.postfix.org/postconf.5.html#smtpd_forbid_bare_newline_exclusions", + "Name": "wait_for_scm_manager", + "Description": "Wait for the SCM-Manager Dogu during the upgrade process", "Optional": true, "Encrypted": false, "Global": false, - "Default": "$mynetworks", + "Default": "TRUE", "Validation": { - "Type": "", - "Values": null + "Type": "ONE_OF", + "Values": [ + "TRUE", + "FALSE" + ] } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "nginx", + "version": "" + }, + { + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" + }, + { + "type": "dogu", + "name": "postfix", + "version": "" + }, + { + "type": "dogu", + "name": "ldap", + "version": "" + } + ], + "OptionalDependencies": [ + { + "type": "dogu", + "name": "scm", + "version": "" + } + ] + }, + { + "Name": "hallowelt/bluespice", + "Version": "4.5.2-1", + "DisplayName": "BlueSpice", + "Description": "BlueSpice Dogu", + "Category": "Development Apps", + "Tags": [ + "warp", + "bluespice", + "wiki" + ], + "Logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c4/Bluespice_Icon.svg/250px-Bluespice_Icon.svg.png", + "URL": "https://bluespice.com", + "Image": "registry.cloudogu.com/hallowelt/bluespice", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": [ + { + "Name": "bluespice_data", + "Path": "/data/bluespice", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": true + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 80, + "Path": "", + "Parameters": null }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": [ + { + "Type": "mysql", + "Params": null + }, + { + "Type": "cas", + "Params": [ + "oidc" + ] + } + ], + "Privileged": false, + "Configuration": [ { "Name": "logging/root", "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "INFO", + "Default": "DEBUG", "Validation": { "Type": "ONE_OF", "Values": [ @@ -2169,7 +5079,7 @@ "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "2g", "Validation": { "Type": "BINARY_MEASUREMENT", "Values": null @@ -2181,69 +5091,259 @@ "Optional": true, "Encrypted": false, "Global": false, - "Default": "50m", + "Default": "1g", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "1", + "Validation": { + "Type": "", + "Values": null + } + } + ], + "Properties": { + "logoutUri": "/w/rest.php/pluggableauth/logout" + }, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "nginx", + "version": "" + }, + { + "type": "dogu", + "name": "cas", + "version": "" + }, + { + "type": "dogu", + "name": "mysql", + "version": "" + }, + { + "type": "dogu", + "name": "postfix", + "version": "" + }, + { + "type": "dogu", + "name": "bluespice-opensearch", + "version": "" + }, + { + "type": "dogu", + "name": "bluespice-pdfrenderer", + "version": "" + }, + { + "type": "dogu", + "name": "drawio", + "version": "" + }, + { + "type": "dogu", + "name": "bluespice-mathoid", + "version": "" + }, + { + "type": "dogu", + "name": "mongodb", + "version": "" + }, + { + "type": "dogu", + "name": "bluespice-collabpadsbackend", + "version": "" + } + ], + "OptionalDependencies": null + }, + { + "Name": "hallowelt/bluespice-pdfrenderer", + "Version": "4.4-1", + "DisplayName": "BlueSpice - PdfRenderer-Service", + "Description": "BlueSpice - PdfRenderer-Service Dogu", + "Category": "Backend Services", + "Tags": [ + "bluespice", + "backend" + ], + "Logo": "", + "URL": "https://bluespice.com", + "Image": "registry.cloudogu.com/hallowelt/bluespice-pdfrenderer", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": null, + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "DEBUG", "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] } }, { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "500m", "Validation": { "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "container_config/cpu_core_limit", - "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "0.25", "Validation": { "Type": "", "Values": null } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [], + "OptionalDependencies": null + }, + { + "Name": "hallowelt/drawio", + "Version": "20.3.7-6", + "DisplayName": "Drawio-Service", + "Description": "Drawio-Service Dogu", + "Category": "Backend Services", + "Tags": [ + "backend", + "webapp" + ], + "Logo": "", + "URL": "https://draw.io", + "Image": "registry.cloudogu.com/hallowelt/drawio", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": null, + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 80, + "Path": "", + "Parameters": null }, { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "0.05", + "Default": "INFO", "Validation": { - "Type": "", - "Values": null + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] } }, { - "Name": "container_config/storage_limit", - "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "125m", "Validation": { "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "container_config/storage_request", - "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "0.25", "Validation": { - "Type": "BINARY_MEASUREMENT", + "Type": "", "Values": null } } @@ -2254,68 +5354,21 @@ "OptionalDependencies": null }, { - "Name": "official/sonar", - "Version": "9.9.5-5", - "DisplayName": "SonarQube", - "Description": "SonarQube is an open source quality management platform, dedicated to continuously analyze and measure source code quality", - "Category": "Development Apps", + "Name": "hallowelt/bluespice-opensearch", + "Version": "2.11.1-2", + "DisplayName": "BlueSpice - opensearch-Service", + "Description": "BlueSpice - opensearch-Service Dogu", + "Category": "Databases", "Tags": [ - "warp", - "code", - "quality", - "analysis" + "bluespice", + "backend" ], - "Logo": "https://cloudogu.com/images/dogus/sonarqube.png", - "URL": "http://www.sonarqube.org/", - "Image": "registry.cloudogu.com/official/sonar", + "Logo": "", + "URL": "https://bluespice.com", + "Image": "registry.cloudogu.com/hallowelt/bluespice-opensearch", "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "post-upgrade", - "Description": "", - "Command": "/post-upgrade.sh" - }, - { - "Name": "upgrade-notification", - "Description": "", - "Command": "/upgrade-notification.sh" - }, - { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" - } - ], - "Volumes": [ - { - "Name": "data", - "Path": "/opt/sonar/data/", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "qualityprofiles", - "Path": "/var/lib/qualityprofiles", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - }, - { - "Name": "extensions", - "Path": "/opt/sonar/extensions", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "localConfig", - "Path": "/var/ces/config", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], + "ExposedCommands": null, + "Volumes": null, "HealthCheck": { "Type": "", "State": "", @@ -2327,7 +5380,7 @@ { "Type": "tcp", "State": "", - "Port": 9000, + "Port": 9200, "Path": "", "Parameters": null }, @@ -2339,42 +5392,24 @@ "Parameters": null } ], - "ServiceAccounts": [ - { - "Type": "postgresql", - "Params": null - }, - { - "Type": "cas", - "Params": [ - "cas" - ] - } - ], + "ServiceAccounts": null, "Privileged": false, "Configuration": [ { - "Name": "sonar.updatecenter.url", - "Description": "Set custom SonarQube UpdateCenter URL", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "sonar.plugins.default", - "Description": "Comma separated list of plugin names to install on start", + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "WARN", "Validation": { - "Type": "", - "Values": null + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] } }, { @@ -2402,8 +5437,8 @@ } }, { - "Name": "container_config/java_sonar_main_max_ram_percentage", - "Description": "Limits the heap stack size of the Sonar main process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Sonar main: 25%", + "Name": "container_config/java_max_ram_percentage", + "Description": "Limits the heap stack size of the opensearch process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for opensearch: 25%", "Optional": true, "Encrypted": false, "Global": false, @@ -2414,8 +5449,8 @@ } }, { - "Name": "container_config/java_sonar_main_min_ram_percentage", - "Description": "Limits the heap stack size of the Sonar main process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Sonar main: 50%", + "Name": "container_config/java_min_ram_percentage", + "Description": "Limits the heap stack size of the opensearch process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for opensearch: 50%", "Optional": true, "Encrypted": false, "Global": false, @@ -2426,44 +5461,44 @@ } }, { - "Name": "container_config/java_sonar_web_max_min_ram_percentage", - "Description": "Limits the heap stack size of the Sonar web background process to the configured percentage of the available physical memory. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Sonar web: 10%", + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", "Optional": true, "Encrypted": false, "Global": false, - "Default": "10.0", + "Default": "", "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "container_config/java_sonar_search_max_min_ram_percentage", - "Description": "Limits the heap stack size of the Sonar search background process to the configured percentage of the available physical memory. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Sonar search: 10%", + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", "Optional": true, "Encrypted": false, "Global": false, - "Default": "10.0", + "Default": "1600m", "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "container_config/java_sonar_cengine_max_min_ram_percentage", - "Description": "Limits the heap stack size of the Sonar compute engine background process to the configured percentage of the available physical memory. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Sonar compute engine: 10%", + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "10.0", + "Default": "", "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "amend_projects_with_ces_admin_permissions", - "Description": "If set to 'all', the ces-admin group will be enabled to administer all projects. This key will automatically reset to 'none' afterwards.", + "Name": "container_config/cpu_core_limit", + "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", "Optional": true, "Encrypted": false, "Global": false, @@ -2473,105 +5508,222 @@ "Values": null } }, + { + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "1.0", + "Validation": { + "Type": "", + "Values": null + } + }, + { + "Name": "container_config/storage_limit", + "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + }, + { + "Name": "container_config/storage_request", + "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "", + "Validation": { + "Type": "BINARY_MEASUREMENT", + "Values": null + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": null, + "OptionalDependencies": null + }, + { + "Name": "hallowelt/bluespice-mathoid", + "Version": "4.4-3", + "DisplayName": "BlueSpice - mathoid-Service", + "Description": "BlueSpice - mathoid-Service Dogu", + "Category": "Backend Services", + "Tags": [ + "bluespice", + "backend" + ], + "Logo": "", + "URL": "https://bluespice.com", + "Image": "registry.cloudogu.com/hallowelt/bluespice-mathoid", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": null, + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 10044, + "Path": "", + "Parameters": null + }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ { "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG, TRACE.", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "INFO", + "Default": "DEBUG", "Validation": { "Type": "ONE_OF", "Values": [ "WARN", "DEBUG", "INFO", - "ERROR", - "TRACE" + "ERROR" ] } }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, { "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "1300m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "125m", "Validation": { "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "container_config/cpu_core_limit", - "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "0.25", "Validation": { "Type": "", "Values": null } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": null, + "OptionalDependencies": null + }, + { + "Name": "hallowelt/bluespice-collabpadsbackend", + "Version": "1.0.2-1", + "DisplayName": "BlueSpice - Collabpads Service", + "Description": "BlueSpice - Collabpads Service Dogu", + "Category": "Backend Services", + "Tags": [ + "backend", + "collabpads" + ], + "Logo": "", + "URL": "https://bluespice.com/preview-teamwork-in-collabpad/", + "Image": "registry.cloudogu.com/hallowelt/bluespice-collabpadsbackend", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": null, + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 8081, + "Path": "", + "Parameters": null }, { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": [ + { + "Type": "mongodb", + "Params": null + } + ], + "Privileged": false, + "Configuration": [ + { + "Name": "logging/root", + "Description": "Set the root log level to one of error, warn, info, debug.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "1.0", + "Default": "info", "Validation": { - "Type": "", - "Values": null + "Type": "ONE_OF", + "Values": [ + "warn", + "debug", + "info", + "error" + ] } }, { - "Name": "container_config/storage_limit", - "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "250m", "Validation": { "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "container_config/storage_request", - "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "0.25", "Validation": { - "Type": "BINARY_MEASUREMENT", + "Type": "", "Values": null } } @@ -2581,92 +5733,42 @@ "Dependencies": [ { "type": "dogu", - "name": "postgresql", - "version": "" - }, - { - "type": "dogu", - "name": "cas", - "version": ">=7.0.5.1-6" - }, - { - "type": "dogu", - "name": "nginx", - "version": "" - }, - { - "type": "dogu", - "name": "postfix", + "name": "mongodb", "version": "" } ], "OptionalDependencies": null }, - { - "Name": "official/redmine", - "Version": "5.1.3-4", - "DisplayName": "Redmine", - "Description": "Redmine is a flexible project management web application", - "Category": "Development Apps", + "Name": "hallowelt/mongodb", + "Version": "4.4.29-1", + "DisplayName": "MongoDB Service", + "Description": "MongoDB Service Dogu", + "Category": "Backend Services", "Tags": [ - "warp", - "pm", - "projectmanagement", - "issue", - "task" + "backend", + "database" ], - "Logo": "https://cloudogu.com/images/dogus/redmine.png", - "URL": "http://www.redmine.org", - "Image": "registry.cloudogu.com/official/redmine", + "Logo": "", + "URL": "https://www.mongodb.com", + "Image": "registry.cloudogu.com/hallowelt/mongodb", "ExposedPorts": null, "ExposedCommands": [ { - "Name": "post-upgrade", - "Description": "", - "Command": "/post-upgrade.sh" - }, - { - "Name": "upgrade-notification", - "Description": "", - "Command": "/upgrade-notification.sh" - }, - { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" + "Name": "service-account-create", + "Description": "Creates a new service account", + "Command": "/create-sa.sh" }, { - "Name": "delete-plugin", - "Description": "", - "Command": "/delete-plugin.sh" + "Name": "service-account-remove", + "Description": "Removes a service account", + "Command": "/remove-sa.sh" } ], "Volumes": [ { - "Name": "files", - "Path": "/usr/share/webapps/redmine/files", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "plugins", - "Path": "/var/tmp/redmine/plugins", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "logs", - "Path": "/usr/share/webapps/redmine/log", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - }, - { - "Name": "localConfig", - "Path": "/var/ces/config", + "Name": "data", + "Path": "/var/lib/mongodb", "Owner": "1000", "Group": "1000", "NeedsBackup": true @@ -2683,7 +5785,7 @@ { "Type": "tcp", "State": "", - "Port": 3000, + "Port": 27017, "Path": "", "Parameters": null }, @@ -2695,18 +5797,7 @@ "Parameters": null } ], - "ServiceAccounts": [ - { - "Type": "postgresql", - "Params": null - }, - { - "Type": "cas", - "Params": [ - "cas" - ] - } - ], + "ServiceAccounts": null, "Privileged": false, "Configuration": [ { @@ -2727,122 +5818,102 @@ } }, { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Name": "container_config/memory_request", + "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "250m", "Validation": { "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "etcd_redmine_config", - "Description": "Applies default configuration to redmine.", + "Name": "container_config/cpu_core_request", + "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "0.25", "Validation": { "Type": "", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, - "Dependencies": [ - { - "type": "dogu", - "name": "postgresql", - "version": "" - }, - { - "type": "dogu", - "name": "cas", - "version": ">=7.0.5.1-6" - }, - { - "type": "dogu", - "name": "nginx", - "version": "" - }, - { - "type": "dogu", - "name": "postfix", - "version": "" + "Values": null + } } ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": null, "OptionalDependencies": null }, - { - "Name": "official/usermgt", - "Version": "1.16.3-1", - "DisplayName": "User Management", - "Description": "User and Group Management.", + "Name": "premium/admin", + "Version": "2.12.3-1", + "DisplayName": "Administration", + "Description": "Administration Dogu for the Cloudogu EcoSystem", "Category": "Administration Apps", "Tags": [ - "warp", - "users", - "groups" + "warp" ], - "Logo": "https://cloudogu.com/images/dogus/usermanagement.png", - "URL": "https://github.com/cloudogu/usermgt", - "Image": "registry.cloudogu.com/official/usermgt", + "Logo": "", + "URL": "https://github.com/cloudogu", + "Image": "registry.cloudogu.com/premium/admin", "ExposedPorts": null, "ExposedCommands": [ { "Name": "post-upgrade", "Description": "", - "Command": "/post-upgrade.sh" + "Command": "/app/post-upgrade.sh" } ], "Volumes": [ { - "Name": "data", - "Path": "/var/lib/usermgt", + "Name": "support", + "Path": "/app/downloads/support", "Owner": "1000", "Group": "1000", "NeedsBackup": false }, { - "Name": "importHistory", - "Path": "/var/lib/usermgt/importHistory", + "Name": "logs", + "Path": "/app/downloads/logs", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + }, + { + "Name": "localConfig", + "Path": "/var/ces/config", "Owner": "1000", "Group": "1000", "NeedsBackup": true } ], "HealthCheck": { - "Type": "tcp", + "Type": "", "State": "", - "Port": 8080, + "Port": 0, "Path": "", "Parameters": null }, - "HealthChecks": null, - "ServiceAccounts": [ + "HealthChecks": [ { - "Type": "ldap", - "Params": [ - "rw" - ] + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null }, + { + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": [ { "Type": "cas", "Params": [ @@ -2853,156 +5924,129 @@ "Privileged": false, "Configuration": [ { - "Name": "pwd_reset_selected_by_default", - "Description": "Specifies whether the checkbox for the password change at the next login attribute should be preselected by default ", + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "false", + "Default": "WARN", "Validation": { "Type": "ONE_OF", "Values": [ - "true", - "false" + "WARN", + "DEBUG", + "INFO", + "ERROR" ] } }, { - "Name": "mail/sender", - "Description": "Email address to use as sender of the User Management dogu", + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "mail/import/subject", - "Description": "The subject of the mail, which is send when a user is imported via the csv import feature", + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "mail/import/content", - "Description": "The content of the mail, which is send when a User is imported via the csv import feature. Within the content the placeholders ${username} and ${password} need to be included.", + "Name": "api_user/username", + "Description": "Username of the user required to access the private api endpoints. Default: `api_username`.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "api_username", "Validation": { "Type": "", "Values": null } }, { - "Name": "mail/import/max_retries", - "Description": "The number of maximum retries to send a mail, before an error occurs", + "Name": "api_user/password", + "Description": "Password of the user required to access the private api endpoints. Default: randomly generated password.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "api_password", "Validation": { "Type": "", "Values": null } }, { - "Name": "mail/import/max_retry_delay", - "Description": "The maximum delay for sending an email as part of a retry. By using a backoff strategy, the waiting time increases for each failed send until max_retry_delay is reached before the mail is sent again.", + "Name": "groups/admin", + "Description": "Users with this group will be identified as administrators. Default: adminAdmins", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "adminAdmins", "Validation": { "Type": "", "Values": null } }, { - "Name": "mail/import/retry_interval", - "Description": "The interval in which failed mails will be checked to be sent again.", + "Name": "groups/writer", + "Description": "Users with this group will be identified as normal users. Default: adminWriters", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "adminWriters", "Validation": { "Type": "", "Values": null } }, { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend at least 200m of memory for usermgt.", + "Name": "groups/reader", + "Description": "Users with this group will be identified as readonly users. Default: adminReaders", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "adminReaders", "Validation": { - "Type": "BINARY_MEASUREMENT", + "Type": "", "Values": null } }, { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Name": "downloads/retention_policy", + "Description": "Retention policy which applies to the download directory", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/java_max_ram_percentage", - "Description": "Limits the heap stack size of the Usermgt process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Usermgt: 25%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "25.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Type": "", "Values": null } }, { - "Name": "container_config/java_min_ram_percentage", - "Description": "Limits the heap stack size of the Usermgt process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Usermgt: 50%", + "Name": "monitoring/dashboard", + "Description": "The UID of the Grafana-Dashboard, which is integrated into the Monitoring-Tab of the Admin-Dogu. Default: ces_admin_dashboard", "Optional": true, "Encrypted": false, "Global": false, - "Default": "50.0", + "Default": "ces_admin_dashboard", "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Type": "", "Values": null } - }, - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } } ], "Properties": null, @@ -3013,74 +6057,65 @@ "name": "cas", "version": ">=7.0.5.1-6" }, - { - "type": "dogu", - "name": "ldap", - "version": ">=2.6.2-7" - }, { "type": "dogu", "name": "nginx", "version": "" }, { - "type": "dogu", - "name": "postfix", - "version": "" + "type": "package", + "name": "cesappd", + "version": ">=3.5.1" } ], - "OptionalDependencies": null + "OptionalDependencies": [ + { + "type": "package", + "name": "ces-setup", + "version": ">1.8.0" + } + ] }, - { - "Name": "official/nexus", - "Version": "3.70.2-3", - "DisplayName": "Sonatype Nexus", - "Description": "The Nexus Repository is like the local warehouse where all of the parts and finished goods used in your software supply chain are stored and distributed.", + "Name": "premium/portainer", + "Version": "2.21.2-1", + "DisplayName": "Portainer", + "Description": "Portainer is a lightweight management UI which allows you to easily manage your different Docker environments\n", "Category": "Development Apps", "Tags": [ "warp", - "build", - "artifact", - "maven" + "host", + "containermanagement", + "container", + "docker" ], - "Logo": "https://cloudogu.com/images/dogus/nexus.png", - "URL": "http://www.sonatype.org/nexus", - "Image": "registry.cloudogu.com/official/nexus", + "Logo": "https://cloudogu.com/images/dogus/portainer.png", + "URL": "https://www.portainer.io/", + "Image": "registry.cloudogu.com/premium/portainer", "ExposedPorts": null, "ExposedCommands": [ - { - "Name": "service-account-create", - "Description": "Creates a new service account", - "Command": "/create-sa.sh" - }, - { - "Name": "service-account-remove", - "Description": "Removes a service account", - "Command": "/remove-sa.sh" - }, { "Name": "pre-upgrade", "Description": "", "Command": "/pre-upgrade.sh" }, { - "Name": "upgrade-notification", + "Name": "post-upgrade", "Description": "", - "Command": "/upgrade-notification.sh" + "Command": "/post-upgrade.sh" } ], "Volumes": [ { - "Name": "data", - "Path": "/var/lib/nexus", + "Name": "portainer_data", + "Path": "/data", "Owner": "1000", "Group": "1000", "NeedsBackup": true }, { - "Name": "migration", - "Path": "/var/lib/migration", + "Name": "carp_data", + "Path": "/var/carp/data", "Owner": "1000", "Group": "1000", "NeedsBackup": true @@ -3104,7 +6139,14 @@ { "Type": "tcp", "State": "", - "Port": 8082, + "Port": 9000, + "Path": "", + "Parameters": null + }, + { + "Type": "tcp", + "State": "", + "Port": 8080, "Path": "", "Parameters": null }, @@ -3127,32 +6169,32 @@ "Privileged": false, "Configuration": [ { - "Name": "claim/once", - "Description": "A claim script definition which is only executed once. After that, it will set the claim/once.lock key which prevents further execution.", + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "claim/once.lock", - "Description": "If this key is set to true it will prevent the claim/once script from being executed.", + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "", + "Type": "BINARY_MEASUREMENT", "Values": null } }, { - "Name": "claim/always", - "Description": "A claim script definition which will always be executed at startup.", + "Name": "endpoint_configuration", + "Description": "Provide one or multiple Portainer agent configurations which are automatically imported to the dogu.\nMust have the following (JSON) format: [{\"Name\":\"NAME\", \"EndpointURL\":\"ENDPOINTADDRESS:PORT\"}].\nThe NAME can be chosen freely; ENDPOINTADDRESS is the FQDN or IP of the host; the PORT is most likely 9001", "Optional": true, "Encrypted": false, "Global": false, @@ -3163,44 +6205,110 @@ } }, { - "Name": "nexus.repository.sandbox.enable", - "Description": "Enable repository sandboxing", + "Name": "admin_group", + "Description": "Group of users that should get admin privileges in Portainer.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "portainer_admins", "Validation": { "Type": "", "Values": null } }, { - "Name": "installDefaultDockerRegistry", - "Description": "If set to false, the default docker registry is not installed", + "Name": "user_group", + "Description": "Only applicable if `public_user_access` is true. Group of users that should get normal user privileges in Portainer.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "portainer_users", "Validation": { "Type": "", "Values": null } }, { - "Name": "disableOutreachManagement", - "Description": "Disable the outreach management capability", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } + "Name": "user_access_restricted", + "Description": "If false, all users have normal user privileges in Portainer. Otherwise, only users in the configured `user_group` have access.", + "Optional": true, + "Encrypted": false, + "Global": false, + "Default": "false", + "Validation": { + "Type": "ONE_OF", + "Values": [ + "true", + "false" + ] + } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-4" + }, + { + "type": "dogu", + "name": "nginx", + "version": "" + } + ], + "OptionalDependencies": null + }, + { + "Name": "itz-bund/baseline", + "Version": "1.5.1-4", + "DisplayName": "Baseline", + "Description": "Baseline Dogu for the Cloudogu EcoSystem", + "Category": "Development Apps", + "Tags": [ + "warp" + ], + "Logo": "", + "URL": "https://github.com/cloudogu", + "Image": "registry.cloudogu.com/itz-bund/baseline", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": null, + "HealthCheck": { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null + }, + "HealthChecks": null, + "ServiceAccounts": [ + { + "Type": "nexus", + "Params": [ + "fullAccessRepository=baselines", + "permissions=nx-repository-view-*-*-read,nx-repository-view-*-*-browse" + ] + }, + { + "Type": "scm", + "Params": [ + "rw" + ] }, + { + "Type": "cas", + "Params": [ + "cas" + ] + } + ], + "Privileged": false, + "Configuration": [ { "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG. The default log level is set to \"WARN\"", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", "Optional": true, "Encrypted": false, "Global": false, @@ -3217,7 +6325,7 @@ }, { "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend to add 50m for additional tools running inside the container.", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", "Optional": true, "Encrypted": false, "Global": false, @@ -3240,222 +6348,207 @@ } }, { - "Name": "container_config/java_max_ram_percentage", - "Description": "Limits the heap stack size of the Nexus process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Nexus: 25%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "25.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "container_config/java_min_ram_percentage", - "Description": "Limits the heap stack size of the Nexus process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Nexus: 50%", + "Name": "projects_json_url", + "Description": "The path to a server providing the project.json file containing the definition for all existing baseline projects.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "50.0", + "Default": "", "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", + "Type": "", "Values": null } }, { - "Name": "cleanup_policy/notes", - "Description": "Notes to the default cleanup-policy. Default: \"Do not edit. CES will re-generate this default policy during each Nexus start-up that will overwrite your changes. You may want to create your own policies which will stay untouched during the start-up.\"", + "Name": "baseline_repository_url", + "Description": "The path to a server repository that contains all saved baselines. It is essential that the baselines can be accessed by appending the // to this path.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "Do not edit. CES will re-generate this default policy during each Nexus start-up that will overwrite your changes. You may want to create your own policies which will stay untouched during the start-up.", + "Default": "", "Validation": { "Type": "", "Values": null } }, { - "Name": "cleanup_policy/policy_format", - "Description": "Repository format on which the default cleanup-policy can be applied. The default is \"maven2\" which corresponds to maven repositories", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "maven2", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "apt", - "bower", - "cocoapods", - "conan", - "conda", - "docker", - "gitlfs", - "go", - "helm", - "maven2", - "npm", - "nuget", - "p2", - "pypi", - "r", - "raw", - "rubygems", - "yum" - ] - } - }, - { - "Name": "cleanup_policy/criteria/regex", - "Description": "Regex which will be used to match fitting artifacts. Default: \".*SNAPSHOT\"", + "Name": "baseline_repository_file_upload_url", + "Description": "The path used to upload files to a server repository containing the baselines.", "Optional": true, "Encrypted": false, "Global": false, - "Default": ".*SNAPSHOT", + "Default": "", "Validation": { "Type": "", "Values": null } }, { - "Name": "cleanup_policy/criteria/release_type", - "Description": "The release type on which this policy will be applied. This configuration can only be applied if the 'policy_format' is of type \"maven2\", \"yum\" and \"npm\". Default: \"PRERELEASES\"", + "Name": "groups/readers", + "Description": "The group defined in User Management for the baseline readers. Note: if no value is set, there is no special read permission for the dogu. This then means that any user existing in the CAS can open the Dogu and read the baselines information.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "PRERELEASES", + "Default": "", "Validation": { "Type": "", "Values": null } }, { - "Name": "cleanup_policy/criteria/days_till_recognition_for_delete", - "Description": "The number of days after which an artifact is recognised for deletion. Default: \"14\"", + "Name": "groups/editors", + "Description": "The group defined in User Management for the baseline editors.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "14", + "Default": "baselineEditors", "Validation": { "Type": "", "Values": null } }, { - "Name": "compact_blobstore_task/enabled", - "Description": "Switch to control whether the policy should be switched on or off. Default: \"true\"", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "true", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "true", - "false" - ] - } - }, - { - "Name": "compact_blobstore_task/blobstore", - "Description": "The specific blobstore instance to that the task should be applied. This configuration should only be used if the task type is 'blobstore.compact' (or other tasks that need to choose a blobstore instance). Default: \"default\"", + "Name": "groups/admins", + "Description": "The group defined in User Management for the baseline admins. Note: Users who are in the globally configured admin group of the CES also have admin rights in the Baseline Dogu.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "default", + "Default": "baselineAdmins", "Validation": { "Type": "", "Values": null } }, { - "Name": "compact_blobstore_task/cron", - "Description": "Cron string (in Quartz syntax) that sets the task's schedule. The default \"0 0 3 * * ?\" value will run the task daily at 3:00 AM.", + "Name": "credentials", + "Description": "Contains the defined credentials for this project to access restricted resources as YAML content. For more information see the official documentation.", "Optional": true, - "Encrypted": false, + "Encrypted": true, "Global": false, - "Default": "0 0 3 * * ?", + "Default": "", "Validation": { "Type": "", "Values": null } + } + ], + "Properties": null, + "EnvironmentVariables": null, + "Dependencies": [ + { + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" }, { - "Name": "carp-limiter/token-rate", - "Description": "The token-rate of the carp-limiter in which tokens are added to the bucket in tokens/second. Default is 50", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "50", - "Validation": { - "Type": "", - "Values": null - } + "type": "dogu", + "name": "nginx", + "version": "" }, { - "Name": "carp-limiter/burst-size", - "Description": "The size of the bucket for the carp-limiter. It sets the amount of tokens the bucket can hold. Defaults to 150", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "150", - "Validation": { - "Type": "", - "Values": null - } + "type": "dogu", + "name": "scm", + "version": ">=2.24.0-1" }, { - "Name": "carp-limiter/clean-interval", - "Description": "The clean interval in seconds for the carp-limiter, in which old limits from the limiter are cleaned. Defaults to 300 seconds (5 minutes)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "30", - "Validation": { - "Type": "", - "Values": null - } + "type": "dogu", + "name": "nexus", + "version": ">=3.34.1-3" + } + ], + "OptionalDependencies": null + }, + { + "Name": "premium/whitelabeling", + "Version": "1.0.0-1", + "DisplayName": "Whitelabeling", + "Description": "Customize the appearance of the Cloudogu Ecosystem", + "Category": "Administration", + "Tags": [], + "Logo": "TBD", + "URL": "https://github.com/cloudogu", + "Image": "registry.cloudogu.com/premium/whitelabeling", + "ExposedPorts": null, + "ExposedCommands": null, + "Volumes": [ + { + "Name": "whitelabeling_data", + "Path": "/app/data", + "Owner": "1000", + "Group": "1000", + "NeedsBackup": false + } + ], + "HealthCheck": { + "Type": "", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + }, + "HealthChecks": [ + { + "Type": "tcp", + "State": "", + "Port": 8080, + "Path": "", + "Parameters": null }, { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Type": "state", + "State": "", + "Port": 0, + "Path": "", + "Parameters": null + } + ], + "ServiceAccounts": null, + "Privileged": false, + "Configuration": [ + { + "Name": "logging/root", + "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", "Optional": true, "Encrypted": false, "Global": false, - "Default": "", + "Default": "WARN", "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null + "Type": "ONE_OF", + "Values": [ + "WARN", + "DEBUG", + "INFO", + "ERROR" + ] } }, { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Name": "archive/url", + "Description": "The URL where the whitelabeling archive is downloaded from", "Optional": true, "Encrypted": false, "Global": false, - "Default": "2500m", + "Default": "", "Validation": { - "Type": "BINARY_MEASUREMENT", + "Type": "", "Values": null } }, { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", + "Name": "archive/username", + "Description": "The username for basic authentication (optional)", "Optional": true, "Encrypted": false, "Global": false, "Default": "", "Validation": { - "Type": "BINARY_MEASUREMENT", + "Type": "", "Values": null } }, { - "Name": "container_config/cpu_core_limit", - "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Name": "archive/password", + "Description": "The password for basic authentication (optional)", "Optional": true, "Encrypted": false, "Global": false, @@ -3466,20 +6559,20 @@ } }, { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", + "Name": "archive/allow_insecure", + "Description": "A flag to skip HTTPS certificate checks. Useful for development with self signed certificates", "Optional": true, "Encrypted": false, "Global": false, - "Default": "1.0", + "Default": "false", "Validation": { "Type": "", "Values": null } }, { - "Name": "container_config/storage_limit", - "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Name": "container_config/memory_limit", + "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", "Optional": true, "Encrypted": false, "Global": false, @@ -3490,8 +6583,8 @@ } }, { - "Name": "container_config/storage_request", - "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", + "Name": "container_config/swap_limit", + "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", "Optional": true, "Encrypted": false, "Global": false, @@ -3505,25 +6598,12 @@ "Properties": null, "EnvironmentVariables": null, "Dependencies": [ - { - "type": "dogu", - "name": "cas", - "version": ">=7.0.5.1-6" - }, { "type": "dogu", "name": "nginx", "version": "" - }, - { - "type": "dogu", - "name": "postfix", - "version": "" } ], "OptionalDependencies": null } - - - ] From 0eef74470f863d53cfafbba72baf0efb78345222 Mon Sep 17 00:00:00 2001 From: meiserloh Date: Mon, 14 Oct 2024 16:38:15 +0200 Subject: [PATCH 3/8] remove unnecessary dependency --- core/dogu-sort_test.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/dogu-sort_test.go b/core/dogu-sort_test.go index d68d242..670a546 100644 --- a/core/dogu-sort_test.go +++ b/core/dogu-sort_test.go @@ -1,7 +1,6 @@ package core import ( - "slices" "testing" "github.com/stretchr/testify/require" @@ -27,7 +26,7 @@ func TestSortByDependency(t *testing.T) { } for _, optionalDependency := range orderedDogu.GetOptionalDependenciesOfType(DependencyTypeDogu) { - if slices.Contains(doguNames, optionalDependency.Name) { + if stringSliceContains(doguNames, optionalDependency.Name) { assert.Contains(t, installedDogus, optionalDependency.Name, "%s installed before dependency: %s", orderedDogu.GetSimpleName(), optionalDependency.Name) } @@ -36,6 +35,15 @@ func TestSortByDependency(t *testing.T) { } } +func stringSliceContains(slice []string, item string) bool { + for _, s := range slice { + if s == item { + return true + } + } + return false +} + func TestSortByDependencyWithSmallList(t *testing.T) { dogus := []*Dogu{} dogus, _, err := ReadDogusFromFile("../resources/test/dogu-sort-002.json") From 31a007a45ff5eae974b8ba2f4ca7162dc220a382 Mon Sep 17 00:00:00 2001 From: meiserloh Date: Wed, 16 Oct 2024 11:07:28 +0200 Subject: [PATCH 4/8] add changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 648c194..aae880f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Changed +- use topological sorting to sort dogus by dependency ## [v0.14.0] - 2024-09-18 ### Changed From 0c05a2093cb6e9e1c178ba208889d17e4f026bf2 Mon Sep 17 00:00:00 2001 From: meiserloh Date: Wed, 16 Oct 2024 12:20:48 +0200 Subject: [PATCH 5/8] add sort by dependency function with error handling --- core/dogu-sort.go | 76 +- core/dogu-sort_test.go | 322 +- resources/test/dogu-sort-004.json | 6109 +---------------------------- 3 files changed, 333 insertions(+), 6174 deletions(-) diff --git a/core/dogu-sort.go b/core/dogu-sort.go index a69d6f5..0968f41 100644 --- a/core/dogu-sort.go +++ b/core/dogu-sort.go @@ -8,22 +8,48 @@ import ( // SortDogusByDependency takes an unsorted slice of Dogu structs and returns a slice of Dogus ordered by the // importance of their dependencies descending, that is: the most needed dogu will be the first element. +// +// Deprecated: This function returns nil on error. For better error-handling use SortDogusByDependencyWithError instead. +// +//goland:noinspection GoDeprecation func SortDogusByDependency(dogus []*Dogu) []*Dogu { + orderedDogus, _ := SortDogusByDependencyWithError(dogus) + return orderedDogus +} + +// SortDogusByDependencyWithError takes an unsorted slice of Dogu structs and returns a slice of Dogus ordered by the +// importance of their dependencies descending, that is: the most needed dogu will be the first element. +func SortDogusByDependencyWithError(dogus []*Dogu) ([]*Dogu, error) { ordered := sortByDependency{dogus} - return ordered.sortDogus() + orderedDogus, err := ordered.sortDogusByDependency() + if err != nil { + err = fmt.Errorf("error in sorting dogus by dependency: %s", err) + log.Error(err) + } + return orderedDogus, err } // SortDogusByInvertedDependency takes an unsorted slice of Dogu structs and returns a new slice of Dogus ordered by the // importance of their dependencies ascending, that is: the most independent dogu will be the first element. +// +// Deprecated: This function returns nil on error. For better error-handling use SortDogusByInvertedDependencyWithError instead. +// +//goland:noinspection GoDeprecation func SortDogusByInvertedDependency(dogus []*Dogu) []*Dogu { - orderedDesc := SortDogusByDependency(dogus) + orderedDogus, _ := SortDogusByInvertedDependencyWithError(dogus) + return orderedDogus +} - orderedAsc := []*Dogu{} - for i := len(orderedDesc) - 1; i >= 0; i-- { - orderedAsc = append(orderedAsc, orderedDesc[i]) +// SortDogusByInvertedDependencyWithError takes an unsorted slice of Dogu structs and returns a new slice of Dogus ordered by the +// importance of their dependencies ascending, that is: the most independent dogu will be the first element. +func SortDogusByInvertedDependencyWithError(dogus []*Dogu) ([]*Dogu, error) { + ordered := sortByDependency{dogus} + orderedDogus, err := ordered.sortDogusByInvertedDependency() + if err != nil { + err = fmt.Errorf("error in sorting dogus by inverted dependency: %s", err) + log.Error(err) } - - return orderedAsc + return orderedDogus, err } // SortDogusByName takes an unsorted slice of Dogus @@ -65,19 +91,10 @@ func contains(slice []Dependency, item string) bool { return false } -func (bd *sortByDependency) sortDogus() []*Dogu { +func (bd *sortByDependency) sortDogusByDependency() ([]*Dogu, error) { dependencyEdges := bd.getDependencyEdges() sorted, err := toposort.Toposort(dependencyEdges) - if err != nil { - return nil - } - - sortedDogus, err := toDoguSlice(sorted) - if err != nil { - return nil - } - - return sortedDogus + return bd.handleSortResult(sorted, err) } func (bd *sortByDependency) getDependencyEdges() []toposort.Edge { @@ -119,3 +136,26 @@ func (bd *sortByDependency) dependenciesToDogus(dependencies []Dependency) []*Do return result } + +func (bd *sortByDependency) sortDogusByInvertedDependency() ([]*Dogu, error) { + dependencyEdges := bd.getDependencyEdges() + sorted, err := toposort.ToposortR(dependencyEdges) + return bd.handleSortResult(sorted, err) +} + +func (bd *sortByDependency) handleSortResult(sorted []interface{}, err error) ([]*Dogu, error) { + if err != nil { + err = fmt.Errorf("sort by dependency failed: %s", err) + log.Error(err) + return nil, err + } + + sortedDogus, err := toDoguSlice(sorted) + if err != nil { + err = fmt.Errorf("sort by dependency failed: %s", err) + log.Error(err) + return nil, err + } + + return sortedDogus, nil +} diff --git a/core/dogu-sort_test.go b/core/dogu-sort_test.go index 670a546..7bbdefa 100644 --- a/core/dogu-sort_test.go +++ b/core/dogu-sort_test.go @@ -8,113 +8,150 @@ import ( "github.com/stretchr/testify/assert" ) -func TestSortByDependency(t *testing.T) { - dogus := []*Dogu{} - dogus, _, err := ReadDogusFromFile("../resources/test/dogu-sort-004.json") - require.NoError(t, err) - var doguNames []string - for _, dogu := range dogus { - doguNames = append(doguNames, dogu.GetSimpleName()) - } - ordered := SortDogusByDependency(dogus) - var installedDogus []string - assert.Equal(t, len(dogus), len(ordered)) - for _, orderedDogu := range ordered { - for _, dependency := range orderedDogu.GetDependenciesOfType(DependencyTypeDogu) { - assert.Contains(t, installedDogus, dependency.Name, - "%s installed before dependency: %s", orderedDogu.GetSimpleName(), dependency.Name) - } - - for _, optionalDependency := range orderedDogu.GetOptionalDependenciesOfType(DependencyTypeDogu) { - if stringSliceContains(doguNames, optionalDependency.Name) { - assert.Contains(t, installedDogus, optionalDependency.Name, - "%s installed before dependency: %s", orderedDogu.GetSimpleName(), optionalDependency.Name) +func TestSortDogusByDependencyWithError(t *testing.T) { + t.Run("should return ordered dogu slice with many dogus", func(t *testing.T) { + dogus := []*Dogu{} + dogus, _, err := ReadDogusFromFile("../resources/test/dogu-sort-004.json") + require.NoError(t, err) + var doguNames []string + for _, dogu := range dogus { + doguNames = append(doguNames, dogu.GetSimpleName()) + } + ordered, err := SortDogusByDependencyWithError(dogus) + require.NoError(t, err) + + var installedDogus []string + assert.Equal(t, len(dogus), len(ordered)) + for _, orderedDogu := range ordered { + for _, dependency := range orderedDogu.GetDependenciesOfType(DependencyTypeDogu) { + assert.Contains(t, installedDogus, dependency.Name, + "%s installed before dependency: %s", orderedDogu.GetSimpleName(), dependency.Name) } + + for _, optionalDependency := range orderedDogu.GetOptionalDependenciesOfType(DependencyTypeDogu) { + if stringSliceContains(doguNames, optionalDependency.Name) { + assert.Contains(t, installedDogus, optionalDependency.Name, + "%s installed before dependency: %s", orderedDogu.GetSimpleName(), optionalDependency.Name) + } + } + installedDogus = append(installedDogus, orderedDogu.GetSimpleName()) } - installedDogus = append(installedDogus, orderedDogu.GetSimpleName()) - } -} + }) -func stringSliceContains(slice []string, item string) bool { - for _, s := range slice { - if s == item { - return true + t.Run("should return ordered dogu slice with small list of dogus", func(t *testing.T) { + dogus := []*Dogu{} + dogus, _, err := ReadDogusFromFile("../resources/test/dogu-sort-002.json") + assert.Nil(t, err) + ordered, err := SortDogusByDependencyWithError(dogus) + require.NoError(t, err) + + assert.Equal(t, "registrator", ordered[0].GetSimpleName()) + assert.Equal(t, "nginx", ordered[1].GetSimpleName()) + assert.Equal(t, "icoordinator", ordered[2].GetSimpleName()) + }) + + t.Run("should return ordered dogu slice with transitive dogu dependencies", func(t *testing.T) { + // a needs b in 1.0-2 and nginx + // b needs c in 1.0-2 and nginx + // c needs e in 1.0-2 and nginx and optional d in 1.0-2 + // e needs nginx + // d needs nginx + // Dependency tree: + // (opt)-> d + // / | + // a ---> b ---> c ---> e | + // | | | | | + // | | | | | + // --------------------------->nginx + dogus := []*Dogu{} + dogus, _, err := ReadDogusFromFile("../resources/test/dogu-sort-003.json") + assert.Nil(t, err) + + ordered, err := SortDogusByDependencyWithError(dogus) + require.NoError(t, err) + + var orderedNames []string + for _, orderedDogu := range ordered { + orderedNames = append(orderedNames, orderedDogu.GetSimpleName()) } - } - return false -} -func TestSortByDependencyWithSmallList(t *testing.T) { - dogus := []*Dogu{} - dogus, _, err := ReadDogusFromFile("../resources/test/dogu-sort-002.json") - assert.Nil(t, err) - ordered := SortDogusByDependency(dogus) + // Dogu E and Dogu D can both be installed first and the sort algorithm is not deterministic. + assert.Contains(t, orderedNames[0:2], "dogue") + assert.Contains(t, orderedNames[0:2], "dogud") + assert.Equal(t, "doguc", orderedNames[2]) + assert.Equal(t, "dogub", orderedNames[3]) + assert.Equal(t, "dogua", orderedNames[4]) + }) - assert.Equal(t, "registrator", ordered[0].GetSimpleName()) - assert.Equal(t, "nginx", ordered[1].GetSimpleName()) - assert.Equal(t, "icoordinator", ordered[2].GetSimpleName()) -} + t.Run("should return ordered dogu slice with optional dogu dependencies", func(t *testing.T) { + // Dependency tree: + // d ----> a ----> b + // \_ ^ + // \ | + // -> c + a := &Dogu{ + Name: "a", + Dependencies: []Dependency{{Type: DependencyTypeDogu, Name: "b"}}, + OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "b"}}, + } -func TestSortByDependencyWithTransitiveDependencies(t *testing.T) { - // a needs b in 1.0-2 and nginx - // b needs c in 1.0-2 and nginx - // c needs e in 1.0-2 and nginx and optional d in 1.0-2 - // e needs nginx - // d needs nginx - // Dependency tree: - // (opt)-> d - // / | - // a ---> b ---> c ---> e | - // | | | | | - // | | | | | - // --------------------------->nginx - dogus := []*Dogu{} - dogus, _, err := ReadDogusFromFile("../resources/test/dogu-sort-003.json") - assert.Nil(t, err) + b := &Dogu{Name: "b"} - ordered := SortDogusByDependency(dogus) - var orderedNames []string - for _, orderedDogu := range ordered { - orderedNames = append(orderedNames, orderedDogu.GetSimpleName()) - } + c := &Dogu{ + Name: "c", + OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "b"}}, + } - // Dogu E and Dogu D can both be installed first and the sort algorithm is not deterministic. - assert.Contains(t, orderedNames[0:2], "dogue") - assert.Contains(t, orderedNames[0:2], "dogud") - assert.Equal(t, "doguc", orderedNames[2]) - assert.Equal(t, "dogub", orderedNames[3]) - assert.Equal(t, "dogua", orderedNames[4]) -} + d := &Dogu{ + Name: "d", + OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "a"}}, + } -func TestSortByDependencyWithOptionalDependencies(t *testing.T) { - // Dependency tree: - // d ----> a ----> b - // \_ ^ - // \ | - // -> c - a := &Dogu{ - Name: "a", - Dependencies: []Dependency{{Type: DependencyTypeDogu, Name: "b"}}, - OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "b"}}, - } + dogus, err := SortDogusByDependencyWithError([]*Dogu{a, b, c, d}) + require.NoError(t, err) + assert.Equal(t, "b", dogus[0].Name) + assert.Equal(t, "c", dogus[1].Name) + assert.Equal(t, "a", dogus[2].Name) + assert.Equal(t, "d", dogus[3].Name) + }) - b := &Dogu{Name: "b"} + t.Run("should return error when cyclic dependencies", func(t *testing.T) { + // Dependency tree: + // a <--- b + // \_ ^ + // \ | + // -> c + a := &Dogu{ + Name: "a", + OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "c"}}, + } - c := &Dogu{ - Name: "c", - OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "b"}}, - } + b := &Dogu{ + Name: "b", + Dependencies: []Dependency{{Type: DependencyTypeDogu, Name: "a"}}, + } - d := &Dogu{ - Name: "d", - OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "a"}}, - } + c := &Dogu{ + Name: "c", + OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "b"}}, + } + + dogus, err := SortDogusByDependencyWithError([]*Dogu{a, b, c}) + assert.Error(t, err) + assert.ErrorContains(t, err, "sort by dependency failed") + assert.ErrorContains(t, err, "error in sorting dogus by dependency") + assert.Nil(t, dogus) + }) - dogus := SortDogusByDependency([]*Dogu{a, b, c, d}) - assert.Equal(t, "b", dogus[0].Name) - assert.Equal(t, "c", dogus[1].Name) - assert.Equal(t, "a", dogus[2].Name) - assert.Equal(t, "d", dogus[3].Name) +} + +func stringSliceContains(slice []string, item string) bool { + for _, s := range slice { + if s == item { + return true + } + } + return false } func TestSortByName(t *testing.T) { @@ -136,9 +173,10 @@ func TestSortByName(t *testing.T) { assert.Equal(t, "usermgt", ordered[11].GetSimpleName()) } -func TestSortDogusByInvertedDependency(t *testing.T) { +func TestSortDogusByInvertedDependencyWithError(t *testing.T) { t.Run("should return empty slice", func(t *testing.T) { - actual := SortDogusByInvertedDependency([]*Dogu{}) + actual, err := SortDogusByInvertedDependencyWithError([]*Dogu{}) + require.NoError(t, err) require.Empty(t, actual) }) @@ -147,14 +185,15 @@ func TestSortDogusByInvertedDependency(t *testing.T) { dogus := []*Dogu{} dogus, _, _ = ReadDogusFromFile("../resources/test/dogu-sort-002.json") - actual := SortDogusByInvertedDependency(dogus) + actual, err := SortDogusByInvertedDependencyWithError(dogus) + require.NoError(t, err) assert.Equal(t, "icoordinator", actual[0].GetSimpleName()) assert.Equal(t, "nginx", actual[1].GetSimpleName()) assert.Equal(t, "registrator", actual[2].GetSimpleName()) }) - t.Run("should return dogus sorted by by least important dogus first including optional dogus", func(t *testing.T) { + t.Run("should return dogus sorted by least important dogus first including optional dogus", func(t *testing.T) { // Dependency tree: // d ----> a ----> b // \_ ^ @@ -178,12 +217,99 @@ func TestSortDogusByInvertedDependency(t *testing.T) { OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "a"}}, } - dogus := SortDogusByInvertedDependency([]*Dogu{a, b, c, d}) + dogus, err := SortDogusByInvertedDependencyWithError([]*Dogu{a, b, c, d}) + require.NoError(t, err) + assert.Equal(t, "d", dogus[0].Name) assert.Equal(t, "a", dogus[1].Name) assert.Equal(t, "c", dogus[2].Name) assert.Equal(t, "b", dogus[3].Name) }) + + t.Run("should return error when cyclic dependencies", func(t *testing.T) { + // Dependency tree: + // a <--- b + // \_ ^ + // \ | + // -> c + a := &Dogu{ + Name: "a", + OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "c"}}, + } + + b := &Dogu{ + Name: "b", + Dependencies: []Dependency{{Type: DependencyTypeDogu, Name: "a"}}, + } + + c := &Dogu{ + Name: "c", + OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "b"}}, + } + + dogus, err := SortDogusByInvertedDependencyWithError([]*Dogu{a, b, c}) + assert.Error(t, err) + assert.ErrorContains(t, err, "sort by dependency failed") + assert.ErrorContains(t, err, "error in sorting dogus by inverted dependency") + assert.Nil(t, dogus) + }) +} + +func TestSortDogusByDependency(t *testing.T) { + t.Run("should return nil slice and no error when cyclic dependencies", func(t *testing.T) { + // Dependency tree: + // a <--- b + // \_ ^ + // \ | + // -> c + a := &Dogu{ + Name: "a", + OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "c"}}, + } + + b := &Dogu{ + Name: "b", + Dependencies: []Dependency{{Type: DependencyTypeDogu, Name: "a"}}, + } + + c := &Dogu{ + Name: "c", + OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "b"}}, + } + + //goland:noinspection GoDeprecation + dogus := SortDogusByDependency([]*Dogu{a, b, c}) + assert.Nil(t, dogus) + }) + +} + +func TestSortDogusByInvertedDependency(t *testing.T) { + t.Run("should return nil slice and no error when cyclic dependencies", func(t *testing.T) { + // Dependency tree: + // a <--- b + // \_ ^ + // \ | + // -> c + a := &Dogu{ + Name: "a", + OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "c"}}, + } + + b := &Dogu{ + Name: "b", + Dependencies: []Dependency{{Type: DependencyTypeDogu, Name: "a"}}, + } + + c := &Dogu{ + Name: "c", + OptionalDependencies: []Dependency{{Type: DependencyTypeDogu, Name: "b"}}, + } + + //goland:noinspection GoDeprecation + dogus := SortDogusByInvertedDependency([]*Dogu{a, b, c}) + assert.Nil(t, dogus) + }) } func TestTransformsDependencyListToDoguList(t *testing.T) { diff --git a/resources/test/dogu-sort-004.json b/resources/test/dogu-sort-004.json index 0ed8276..04b56f9 100644 --- a/resources/test/dogu-sort-004.json +++ b/resources/test/dogu-sort-004.json @@ -3,303 +3,6 @@ "Name": "premium/backup", "Version": "1.11.2-2", "DisplayName": "Backup & Restore", - "Description": "Backup Dogu for the Cloudogu EcoSystem", - "Category": "Administration Apps", - "Tags": [ - "backup", - "warp" - ], - "Logo": "https://cloudogu.com/images/dogus/backup.png", - "URL": "https://github.com/cloudogu", - "Image": "registry.cloudogu.com/premium/backup", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": null, - "HealthCheck": { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - "HealthChecks": null, - "ServiceAccounts": [ - { - "Type": "cas", - "Params": [ - "cas" - ] - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "active", - "Description": "Choose if the automatic backup-mechanism is active.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ignore_dogu_health", - "Description": "Skip dogu health checks before backup", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "time", - "Description": "The time of a scheduled backup. A backup is scheduled then every day at this time. Format HH:MM, ex.: 12:30", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "encryption_key", - "Description": "A key which is needed to access the backup.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "backup_type", - "Description": "Choose a backup-type. Currently 'SFTP', 'S3' and 'local' are possible options.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "sftp_config/address", - "Description": "The address of a sftp server.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "s3_bucket_config/address", - "Description": "The address of a S3-bucket.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "s3_bucket_config/access_key_id", - "Description": "The access id of the S3-bucket.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "s3_bucket_config/secret_access_key", - "Description": "The secret key of the S3-bucket.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "local_config/path", - "Description": "The absolute path to a local directory.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "retention_enabled", - "Description": "Choose if the automatic backup removal mechanism is active. (true/false)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "retention_strategy", - "Description": "Select the strategy which governs how backups are kept or removed. (e.g. removeAllButKeepLatest, keepLastSevenDays, keep7Days1Month1Quarter1Year)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "metrics_token", - "Description": "Access token for healthcheck- and metric-endpoint.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "rest_token", - "Description": "Access token for API-calls.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "admin_role", - "Description": "Role required to access the backup-dogu. If not configured the global admin_group will be used.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "deny_cross_blueprint_restores", - "Description": "Value can be true or false. When true all backups are bound to a specific blueprintId and cannot be restored after a blueprint-upgrade. When false or not set this feature is disabled.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "pre_backup_script", - "Description": "Value can be set to an absolute path to a bash script. That script is executed before a backup is started.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "post_backup_script", - "Description": "Value can be set to an absolute path to a bash script. That script is executed after a backup has finished successfully.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "pre_restore_script", - "Description": "Value can be set to an absolute path to a bash script. That script is executed before a restore is started.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "post_restore_script", - "Description": "Value can be set to an absolute path to a bash script. That script is executed after a restore has finished successfully.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -328,164 +31,6 @@ "Name": "official/redmine", "Version": "5.1.3-4", "DisplayName": "Redmine", - "Description": "Redmine is a flexible project management web application", - "Category": "Development Apps", - "Tags": [ - "warp", - "pm", - "projectmanagement", - "issue", - "task" - ], - "Logo": "https://cloudogu.com/images/dogus/redmine.png", - "URL": "http://www.redmine.org", - "Image": "registry.cloudogu.com/official/redmine", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "post-upgrade", - "Description": "", - "Command": "/post-upgrade.sh" - }, - { - "Name": "upgrade-notification", - "Description": "", - "Command": "/upgrade-notification.sh" - }, - { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" - }, - { - "Name": "delete-plugin", - "Description": "", - "Command": "/delete-plugin.sh" - } - ], - "Volumes": [ - { - "Name": "files", - "Path": "/usr/share/webapps/redmine/files", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "plugins", - "Path": "/var/tmp/redmine/plugins", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "logs", - "Path": "/usr/share/webapps/redmine/log", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - }, - { - "Name": "localConfig", - "Path": "/var/ces/config", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 3000, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": [ - { - "Type": "postgresql", - "Params": null - }, - { - "Type": "cas", - "Params": [ - "cas" - ] - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "INFO", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "etcd_redmine_config", - "Description": "Applies default configuration to redmine.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -514,219 +59,6 @@ "Name": "official/usermgt", "Version": "1.16.3-1", "DisplayName": "User Management", - "Description": "User and Group Management.", - "Category": "Administration Apps", - "Tags": [ - "warp", - "users", - "groups" - ], - "Logo": "https://cloudogu.com/images/dogus/usermanagement.png", - "URL": "https://github.com/cloudogu/usermgt", - "Image": "registry.cloudogu.com/official/usermgt", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "post-upgrade", - "Description": "", - "Command": "/post-upgrade.sh" - } - ], - "Volumes": [ - { - "Name": "data", - "Path": "/var/lib/usermgt", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - }, - { - "Name": "importHistory", - "Path": "/var/lib/usermgt/importHistory", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - "HealthChecks": null, - "ServiceAccounts": [ - { - "Type": "ldap", - "Params": [ - "rw" - ] - }, - { - "Type": "cas", - "Params": [ - "cas" - ] - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "pwd_reset_selected_by_default", - "Description": "Specifies whether the checkbox for the password change at the next login attribute should be preselected by default ", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "false", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "true", - "false" - ] - } - }, - { - "Name": "mail/sender", - "Description": "Email address to use as sender of the User Management dogu", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "mail/import/subject", - "Description": "The subject of the mail, which is send when a user is imported via the csv import feature", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "mail/import/content", - "Description": "The content of the mail, which is send when a User is imported via the csv import feature. Within the content the placeholders ${username} and ${password} need to be included.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "mail/import/max_retries", - "Description": "The number of maximum retries to send a mail, before an error occurs", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "mail/import/max_retry_delay", - "Description": "The maximum delay for sending an email as part of a retry. By using a backoff strategy, the waiting time increases for each failed send until max_retry_delay is reached before the mail is sent again.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "mail/import/retry_interval", - "Description": "The interval in which failed mails will be checked to be sent again.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend at least 200m of memory for usermgt.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/java_max_ram_percentage", - "Description": "Limits the heap stack size of the Usermgt process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Usermgt: 25%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "25.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "container_config/java_min_ram_percentage", - "Description": "Limits the heap stack size of the Usermgt process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Usermgt: 50%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "50.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -755,121 +87,6 @@ "Name": "official/smeagol", "Version": "1.7.3-4", "DisplayName": "Smeagol", - "Description": "Store your technical documentation with in your git repositories", - "Category": "Development Apps", - "Tags": [ - "warp", - "wiki", - "docs", - "gollum", - "git" - ], - "Logo": "", - "URL": "https://cloudogu.com", - "Image": "registry.cloudogu.com/official/smeagol", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "upgrade-notification", - "Description": "", - "Command": "/upgrade-notification.sh" - } - ], - "Volumes": [ - { - "Name": "data", - "Path": "/var/lib/smeagol", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - } - ], - "HealthCheck": { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - "HealthChecks": null, - "ServiceAccounts": [ - { - "Type": "cas", - "Params": [ - "cas" - ] - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/java_max_ram_percentage", - "Description": "Limits the heap stack size of the Smeagol process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Smeagol: 25%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "25.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "container_config/java_min_ram_percentage", - "Description": "Limits the heap stack size of the Smeagol process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Smeagol: 50%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "50.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -893,418 +110,6 @@ "Name": "official/scm", "Version": "3.4.1-3", "DisplayName": "SCM-Manager", - "Description": "The easiest way to share and manage your Git, Mercurial and Subversion repositories over http.", - "Category": "Development Apps", - "Tags": [ - "warp", - "code", - "scm", - "git", - "mercurial", - "subversion" - ], - "Logo": "https://cloudogu.com/images/dogus/scm-manager.png", - "URL": "https://www.scm-manager.org", - "Image": "registry.cloudogu.com/official/scm", - "ExposedPorts": [ - { - "Type": "tcp", - "Container": 2222, - "Host": 2222 - } - ], - "ExposedCommands": [ - { - "Name": "service-account-create", - "Description": "Creates a new service account", - "Command": "/create-sa.sh" - }, - { - "Name": "service-account-remove", - "Description": "Removes a service account", - "Command": "/remove-sa.sh" - }, - { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" - }, - { - "Name": "upgrade-notification", - "Description": "", - "Command": "/upgrade-notification.sh" - } - ], - "Volumes": [ - { - "Name": "data", - "Path": "/var/lib/scm", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "custom.init.script.d", - "Path": "/var/lib/custom.init.script.d", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "cache", - "Path": "/var/cache", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - }, - { - "Name": "temp", - "Path": "/tmp", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - }, - { - "Name": "localConfig", - "Path": "/var/ces/config", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - "HealthChecks": null, - "ServiceAccounts": [ - { - "Type": "cas", - "Params": [ - "cas" - ] - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "plugin_center_url", - "Description": "URL of SCM-Manager Plugin Center", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "plugin_center_authentication_url", - "Description": "URL of SCM-Manager Plugin Center authentication service. To delete the URL and hence disable plugin center authentication, set this to 'none'.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "release_feed_url", - "Description": "URL of SCM-Manager release RSS feed", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "login_info_url", - "Description": "URL for the login info. To delete the URL and hence disable the login info feature, set this to 'none'", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "alerts_url", - "Description": "URL for alerts in SCM-Manager. To delete the URL and hence disable the alerts feature, set this to 'none'", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "disable_release_feed", - "Description": "If set to 'true', SCM-Manager will not query for new releases", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "additional_plugins", - "Description": "Comma separated list of plugin names to install on start. Uninstalled plugins will also be installed again, since they are defined as default.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "update_plugins", - "Description": "Set to 'true' to install available plugin updates on startup", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend at least 1200m of memory for SCM.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/java_max_ram_percentage", - "Description": "Limits the heap stack size of the SCM process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for SCM: 25%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "25.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "container_config/java_min_ram_percentage", - "Description": "Limits the heap stack size of the SCM process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for SCM: 50%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "50.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "redmine_type", - "Description": "If both, Redmine and EasyRedmine are installed, this sets which instance should be configured", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "EASY_REDMINE", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "REDMINE", - "EASY_REDMINE" - ] - } - }, - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG or TRACE. Default is INFO", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "INFO", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "ERROR", - "INFO", - "DEBUG", - "TRACE" - ] - } - }, - { - "Name": "caching/workdir/size", - "Description": "Size of cache for working directories used to edit repository content, for example using the editor or the review plugin. To disable cache, clean this value.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "5", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "700m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_limit", - "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "1.0", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/storage_limit", - "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/storage_request", - "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "caching/stores/enabled", - "Description": "To enable store caches, set this to 'true'.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "false", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "caching/dataFiles/size", - "Description": "To enable data file caches, set this to an integer value > 0.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "0", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "install_smeagol_plugin", - "Description": "", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "false", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "true", - "false" - ] - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -1359,773 +164,44 @@ "Name": "official/nexus", "Version": "3.70.2-3", "DisplayName": "Sonatype Nexus", - "Description": "The Nexus Repository is like the local warehouse where all of the parts and finished goods used in your software supply chain are stored and distributed.", - "Category": "Development Apps", - "Tags": [ - "warp", - "build", - "artifact", - "maven" - ], - "Logo": "https://cloudogu.com/images/dogus/nexus.png", - "URL": "http://www.sonatype.org/nexus", - "Image": "registry.cloudogu.com/official/nexus", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "service-account-create", - "Description": "Creates a new service account", - "Command": "/create-sa.sh" - }, + "Dependencies": [ { - "Name": "service-account-remove", - "Description": "Removes a service account", - "Command": "/remove-sa.sh" + "type": "dogu", + "name": "cas", + "version": ">=7.0.5.1-6" }, { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" + "type": "dogu", + "name": "nginx", + "version": "" }, { - "Name": "upgrade-notification", - "Description": "", - "Command": "/upgrade-notification.sh" + "type": "dogu", + "name": "postfix", + "version": "" } ], - "Volumes": [ + "OptionalDependencies": null + }, + { + "Name": "official/jenkins", + "Version": "2.462.2-1", + "DisplayName": "Jenkins CI", + "Dependencies": [ { - "Name": "data", - "Path": "/var/lib/nexus", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true + "type": "dogu", + "name": "cas", + "version": "" }, { - "Name": "migration", - "Path": "/var/lib/migration", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true + "type": "dogu", + "name": "nginx", + "version": "" }, { - "Name": "localConfig", - "Path": "/var/ces/config", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 8082, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": [ - { - "Type": "cas", - "Params": [ - "cas" - ] - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "claim/once", - "Description": "A claim script definition which is only executed once. After that, it will set the claim/once.lock key which prevents further execution.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "claim/once.lock", - "Description": "If this key is set to true it will prevent the claim/once script from being executed.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "claim/always", - "Description": "A claim script definition which will always be executed at startup.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "nexus.repository.sandbox.enable", - "Description": "Enable repository sandboxing", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "installDefaultDockerRegistry", - "Description": "If set to false, the default docker registry is not installed", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "disableOutreachManagement", - "Description": "Disable the outreach management capability", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG. The default log level is set to \"WARN\"", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend to add 50m for additional tools running inside the container.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/java_max_ram_percentage", - "Description": "Limits the heap stack size of the Nexus process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Nexus: 25%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "25.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "container_config/java_min_ram_percentage", - "Description": "Limits the heap stack size of the Nexus process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Nexus: 50%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "50.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "cleanup_policy/notes", - "Description": "Notes to the default cleanup-policy. Default: \"Do not edit. CES will re-generate this default policy during each Nexus start-up that will overwrite your changes. You may want to create your own policies which will stay untouched during the start-up.\"", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "Do not edit. CES will re-generate this default policy during each Nexus start-up that will overwrite your changes. You may want to create your own policies which will stay untouched during the start-up.", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "cleanup_policy/policy_format", - "Description": "Repository format on which the default cleanup-policy can be applied. The default is \"maven2\" which corresponds to maven repositories", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "maven2", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "apt", - "bower", - "cocoapods", - "conan", - "conda", - "docker", - "gitlfs", - "go", - "helm", - "maven2", - "npm", - "nuget", - "p2", - "pypi", - "r", - "raw", - "rubygems", - "yum" - ] - } - }, - { - "Name": "cleanup_policy/criteria/regex", - "Description": "Regex which will be used to match fitting artifacts. Default: \".*SNAPSHOT\"", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": ".*SNAPSHOT", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "cleanup_policy/criteria/release_type", - "Description": "The release type on which this policy will be applied. This configuration can only be applied if the 'policy_format' is of type \"maven2\", \"yum\" and \"npm\". Default: \"PRERELEASES\"", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "PRERELEASES", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "cleanup_policy/criteria/days_till_recognition_for_delete", - "Description": "The number of days after which an artifact is recognised for deletion. Default: \"14\"", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "14", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "compact_blobstore_task/enabled", - "Description": "Switch to control whether the policy should be switched on or off. Default: \"true\"", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "true", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "true", - "false" - ] - } - }, - { - "Name": "compact_blobstore_task/blobstore", - "Description": "The specific blobstore instance to that the task should be applied. This configuration should only be used if the task type is 'blobstore.compact' (or other tasks that need to choose a blobstore instance). Default: \"default\"", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "default", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "compact_blobstore_task/cron", - "Description": "Cron string (in Quartz syntax) that sets the task's schedule. The default \"0 0 3 * * ?\" value will run the task daily at 3:00 AM.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "0 0 3 * * ?", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "carp-limiter/token-rate", - "Description": "The token-rate of the carp-limiter in which tokens are added to the bucket in tokens/second. Default is 50", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "50", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "carp-limiter/burst-size", - "Description": "The size of the bucket for the carp-limiter. It sets the amount of tokens the bucket can hold. Defaults to 150", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "150", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "carp-limiter/clean-interval", - "Description": "The clean interval in seconds for the carp-limiter, in which old limits from the limiter are cleaned. Defaults to 300 seconds (5 minutes)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "30", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "2500m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_limit", - "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "1.0", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/storage_limit", - "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/storage_request", - "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, - "Dependencies": [ - { - "type": "dogu", - "name": "cas", - "version": ">=7.0.5.1-6" - }, - { - "type": "dogu", - "name": "nginx", - "version": "" - }, - { - "type": "dogu", - "name": "postfix", - "version": "" - } - ], - "OptionalDependencies": null - }, - { - "Name": "official/jenkins", - "Version": "2.462.2-1", - "DisplayName": "Jenkins CI", - "Description": "Jenkins Continuous Integration Server", - "Category": "Development Apps", - "Tags": [ - "warp", - "build", - "ci", - "cd" - ], - "Logo": "https://cloudogu.com/images/dogus/jenkins.png", - "URL": "https://jenkins-ci.org", - "Image": "registry.cloudogu.com/official/jenkins", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "upgrade-notification", - "Description": "", - "Command": "/upgrade-notification.sh" - }, - { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" - } - ], - "Volumes": [ - { - "Name": "data", - "Path": "/var/lib/jenkins", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "custom.init.groovy.d", - "Path": "/var/lib/custom.init.groovy.d", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "tmp", - "Path": "/tmp", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "additional.plugins", - "Description": "Comma separated list of plugin names to install on start", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "blocked.plugins", - "Description": "Comma separated list of plugin names to remove on start/restart", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/java_max_ram_percentage", - "Description": "Limits the heap stack size of the Jenkins process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Jenkins: 25%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "25.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "container_config/java_min_ram_percentage", - "Description": "Limits the heap stack size of the Jenkins process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for Jenkins: 50%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "50.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "2g", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_limit", - "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "1.0", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/storage_limit", - "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/storage_request", - "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "additional_java_args", - "Description": "Additional args that are passed to the jenkins process.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "UNSET", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "INFO", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - } - ], - "Properties": null, - "EnvironmentVariables": null, - "Dependencies": [ - { - "type": "dogu", - "name": "cas", - "version": "" - }, - { - "type": "dogu", - "name": "nginx", - "version": "" - }, - { - "type": "dogu", - "name": "postfix", - "version": "" + "type": "dogu", + "name": "postfix", + "version": "" } ], "OptionalDependencies": null @@ -2134,73 +210,6 @@ "Name": "official/cockpit", "Version": "2.1.0-1", "DisplayName": "Cockpit", - "Description": "Dashboard for the Cloudogu EcoSystem", - "Category": "Development Apps", - "Tags": [ - "warp", - "dashboard" - ], - "Logo": "https://cloudogu.com/images/dogus/cockpit.png", - "URL": "https://github.com/cloudogu", - "Image": "registry.cloudogu.com/official/cockpit", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "upgrade-notification", - "Description": "", - "Command": "/upgrade-notification.sh" - } - ], - "Volumes": null, - "HealthCheck": { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - "HealthChecks": null, - "ServiceAccounts": [ - { - "Type": "postgresql", - "Params": null - }, - { - "Type": "cas", - "Params": [ - "cas" - ] - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "pinnedDashboard", - "Description": "A dashboard which is pinned for everybody", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "welcomeDashboard", - "Description": "The cockpit welcome dashboard", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -2224,732 +233,6 @@ "Name": "official/cas", "Version": "7.0.8-2", "DisplayName": "Central Authentication Service", - "Description": "The Central Authentication Service (CAS) is a single sign-on protocol for the web.", - "Category": "Base", - "Tags": [ - "authentication", - "sso", - "cas" - ], - "Logo": "https://cloudogu.com/images/dogus/cas.png", - "URL": "https://apereo.github.io/cas", - "Image": "registry.cloudogu.com/official/cas", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "service-account-create", - "Description": "Creates a new service account", - "Command": "/create-sa.sh" - }, - { - "Name": "service-account-remove", - "Description": "Removes an existing service account", - "Command": "/remove-sa.sh" - }, - { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" - }, - { - "Name": "post-upgrade", - "Description": "", - "Command": "/post-upgrade.sh" - }, - { - "Name": "upgrade-notification", - "Description": "", - "Command": "/upgrade-notification.sh" - } - ], - "Volumes": [ - { - "Name": "logs", - "Path": "/logs", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - }, - { - "Name": "localConfig", - "Path": "/var/ces/config", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": [ - { - "Type": "ldap", - "Params": [ - "rw" - ] - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "limit/failure_threshold", - "Description": "Number of failed login attempts. This number is used to calculate the failure rate in conjunction with limit/range_seconds. (0 means disabled; defaults to 500)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "500", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "limit/range_seconds", - "Description": "Time in seconds defines timeframe over which the login failures are taken into account (must be a positive number, takes only effect if limit/failure_threshold is > 0; defaults to 10 seconds)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "10", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "limit/stale_removal_interval", - "Description": "Time in seconds between background runs which finds and removes clean expired and stale login failures (must be a positive number, takes only effect if limit/failure_threshold is > 0; defaults to 60 seconds)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "60", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "limit/lock_time", - "Description": "Time in seconds to lock an account if the throttling threshold was met; (must be a positive number, takes only effect if limit/failure_threshold is > 0; defaults to 600 seconds)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "600", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "mail_sender", - "Description": "Email address to use as sender of the CAS dogu", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "password_management/enable_password_reset_via_email", - "Description": "Specifies whether the functionality for resetting the password via a link sent by e-mail should be activated. This entry is set to 'true' by default.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "true", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "true", - "false" - ] - } - }, - { - "Name": "password_management/reset_password_subject", - "Description": "Specifies the subject of the e-mail when resetting the password.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "password_management/reset_password_text", - "Description": "Specifies the text for the password reset email. Note: The password reset link must be inserted mandatory with ${url}", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "forgot_password_text", - "Description": "Text which shall be shown if a user clicks 'Forgot Password'. Note: The button 'Forgot password' is only visible if the value 'enable_password_reset_via_email' is not `true`.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "legal_urls/terms_of_service", - "Description": "This URL links to the Terms of Service and will be the first link at the bottom of login or logout pages. If empty the whole link will be omitted. If changed the CAS dogu must be restarted to take effect.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "legal_urls/imprint", - "Description": "This URL links to the Imprint and will be the second link at the bottom of login or logout pages. If empty the whole link will be omitted. If changed the CAS dogu must be restarted to take effect.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "legal_urls/privacy_policy", - "Description": "This URL links to the Privacy Policy and will be the last link at the bottom of login or logout pages. If empty the whole link will be omitted. If changed the CAS dogu must be restarted to take effect.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "session_tgt/max_time_to_live_in_seconds", - "Description": "Maximum session timeout - TGT will expire after defined timespan regardless the usage", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "session_tgt/time_to_kill_in_seconds", - "Description": "Idle session timeout - TGT will expire sooner if no further requests keep the session alive", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/host", - "Description": "The host of the LDAP (without protocol and without port), e.g. ldap if LDAP dogu is used.", - "Optional": false, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/port", - "Description": "The port of the LDAP, e.g. 389", - "Optional": false, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/base_dn", - "Description": "Base DN of users to be authenticated, \"(dc=cloudogu,dc=com)\". This value is only used when using an external LDAP.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/connection_dn", - "Description": "Manager DN for authenticated searches, e.g. \"(cn=admin,dc=cloudogu,dc=com)\" This value is only used when using an external LDAP.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/password", - "Description": "The password for connection to ldap in encrypted form. This value is only used when using an external LDAP.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/search_filter", - "Description": "Search filter used for configurations that require searching for DNs, e.g. (objectClass=person)", - "Optional": false, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/ds_type", - "Description": "Type of the LDAP", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "embedded", - "external" - ] - } - }, - { - "Name": "ldap/encryption", - "Description": "Type of the encryption of the LDAP. Defaults to 'none'.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "none", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "", - "none", - "startTLS", - "startTLSAny", - "ssl", - "sslAny" - ] - } - }, - { - "Name": "ldap/attribute_id", - "Description": "The attribute for the user ID in the LDAP", - "Optional": false, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/attribute_given_name", - "Description": "The attribute for the user's given name in the LDAP", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/attribute_surname", - "Description": "The attribute for the user's surname in the LDAP", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/attribute_fullname", - "Description": "The attribute for the user's fullname in the LDAP, which can also be seen as display name like \"John Doe\"", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/attribute_mail", - "Description": "The attribute for the user's mail address in the LDAP", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/attribute_group", - "Description": "The user's group membership attribute (e.g. memberOf)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/group_attribute_name", - "Description": "Name of the attribute for groups (the group's user membership attribute) in LDAP, e.g. member", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/group_base_dn", - "Description": "Settings for ldap group search by member. Base dn for group search e.g.: o=ces.local,dc=cloudogu,dc=com", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ldap/group_search_filter", - "Description": "Search filter for group search. If this property is empty, group search by member will be skipped", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "1g", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_limit", - "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 virtual CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 virtual CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "0.5", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/storage_limit", - "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/storage_request", - "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/java_max_ram_percentage", - "Description": "Limits the heap stack size of the CAS process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for CAS: 25%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "25.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "container_config/java_min_ram_percentage", - "Description": "Limits the heap stack size of the CAS process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for CAS: 50%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "50.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "oidc/enabled", - "Description": "Determines whether the CAS should use the configured OIDC provider for delegated authentication. This entry is set to 'false' by default.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "false", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "true", - "false" - ] - } - }, - { - "Name": "oidc/discovery_uri", - "Description": "Describes the URI that contains the description for the OIDC protocol of the target provider.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "oidc/client_id", - "Description": "Contains the identifier that should be used to identify the client against the OIDC provider.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "oidc/client_secret", - "Description": "Contains the secret that should be used along the client ID to identify the client against the OIDC provider.", - "Optional": true, - "Encrypted": true, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "oidc/display_name", - "Description": "The display name is used for the OIDC provider in the user interface.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "OIDC Provider", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "oidc/redirect_uri", - "Description": "The url which will be used as redirect target after a successful delegated logout. The url has to match the patterns which are allowed for the configured client. [defaults to /cas/logout]", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "oidc/optional", - "Description": "Determines whether the authentication via the configured OIDC provider is optional. The user is automatically redirected to the login page of the OIDC provider if this property is set to 'false'. The 'true' entry makes authentication via the OIDC provider optional. For this, an additional button for the OIDC provider is displayed on the login page of the CAS, which can be used for authentication with the OIDC provider. This entry is set to 'false' by default.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "false", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "true", - "false" - ] - } - }, - { - "Name": "oidc/scopes", - "Description": "Specifies the resource to be queried against OIDC. Normally, this enumeration should contain at least the openid, user's email, profile information, and the groups assigned to the user. This entry is set to `openid email profile groups` by default.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "openid email profile groups", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "oidc/attribute_mapping", - "Description": "The attributes provided by OIDC do not exactly match the attributes required by the CAS. It is necessary to transform the OIDC attributes into attributes accepted by the cas. Therefore, this entry should contain rules to transform an attribute provided by the OIDC provider into an attribute required by CAS. The rules should be provided in the following format: 'email:mail,family_name:surname'. With the given example the OIDC attribute 'email' and 'family_name' are transformed into 'mail' and 'surname' respectively. The CAS requires the following attributes to function properly: 'mail,surname,givenName,username,displayName'.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "oidc/principal_attribute", - "Description": "Specifies an attribute that should be used as principal id inside the CES. CAS uses the ID provided by the OIDC provider when this property is empty.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -2974,98 +257,6 @@ "Name": "official/plantuml", "Version": "2024.7-1", "DisplayName": "PlantUML", - "Description": "Create your PlantUML diagrams directly in your browser!", - "Category": "Documentation", - "Tags": [ - "docs", - "uml", - "graph" - ], - "Logo": "http://s.plantuml.com/logoc.png", - "URL": "http://plantuml.com/", - "Image": "registry.cloudogu.com/official/plantuml", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": null, - "HealthCheck": { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - "HealthChecks": null, - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/java_max_ram_percentage", - "Description": "Limits the heap stack size of the PlantUML process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for PlantUML: 25%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "25.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "container_config/java_min_ram_percentage", - "Description": "Limits the heap stack size of the PlantUML process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for PlantUML: 50%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "50.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -3079,172 +270,6 @@ "Name": "official/nginx", "Version": "1.26.1-11", "DisplayName": "Nginx", - "Description": "Nginx WebServer.", - "Category": "Base", - "Tags": [ - "webserver", - "proxy", - "reverse-proxy" - ], - "Logo": "https://cloudogu.com/images/dogus/nginx.png", - "URL": "http://nginx.org/", - "Image": "registry.cloudogu.com/official/nginx", - "ExposedPorts": [ - { - "Type": "tcp", - "Container": 80, - "Host": 80 - }, - { - "Type": "tcp", - "Container": 443, - "Host": 443 - } - ], - "ExposedCommands": null, - "Volumes": [ - { - "Name": "customhtml", - "Path": "/var/www/customhtml", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "app.conf.d", - "Path": "/etc/nginx/app.conf.d", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "appconf", - "Path": "/var/nginx/conf.d/", - "Owner": "0", - "Group": "0", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 80, - "Path": "", - "Parameters": null - }, - { - "Type": "tcp", - "State": "", - "Port": 443, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "disable_access_log", - "Description": "Disable logging of incoming requests", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "google_tracking_id", - "Description": "Google Analytics Tracking ID", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "html_content_url", - "Description": "URL path to reach all custom html content pages. Default value when unset: static", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "ignore_service_health", - "Description": "Option to ignore the health status of all dogus. Makes it possible to access dogus even if they are unhealthy", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "false", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend to have at least allocated 20m for additional tools (ces-confd) running inside the container.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - } - ], - "Properties": { - "stopAtBackup": "false" - }, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -3258,56 +283,6 @@ "Name": "official/registrator", "Version": "0.12.0-1", "DisplayName": "Registrator", - "Description": "Service registry bridge for Docker with pluggable adapters", - "Category": "Base", - "Tags": [ - "register", - "container" - ], - "Logo": "https://cloudogu.com/images/dogus/registrator.png", - "URL": "http://gliderlabs.com/registrator/latest/", - "Image": "registry.cloudogu.com/official/registrator", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": null, - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": null, - "ServiceAccounts": null, - "Privileged": true, - "Configuration": [ - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": null, "OptionalDependencies": null }, @@ -3315,514 +290,13 @@ "Name": "official/postgresql", "Version": "14.12-3", "DisplayName": "PostgreSQL", - "Description": "PostgreSQL Database.", - "Category": "Base", - "Tags": [ - "database", - "db" - ], - "Logo": "https://cloudogu.com/images/dogus/postgresql.png", - "URL": "https://www.postgresql.org/", - "Image": "registry.cloudogu.com/official/postgresql", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "service-account-create", - "Description": "Creates a new service account", - "Command": "/create-sa.sh" - }, - { - "Name": "service-account-remove", - "Description": "Removes a service account", - "Command": "/remove-sa.sh" - }, - { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" - }, - { - "Name": "backup-consumer", - "Description": "", - "Command": "/backup-consumer.sh" - }, - { - "Name": "upgrade-notification", - "Description": "", - "Command": "/upgrade-notification.sh" - } - ], - "Volumes": [ - { - "Name": "data", - "Path": "/var/lib/postgresql", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "localConfig", - "Path": "/var/ces/config", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 5432, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "50m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_limit", - "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "0.50", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/storage_limit", - "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/storage_request", - "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": null, - "OptionalDependencies": null - }, - { - "Name": "official/postfix", - "Version": "3.9.0-3", - "DisplayName": "Postfix", - "Description": "Postfix - Mail Transfer Agent", - "Category": "Base", - "Tags": [ - "mail", - "smtp" - ], - "Logo": "https://cloudogu.com/images/dogus/postfix.png", - "URL": "http://www.postfix.org/", - "Image": "registry.cloudogu.com/official/postfix", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": null, - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 25, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "relayhost", - "Description": "The next-hop destination of non-local mail", - "Optional": false, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "sasl_username", - "Description": "username for sasl authentication", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "sasl_password", - "Description": "password for sasl authentication, if the mail relay server needs an md5 encrypted password pass the encrypted password in here otherwise plain", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "smtp_tls_security_level", - "Description": "The default SMTP TLS security level for the Postfix SMTP client", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "smtp_tls_cert_file", - "Description": "Postfix SMTP client RSA certificate in PEM format", - "Optional": true, - "Encrypted": true, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "smtp_tls_key_file", - "Description": "Postfix SMTP client RSA private key in PEM format", - "Optional": true, - "Encrypted": true, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "smtp_tls_CAfile", - "Description": "CA certificates of root CAs trusted to sign either remote SMTP server certificates or intermediate CA certificates", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "smtp_tls_loglevel", - "Description": "Enable additional Postfix SMTP client logging of TLS activity", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "smtp_tls_exclude_ciphers", - "Description": "List of ciphers or cipher types to exclude from the Postfix SMTP client cipher list at all TLS security levels", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "smtp_tls_mandatory_ciphers", - "Description": "The minimum TLS cipher grade that the Postfix SMTP client will use with mandatory TLS encryption", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "smtp_tls_mandatory_protocols", - "Description": "List of SSL/TLS protocols that the Postfix SMTP client will use with mandatory TLS encryption", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "smtpd_forbid_bare_newline", - "Description": "Disables support for malformed line endings in SMTP. This fixes CVE-2023-51764 but could break (rare) clients that mis-implement SMTP.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "yes", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "yes", - "no" - ] - } - }, - { - "Name": "smtpd_forbid_bare_newline_exclusions", - "Description": "List of clients for which bare newlines should still be allowed. See https://www.postfix.org/postconf.5.html#smtpd_forbid_bare_newline_exclusions", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "$mynetworks", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "INFO", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "50m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_limit", - "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "0.05", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/storage_limit", - "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/storage_request", - "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, + "OptionalDependencies": null + }, + { + "Name": "official/postfix", + "Version": "3.9.0-3", + "DisplayName": "Postfix", "Dependencies": null, "OptionalDependencies": null }, @@ -3830,220 +304,6 @@ "Name": "official/ldap", "Version": "2.6.7-4", "DisplayName": "OpenLDAP", - "Description": "OpenLDAP server for user and group management.", - "Category": "Base", - "Tags": [ - "authentication", - "ldap", - "users", - "groups" - ], - "Logo": "https://cloudogu.com/images/dogus/openldap.png", - "URL": "http://www.openldap.org", - "Image": "registry.cloudogu.com/official/ldap", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "service-account-create", - "Description": "Creates a new service account", - "Command": "/srv/openldap/create-sa.sh" - }, - { - "Name": "service-account-remove", - "Description": "Removes a service account", - "Command": "/srv/openldap/remove-sa.sh" - }, - { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" - }, - { - "Name": "post-upgrade", - "Description": "", - "Command": "/post-upgrade.sh" - } - ], - "Volumes": [ - { - "Name": "db", - "Path": "/var/lib/openldap", - "Owner": "100", - "Group": "101", - "NeedsBackup": true - }, - { - "Name": "config", - "Path": "/etc/openldap/slapd.d", - "Owner": "100", - "Group": "101", - "NeedsBackup": true - }, - { - "Name": "crontab-logs", - "Path": "/tmp/logs", - "Owner": "100", - "Group": "101", - "NeedsBackup": false - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 389, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "password_change/notification_enabled", - "Description": "Enables the e-mail notification when a users password was changed", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "true", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "true", - "false" - ] - } - }, - { - "Name": "password_change/check_interval_minutes", - "Description": "Interval in minutes at which password changes will be checked [default: 1]", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "1", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "password_change/mail_sender_address", - "Description": "Sender address of the e-mail sent to the user after a password change.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "password_change/mail_sender_name", - "Description": "Sender name of the e-mail sent to the user after a password change.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "password_change/mail_subject", - "Description": "Subject of the e-mail sent to the user after a password change.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "password_change/mail_text", - "Description": "Text of the e-mail sent to the user after a password change. As placeholders, '%uid' can be used for the user ID (user name) and '%name' for the complete name (cn).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "INFO", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "user_search_size_limit", - "Description": "Set how many users can be retrieved in a single search operation", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "4000", - "Validation": { - "Type": "", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -4057,102 +317,6 @@ "Name": "official/swaggerui", "Version": "4.9.0-5", "DisplayName": "Swagger UI", - "Description": "Swagger UI displays your openAPI specification.", - "Category": "Development Apps", - "Tags": [ - "warp", - "REST", - "API", - "OpenAPI" - ], - "Logo": "https://github.com/cloudogu/swagger-ui/blob/master/src/img/logo_small.png?raw=true", - "URL": "http://swagger.io/tools/swagger-ui/", - "Image": "registry.cloudogu.com/official/swaggerui", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": null, - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "validator_url", - "Description": "Set the url of the swaggerui validator.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -4161,112 +325,11 @@ } ], "OptionalDependencies": null - - }, { "Name": "premium/monitoring", "Version": "0.3.3-1", "DisplayName": "Monitoring", - "Description": "Monitoring for the Cloudogu EcoSystem.", - "Category": "Base", - "Tags": [ - "monitoring", - "rest" - ], - "Logo": "https://cloudogu.com/images/dogus/monitoring.png", - "URL": "https://github.com/cloudogu/monitoring", - "Image": "registry.cloudogu.com/premium/monitoring", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": null, - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). We recommend at least 200m of memory for usermgt.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "api_user/username", - "Description": "Username of the user required to access the private api endpoints. Default: `api_username`.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "api_username", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "api_user/password", - "Description": "Password of the user required to access the private api endpoints. Default: randomly generated password.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "api_password", - "Validation": { - "Type": "", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -4291,91 +354,6 @@ "Name": "official/gotenberg", "Version": "8.8.0-3", "DisplayName": "Gotenberg", - "Description": "A Docker-powered stateless API for PDF files.", - "Category": "Documentation", - "Tags": [ - "documentation", - "pdf", - "office", - "convert" - ], - "Logo": "https://gotenberg.dev/img/logo_jed.png", - "URL": "https://gotenberg.dev/", - "Image": "registry.cloudogu.com/official/gotenberg", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": [ - { - "Name": "fonts", - "Path": "/home/gotenberg/.fonts", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 3000, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO or DEBUG. Default is INFO", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "info", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "warn", - "error", - "info", - "debug" - ] - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": null, "OptionalDependencies": null }, @@ -4383,122 +361,6 @@ "Name": "official/redis", "Version": "6.2.14-4", "DisplayName": "Redis", - "Description": "Fast in-memory database", - "Category": "Development Apps", - "Tags": [], - "Logo": "https://redis.io/images/redis-small.png", - "URL": "https://www.redis.io/", - "Image": "registry.cloudogu.com/official/redis", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "service-account-create", - "Description": "Creates a new service account", - "Command": "/create-sa.sh" - }, - { - "Name": "service-account-remove", - "Description": "Removes a service account", - "Command": "/remove-sa.sh" - }, - { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" - }, - { - "Name": "post-upgrade", - "Description": "", - "Command": "/post-upgrade.sh" - } - ], - "Volumes": [ - { - "Name": "data", - "Path": "/usr/local/etc/redis/data", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "localConfig", - "Path": "/var/ces/config", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 6379, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "INFO", - "DEBUG", - "WARN", - "ERROR", - "FATAL" - ] - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": null, "OptionalDependencies": null }, @@ -4506,189 +368,6 @@ "Name": "official/mysql", "Version": "8.0.38-3", "DisplayName": "MySQL", - "Description": "MySQL - Relational database", - "Category": "Base", - "Tags": [ - "database", - "db" - ], - "Logo": "https://www.mysql.com/common/logos/mysql-logo.svg?v2", - "URL": "https://www.mysql.com/", - "Image": "registry.cloudogu.com/official/mysql", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "service-account-create", - "Description": "Creates a new service account", - "Command": "/create-sa.sh" - }, - { - "Name": "service-account-remove", - "Description": "Removes a service account", - "Command": "/remove-sa.sh" - }, - { - "Name": "upgrade-notification", - "Description": "Informs the user on critical updates", - "Command": "/upgrade-notification.sh" - }, - { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" - }, - { - "Name": "post-upgrade", - "Description": "", - "Command": "/post-upgrade.sh" - } - ], - "Volumes": [ - { - "Name": "data", - "Path": "/var/lib/mysql/", - "Owner": "100", - "Group": "101", - "NeedsBackup": true - }, - { - "Name": "localConfig", - "Path": "/var/ces/config", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 3306, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "400m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_limit", - "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "0.5", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/storage_limit", - "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/storage_request", - "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": null, "OptionalDependencies": null }, @@ -4696,274 +375,6 @@ "Name": "itz-bund/teamscale", "Version": "2024.7.3-1", "DisplayName": "Teamscale", - "Description": "Teamscale Dogu", - "Category": "Development Apps", - "Tags": [ - "warp" - ], - "Logo": "https://cloudogu.com/images/dogus/nginx.png", - "URL": "", - "Image": "registry.cloudogu.com/itz-bund/teamscale", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" - }, - { - "Name": "remove-repositories", - "Description": "", - "Command": "/remove-repositories.sh" - } - ], - "Volumes": [ - { - "Name": "teamscale_storage", - "Path": "/opt/teamscale/storage", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "repo", - "Path": "/opt/teamscale/repo", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "backups", - "Path": "/opt/teamscale/backups", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - }, - { - "Name": "default_data_archives", - "Path": "/opt/teamscale/default_data_archives", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - }, - { - "Name": "custom_config", - "Path": "/tmp/custom_config", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "analysis_profiles", - "Path": "/tmp/analysis_profiles", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - }, - { - "Name": "localConfig", - "Path": "/var/ces/config", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": [ - { - "Type": "cas", - "Params": [ - "oidc", - "/api/auth/openid/logout" - ] - }, - { - "Type": "ldap", - "Params": null - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/java_max_ram", - "Description": "Limits the heap stack size of the Teamscale process to the configured value in MB. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "4096m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "base_group_name", - "Description": "The name of the base-group for cas group replication. Any replicated cas group will have the same permissions as this group.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "teamscale_license", - "Description": "Teamscale License", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "*** no License ***", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "user_sync_interval", - "Description": "The interval in which the users should be synced. For more information see for example here: https://crontab.guru/#0_*_*_*_*", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "0 * * * *", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "mail_sender", - "Description": "Email address to use as sender of the teamscale dogu", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "mail_sender_name", - "Description": "Name to be used in the FROM field of the mail", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "admin_contact_url", - "Description": "The admin contact URL, e.g. a website (https://support.acme.com) or the admin's mail address (mailto:admin@acme.com)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "disable_gravatar", - "Description": "Globally disable gravatar. TRUE=disabled, FALSE=enabled. Default: TRUE", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "TRUE", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "TRUE", - "FALSE" - ] - } - }, - { - "Name": "wait_for_scm_manager", - "Description": "Wait for the SCM-Manager Dogu during the upgrade process", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "TRUE", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "TRUE", - "FALSE" - ] - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -4973,147 +384,31 @@ { "type": "dogu", "name": "cas", - "version": ">=7.0.5.1-6" - }, - { - "type": "dogu", - "name": "postfix", - "version": "" - }, - { - "type": "dogu", - "name": "ldap", - "version": "" - } - ], - "OptionalDependencies": [ - { - "type": "dogu", - "name": "scm", - "version": "" - } - ] - }, - { - "Name": "hallowelt/bluespice", - "Version": "4.5.2-1", - "DisplayName": "BlueSpice", - "Description": "BlueSpice Dogu", - "Category": "Development Apps", - "Tags": [ - "warp", - "bluespice", - "wiki" - ], - "Logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c4/Bluespice_Icon.svg/250px-Bluespice_Icon.svg.png", - "URL": "https://bluespice.com", - "Image": "registry.cloudogu.com/hallowelt/bluespice", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": [ - { - "Name": "bluespice_data", - "Path": "/data/bluespice", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 80, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": [ - { - "Type": "mysql", - "Params": null - }, - { - "Type": "cas", - "Params": [ - "oidc" - ] - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "DEBUG", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "2g", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } + "version": ">=7.0.5.1-6" }, { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "1g", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } + "type": "dogu", + "name": "postfix", + "version": "" }, { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "1", - "Validation": { - "Type": "", - "Values": null - } + "type": "dogu", + "name": "ldap", + "version": "" } ], - "Properties": { - "logoutUri": "/w/rest.php/pluggableauth/logout" - }, - "EnvironmentVariables": null, + "OptionalDependencies": [ + { + "type": "dogu", + "name": "scm", + "version": "" + } + ] + }, + { + "Name": "hallowelt/bluespice", + "Version": "4.5.2-1", + "DisplayName": "BlueSpice", "Dependencies": [ { "type": "dogu", @@ -5172,88 +467,6 @@ "Name": "hallowelt/bluespice-pdfrenderer", "Version": "4.4-1", "DisplayName": "BlueSpice - PdfRenderer-Service", - "Description": "BlueSpice - PdfRenderer-Service Dogu", - "Category": "Backend Services", - "Tags": [ - "bluespice", - "backend" - ], - "Logo": "", - "URL": "https://bluespice.com", - "Image": "registry.cloudogu.com/hallowelt/bluespice-pdfrenderer", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": null, - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "DEBUG", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "500m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "0.25", - "Validation": { - "Type": "", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [], "OptionalDependencies": null }, @@ -5261,95 +474,6 @@ "Name": "hallowelt/drawio", "Version": "20.3.7-6", "DisplayName": "Drawio-Service", - "Description": "Drawio-Service Dogu", - "Category": "Backend Services", - "Tags": [ - "backend", - "webapp" - ], - "Logo": "", - "URL": "https://draw.io", - "Image": "registry.cloudogu.com/hallowelt/drawio", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": null, - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 80, - "Path": "", - "Parameters": null - }, - { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "INFO", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "125m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "0.25", - "Validation": { - "Type": "", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": null, "OptionalDependencies": null }, @@ -5357,196 +481,6 @@ "Name": "hallowelt/bluespice-opensearch", "Version": "2.11.1-2", "DisplayName": "BlueSpice - opensearch-Service", - "Description": "BlueSpice - opensearch-Service Dogu", - "Category": "Databases", - "Tags": [ - "bluespice", - "backend" - ], - "Logo": "", - "URL": "https://bluespice.com", - "Image": "registry.cloudogu.com/hallowelt/bluespice-opensearch", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": null, - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 9200, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/java_max_ram_percentage", - "Description": "Limits the heap stack size of the opensearch process to the configured percentage of the available physical memory when the container has more than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for opensearch: 25%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "25.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "container_config/java_min_ram_percentage", - "Description": "Limits the heap stack size of the opensearch process to the configured percentage of the available physical memory when the container has less than approx. 250 MB of memory available. Is only considered when a memory_limit is set. Use a valid float value with decimals between 0 and 100 (f. ex. 55.0 for 55%). Default value for opensearch: 50%", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "50.0", - "Validation": { - "Type": "FLOAT_PERCENTAGE_HUNDRED", - "Values": null - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "1600m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_limit", - "Description": "Limits the container's CPU core usage. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "1.0", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/storage_limit", - "Description": "Limits the container's ephemeral storage usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/storage_request", - "Description": "Requests the container's minimal ephemeral storage requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": null, "OptionalDependencies": null }, @@ -5554,88 +488,6 @@ "Name": "hallowelt/bluespice-mathoid", "Version": "4.4-3", "DisplayName": "BlueSpice - mathoid-Service", - "Description": "BlueSpice - mathoid-Service Dogu", - "Category": "Backend Services", - "Tags": [ - "bluespice", - "backend" - ], - "Logo": "", - "URL": "https://bluespice.com", - "Image": "registry.cloudogu.com/hallowelt/bluespice-mathoid", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": null, - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 10044, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "DEBUG", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "125m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "0.25", - "Validation": { - "Type": "", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": null, "OptionalDependencies": null }, @@ -5643,93 +495,6 @@ "Name": "hallowelt/bluespice-collabpadsbackend", "Version": "1.0.2-1", "DisplayName": "BlueSpice - Collabpads Service", - "Description": "BlueSpice - Collabpads Service Dogu", - "Category": "Backend Services", - "Tags": [ - "backend", - "collabpads" - ], - "Logo": "", - "URL": "https://bluespice.com/preview-teamwork-in-collabpad/", - "Image": "registry.cloudogu.com/hallowelt/bluespice-collabpadsbackend", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": null, - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 8081, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": [ - { - "Type": "mongodb", - "Params": null - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of error, warn, info, debug.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "info", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "warn", - "debug", - "info", - "error" - ] - } - }, - { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "250m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "0.25", - "Validation": { - "Type": "", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -5743,107 +508,6 @@ "Name": "hallowelt/mongodb", "Version": "4.4.29-1", "DisplayName": "MongoDB Service", - "Description": "MongoDB Service Dogu", - "Category": "Backend Services", - "Tags": [ - "backend", - "database" - ], - "Logo": "", - "URL": "https://www.mongodb.com", - "Image": "registry.cloudogu.com/hallowelt/mongodb", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "service-account-create", - "Description": "Creates a new service account", - "Command": "/create-sa.sh" - }, - { - "Name": "service-account-remove", - "Description": "Removes a service account", - "Command": "/remove-sa.sh" - } - ], - "Volumes": [ - { - "Name": "data", - "Path": "/var/lib/mongodb", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 27017, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "INFO", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_request", - "Description": "Requests the container's minimal memory requirement. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "250m", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/cpu_core_request", - "Description": "Requests the container's minimal CPU core requirement. Use a positive floating value describing a fraction of 1 CPU core. When you define a value of '0.5', you are requesting half as much CPU time compared to if you asked for '1.0' CPU. This configuration is only applicable to the Multinode-EcoSystem.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "0.25", - "Validation": { - "Type": "", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": null, "OptionalDependencies": null }, @@ -5851,206 +515,6 @@ "Name": "premium/admin", "Version": "2.12.3-1", "DisplayName": "Administration", - "Description": "Administration Dogu for the Cloudogu EcoSystem", - "Category": "Administration Apps", - "Tags": [ - "warp" - ], - "Logo": "", - "URL": "https://github.com/cloudogu", - "Image": "registry.cloudogu.com/premium/admin", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "post-upgrade", - "Description": "", - "Command": "/app/post-upgrade.sh" - } - ], - "Volumes": [ - { - "Name": "support", - "Path": "/app/downloads/support", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - }, - { - "Name": "logs", - "Path": "/app/downloads/logs", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - }, - { - "Name": "localConfig", - "Path": "/var/ces/config", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": [ - { - "Type": "cas", - "Params": [ - "cas" - ] - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "api_user/username", - "Description": "Username of the user required to access the private api endpoints. Default: `api_username`.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "api_username", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "api_user/password", - "Description": "Password of the user required to access the private api endpoints. Default: randomly generated password.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "api_password", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "groups/admin", - "Description": "Users with this group will be identified as administrators. Default: adminAdmins", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "adminAdmins", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "groups/writer", - "Description": "Users with this group will be identified as normal users. Default: adminWriters", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "adminWriters", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "groups/reader", - "Description": "Users with this group will be identified as readonly users. Default: adminReaders", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "adminReaders", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "downloads/retention_policy", - "Description": "Retention policy which applies to the download directory", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "monitoring/dashboard", - "Description": "The UID of the Grafana-Dashboard, which is integrated into the Monitoring-Tab of the Admin-Dogu. Default: ces_admin_dashboard", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "ces_admin_dashboard", - "Validation": { - "Type": "", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -6080,172 +544,6 @@ "Name": "premium/portainer", "Version": "2.21.2-1", "DisplayName": "Portainer", - "Description": "Portainer is a lightweight management UI which allows you to easily manage your different Docker environments\n", - "Category": "Development Apps", - "Tags": [ - "warp", - "host", - "containermanagement", - "container", - "docker" - ], - "Logo": "https://cloudogu.com/images/dogus/portainer.png", - "URL": "https://www.portainer.io/", - "Image": "registry.cloudogu.com/premium/portainer", - "ExposedPorts": null, - "ExposedCommands": [ - { - "Name": "pre-upgrade", - "Description": "", - "Command": "/pre-upgrade.sh" - }, - { - "Name": "post-upgrade", - "Description": "", - "Command": "/post-upgrade.sh" - } - ], - "Volumes": [ - { - "Name": "portainer_data", - "Path": "/data", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "carp_data", - "Path": "/var/carp/data", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - }, - { - "Name": "localConfig", - "Path": "/var/ces/config", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": true - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 9000, - "Path": "", - "Parameters": null - }, - { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": [ - { - "Type": "cas", - "Params": [ - "cas" - ] - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "endpoint_configuration", - "Description": "Provide one or multiple Portainer agent configurations which are automatically imported to the dogu.\nMust have the following (JSON) format: [{\"Name\":\"NAME\", \"EndpointURL\":\"ENDPOINTADDRESS:PORT\"}].\nThe NAME can be chosen freely; ENDPOINTADDRESS is the FQDN or IP of the host; the PORT is most likely 9001", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "admin_group", - "Description": "Group of users that should get admin privileges in Portainer.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "portainer_admins", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "user_group", - "Description": "Only applicable if `public_user_access` is true. Group of users that should get normal user privileges in Portainer.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "portainer_users", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "user_access_restricted", - "Description": "If false, all users have normal user privileges in Portainer. Otherwise, only users in the configured `user_group` have access.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "false", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "true", - "false" - ] - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -6264,176 +562,6 @@ "Name": "itz-bund/baseline", "Version": "1.5.1-4", "DisplayName": "Baseline", - "Description": "Baseline Dogu for the Cloudogu EcoSystem", - "Category": "Development Apps", - "Tags": [ - "warp" - ], - "Logo": "", - "URL": "https://github.com/cloudogu", - "Image": "registry.cloudogu.com/itz-bund/baseline", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": null, - "HealthCheck": { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - "HealthChecks": null, - "ServiceAccounts": [ - { - "Type": "nexus", - "Params": [ - "fullAccessRepository=baselines", - "permissions=nx-repository-view-*-*-read,nx-repository-view-*-*-browse" - ] - }, - { - "Type": "scm", - "Params": [ - "rw" - ] - }, - { - "Type": "cas", - "Params": [ - "cas" - ] - } - ], - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "projects_json_url", - "Description": "The path to a server providing the project.json file containing the definition for all existing baseline projects.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "baseline_repository_url", - "Description": "The path to a server repository that contains all saved baselines. It is essential that the baselines can be accessed by appending the // to this path.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "baseline_repository_file_upload_url", - "Description": "The path used to upload files to a server repository containing the baselines.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "groups/readers", - "Description": "The group defined in User Management for the baseline readers. Note: if no value is set, there is no special read permission for the dogu. This then means that any user existing in the CAS can open the Dogu and read the baselines information.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "groups/editors", - "Description": "The group defined in User Management for the baseline editors.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "baselineEditors", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "groups/admins", - "Description": "The group defined in User Management for the baseline admins. Note: Users who are in the globally configured admin group of the CES also have admin rights in the Baseline Dogu.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "baselineAdmins", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "credentials", - "Description": "Contains the defined credentials for this project to access restricted resources as YAML content. For more information see the official documentation.", - "Optional": true, - "Encrypted": true, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", @@ -6462,141 +590,6 @@ "Name": "premium/whitelabeling", "Version": "1.0.0-1", "DisplayName": "Whitelabeling", - "Description": "Customize the appearance of the Cloudogu Ecosystem", - "Category": "Administration", - "Tags": [], - "Logo": "TBD", - "URL": "https://github.com/cloudogu", - "Image": "registry.cloudogu.com/premium/whitelabeling", - "ExposedPorts": null, - "ExposedCommands": null, - "Volumes": [ - { - "Name": "whitelabeling_data", - "Path": "/app/data", - "Owner": "1000", - "Group": "1000", - "NeedsBackup": false - } - ], - "HealthCheck": { - "Type": "", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - }, - "HealthChecks": [ - { - "Type": "tcp", - "State": "", - "Port": 8080, - "Path": "", - "Parameters": null - }, - { - "Type": "state", - "State": "", - "Port": 0, - "Path": "", - "Parameters": null - } - ], - "ServiceAccounts": null, - "Privileged": false, - "Configuration": [ - { - "Name": "logging/root", - "Description": "Set the root log level to one of ERROR, WARN, INFO, DEBUG.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "WARN", - "Validation": { - "Type": "ONE_OF", - "Values": [ - "WARN", - "DEBUG", - "INFO", - "ERROR" - ] - } - }, - { - "Name": "archive/url", - "Description": "The URL where the whitelabeling archive is downloaded from", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "archive/username", - "Description": "The username for basic authentication (optional)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "archive/password", - "Description": "The password for basic authentication (optional)", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "archive/allow_insecure", - "Description": "A flag to skip HTTPS certificate checks. Useful for development with self signed certificates", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "false", - "Validation": { - "Type": "", - "Values": null - } - }, - { - "Name": "container_config/memory_limit", - "Description": "Limits the container's memory usage. Use a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte).", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - }, - { - "Name": "container_config/swap_limit", - "Description": "Limits the container's swap memory usage. Use zero or a positive integer value followed by one of these units [b,k,m,g] (byte, kibibyte, mebibyte, gibibyte). 0 will disable swapping.", - "Optional": true, - "Encrypted": false, - "Global": false, - "Default": "", - "Validation": { - "Type": "BINARY_MEASUREMENT", - "Values": null - } - } - ], - "Properties": null, - "EnvironmentVariables": null, "Dependencies": [ { "type": "dogu", From 2d7a1e2089462c425a748abf11b3ce67688ff29b Mon Sep 17 00:00:00 2001 From: meiserloh Date: Wed, 16 Oct 2024 12:28:07 +0200 Subject: [PATCH 6/8] add deprecation notice to changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aae880f..cb71eba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Changed - use topological sorting to sort dogus by dependency +### Deprecated +- `SortDogusByDependency`: Use `SortDogusByDependencyWithError` instead for better error handling +- `SortDogusByInvertedDependency`: Use `SortDogusByInvertedDependencyWithError` instead for better error handling + ## [v0.14.0] - 2024-09-18 ### Changed - Relicense to AGPL-3.0-only (#40) From 9ffeb1868b86544ca1de810b0b4c95ef41defff8 Mon Sep 17 00:00:00 2001 From: Niklas Date: Thu, 17 Oct 2024 09:38:44 +0200 Subject: [PATCH 7/8] Bump version --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 12409ec..5cba9bd 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ # Set these to the desired values ARTIFACT_ID=cesapp-lib -VERSION=0.14.0 +VERSION=0.14.1 GOTAG?=1.18.6 MAKEFILES_VERSION=7.4.0 From ef9bd19c33a4ccc3f25009d3e8fb8667de0bfa50 Mon Sep 17 00:00:00 2001 From: Niklas Date: Thu, 17 Oct 2024 09:39:20 +0200 Subject: [PATCH 8/8] Update changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cb71eba..0869892 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] + +## [v0.14.1] - 2024-10-17 ### Changed - use topological sorting to sort dogus by dependency