-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaction.js
More file actions
92 lines (79 loc) · 2.46 KB
/
action.js
File metadata and controls
92 lines (79 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
const Mustache = require('mustache');
const fs = require('fs').promises;
const core = require('@actions/core');
async function parseTemplate () {
const consulUrl = core.getInput('url', { required: true });
const consulport = core.getInput('port', { required: true });
const consulSecure = core.getInput('secure', { required: false });
const consulDatacenter = core.getInput('datacenter', { required: false });
const consulToken = core.getInput('token', { required: false });
const consulKey = core.getInput('key', { required: false });
const consulCA = core.getInput('ca', { require: false });
const valuesExtras = core.getInput('extras', { requried: false });
const templateFile = core.getInput('template', { required: true });
try {
await fs.stat(templateFile)
} catch (e) {
console.log(e)
throw e;
}
let templateOut;
const outFile = core.getInput('out', { required: false });
if (outFile.length === 0) {
templateOut = `${templateFile}.parsed`;
} else {
templateOut = outFile;
}
console.log('connecting to consul');
const consul = require('consul')({
host: consulUrl,
port: consulport,
secure: consulSecure,
ca: [consulCA],
defaults: {
dc: consulDatacenter | 'dc1',
token: consulToken
},
promisify: true
});
let values
try {
const parsed = valuesExtras ? JSON.parse(valuesExtras) : {};
values = parsed
} catch (e) {
console.log(`trouble parsing extra values (${e.messgae})`);
throw e;
}
try {
console.log(`getting key values from consul for ${consulKey}`);
const keys = await consul.kv.get({ key: consulKey, recurse: true });
for (const key of keys) {
if (key.Key.slice(-1) === '/') {
continue;
}
const keySplit = key.Key.split('/');
values[keySplit[keySplit.length - 1]] = key.Value;
}
} catch (e) {
console.log(`trouble getting values from consul (${e.message})`);
throw e;
}
let parsed;
try {
console.log(`Parsing file ${templateFile}`);
const data = await fs.readFile(templateFile, 'utf-8');
const p = Mustache.render(data, values);
parsed = p;
} catch (e) {
console.log(`trouble rendering template file (${e.message})`);
throw e;
}
try {
console.log(`Writing output file ${templateOut}`);
await fs.writeFile(templateOut, parsed);
} catch (e) {
console.log(`trouble writing template file output (${e.message})`);
throw e
}
};
module.exports = { parseTemplate };