1 | var colors = require('./colors');
|
2 | var ppath = require('path');
|
3 | var mu = require('mu2');
|
4 | var fs = require('fs');
|
5 |
|
6 | var display = require('./console').Console
|
7 |
|
8 |
|
9 |
|
10 | mu.root = __dirname
|
11 |
|
12 | function 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 |
|
23 | function 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 |
|
30 | function 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 |
|
39 | function 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 |
|
45 | function 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 |
|
51 | function 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 |
|
58 | function 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 |
|
67 | function 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 |
|
73 | function 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 |
|
79 | function 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 |
|
85 | function 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 |
|
91 | function supervisord(conf,outdir){
|
92 | var path = outdir + "/" + conf.application + ".conf";
|
93 | var out = "";
|
94 | var programs = [];
|
95 |
|
96 |
|
97 |
|
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 |
|
112 | function supervisord_app_n(conf,outdir){
|
113 | var path = outdir + "/" + conf.application + "-" + conf.process + "-" + conf.number + ".conf";
|
114 | var out = "";
|
115 | var envs = [];
|
116 |
|
117 |
|
118 | for(var i in conf.envs) {
|
119 | var key = conf.envs[i].key;
|
120 | var value = conf.envs[i].value;
|
121 |
|
122 |
|
123 |
|
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 |
|
136 | function 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 |
|
142 | export_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 |
|
170 | module.exports = export_formats
|