blob: a5b51fc107b458de0f9cd4e229f1fafd2bf03dd6 (
plain) (
blame)
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
|
'use strict'
import consul from 'consul'
import { exec } from './src/io/run.mjs'
import { readFile } from './src/io/files.mjs'
import ctlg_consul from './src/catalog/consul.mjs'
import inj_iptables from './src/injector/iptables.mjs'
const get_args = () => process
.argv
.slice(2)
.map(a => a.split('='))
.reduce((dict, tuple) => {
dict[tuple[0]] = tuple.length > 1 ? tuple[1] : null
return dict
}, {})
/**
* If we have multiple catalogs
* we cache the results of the other ones
*/
function* notifications_aggregator(injectors) {
const states = []
for(let idx = 0; true; idx++) {
yield async (tag_list) => {
states[idx] = tag_list
await Promise.all(
injectors.map(notify =>
notify(states.reduce((acc, tag) => [...acc, ...tag], []))))
}
}
}
const main = async () => {
try {
const args = get_args()
// Initialize all injectors
const injectors = [
await inj_iptables(args.ipt_base, readFile, exec, console.log)
]
// Initialize all catalogs and map them to the injectors
const aggr = notifications_aggregator(injectors)
const catalogs = [
await ctlg_consul(args.node, consul(), console.log, aggr.next().value)
]
console.log("[main] initialized")
} catch(e) {
console.error("initialization failed", e)
process.exit(1)
}
}
main()
|