267 lines
7.7 KiB
Jsonnet
267 lines
7.7 KiB
Jsonnet
### 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()
|