/
app.sh
111 lines (104 loc) · 3.89 KB
/
app.sh
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
usage_app() {
usage "app" "Multi-container application" <<EOF
compose Multi-container description file
EOF
}
app() {
local op=${1:-show}; test $# -gt 0 && shift
case "$op" in
# wb app compose $WORKBENCH_SHELL_PROFILE_DIR/{profile,node-specs}.json name tag
compose )
# jq 'keys|.[]' --raw-output $WORKBENCH_SHELL_PROFILE_DIR/node-specs.json
local usage="USAGE: wb app $op PROFILE-NAME/JSON NODE-SPECS/JSON IMAGE_NAME IMAGE_TAG"
local profile=${1:?$usage}
local nodespecs=${2:?$usage}
local imageName=${3:?$usage}
local imageTag=${4:?$usage}
# Hack
global_rundir_def=$PWD/run
yq --yaml-output "{
services:
(
.
| with_entries(
{
key: .key
, value: {
container_name: \"\(.value.name)\"
, pull_policy: \"never\"
, image: \"$imageName:$imageTag\"
, networks: {
\"cardano-node-network\": {
ipv4_address: \"172.22.\(.value.i / 254 | floor).\(.value.i % 254 + 1)\"
}
}
, ports: [\"\(.value.port):\(.value.port)\"]
, volumes: [
\"SHARED:/var/cardano-node\"
, \"LOCAL-\(.value.name):/var/cardano-node/local\"
]
, environment: [
\"HOST_ADDR=172.22.\(.value.i / 254 | floor).\(.value.i % 254 + 1)\"
, \"PORT=\(.value.port)\"
, \"DATA_DIR=/var/cardano-node/local\"
, \"NODE_CONFIG=/var/cardano-node/local/config.json\"
, \"NODE_TOPOLOGY=/var/cardano-node/local/topology.json\"
, \"SOCKET_PATH=/var/cardano-node/local/node.socket\"
, \"RTS_FLAGS=+RTS -N2 -I0 -A16m -qg -qb --disable-delayed-os-memory-return -RTS\"
, \"SHELLEY_KES_KEY=/var/cardano-node/local/../genesis/node-keys/node-kes\(.value.i).skey\"
, \"SHELLEY_VRF_KEY=/var/cardano-node/local/../genesis/node-keys/node-vrf\(.value.i).skey\"
, \"SHELLEY_OPCERT=/var/cardano-node/local/../genesis/node-keys/node\(.value.i).opcert\"
]
}
}
)
)
, \"networks\": {
\"cardano-node-network\": {
external: false
, attachable: true
, driver: \"bridge\"
, driver_opts: {}
, enable_ipv6: false
, ipam: {
driver: \"default\"
, config: [{
subnet: \"172.22.0.0/16\"
, ip_range: \"172.22.0.0/16\"
, gateway: \"172.22.255.254\"
, aux_addresses: {}
}]
}
}
}
, volumes:
(
.
| with_entries (
{
key: \"LOCAL-\(.value.name)\"
, value: {
external: false
, driver_opts: {
type: \"none\"
, o: \"bind\"
, device: \"./run/\${WB_RUNDIR_TAG:-current}/\(.value.name)\"
}
}
}
)
+
{SHARED:
{
external: false
, driver_opts: {
type: \"none\"
, o: \"bind\"
, device: \"./run/\${WB_RUNDIR_TAG:-current}\"
}
}
}
)
}" $nodespecs;;
* ) usage_app;; esac
}