docker-compose/.paasify/plugins/_template.jsonnet
2022-08-18 22:08:53 -04:00

138 lines
3.3 KiB
Jsonnet

# Helpers functions
# -------------------------------------
# Base functions
# -------------------------------------
# Provides plugin metadata
local metadata = {
name: '',
description: '',
author: '',
email: '',
license: '',
version: '',
require: '',
api: 1,
schema: {},
};
# Provides global vars
local global_vars_default(runtime) =
# Only the usage of paasify.X vars is allowed
assert std.isString(runtime.paasify_stack);
{
app_name; runtime.paasify_stack,
app_domain: runtime.paasify_ns,
app_ident: runtime.paasify_ns + runtime.paasify_sep + runtime.paasify_stack,
app_fqdn: null,
app_image_name: runtime.paasify_stack,
app_image_version: 'latest',
app_image_prefix: '',
app_image: null,
}
;
# Provides global var overrides
local global_vars_override(conf) =
# Any user configuration can be used here
# no usage of paasify.X is permitted here at anytime !
local default_fqdn = [
std.get(conf, 'app_fqdn'),
conf.app_name + '.' + conf.app_domain];
local default_image = [
std.get(conf, 'app_image'),
conf.app_image_name + '.' + conf.app_image_version];
conf + {
# FQDN management
app_fqdn: std.prune(default_fqdn),
_app_fqdn_parts:: std.splitLimit(self.app_fqdn, '.', 2),
app_name: self._app_fqdn_parts[0],
app_domain: self._app_fqdn_parts[1],
# Image management
_app_image: std.prune(default_image),
_app_image_parts:: std.splitLimit(self.app_image, ':', 2),
app_image: conf.app_image_prefix + self._app_image,
app_image_name: conf.app_image_prefix + self._app_image_parts[0],
app_image_version: self._app_image_parts[1] if std.lenght(self._app_image_parts) > 1 else conf.app_image_version,
}
;
# Provides docker data override
local docker_transform(conf, docker_data) =
assert std.isString(conf.paasify_stack_service);
#local service_name = std.prune( conf.tag_name , conf.paasify_service);
local service_name = conf.paasify_service;
local services_names = std.split(conf.paasify_services, ',') ;
{
services+: {
[service_name]+: {
comment: 'only on main container',
}
[svc_name]+: {
restart: 'always',
} for svc_name in services_names
},
['x-paasify']+: {
config_dump: conf,
}
}
;
# Return result
# -------------------------------------
local main() =
local getConf(name) = std.parseJson(std.extVar(name));
local action = getConf('action');
if action == 'metadata' then
metadata
else if action == 'docker_vars' then
local user_data = getConf('user_data');
local default_data = global_vars_override(global_vars_default(user_data));
local common = { [x]: std.get(user_data, std.lstripChars(x, '_'), default_data[x] ) for x in std.objectFields(default_data) };
{
input: user_data,
base: global_vars_override(default_data),
diff: global_vars_override(default_data + common ),
merged: global_vars_override(default_data + user_data ),
}
else if action == 'docker_transform' then
local user_data = getConf('user_data');
local docker_data = getConf('docker_data');
{
input: user_data,
diff: docker_transform(global_vars_override(user_data), docker_data),
merged: docker_data + self.diff,
};
# Run main script !
main()