138 lines
3.3 KiB
Jsonnet
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()
|