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
|
#!/bin/bash
# Copyright 2017 AT&T Intellectual Property, Inc
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#. What this is: Complete scripted deployment of the VES monitoring framework.
#. Intended to be invoked from a server used to manage the nodes where the VES
#. framework is to be installed, referred to here as the "admin server". When
#. complete, the following will be installed:
#. - On the specified master node, a Kafka server and containers running the
#. VES "core components" (OPNFV Barometer VES agent, OPNFV VES collector,
#. and optionally InfluxDB and Grafana if pre-existing instances of those
#. components are not accessible at the default or provided hosts as
#. described below).
#. "master" as used here refers to the node where these common VES framework
#. elements are deployed. It may typically be a master/control plane node
#. for a set of nodes, but can also be any other node.
#. - On each specified worker node, collectd configured per OPNFV Barometer
#.
#. Prerequisites:
#. - Ubuntu Xenial host for the admin server
#. - Ubuntu Xenial or Centos 7 server for master and worker nodes
#. - Password-less ssh key provided for node setup
#. - hostname of selected master node in DNS or /etc/hosts
#. - env variables set prior to running this script, as per ves-setup.sh
#. ves_kafka_hostname: hostname of the node where the kafka server runs
#. - optional env varibles set prior to running this script, as per ves-setup.sh
#. ves_influxdb_host: ip:port of the influxdb service
#. ves_influxdb_auth: authentication for the influxdb service
#. ves_grafana_host: ip:port of the grafana service
#. ves_grafana_auth: authentication for the grafana service
#. ves_loglevel: loglevel for VES Agent and Collector (ERROR|DEBUG)
#.
#. For deployment in a kubernetes cluster as setup by OPNFV Models scripts:
#. - k8s cluster setup as in OPNFV Models repo tools/kubernetes/demo_deploy.sh
#. which also allows use of Cloudify to deploy VES core services as
#. k8s services.
#.
#. Usage: on the admin server
#. $ git clone https://gerrit.opnfv.org/gerrit/ves ~/ves
#. $ cd ~/ves/tools
#. $ bash demo_deploy.sh <key> <user> <master> <workers> [cloudify]
#. <key>: SSH key enabling password-less SSH to nodes
#. <user>: username on node with password-less SSH authorized
#. <master>: master node where core components will be installed
#. <workers>: list of worker nodes where collectd will be installed
#. cloudify: flag indicating to deploy VES core services via Cloudify
key=$1
user=$2
master=$3
workers="$4"
cloudify=$5
eval `ssh-agent`
ssh-add $key
ves_host=$master
ves_mode=node
ves_user=hello
ves_pass=world
ves_kafka_host=$master
ves_kafka_hostname=$ves_kafka_hostname
ves_influxdb_host=$ves_influxdb_host
ves_influxdb_auth=$ves_influxdb_auth
ves_grafana_host=$ves_grafana_host
ves_grafana_auth=$ves_grafana_auth
ves_loglevel=$ves_loglevel
env | grep ves
source ~/ves/tools/ves-setup.sh env
echo; echo "$0 $(date): Setting up master node"
ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
$user@$master mkdir /home/$user/ves
scp -r -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
~/ves/tools $user@$master:/home/$user/ves
ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
$user@$master <<EOF
bash ves/tools/ves-setup.sh collector
bash ves/tools/ves-setup.sh kafka
EOF
if [[ "$cloudify" == "cloudify" ]]; then
bash ves/tools/ves-setup.sh agent $cloudify
else
ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
$user@$master bash ves/tools/ves-setup.sh agent
fi
if [[ "$master" == "$workers" ]]; then
nodes=$master
else
nodes="$master $workers"
fi
for node in $nodes; do
echo; echo "$0 $(date): Setting up collectd at $node"
if [[ "$node" != "$master" ]]; then
ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
$user@$node mkdir /home/$user/ves
scp -r -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
~/ves/tools $user@$node:/home/$user/ves
fi
ssh -x -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
$user@$node <<EOF > ves-collectd-$node.log 2>&1 &
ves_kafka_host=$master
export ves_kafka_host
ves_kafka_port=$ves_kafka_port
export ves_kafka_port
ves_kafka_hostname=$ves_kafka_hostname
export ves_kafka_hostname
ves_mode=node
export ves_mode
bash /home/$user/ves/tools/ves-setup.sh collectd
EOF
done
echo; echo "$0 $(date): VES Grafana dashboards are available at http://$ves_grafana_host (login as admin/admin)"
|