summaryrefslogtreecommitdiffstats
path: root/tools/demo_deploy.sh
blob: 305de9ced4b986355f53fe358be6387c981fe122 (plain)
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)"