-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcluster-cli.sh
More file actions
executable file
·123 lines (108 loc) · 2.59 KB
/
cluster-cli.sh
File metadata and controls
executable file
·123 lines (108 loc) · 2.59 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
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
#!/bin/bash
function run_ansible_play {
set -ex
limits=$1
shift
ansible-playbook -i ./hosts $* -l "$limits"
}
function run_ansible {
set -ex
limits=$1
shift
ansible -i ./hosts $* "$limits"
}
function show_help {
echo 'Usage: cluster-cli.py [new,init,provision,provision-all,firewall,swarm,ssh,docker] {params}'
exit 0
}
function call_new_node {
call_init_node $*
call_provision_new_node $*
}
function call_init_node {
set -ex
ip=$1
hostname=$2
[ -n "$(grep -F $ip ./hosts)" ] && echo 'This node already inited' && exit 0
mkdir -p nodes
HOSTS=./hosts KEYS=./nodes /bin/bash ./lib/init-node.sh $ip $hostname
}
function call_provision_new_node {
hostname=$1
shift
run_ansible_play $hostname './playbook-bootstrap.yml' '--tags' 'bootstrap,docker' '-v' $*
}
function call_provision_all_new_nodes {
hostname=docker_engine
run_ansible_play $hostname './playbook-bootstrap.yml' '--tags' 'bootstrap,docker' '-v' $*
}
function call_firewall_nodes {
run_ansible_play 'docker_engine,removed_nodes_from_cluster' './playbook-firewall.yml' '--tags' 'firewall' '-v'
}
function call_swarm_nodes {
run_ansible_play 'node_roles,removed_nodes_from_cluster' './playbook-swarm.yml' '--tags' 'swarm' '-v'
}
function call_k8s_nodes {
run_ansible_play 'kube_cluster,removed_nodes_from_cluster' './playbook-k8s.yml' '--tags' 'k8s' '-v'
}
function call_glusterfs_nodes {
run_ansible_play 'docker_engine,removed_nodes_from_cluster' './playbook-glusterfs.yml' '--tags' 'glusterfs' '-v'
}
function call_ssh_node {
node=$1
shift
config=$(cat hosts | grep -E "^$node [[:space:]]*ansible_ssh_host")
if [ -z "$config" ]; then
echo Node not found
exit 1
fi
ssh $(echo $config | awk 'BEGIN { FS = "[ \t\n=]+" }{print $7"@"$3 " -p " $5 " -C -i " $9}') $*
}
function call_ssh_docker_tunnel {
sock=$(pwd)/$1.docker.sock
rm -f $sock
echo Run in another shell:
echo " export DOCKER_HOST=unix://$sock"
echo All docker requests are forwarded to the remote docker host
echo Run tunnel
call_ssh_node $* -N -L $sock:/var/run/docker.sock
rm -f $sock
}
cmd=$1
shift
case $cmd in
new)
call_new_node $*
;;
init)
call_init_node $*
;;
provision)
call_provision_new_node $*
;;
provision-all)
call_provision_all_new_nodes $*
;;
firewall)
call_firewall_nodes $*
;;
swarm)
call_swarm_nodes $*
;;
k8s)
call_k8s_nodes $*
;;
glusterfs)
call_glusterfs_nodes $*
;;
ssh)
call_ssh_node $*
;;
docker)
call_ssh_docker_tunnel $*
;;
*)
[ -n "$1" ] && echo "Unknown command: $1"
show_help
;;
esac