Add support to configuration values
[integration.git] / bootstrap / vagrant-onap / lib / functions
1 #!/bin/bash
2
3 set -o xtrace
4
5 source /var/onap/commons
6 source /var/onap/_composed_functions
7 source /var/onap/_onap_functions
8
9 export MTU=$(/sbin/ifconfig | grep MTU | sed 's/.*MTU://' | sed 's/ .*//' |sort -n | head -1)
10 export IP_ADDRESS=$(ifconfig eth0 | grep "inet addr" | tr -s ' ' | cut -d' ' -f3 | cut -d':' -f2)
11
12 mvn_conf_file=/root/.m2/settings.xml
13 git_src_folder=/opt
14
15 # configure_dns() - DNS/GW IP address configuration
16 function configure_dns {
17     echo "nameserver 10.0.0.1" >> /etc/resolvconf/resolv.conf.d/head
18     resolvconf -u
19 }
20
21 # _git_timed() - git can sometimes get itself infinitely stuck with transient network
22 # errors or other issues with the remote end.  This wraps git in a
23 # timeout/retry loop and is intended to watch over non-local git
24 # processes that might hang.
25 function _git_timed {
26     local count=0
27     local timeout=0
28
29     install_package git
30     until timeout -s SIGINT ${timeout} git "$@"; do
31         # 124 is timeout(1)'s special return code when it reached the
32         # timeout; otherwise assume fatal failure
33         if [[ $? -ne 124 ]]; then
34             exit 1
35         fi
36
37         count=$(($count + 1))
38         if [ $count -eq 3 ]; then
39             exit 1
40         fi
41         sleep 5
42     done
43 }
44
45 # clone_repo() - Clone Git repository into specific folder
46 function clone_repo {
47     local repo_url=https://git.onap.org/
48     local repo=$1
49     local dest_folder=${2:-$git_src_folder/$repo}
50     if [ ! -d $dest_folder ]; then
51         _git_timed clone ${repo_url}${repo} $dest_folder
52     else
53         pushd $dest_folder
54         _git_timed pull
55         popd
56     fi
57 }
58
59 # install_dev_tools() - Install basic dependencies
60 function install_dev_tools {
61     install_packages apt-transport-https ca-certificates curl
62 }
63
64 # _install_bind() - Install bind utils
65 function _install_bind {
66     install_packages bind9 bind9utils
67 }
68
69 # install_java() - Install java binaries
70 function install_java {
71     if is_package_installed openjdk-8-jdk; then
72         return
73     fi
74     install_package software-properties-common
75     add-apt-repository -y ppa:openjdk-r/ppa
76
77     # Remove Java 7
78     uninstall_packages default-jre openjdk-7-jdk openjdk-7-jre openjdk-7-jre-headless
79
80     install_package openjdk-8-jdk
81     # ca-certificates-java is not a dependency in the Oracle JDK/JRE so this must be explicitly installed.
82     /var/lib/dpkg/info/ca-certificates-java.postinst configure
83 }
84
85 # install_maven() - Install maven binaries
86 function install_maven {
87     if is_package_installed maven3; then
88         return
89     fi
90     install_java
91     install_package software-properties-common
92     add-apt-repository -y ppa:andrei-pozolotin/maven3
93     install_package maven3
94
95     # Remove Java 7
96     uninstall_package openjdk-7-jdk
97
98     _configure_maven
99 }
100
101 # _configure_docker_settings() - Configures Docker settings
102 function _configure_docker_settings {
103     if [ $http_proxy ]; then
104         echo "export http_proxy=$http_proxy" >> /etc/default/docker
105     fi
106     if [ $https_proxy ]; then
107         echo "export https_proxy=$https_proxy" >> /etc/default/docker
108         #If you have a socks proxy, then use that to connect to the nexus repo
109         #via a redsocks container
110         if [ $socks_proxy ]; then
111             wget https://raw.githubusercontent.com/crops/chameleonsocks/master/chameleonsocks.sh
112             chmod 755 chameleonsocks.sh
113             socks=$(echo $socks_proxy | sed -e "s/^.*\///" | sed -e "s/:.*$//")
114             port=$(echo $socks_proxy | sed -e "s/^.*://")
115             PROXY=$socks PORT=$port ./chameleonsocks.sh --install
116         fi
117     fi
118
119     echo "DOCKER_OPTS=\"-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock\"" >> /etc/default/docker
120     usermod -a -G docker vagrant
121 }
122
123 # install_nodejs() - Download and install NodeJS
124 function install_nodejs {
125     if is_package_installed nodejs; then
126         return
127     fi
128     curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
129     install_package nodejs
130
131     # Update NPM to latest version
132     npm install npm -g
133 }
134
135 # install_python() - Install Python 2.7 and other tools necessary for development.
136 function install_python {
137     install_packages python2.7 python-dev
138 }
139
140 # _install_pip() - Install Python Package Manager
141 function _install_pip {
142     install_python
143     if [ ! -f /usr/local/bin/pip ]; then
144         curl -sL https://bootstrap.pypa.io/get-pip.py | python
145     fi
146 }
147
148 # install_python_package() - Install a python module
149 function install_python_package {
150     local python_package=$1
151
152     _install_pip
153     pip install $python_package
154 }
155
156 # install_docker() - Download and install docker-engine
157 function install_docker {
158     if is_package_installed docker-ce; then
159         return
160     fi
161     install_package software-properties-common
162     curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
163     add-apt-repository \
164         "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
165         $(lsb_release -cs) \
166         stable"
167     install_package docker-ce
168     _configure_docker_settings
169     service docker restart
170     sleep 10
171 }
172
173 # pull_docker_image() - Pull Docker container image from the Public Docker Registry Hub
174 function pull_docker_image {
175     install_docker
176     local image=$1
177     local tag=$2
178     docker pull ${image}
179     if [ ${tag} ]; then
180         docker tag ${image} $tag
181     fi
182 }
183
184 # install_docker_compose() - Download and install docker-engine 
185 function install_docker_compose {
186     local docker_compose_version=${1:-1.12.0}
187     if [ ! -d /opt/docker ]; then
188         mkdir /opt/docker
189         curl -L https://github.com/docker/compose/releases/download/$docker_compose_version/docker-compose-`uname -s`-`uname -m` > /opt/docker/docker-compose
190         chmod +x /opt/docker/docker-compose
191     fi
192 }
193
194 # _install_ODL() - Download and Install OpenDayLight SDN controller
195 function _install_ODL {
196     if [ ! -d /opt/opendaylight/current ]; then
197         mkdir -p /opt/opendaylight/
198         wget "https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/distribution-karaf/"$odl_version"/distribution-karaf-"$odl_version".tar.gz" -P /opt/
199         tar xvf "/opt/distribution-karaf-"$odl_version".tar.gz" -C /opt/
200         mv "/opt/distribution-karaf-"$odl_version /opt/opendaylight/current
201         rm -rf "/opt/distribution-karaf-"$odl_version".tar.gz"
202     fi
203 }
204
205 # start_ODL() - Start OpenDayLight SDN controller
206 function start_ODL {
207     _install_ODL
208     if [ -d /opt/opendaylight ]; then
209         export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
210         /opt/opendaylight/current/bin/start
211         sleep 180
212         /opt/opendaylight/current/bin/client feature:install odl-dlux-all
213     fi
214 }
215
216 # compile_src() - Function that compiles the java source code thru maven
217 function compile_src {
218     local src_folder=$1
219     pushd $src_folder
220     if [ -f pom.xml ]; then
221         install_maven
222         mvn clean install -DskipTests=true -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Dadditionalparam=-Xdoclint:none
223     fi
224     popd
225 }
226
227 # build_docker_image() - Build Docker container image from source code
228 function build_docker_image {
229     local src_folder=$1
230     local profile=$2
231     install_maven
232     install_docker
233     pushd $src_folder
234
235     # Cleanup external repo
236     sed -i 's|${docker.push.registry}/||g' pom.xml
237     local mvn_docker="mvn clean package docker:build"
238     if [ $profile ]; then
239         mvn_docker+=" -P $profile"
240     fi
241     if [ $http_proxy ]; then
242         if ! grep -ql "docker.buildArg.http_proxy" pom.xml ; then
243             mvn_docker+=" -Ddocker.buildArg.http_proxy=$http_proxy"
244         fi
245         if ! grep -ql "docker.buildArg.HTTP_PROXY" pom.xml ; then
246             mvn_docker+=" -Ddocker.buildArg.HTTP_PROXY=$http_proxy"
247         fi
248     fi
249     if [ $https_proxy ]; then
250         if ! grep -ql "docker.buildArg.https_proxy" pom.xml ; then
251             mvn_docker+=" -Ddocker.buildArg.https_proxy=$https_proxy"
252         fi
253         if ! grep -ql "docker.buildArg.HTTPS_PROXY" pom.xml ; then
254             mvn_docker+=" -Ddocker.buildArg.HTTPS_PROXY=$https_proxy"
255         fi
256     fi
257     eval $mvn_docker
258     popd
259 }