UNPKG

5.23 kBJavaScriptView Raw
1var colors = require('./colors');
2var ppath = require('path');
3var mu = require('mu2');
4var fs = require('fs');
5
6var display = require('./console').Console
7
8// Procfile to System Service Export //
9
10mu.root = __dirname
11
12function render(filename,conf,callback){
13 var out = "";
14 var muu = mu.compileAndRender(filename, conf)
15 muu.on('data', function (data) {
16 out += data;
17 })
18 muu.on('end',function(){
19 callback(out);
20 });
21}
22
23function templatePath(conf, type, file) {
24 if (conf.template)
25 return ppath.resolve(conf.template, file);
26 else
27 return ppath.resolve(__dirname, type, file);
28}
29
30function writeout(path){
31 return function(data){
32 if (fs.existsSync(path))
33 display.Warn(colors.bright_yellow('Replacing: %s'), path);
34 fs.writeFileSync(path,data);
35 display.Alert('Wrote :',ppath.normalize(path));
36 }
37}
38
39function upstart(conf,outdir){
40 var path = outdir + "/" + conf.application + ".conf";
41 var out = "";
42 render(templatePath(conf, 'upstart', 'foreman.conf'), conf, writeout(path) )
43}
44
45function upstart_app(conf,outdir){
46 var out = "";
47 var path = outdir + "/" + conf.application + "-" + conf.process + ".conf";
48 render(templatePath(conf, 'upstart', 'foreman-APP.conf'), conf, writeout(path) )
49}
50
51function upstart_app_n(conf,outdir){
52 var out = "";
53 var path = outdir + "/" + conf.application + "-" + conf.process + "-" + conf.number + ".conf";
54 render(templatePath(conf, 'upstart','foreman-APP-N.conf'), conf, writeout(path) )
55}
56
57
58function upstart_single(conf,outdir){
59 var path = outdir + "/" + conf.application + ".conf";
60 var out = "";
61 render(templatePath(conf, 'upstart-single', 'foreman.conf'), conf, writeout(path) )
62 display.Warn('upstart-single jobs attempt to raise limits and will fail ' +
63 'to start if the limits cannot be raised to the desired ' +
64 'levels. Some manual editing may be required.')
65}
66
67function upstart_single_app(conf,outdir){
68 var out = "";
69 var path = outdir + "/" + conf.application + "-" + conf.process + ".conf";
70 render(templatePath(conf, 'upstart-single', 'foreman-APP.conf'), conf, writeout(path) )
71}
72
73function systemd(conf,outdir){
74 var path = outdir + "/" + conf.application + ".target";
75 var out = "";
76 render(templatePath(conf, 'systemd', 'foreman.target'), conf, writeout(path) )
77}
78
79function systemd_app(conf,outdir){
80 var out = "";
81 var path = outdir + "/" + conf.application + "-" + conf.process + ".target";
82 render(templatePath(conf, 'systemd', 'foreman-APP.target'), conf, writeout(path) )
83}
84
85function systemd_app_n(conf,outdir){
86 var out = "";
87 var path = outdir + "/" + conf.application + "-" + conf.process + "-" + conf.number + ".service";
88 render(templatePath(conf, 'systemd', 'foreman-APP-N.service'), conf, writeout(path) )
89}
90
91function supervisord(conf,outdir){
92 var path = outdir + "/" + conf.application + ".conf";
93 var out = "";
94 var programs = [];
95
96 // Supervisord requires comma separated lists and they are
97 // quite ugly to handle in Moustache.
98 for(var i = 0; i < conf.processes.length; i++) {
99 var process = conf.processes[i].process;
100 var n = conf.processes[i].n;
101
102 for(var j = 1; j <= n; j++) {
103 programs.push(conf.application + "-" + process + "-" + j);
104 }
105 }
106
107 conf.programs = programs.join(',');
108
109 render(templatePath(conf, 'supervisord', 'foreman.conf'), conf, writeout(path) )
110}
111
112function supervisord_app_n(conf,outdir){
113 var path = outdir + "/" + conf.application + "-" + conf.process + "-" + conf.number + ".conf";
114 var out = "";
115 var envs = [];
116
117 // We have to do the same thing for env variables.
118 for(var i in conf.envs) {
119 var key = conf.envs[i].key;
120 var value = conf.envs[i].value;
121
122 // Some variables like 'web.1' breaks supervisor confg so we
123 // escape quotes and wrap values in quotes.
124 if(typeof value === 'string') {
125 value = value.replace(/"/, '\\"')
126 }
127
128 envs.push(key + "=" + '"' + value + '"');
129 }
130
131 conf.envs = envs.join(',');
132
133 render(templatePath(conf, 'supervisord', 'foreman-APP-N.conf'), conf, writeout(path) )
134}
135
136function smf_app(conf,outdir){
137 var out = "";
138 var path = outdir + "/" + conf.application + "-" + conf.process + ".xml";
139 render(templatePath(conf, 'smf', 'foreman-APP.xml'), conf, writeout(path) )
140}
141
142export_formats = {
143 "upstart": {
144 foreman : upstart,
145 foreman_app : upstart_app,
146 foreman_app_n : upstart_app_n,
147 },
148 "upstart-single": {
149 foreman : upstart_single,
150 foreman_app : upstart_single_app,
151 foreman_app_n : function noop() {},
152 },
153 "systemd": {
154 foreman : systemd,
155 foreman_app : systemd_app,
156 foreman_app_n : systemd_app_n,
157 },
158 "supervisord": {
159 foreman : supervisord,
160 foreman_app : function noop() {},
161 foreman_app_n : supervisord_app_n,
162 },
163 "smf": {
164 foreman : function noop() {},
165 foreman_app : smf_app,
166 foreman_app_n : function noop() {},
167 },
168}
169
170module.exports = export_formats