-
Notifications
You must be signed in to change notification settings - Fork 3
/
script.sh
executable file
·165 lines (149 loc) · 4.99 KB
/
script.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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#!/bin/bash
set -e
#Color to the people
RED='\x1B[0;31m'
CYAN='\x1B[0;36m'
GREEN='\x1B[0;32m'
NC='\x1B[0m'
function rebuild {
docker build ./elrond-node/ -t elrond:botn --no-cache
echo -e "${GREEN} Done rebuilding containers${NC}"
}
function setGitHubToken {
echo -e ""
echo -e "Elrond checks the current release through the GitHub Api multiply time every hour"
echo -e "This can be blocked pretty fast if you don't set a GitHub token"
echo -e "See: https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line"
read -p "Set your gitHub token: " GITHUB_TOKEN
echo "GITHUB_TOKEN=$GITHUB_TOKEN" > .env
echo -e "${GREEN} Token set!${NC}"
}
function stop_nodes {
echo -e "Stop the nodes"
echo -e "- Clearing existing docker templates"
rm *.node.yml -f
echo -e "${GREEN}- Clearing docker templates done!${NC}"
node_number=0
for dir in ./volumes/*/ ; do
node_name="$(basename $dir)"
echo -e "- Generating docker file for $node_name"
port=$((8081+$node_number))
sed 's/<node-name>/'"$node_name"'/g' node.yml.tmpl > $node_name.node.yml
sed -i 's/<api_port>/'"127.0.0.1:$port"'/g' $node_name.node.yml
node_number=$node_number+1
echo -e "${GREEN}- Generating docker file for $node_name done!${NC}"
done
compose_args=" "
for dir in ./*.node.yml ; do
compose_args="$compose_args -f $(basename $dir)"
done
echo -e ""
echo -e "Start docker-compose with this command:"
echo -e "docker-compose $compose_args stop"
echo -e ""
docker-compose $compose_args stop
echo -e ""
echo -e "${GREEN}Nodes stopped${NC}"
echo -e ""
}
function create_node {
echo -e
echo -e "${GREEN} Time to choose a node name for node number $(($INDEX+1)) ${NC}"
echo -e
read -p "Choose a custom name (default elrond-validator-$INDEX): " NODE_NAME
if [ "$NODE_NAME" = "" ]
then
NODE_NAME="elrond-validator-$INDEX"
fi
mkdir -p ./volumes/$NODE_NAME/VALIDATOR_KEYS/
echo -e "${GREEN} Generated directory for node $NODE_NAME${NC}"
echo -e ""
echo -e "If you want to import keys for this node than place a zip file named node-0.zip with keys in this director:"
echo -e "./volumes/$NODE_NAME/VALIDATOR_KEYS/"
echo -e ""
}
case "$1" in
'github')
setGitHubToken
;;
'rebuild')
rebuild
;;
'setup')
echo -e "${GREEN} Start of initialising $NUMBEROFNODES node(s)${NC}"
echo -e ""
read -p "How many nodes do you want to run ? : " NUMBEROFNODES
re='^[0-9]+$'
if ! [[ $NUMBEROFNODES =~ $re ]] && [ "$NUMBEROFNODES" -gt 0 ]
then
NUMBEROFNODES = 1
fi
for i in $(seq 1 $NUMBEROFNODES);
do
INDEX=$(( $i - 1 ))
create_node
done
echo -e ""
setGitHubToken
echo -e ""
echo -e "The first time to container need to be build, this can take a few minutes."
read -p "Press any key to start to building! " YEAHYEAH
echo -e ""
rebuild
echo -e ""
echo -e "${GREEN} Initialising done${NC}"
echo -e "${CYAN} Remember that if you want to import your existing keys, you should copy them to the /volumes/<node-name>/VALIDATOR_KEYS/ directory before the start of the nodes.${NC}"
sudo chown -R 1000:1000 volumes/
;;
'stop')
stop_nodes
;;
'start')
echo -e "Start the nodes"
echo -e "- Clearing docker templates"
rm *.node.yml -f
echo -e "${GREEN}- Clearing docker templates done!${NC}"
node_number=0
for dir in ./volumes/*/ ; do
node_name="$(basename $dir)"
echo -e "- Generating docker file for $node_name"
port=$((8081+$node_number))
sed 's/<node-name>/'"$node_name"'/g' node.yml.tmpl > $node_name.node.yml
sed -i 's/<api_port>/'"127.0.0.1:$port"'/g' $node_name.node.yml
node_number=$node_number+1
echo -e "${GREEN}- Generating docker file for $node_name done!${NC}"
done
compose_args=" "
for dir in ./*.node.yml ; do
compose_args="$compose_args -f $(basename $dir)"
done
sudo chown -R 1000:1000 volumes
echo -e ""
echo -e "Start docker-compose with this command:"
echo -e "docker-compose $compose_args up -d --remove-orphans"
echo -e ""
docker-compose $compose_args up -d --remove-orphans
echo -e ""
echo -e "${GREEN}Nodes started in the background${NC}"
echo -e ""
;;
'clear')
echo -e ""
echo -e "Start of clearing the nodes data and configs, only leaving the keys in place."
stop_nodes
for dir in ./volumes/*/ ; do
node_name="$(basename $dir)"
echo -e "- Clearing data and config fir $node_name"
rm volumes/$node_name/db/ volumes/$node_name/node volumes/$node_name/config/ volumes/$node_name/stats/ -rf
done
echo -e "${GREEN} Done clearing containers ${NC}"
;;
'remove-node')
echo -e ""
echo -e "To remove node, just delete the subdirectory in the ./volumes directory and run ./script start"
echo -e ""
;;
*)
echo "Usage: Missing parameter ! [setup|start|stop|github|rebuild|clear|remove-node]|"
;;
esac