### 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()