Fix function documentation typo
[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     fi
109
110     echo "DOCKER_OPTS=\"-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock\"" >> /etc/default/docker
111     usermod -a -G docker vagrant
112 }
113
114 # install_nodejs() - Download and install NodeJS
115 function install_nodejs {
116     if is_package_installed nodejs; then
117         return
118     fi
119     curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
120     install_package nodejs
121
122     # Update NPM to latest version
123     npm install npm -g
124 }
125
126 # install_python() - Install Python 2.7 and other tools necessary for development.
127 function install_python {
128     install_packages python2.7 python-dev
129 }
130
131 # _install_pip() - Install Python Package Manager
132 function _install_pip {
133     install_python
134     if [ ! -f /usr/local/bin/pip ]; then
135         curl -sL https://bootstrap.pypa.io/get-pip.py | python
136     fi
137 }
138
139 # install_python_package() - Install a python module
140 function install_python_package {
141     local python_package=$1
142
143     _install_pip
144     pip install $python_package
145 }
146
147 # install_docker() - Download and install docker-engine
148 function install_docker {
149     if is_package_installed docker-ce; then
150         return
151     fi
152     install_package software-properties-common
153     curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
154     add-apt-repository \
155         "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
156         $(lsb_release -cs) \
157         stable"
158     install_package docker-ce
159     _configure_docker_settings
160     service docker restart
161     sleep 10
162 }
163
164 # pull_docker_image() - Pull Docker container image from the Public Docker Registry Hub
165 function pull_docker_image {
166     install_docker
167     local image=$1
168     local tag=$2
169     docker pull ${image}
170     if [ ${tag} ]; then
171         docker tag ${image} $tag
172     fi
173 }
174
175 # install_docker_compose() - Download and install docker-engine 
176 function install_docker_compose {
177     local docker_compose_version=${1:-1.12.0}
178     if [ ! -d /opt/docker ]; then
179         mkdir /opt/docker
180         curl -L https://github.com/docker/compose/releases/download/$docker_compose_version/docker-compose-`uname -s`-`uname -m` > /opt/docker/docker-compose
181         chmod +x /opt/docker/docker-compose
182     fi
183 }
184
185 # _install_ODL() - Download and Install OpenDayLight SDN controller
186 function _install_ODL {
187     if [ ! -d /opt/opendaylight/current ]; then
188         mkdir -p /opt/opendaylight/
189         wget "https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/distribution-karaf/"$odl_version"/distribution-karaf-"$odl_version".tar.gz" -P /opt/
190         tar xvf "/opt/distribution-karaf-"$odl_version".tar.gz" -C /opt/
191         mv "/opt/distribution-karaf-"$odl_version /opt/opendaylight/current
192         rm -rf "/opt/distribution-karaf-"$odl_version".tar.gz"
193     fi
194 }
195
196 # start_ODL() - Start OpenDayLight SDN controller
197 function start_ODL {
198     _install_ODL
199     if [ -d /opt/opendaylight ]; then
200         export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre
201         /opt/opendaylight/current/bin/start
202         sleep 180
203         /opt/opendaylight/current/bin/client feature:install odl-dlux-all
204     fi
205 }
206
207 # compile_src() - Function that compiles the java source code thru maven
208 function compile_src {
209     local src_folder=$1
210     pushd $src_folder
211     if [ -f pom.xml ]; then
212         install_maven
213         mvn clean install -DskipTests=true -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Dadditionalparam=-Xdoclint:none
214     fi
215     popd
216 }
217
218 # build_docker_image() - Build Docker container image from source code
219 function build_docker_image {
220     local src_folder=$1
221     local profile=$2
222     install_maven
223     install_docker
224     pushd $src_folder
225
226     # Cleanup external repo
227     sed -i 's|${docker.push.registry}/||g' pom.xml
228     local mvn_docker="mvn clean package docker:build"
229     if [ $profile ]; then
230         mvn_docker+=" -P $profile"
231     fi
232     if [ $http_proxy ]; then
233         if ! grep -ql "docker.buildArg.http_proxy" pom.xml ; then
234             mvn_docker+=" -Ddocker.buildArg.http_proxy=$http_proxy"
235         fi
236         if ! grep -ql "docker.buildArg.HTTP_PROXY" pom.xml ; then
237             mvn_docker+=" -Ddocker.buildArg.HTTP_PROXY=$http_proxy"
238         fi
239     fi
240     if [ $https_proxy ]; then
241         if ! grep -ql "docker.buildArg.https_proxy" pom.xml ; then
242             mvn_docker+=" -Ddocker.buildArg.https_proxy=$https_proxy"
243         fi
244         if ! grep -ql "docker.buildArg.HTTPS_PROXY" pom.xml ; then
245             mvn_docker+=" -Ddocker.buildArg.HTTPS_PROXY=$https_proxy"
246         fi
247     fi
248     eval $mvn_docker
249     popd
250 }