Remove: Old plugin for another project
This commit is contained in:
parent
f8f35f219f
commit
3797a83ec6
@ -1,266 +0,0 @@
|
|||||||
### OLD PLUGIN !!!!!!!
|
|
||||||
|
|
||||||
|
|
||||||
# local paasify = import 'paasify.libsonnet';
|
|
||||||
|
|
||||||
|
|
||||||
# Helpers functions
|
|
||||||
# -------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Internal Tag functions
|
|
||||||
# -------------------------------------
|
|
||||||
|
|
||||||
local BuildConfImage(image, name, version, prefix) =
|
|
||||||
local array = if std.isString(image) then
|
|
||||||
std.splitLimit(image, ':', 2)
|
|
||||||
else [name, version];
|
|
||||||
|
|
||||||
local app_name = if std.length(array) > 0 then array[0] else name;
|
|
||||||
local app_version = if std.length(array) > 1 then array[1] else version;
|
|
||||||
local app_image = app_name + ':' + app_version;
|
|
||||||
|
|
||||||
{
|
|
||||||
#app_image_INPUT: [image, name, version, prefix],
|
|
||||||
#app_image_prefix: prefix,
|
|
||||||
#app_image_name: prefix + app_name,
|
|
||||||
#app_image_version: app_version,
|
|
||||||
#app_image: prefix + app_image,
|
|
||||||
|
|
||||||
_app_image_prefix: prefix,
|
|
||||||
_app_image_name: prefix + app_name,
|
|
||||||
_app_image_version: app_version,
|
|
||||||
_app_image: prefix + app_image,
|
|
||||||
};
|
|
||||||
|
|
||||||
# ---
|
|
||||||
|
|
||||||
local Sanitize(str) =
|
|
||||||
std.strReplace(str, '_', '-');
|
|
||||||
|
|
||||||
local ParseFQDN(fqdn, name, domain) =
|
|
||||||
local array = if std.isString(fqdn) then
|
|
||||||
std.splitLimit(fqdn, '.', 2)
|
|
||||||
else [];
|
|
||||||
{
|
|
||||||
# Deprecated
|
|
||||||
_app_name: if std.length(array) > 1 then array[0] else name,
|
|
||||||
_app_domain: if std.length(array) > 1 then array[1] else domain,
|
|
||||||
_app_fqdn: if std.length(array) > 1 then fqdn else name + '.' + domain,
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
local BuildConfDomain(fqdn, name, domain) =
|
|
||||||
local conf = ParseFQDN(fqdn, name, domain);
|
|
||||||
{ [x]: Sanitize(conf[x]) for x in std.objectFields(conf) };
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# 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) =
|
|
||||||
# Role: Define constants
|
|
||||||
# Usage: CONSTANTS for docker-compose and jsonnet
|
|
||||||
# Only the usage of paasify.X vars is allowed
|
|
||||||
# Static variables only
|
|
||||||
assert std.isString(runtime.paasify_stack);
|
|
||||||
|
|
||||||
local app_ident = runtime.paasify_ns + runtime.paasify_sep + runtime.paasify_stack;
|
|
||||||
#local dir_prefix = './';
|
|
||||||
local dir_prefix = runtime.paasify_stack_dir + '/';
|
|
||||||
{
|
|
||||||
app_ident: app_ident,
|
|
||||||
|
|
||||||
app_name: runtime.paasify_stack,
|
|
||||||
app_domain: runtime.paasify_ns,
|
|
||||||
app_fqdn: null,
|
|
||||||
|
|
||||||
app_image_name: runtime.paasify_stack,
|
|
||||||
app_image_version: 'latest',
|
|
||||||
app_image_prefix: '',
|
|
||||||
app_image: null,
|
|
||||||
|
|
||||||
|
|
||||||
##########################
|
|
||||||
app_service: runtime.paasify_stack,
|
|
||||||
|
|
||||||
app_network: 'default',
|
|
||||||
app_network_external: false,
|
|
||||||
app_network_name: app_ident,
|
|
||||||
|
|
||||||
#########
|
|
||||||
|
|
||||||
app_expose: false,
|
|
||||||
app_expose_ip: '0.0.0.0',
|
|
||||||
app_expose_port: null,
|
|
||||||
|
|
||||||
app_port: '80',
|
|
||||||
app_prot: 'tcp',
|
|
||||||
|
|
||||||
app_puid: '1000',
|
|
||||||
app_pgid: '1000',
|
|
||||||
|
|
||||||
app_lang: 'en_US',
|
|
||||||
app_tz: 'UTC',
|
|
||||||
app_tz_var: 'TZ',
|
|
||||||
app_tz_mount: false,
|
|
||||||
app_tz_mounts: '/etc/timezone:/etc/timezone:ro,/etc/localtime:/etc/localtime:ro',
|
|
||||||
|
|
||||||
app_debug: 'false',
|
|
||||||
|
|
||||||
app_dir_root: dir_prefix,
|
|
||||||
app_dir_db_data: dir_prefix + 'db_data', # Backup data
|
|
||||||
app_dir_db_conf: dir_prefix + 'db_conf', # Commitables files into git
|
|
||||||
|
|
||||||
app_dir_cache: dir_prefix + 'cache', # Cache files
|
|
||||||
app_dir_build: dir_prefix + 'build', # Build dir
|
|
||||||
app_dir_script: dir_prefix + 'scripts', # Dir for storing container scripts and helpers
|
|
||||||
app_dir_conf: dir_prefix + 'conf', # Commitables files into git
|
|
||||||
app_dir_backup: dir_prefix + 'backup', # Backup directory
|
|
||||||
app_dir_data: dir_prefix + 'data', # Backup data
|
|
||||||
app_dir_logs: dir_prefix + 'logs', # Backup ?
|
|
||||||
app_dir_share: dir_prefix + 'share', # No backup, data for apps
|
|
||||||
app_dir_tmp: dir_prefix + 'tmp', # Just a tmp pool dir
|
|
||||||
app_dir_secrets: dir_prefix + 'secrets', # Autogenerated secrets
|
|
||||||
|
|
||||||
app_docker_socket: '/var/run/docker.sock',
|
|
||||||
app_docker_conn: 'unix://var/run/docker.sock',
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Generic networks
|
|
||||||
net_backup: runtime.paasify_ns + runtime.paasify_sep + 'backup', # For backup network
|
|
||||||
net_docker: runtime.paasify_ns + runtime.paasify_sep + 'docker', # For docker socket access
|
|
||||||
net_mail: runtime.paasify_ns + runtime.paasify_sep + 'mail',
|
|
||||||
net_vpn: runtime.paasify_ns + runtime.paasify_sep + 'vpn',
|
|
||||||
net_proxy: runtime.paasify_ns + runtime.paasify_sep + 'proxy',
|
|
||||||
net_ldap: runtime.paasify_ns + runtime.paasify_sep + 'ldap',
|
|
||||||
net_sql: runtime.paasify_ns + runtime.paasify_sep + 'sql',
|
|
||||||
net_nosql: runtime.paasify_ns + runtime.paasify_sep + 'nosql',
|
|
||||||
net_queue: runtime.paasify_ns + runtime.paasify_sep + 'queue',
|
|
||||||
net_ostorage: runtime.paasify_ns + runtime.paasify_sep + 'ostorage', # Object storage
|
|
||||||
net_fstorage: runtime.paasify_ns + runtime.paasify_sep + 'fstorage', # File storage
|
|
||||||
net_bstorage: runtime.paasify_ns + runtime.paasify_sep + 'bstorage', # Block storage
|
|
||||||
|
|
||||||
#FUTURE app_dir_prefix: std.get(user_data, 'app_dir_prefix', './')
|
|
||||||
# app_dir_logs: ResolvePath(std.get(user_data, 'app_dir_logs', './logs/'), cwd),
|
|
||||||
# app_dir_conf: ResolvePath(std.get(user_data, 'app_dir_conf', './conf/'), cwd),
|
|
||||||
# app_dir_data: ResolvePath(std.get(user_data, 'app_dir_data', './data/'), cwd),
|
|
||||||
# app_dir_share: ResolvePath(std.get(user_data, 'app_dir_share', './share/'), cwd),
|
|
||||||
# app_dir_tmp: ResolvePath(std.get(user_data, 'app_dir_tmp', './tmp/'), cwd),
|
|
||||||
|
|
||||||
}
|
|
||||||
;
|
|
||||||
|
|
||||||
# Provides global var overrides
|
|
||||||
local global_vars_override(conf) =
|
|
||||||
# Role: ensure all variables are provided before processing
|
|
||||||
# Usage: VARS for docker-compose and jsonnet
|
|
||||||
#
|
|
||||||
# Any plugin user configuration can be used here
|
|
||||||
# No usage of paasify.X is permitted here at anytime !
|
|
||||||
# Forbidden to change existing vars, only new vars with _PREFIX
|
|
||||||
# All variables must start with _
|
|
||||||
|
|
||||||
BuildConfImage(
|
|
||||||
conf.app_image,
|
|
||||||
conf.app_image_name,
|
|
||||||
conf.app_image_version,
|
|
||||||
conf.app_image_prefix)
|
|
||||||
|
|
||||||
+ BuildConfDomain(
|
|
||||||
conf.app_fqdn,
|
|
||||||
conf.app_name,
|
|
||||||
conf.app_domain)
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
# Provides docker data override
|
|
||||||
# -------------------------------------
|
|
||||||
local docker_transform(conf_raw, docker_data) =
|
|
||||||
# Role: Create a dynamic compose file
|
|
||||||
# Usage: docker_struct for jsonnet (no docker-compose!!!)
|
|
||||||
assert std.isString(conf_raw.paasify_stack_service);
|
|
||||||
local conf = global_vars_default(conf_raw) + conf_raw + global_vars_override(conf_raw);
|
|
||||||
|
|
||||||
local service_name = conf.paasify_stack_service;
|
|
||||||
local services_names = std.split(conf.paasify_stack_services, ',') ;
|
|
||||||
|
|
||||||
{
|
|
||||||
services+: {
|
|
||||||
[svc_name]+: {
|
|
||||||
restart: 'always',
|
|
||||||
environment+: {
|
|
||||||
[conf.app_tz_var]: conf.app_tz,
|
|
||||||
},
|
|
||||||
} for svc_name in services_names
|
|
||||||
},
|
|
||||||
|
|
||||||
#[service_name]+: {
|
|
||||||
# comment: 'only on main container',
|
|
||||||
#},
|
|
||||||
#
|
|
||||||
|
|
||||||
#['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 == 'vars' then
|
|
||||||
# local user_data = getConf('user_data');
|
|
||||||
# local default_data = 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,
|
|
||||||
#
|
|
||||||
# diff: default_data + common + global_vars_override(default_data + user_data ),
|
|
||||||
# merged: user_data + 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(user_data + global_vars_override(user_data), docker_data),
|
|
||||||
# diff: docker_transform(user_data, docker_data),
|
|
||||||
# merged: docker_data + self.diff,
|
|
||||||
# };
|
|
||||||
#
|
|
||||||
# # Run main script !
|
|
||||||
# main()
|
|
||||||
paasify.main()
|
|
||||||
@ -1,137 +0,0 @@
|
|||||||
|
|
||||||
# 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()
|
|
||||||
@ -1,115 +0,0 @@
|
|||||||
# Tag to add a shared network
|
|
||||||
#
|
|
||||||
# Examples:
|
|
||||||
|
|
||||||
# Default imports
|
|
||||||
local action = std.parseJson(std.extVar('action'));
|
|
||||||
local user_data = std.parseJson(std.extVar('user_data'));
|
|
||||||
local docker_data = std.parseJson(std.extVar('docker_data'));
|
|
||||||
|
|
||||||
# Internal vars
|
|
||||||
local docker_services = std.get(docker_data, 'services', default={});
|
|
||||||
local docker_services_names = std.objectFields(docker_services);
|
|
||||||
|
|
||||||
# User options with defaults
|
|
||||||
local default_svcs = std.get(user_data, 'PAASIFY_STACK_SVCS');
|
|
||||||
|
|
||||||
# Build default config
|
|
||||||
local default_vars(user_data) =
|
|
||||||
local ns = std.get(user_data, 'paasify_ns', 'NS');
|
|
||||||
local stack = std.get(user_data, 'paasify_stack', 'APP');
|
|
||||||
local sep = std.get(user_data, 'paasify_sep', '_');
|
|
||||||
local default_name = ns + sep + stack ;
|
|
||||||
{
|
|
||||||
app_network_ident: std.get(user_data, 'app_network', 'default'),
|
|
||||||
app_network_name: std.get(user_data, 'app_network_name', default_name),
|
|
||||||
app_network_external: std.get(user_data, 'app_network_external',true),
|
|
||||||
};
|
|
||||||
|
|
||||||
#local conf = config_default + user_data;
|
|
||||||
|
|
||||||
local conf_override(conf) =
|
|
||||||
#local conf = default_vars(user_data) + user_data;
|
|
||||||
conf + default_vars(conf) ;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Process
|
|
||||||
local docker_transform(conf, docker_data) =
|
|
||||||
local service = std.get(conf, 'paasify_stack_service');
|
|
||||||
local services = std.split(std.get(conf, 'paasify_stack_services', service), ',');
|
|
||||||
#docker_data + {
|
|
||||||
# 'zz': conf,
|
|
||||||
#};
|
|
||||||
{
|
|
||||||
networks+: {
|
|
||||||
[conf.app_network_ident]: {
|
|
||||||
name: conf.app_network_name,
|
|
||||||
external: conf.app_network_external,
|
|
||||||
}
|
|
||||||
},
|
|
||||||
services+: {
|
|
||||||
[svc_name]+: { networks+: { [conf.app_network_ident]: null } } for svc_name in services
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
# Return result
|
|
||||||
# -------------------------------------
|
|
||||||
|
|
||||||
if action == 'conf_schema' then
|
|
||||||
# Return the schema
|
|
||||||
{} # conf_schema
|
|
||||||
|
|
||||||
else if action == 'vars_docker' then
|
|
||||||
local default_data = default_vars(user_data);
|
|
||||||
local common = { [x]: std.get(user_data, x, default_data[x] ) for x in std.objectFields(default_data) };
|
|
||||||
{
|
|
||||||
input: user_data,
|
|
||||||
|
|
||||||
# Mendatory fields
|
|
||||||
diff: conf_override( common ),
|
|
||||||
merged: conf_override( default_data + user_data ),
|
|
||||||
}
|
|
||||||
|
|
||||||
else if action == 'docker_transform' then
|
|
||||||
{
|
|
||||||
# input: user_data,
|
|
||||||
diff: docker_transform(conf_override(user_data), docker_data),
|
|
||||||
merged: docker_data + self.diff,
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###############3
|
|
||||||
##
|
|
||||||
##
|
|
||||||
##
|
|
||||||
### Internal vars
|
|
||||||
##local docker_services = std.get(docker_data, 'services', default={});
|
|
||||||
##local docker_services_names = std.objectFields(docker_services);
|
|
||||||
#
|
|
||||||
## System options
|
|
||||||
#local service_ns = std.get(user_data, 'namespace', default=std.get(stack_data, 'namespace', default=''));
|
|
||||||
#local service_stack = std.get(user_data, 'name', default=std.get(stack_data, 'current_stack', default=''));
|
|
||||||
#
|
|
||||||
#local default_name = if std.isString(service_ns) then service_ns + "_" + service_stack else service_stack;
|
|
||||||
#
|
|
||||||
## User options with defaults
|
|
||||||
#local network_name = std.get(user_data, 'network_name', default='default');
|
|
||||||
#local service_name = std.get(user_data, 'service', default='app');
|
|
||||||
#local services_names = std.get(user_data, 'services', default=[service_name]);
|
|
||||||
|
|
||||||
# if action == 'vars_docker' then
|
|
||||||
# vars_docker(user_data)
|
|
||||||
# #conf_override(user_data)
|
|
||||||
# else if action == 'docker_transform' then
|
|
||||||
# {
|
|
||||||
# diff: docker_transform(
|
|
||||||
# conf_override(user_data),
|
|
||||||
# docker_data),
|
|
||||||
# merged: docker_data + self.diff,
|
|
||||||
# }
|
|
||||||
|
|
||||||
@ -1,49 +0,0 @@
|
|||||||
# Tag to set UID and GID to container
|
|
||||||
#
|
|
||||||
# Examples:
|
|
||||||
# tags:
|
|
||||||
# - docker-svc-tz:
|
|
||||||
# policy: always
|
|
||||||
# services:
|
|
||||||
# - srv1
|
|
||||||
# - mysqldb
|
|
||||||
|
|
||||||
# Default imports
|
|
||||||
local user_data = std.parseJson(std.extVar('user_data'));
|
|
||||||
local docker_data = std.parseJson(std.extVar('docker_data'));
|
|
||||||
|
|
||||||
# Init defaults
|
|
||||||
local default_svcs = std.get(user_data, 'PAASIFY_STACK_SVCS');
|
|
||||||
|
|
||||||
# Build default config
|
|
||||||
local config_default = {
|
|
||||||
APP_SERVICES: default_svcs,
|
|
||||||
APP_PUID: 1000,
|
|
||||||
APP_PGID: 1000,
|
|
||||||
APP_PUID_VAR: 'APP_PUID',
|
|
||||||
APP_PGID_VAR: 'APP_PGID',
|
|
||||||
};
|
|
||||||
|
|
||||||
local conf = config_default + user_data;
|
|
||||||
local services_names = std.split(conf.APP_SERVICES, ',') ;
|
|
||||||
|
|
||||||
# Internal functions
|
|
||||||
local ServiceUGI(var, val) =
|
|
||||||
if std.isString(val) || std.isNumber(val) then
|
|
||||||
{
|
|
||||||
[var]: std.toString(val),
|
|
||||||
} else {};
|
|
||||||
|
|
||||||
|
|
||||||
# Process
|
|
||||||
docker_data +
|
|
||||||
{
|
|
||||||
services+: {
|
|
||||||
[svc_name]+: {
|
|
||||||
environment+:
|
|
||||||
ServiceUGI(conf.APP_PUID_VAR, conf.APP_PUID) +
|
|
||||||
ServiceUGI(conf.APP_PGID_VAR, conf.APP_PGID),
|
|
||||||
} for svc_name in services_names
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
# Dump meta-data in docker files
|
|
||||||
#
|
|
||||||
# Examples:
|
|
||||||
# tags:
|
|
||||||
# - paasify-dump
|
|
||||||
|
|
||||||
# Default imports
|
|
||||||
local docker_data = std.parseJson(std.extVar('docker_data'));
|
|
||||||
local user_data = std.parseJson(std.extVar('user_data'));
|
|
||||||
|
|
||||||
# Process
|
|
||||||
docker_data +
|
|
||||||
{
|
|
||||||
["x-paasify"]+: {
|
|
||||||
"user_data": user_data,
|
|
||||||
# "docker_data": docker_data,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,102 +0,0 @@
|
|||||||
# Tag to add mysql sidecar
|
|
||||||
#
|
|
||||||
# Examples:
|
|
||||||
# tags:
|
|
||||||
# - docker-services-restart:
|
|
||||||
# policy: always
|
|
||||||
# services:
|
|
||||||
# - srv1
|
|
||||||
# - mysqldb
|
|
||||||
|
|
||||||
# Default imports
|
|
||||||
local stack_data = std.parseJson(std.extVar('stack_data'));
|
|
||||||
local docker_data = std.parseJson(std.extVar('docker_data'));
|
|
||||||
local user_data = std.parseJson(std.extVar('user_data'));
|
|
||||||
|
|
||||||
## Internal vars
|
|
||||||
local docker_service = std.get(docker_data, 'service', default={});
|
|
||||||
local docker_services = std.get(docker_data, 'services', default={docker_service: null });
|
|
||||||
local docker_services_names = std.objectFields(docker_services);
|
|
||||||
local services_names = std.get(user_data, 'services', default=docker_services_names);
|
|
||||||
|
|
||||||
#
|
|
||||||
#
|
|
||||||
## System options
|
|
||||||
#local service_ns = std.get(stack_data, 'namespace', default='');
|
|
||||||
#local service_stack = std.get(stack_data, 'current_stack', default='');
|
|
||||||
|
|
||||||
# User options with defaults
|
|
||||||
#local service_default_net = service_ns + "_traefik";
|
|
||||||
#local service_network = std.get(user_data, 'network', default=service_default_net );
|
|
||||||
|
|
||||||
|
|
||||||
#local service_top_domain = std.get(user_data, 'top_domain', default='dev.box');
|
|
||||||
local service_name = std.get(user_data, 'name', default='mysql');
|
|
||||||
local service_image = std.get(user_data, 'image', default='mariadb:10');
|
|
||||||
|
|
||||||
# MySQL settings
|
|
||||||
local service_root_password = std.get(user_data, 'root_password', default='');
|
|
||||||
local service_root_password_random = std.get(user_data, 'root_password_random', default=false);
|
|
||||||
local service_user_password = std.get(user_data, 'user_password', default='');
|
|
||||||
local service_user_name = std.get(user_data, 'user_name', default=std.get(stack_data, 'current_stack', default='db'));
|
|
||||||
local service_user_db = std.get(user_data, 'user_db', default=service_user_name);
|
|
||||||
|
|
||||||
|
|
||||||
#local service_port = std.get(user_data, 'port', default='80');
|
|
||||||
#local service_entrypoints = std.get(user_data, 'entrypoints', default='front-http');
|
|
||||||
#
|
|
||||||
#local service_app = std.get(user_data, 'name', default=service_name);
|
|
||||||
#local service_domain = std.get(user_data, 'domain', default=service_app + '.' + service_top_domain);
|
|
||||||
#
|
|
||||||
#local service_tls = std.get(user_data, 'tls', default=false);
|
|
||||||
#local service_certresolver = std.get(user_data, 'certresolver', default=null);
|
|
||||||
#local service_auth = std.get(user_data, 'auth', default=null);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# This would eventually also contain stack name to avoid collisions
|
|
||||||
#local service_id = service_ns + "_" + service_name;
|
|
||||||
#local service_id = service_ns + "_" + service_stack + "_" + service_name;
|
|
||||||
|
|
||||||
|
|
||||||
# Process
|
|
||||||
docker_data
|
|
||||||
+ {
|
|
||||||
# Append mysql network to the list of networks
|
|
||||||
networks+: {
|
|
||||||
mysql: null
|
|
||||||
},
|
|
||||||
|
|
||||||
# Append mysql netwok to all requested services
|
|
||||||
services+: {
|
|
||||||
[svc_name]+: { networks+: { mysql: null } } for svc_name in services_names
|
|
||||||
},
|
|
||||||
}
|
|
||||||
+ {
|
|
||||||
# Append mysql sidecar
|
|
||||||
services+: {
|
|
||||||
[service_name]+: {
|
|
||||||
environment: {
|
|
||||||
MYSQL_RANDOM_ROOT_PASSWORD: service_root_password_random,
|
|
||||||
MYSQL_ROOT_PASSWORD: service_root_password,
|
|
||||||
MYSQL_PASSWORD: service_user_password,
|
|
||||||
MYSQL_USER: service_user_name,
|
|
||||||
MYSQL_DATABASE: service_user_db,
|
|
||||||
},
|
|
||||||
image: service_image,
|
|
||||||
networks: {
|
|
||||||
mysql: null,
|
|
||||||
},
|
|
||||||
volumes: [],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
// zzz: {
|
|
||||||
// a1: stack_data,
|
|
||||||
// a2: user_data,
|
|
||||||
// },
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@ -1,238 +0,0 @@
|
|||||||
# Tag to add a restart policy on all containers
|
|
||||||
#
|
|
||||||
# Examples:
|
|
||||||
# tags:
|
|
||||||
# - docker-services-restart:
|
|
||||||
# policy: always
|
|
||||||
# services:
|
|
||||||
# - srv1
|
|
||||||
# - mysqldb
|
|
||||||
|
|
||||||
# Default imports
|
|
||||||
# -------------------------------------
|
|
||||||
|
|
||||||
# Import from external data
|
|
||||||
local action = std.parseJson(std.extVar('action'));
|
|
||||||
local docker_data = std.parseJson(std.extVar('docker_data'));
|
|
||||||
local user_data = std.parseJson(std.extVar('user_data'));
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Default config
|
|
||||||
# -------------------------------------
|
|
||||||
|
|
||||||
# Build default config
|
|
||||||
local global_vars_default(user_data) =
|
|
||||||
assert std.isString(user_data.paasify_ns);
|
|
||||||
|
|
||||||
# Init defaults
|
|
||||||
local ns = std.get(user_data, 'paasify_ns', '<NS>');
|
|
||||||
local stack = std.get(user_data, 'paasify_stack', '<STACK>');
|
|
||||||
local sep = std.get(user_data, 'paasify_sep', '_');
|
|
||||||
|
|
||||||
# Runtime vars
|
|
||||||
local default_name = std.get(user_data, 'app_name', stack);
|
|
||||||
local default_top_domain = std.get(user_data, 'app_domain', ns);
|
|
||||||
|
|
||||||
# We replace app name by 'app', just for nice looking
|
|
||||||
local traefik_ident = if stack != default_name then default_name else 'app';
|
|
||||||
#local traefik_ident = stack;
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
# Required by API:
|
|
||||||
traefik_network_name: ns + sep + 'traefik',
|
|
||||||
traefik_net_ident: 'default',
|
|
||||||
traefik_net_external: true,
|
|
||||||
traefik_svc_ident: stack ,
|
|
||||||
traefik_svc_port: user_data.app_port ,
|
|
||||||
traefik_svc_group: ns + sep + 'traefik',
|
|
||||||
|
|
||||||
traefik_svc_name: null,
|
|
||||||
traefik_svc_domain: null,
|
|
||||||
traefik_svc_entrypoints: null,
|
|
||||||
traefik_svc_auth: null,
|
|
||||||
traefik_svc_tls: null,
|
|
||||||
traefik_svc_certresolver: null,
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
local global_vars_override(conf) =
|
|
||||||
# Any plugin user configuration can be used here
|
|
||||||
# No usage of paasify.X is permitted here at anytime !
|
|
||||||
# Forbidden to change existing vars, only new vars with _PREFIX
|
|
||||||
# All variables must start with _
|
|
||||||
|
|
||||||
local default_ident = conf.paasify_ns + conf.paasify_sep + conf.paasify_stack;
|
|
||||||
|
|
||||||
local default_svc_name = [
|
|
||||||
std.get(conf, 'traefik_svc_name'),
|
|
||||||
default_ident
|
|
||||||
];
|
|
||||||
local default_svc_domain = [
|
|
||||||
std.get(conf, 'traefik_svc_domain'),
|
|
||||||
std.get(conf, 'app_fqdn'),
|
|
||||||
std.get(conf, 'app_name', conf.paasify_stack) + '.' + std.get(conf, 'app_domain', conf.paasify_ns),
|
|
||||||
];
|
|
||||||
|
|
||||||
local default_svc_entrypoints = [
|
|
||||||
std.get(conf, 'traefik_svc_entrypoints'),
|
|
||||||
"front-http",
|
|
||||||
];
|
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
_traefik_svc_name: std.prune(default_svc_name)[0],
|
|
||||||
_traefik_svc_domain: std.prune(default_svc_domain)[0],
|
|
||||||
|
|
||||||
_traefik_svc_entrypoints: std.prune(default_svc_entrypoints)[0],
|
|
||||||
_traefik_svc_auth: std.get(conf, 'traefik_svc_auth', default=null),
|
|
||||||
_traefik_svc_tls: std.get(conf, 'traefik_svc_tls', default=false),
|
|
||||||
_traefik_svc_certresolver: std.get(conf, 'traefik_svc_certresolver', default=null),
|
|
||||||
#zz_conf: conf ,
|
|
||||||
}
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
# Internal functions
|
|
||||||
# -------------------------------------
|
|
||||||
|
|
||||||
# Base routing
|
|
||||||
local LabelsTraefik(svc, domain, entrypoints, port, group) =
|
|
||||||
{
|
|
||||||
["traefik.enable"]: "true",
|
|
||||||
["traefik.group"]: group,
|
|
||||||
["traefik.http.routers." + svc + ".rule"]: 'Host(`' + domain + '`)',
|
|
||||||
["traefik.http.routers." + svc + ".entrypoints"]: entrypoints,
|
|
||||||
["traefik.http.routers." + svc + ".service"]: svc,
|
|
||||||
["traefik.http.services." + svc + ".loadbalancer.server.port"]: std.format("%s", port),
|
|
||||||
};
|
|
||||||
|
|
||||||
# Middleware
|
|
||||||
local LabelsTraefikAuthelia(svc, authservice) =
|
|
||||||
if std.isString(authservice) && std.length(authservice) > 0 then
|
|
||||||
{
|
|
||||||
["traefik.http.routers." + svc + ".middlewares"]: authservice + '@docker',
|
|
||||||
} else {};
|
|
||||||
|
|
||||||
# TLS management
|
|
||||||
local LabelsTraefikTls(svc, status) =
|
|
||||||
if status == true then
|
|
||||||
{
|
|
||||||
["traefik.http.routers." + svc + ".tls"]: "true",
|
|
||||||
} else {};
|
|
||||||
|
|
||||||
local LabelsTraefikCertResolver(svc, name) =
|
|
||||||
if std.isString(name) && std.length(name) > 0 then
|
|
||||||
LabelsTraefikTls(svc, true) + {
|
|
||||||
["traefik.http.routers." + svc + ".tls.certresolver"]: name,
|
|
||||||
} else {};
|
|
||||||
|
|
||||||
# Networking
|
|
||||||
local TraefikSvcNetwork(id, name) =
|
|
||||||
if std.isString(id) then
|
|
||||||
{
|
|
||||||
[id]: null,
|
|
||||||
} else {};
|
|
||||||
|
|
||||||
local TraefikPrjNetwork(id, name, external) =
|
|
||||||
if std.isString(id) then
|
|
||||||
{
|
|
||||||
[id]+: {
|
|
||||||
name: name
|
|
||||||
},
|
|
||||||
} +
|
|
||||||
if external == true then
|
|
||||||
{
|
|
||||||
[id]+: {
|
|
||||||
external: true,
|
|
||||||
},
|
|
||||||
} else {}
|
|
||||||
else {};
|
|
||||||
|
|
||||||
|
|
||||||
# Provides docker data override
|
|
||||||
# -------------------------------------
|
|
||||||
local docker_transform(conf_raw, docker_data) =
|
|
||||||
assert std.isString(conf_raw.paasify_stack_service);
|
|
||||||
local conf = conf_raw + global_vars_override(conf_raw);
|
|
||||||
|
|
||||||
local service = std.get(conf, 'traefik_svc_ident', conf.paasify_stack_service );
|
|
||||||
local services = std.split(std.get(conf, 'paasify_stack_services', service), ',');
|
|
||||||
|
|
||||||
{
|
|
||||||
# Append stack network
|
|
||||||
networks+: TraefikPrjNetwork(
|
|
||||||
conf.traefik_net_ident,
|
|
||||||
conf.traefik_network_name,
|
|
||||||
conf.traefik_net_external),
|
|
||||||
|
|
||||||
# Apply per services labels
|
|
||||||
services+: {
|
|
||||||
[conf.traefik_svc_ident]+: {
|
|
||||||
labels+:
|
|
||||||
LabelsTraefik(
|
|
||||||
conf.traefik_svc_name,
|
|
||||||
conf._traefik_svc_domain,
|
|
||||||
conf.traefik_svc_entrypoints,
|
|
||||||
conf.traefik_svc_port,
|
|
||||||
conf.traefik_svc_group)
|
|
||||||
+ LabelsTraefikAuthelia(
|
|
||||||
conf.traefik_svc_name,
|
|
||||||
conf.traefik_svc_auth)
|
|
||||||
+ LabelsTraefikTls(
|
|
||||||
conf.traefik_svc_name,
|
|
||||||
conf.traefik_svc_tls)
|
|
||||||
+ LabelsTraefikCertResolver(
|
|
||||||
conf.traefik_svc_name,
|
|
||||||
conf.traefik_svc_certresolver)
|
|
||||||
,
|
|
||||||
networks+: TraefikSvcNetwork(
|
|
||||||
conf.traefik_net_ident,
|
|
||||||
conf.traefik_network_name),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Return result
|
|
||||||
# -------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
local main() =
|
|
||||||
|
|
||||||
local getConf(name) = std.parseJson(std.extVar(name));
|
|
||||||
local action = getConf('action');
|
|
||||||
|
|
||||||
if action == 'metadata' then
|
|
||||||
{}
|
|
||||||
|
|
||||||
# TOFIX IN CODE: else if action == 'docker_vars' then
|
|
||||||
else if action == 'vars_docker' then
|
|
||||||
local user_data = getConf('user_data');
|
|
||||||
local default_data = 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,
|
|
||||||
|
|
||||||
diff: default_data + common + global_vars_override(default_data + user_data ),
|
|
||||||
merged: user_data + 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(user_data + global_vars_override(user_data), docker_data),
|
|
||||||
diff: docker_transform(user_data, docker_data),
|
|
||||||
merged: docker_data + self.diff,
|
|
||||||
};
|
|
||||||
|
|
||||||
# Run main script !
|
|
||||||
main()
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user