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