echo -e " ..."
echo -e " --lxdimages: download lxd images from OSM repository instead of creating them from scratch"
echo -e " -l <lxd_repo>: use specified repository url for lxd images"
+ echo -e " -p <path>: use specified repository path for lxd images"
+ echo -e " --vimemu: additionally fetch, build, and deploy the VIM emulator as a docker container"
echo -e " --develop: (deprecated, use '-b master') install OSM from source code using the master branch"
# echo -e " --reconfigure: reconfigure the modules (DO NOT change NAT rules)"
echo -e " --nat: install only NAT rules"
# echo -e " --update: update to the latest stable release or to the latest commit if using a specific branch"
echo -e " --showopts: print chosen options and exit (only for debugging)"
echo -e " -y: do not prompt for confirmation, assumes yes"
+ echo -e " -D <devops path> use local devops installation path"
echo -e " -h / --help: print this help"
}
if [ $RC_CLONE ] || [ -n "$TEST_INSTALLER" ]; then
$OSM_DEVOPS/jenkins/host/clean_container RO
$OSM_DEVOPS/jenkins/host/clean_container VCA
+ $OSM_DEVOPS/jenkins/host/clean_container MON
$OSM_DEVOPS/jenkins/host/clean_container SO
#$OSM_DEVOPS/jenkins/host/clean_container UI
else
lxc stop RO && lxc delete RO
lxc stop VCA && lxc delete VCA
+ lxc stop MON && lxc delete MON
lxc stop SO-ub && lxc delete SO-ub
fi
+ echo -e "\nDeleting imported lxd images if they exist"
+ lxc image show osm-ro &>/dev/null && lxc image delete osm-ro
+ lxc image show osm-vca &>/dev/null && lxc image delete osm-vca
+ lxc image show osm-soui &>/dev/null && lxc image delete osm-soui
+ return 0
}
#Configure NAT rules, based on the current IP addresses of containers
# lxc exec SO-ub -- ...
fi
echo
+ echo -e "Updating MON Container"
+ CONTAINER="MON"
+ MDG="MON"
+ INSTALL_FOLDER="/root/MON"
+ echo -e " Fetching the repo"
+ lxc exec $CONTAINER -- git -C $INSTALL_FOLDER fetch --all
+ BRANCH=""
+ BRANCH=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status -sb | head -n1 | sed -n 's/^## \(.*\).*/\1/p'|awk '{print $1}' |sed 's/\(.*\)\.\.\..*/\1/'`
+ [ -z "$BRANCH" ] && FATAL "Could not find the current branch in use in the '$MDG'"
+ CURRENT=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER status |head -n1`
+ CURRENT_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse HEAD`
+ echo " FROM: $CURRENT ($CURRENT_COMMIT_ID)"
+ # COMMIT_ID either was previously set with -b option, or is an empty string
+ CHECKOUT_ID=$COMMIT_ID
+ [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" == "HEAD" ] && CHECKOUT_ID="tags/$LATEST_STABLE_DEVOPS"
+ [ -z "$CHECKOUT_ID" ] && [ "$BRANCH" != "HEAD" ] && CHECKOUT_ID="$BRANCH"
+ if [[ $CHECKOUT_ID == "tags/"* ]]; then
+ REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-list -n 1 $CHECKOUT_ID`
+ else
+ REMOTE_COMMIT_ID=`lxc exec $CONTAINER -- git -C $INSTALL_FOLDER rev-parse origin/$CHECKOUT_ID`
+ fi
+ echo " TO: $CHECKOUT_ID ($REMOTE_COMMIT_ID)"
+ if [ "$CURRENT_COMMIT_ID" == "$REMOTE_COMMIT_ID" ]; then
+ echo " Nothing to be done."
+ else
+ echo " Update required."
+ fi
+ echo
}
function so_is_up() {
FATAL "OSM Failed to startup. VCA failed to startup"
}
+function mon_is_up() {
+ if [[ `curl http://$RO_IP:9090/openmano/ | grep "works" | wc -l` -eq 1 ]]; then
+ echo "MON is up and running"
+ return 0
+ fi
+
+ FATAL "OSM Failed to startup. MON failed to startup"
+}
+
function ro_is_up() {
if [ -n "$1" ]; then
RO_IP=$1
ro_is_up
lxc exec RO -- openmano tenant-delete -f osm >/dev/null
- lxc exec RO -- sed -i '/export OPENMANO_TENANT=osm/d' .bashrc
+ lxc exec RO -- openmano tenant-create osm > /dev/null
+ lxc exec RO -- sed -i '/export OPENMANO_TENANT=osm/d' .bashrc
lxc exec RO -- sed -i '$ i export OPENMANO_TENANT=osm' .bashrc
- #lxc exec RO -- sh -c 'echo "export OPENMANO_TENANT=osm" >> .bashrc'
+ lxc exec RO -- sh -c 'echo "export OPENMANO_TENANT=osm" >> .bashrc'
}
function configure_VCA(){
function configure_SOUI(){
. $OSM_DEVOPS/installers/export_ips
JUJU_CONTROLLER_IP=`lxc exec VCA -- lxc list -c 4 |grep eth0 |awk '{print $2}'`
- RO_TENANT_ID=`lxc exec RO -- openmano tenant-create osm |awk '{print $1}'`
+ RO_TENANT_ID=`lxc exec RO -- openmano tenant-list osm |awk '{print $1}'`
+
+ echo -e " Configuring MON"
+ #Information to be added about SO socket for logging
echo -e " Configuring SO"
sudo route add -host $JUJU_CONTROLLER_IP gw $VCA_CONTAINER_IP
lxc exec SO-ub -- tee /etc/network/interfaces.d/60-rift.cfg <<EOF
auto lo:1
-iface lo:1 inet static
+iface lo:1 inet static
address $DEFAULT_IP
netmask 255.255.255.255
EOF
function install_from_lxdimages(){
LXD_RELEASE=${RELEASE#"-R "}
- LXD_IMAGE_DIR="$(mktemp -d -q --tmpdir "osmimages.XXXXXX")"
- trap 'rm -rf "$LXD_IMAGE_DIR"' EXIT
- wget -O $LXD_IMAGE_DIR/osm-ro.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-ro.tar.gz
+ if [ -n "$LXD_REPOSITORY_PATH" ]; then
+ LXD_IMAGE_DIR="$LXD_REPOSITORY_PATH"
+ else
+ LXD_IMAGE_DIR="$(mktemp -d -q --tmpdir "osmimages.XXXXXX")"
+ trap 'rm -rf "$LXD_IMAGE_DIR"' EXIT
+ fi
+ echo -e "\nDeleting previous lxd images if they exist"
+ lxc image show osm-ro &>/dev/null && lxc image delete osm-ro
+ lxc image show osm-vca &>/dev/null && lxc image delete osm-vca
+ lxc image show osm-soui &>/dev/null && lxc image delete osm-soui
+ echo -e "\nImporting osm-ro"
+ [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-ro.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-ro.tar.gz
lxc image import $LXD_IMAGE_DIR/osm-ro.tar.gz --alias osm-ro
rm -f $LXD_IMAGE_DIR/osm-ro.tar.gz
- wget -O $LXD_IMAGE_DIR/osm-vca.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-vca.tar.gz
+ echo -e "\nImporting osm-vca"
+ [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-vca.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-vca.tar.gz
lxc image import $LXD_IMAGE_DIR/osm-vca.tar.gz --alias osm-vca
rm -f $LXD_IMAGE_DIR/osm-vca.tar.gz
- wget -O $LXD_IMAGE_DIR/osm-soui.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-soui.tar.gz
+ echo -e "\nImporting osm-soui"
+ [ -z "$LXD_REPOSITORY_PATH" ] && wget -O $LXD_IMAGE_DIR/osm-soui.tar.gz $LXD_REPOSITORY_BASE/$LXD_RELEASE/osm-soui.tar.gz
lxc image import $LXD_IMAGE_DIR/osm-soui.tar.gz --alias osm-soui
rm -f $LXD_IMAGE_DIR/osm-soui.tar.gz
launch_container_from_lxd RO osm-ro
ro_is_up && track RO
launch_container_from_lxd VCA osm-vca
vca_is_up && track VCA
+ launch_container_from_lxd MON osm-mon
+ mon_is_up && track MON
launch_container_from_lxd SO osm-soui
#so_is_up && track SOUI
track SOUI
}
+function install_docker_ce() {
+ # installs and configures Docker CE
+ echo "Installing Docker CE ..."
+ sudo apt-get -qq update
+ sudo apt-get install -y apt-transport-https ca-certificates software-properties-common
+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
+ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
+ sudo apt-get -qq update
+ sudo apt-get install -y docker-ce
+ echo "Adding user to group 'docker'"
+ sudo groupadd -f docker
+ sudo usermod -aG docker $USER
+ echo "... Docker CE installation done"
+ sleep 2
+ sudo service docker restart
+ echo "... restarted Docker service"
+}
+
+function install_vimemu() {
+ # install Docker
+ install_docker_ce
+ # clone vim-emu repository (attention: branch is currently master only)
+ echo "Cloning vim-emu repository ..."
+ git clone https://osm.etsi.org/gerrit/osm/vim-emu.git
+ # build vim-emu docker
+ echo "Building vim-emu Docker container..."
+ sudo docker build -t vim-emu-img -f vim-emu/Dockerfile vim-emu/
+ # start vim-emu container as daemon
+ echo "Starting vim-emu Docker container 'vim-emu' ..."
+ sudo docker run --name vim-emu -t -d --rm --privileged --pid='host' -v /var/run/docker.sock:/var/run/docker.sock vim-emu-img python examples/osm_default_daemon_topology_2_pop.py
+ echo "Waiting for 'vim-emu' container to start ..."
+ sleep 5
+ export VIMEMU_HOSTNAME=$(sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' vim-emu)
+ echo "vim-emu running at $VIMEMU_HOSTNAME ..."
+ echo -e "You might be interested in adding the following OSM client env variables to your .bashrc file:"
+ echo " export OSM_HOSTNAME=${OSM_HOSTNAME}"
+ echo " export OSM_RO_HOSTNAME=${OSM_RO_HOSTNAME}"
+ echo -e "You might be interested in adding the following vim-emu env variables to your .bashrc file:"
+ echo " export VIMEMU_HOSTNAME=${VIMEMU_HOSTNAME}"
+ echo -e "\nTo add the emulated VIM to OSM you should do:"
+ echo " osm vim-create --name emu-vim1 --user username --password password --auth_url http://$VIMEMU_HOSTNAME:6001/v2.0 --tenant tenantName --account_type openstack"
+}
+
function dump_vars(){
echo "DEVELOP=$DEVELOP"
echo "INSTALL_FROM_SOURCE=$INSTALL_FROM_SOURCE"
echo "UPDATE=$UPDATE"
echo "RECONFIGURE=$RECONFIGURE"
echo "TEST_INSTALLER=$TEST_INSTALLER"
+ echo "INSTALL_VIMEMU=$INSTALL_VIMEMU"
echo "INSTALL_LXD=$INSTALL_LXD"
echo "INSTALL_FROM_LXDIMAGES=$INSTALL_FROM_LXDIMAGES"
echo "LXD_REPOSITORY_BASE=$LXD_REPOSITORY_BASE"
+ echo "LXD_REPOSITORY_PATH=$LXD_REPOSITORY_PATH"
echo "RELEASE=$RELEASE"
echo "REPOSITORY=$REPOSITORY"
echo "REPOSITORY_BASE=$REPOSITORY_BASE"
ASSUME_YES=""
INSTALL_FROM_SOURCE=""
RELEASE="-R ReleaseTHREE"
+INSTALL_VIMEMU=""
INSTALL_FROM_LXDIMAGES=""
LXD_REPOSITORY_BASE="https://osm-download.etsi.org/repository/osm/lxd"
+LXD_REPOSITORY_PATH=""
NOCONFIGURE=""
-
+RELEASE_DAILY=""
SESSION_ID=`date +%s`
+OSM_DEVOPS=
-while getopts ":hy-:b:r:k:u:R:l:" o; do
+while getopts ":hy-:b:r:k:u:R:l:p:D:" o; do
case "${o}" in
h)
usage && exit 0
l)
LXD_REPOSITORY_BASE="${OPTARG}"
;;
+ p)
+ LXD_REPOSITORY_PATH="${OPTARG}"
+ ;;
+ D)
+ OSM_DEVOPS="${OPTARG}"
+ ;;
-)
[ "${OPTARG}" == "help" ] && usage && exit 0
[ "${OPTARG}" == "source" ] && INSTALL_FROM_SOURCE="y" && continue
[ "${OPTARG}" == "test" ] && TEST_INSTALLER="y" && continue
[ "${OPTARG}" == "lxdinstall" ] && INSTALL_LXD="y" && continue
[ "${OPTARG}" == "lxdimages" ] && INSTALL_FROM_LXDIMAGES="y" && continue
+ [ "${OPTARG}" == "vimemu" ] && INSTALL_VIMEMU="y" && continue
[ "${OPTARG}" == "noconfigure" ] && NOCONFIGURE="y" && continue
[ "${OPTARG}" == "showopts" ] && SHOWOPTS="y" && continue
+ [ "${OPTARG}" == "daily" ] && RELEASE_DAILY="y" && continue
echo -e "Invalid option: '--$OPTARG'\n" >&2
usage && exit 1
;;
exit 0
fi
+[ -n "$RELEASE_DAILY" ] && echo -e "\nInstalling from daily build repo" && RELEASE="-R ReleaseTHREE-daily" && REPOSITORY="-r testing" && COMMIT_ID="master"
+
# if develop, we force master
[ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master"
# forcing source from master removed. Now only install from source when explicit
# [ -n "$COMMIT_ID" ] && [ "$COMMIT_ID" == "master" ] && INSTALL_FROM_SOURCE="y"
-if [ -n "$TEST_INSTALLER" ]; then
- echo -e "\nUsing local devops repo for OSM installation"
- TEMPDIR="$(dirname $(realpath $(dirname $0)))"
-else
- echo -e "\nCreating temporary dir for OSM installation"
- TEMPDIR="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
- trap 'rm -rf "$TEMPDIR"' EXIT
+if [ -z "$OSM_DEVOPS" ]; then
+ if [ -n "$TEST_INSTALLER" ]; then
+ echo -e "\nUsing local devops repo for OSM installation"
+ TEMPDIR="$(dirname $(realpath $(dirname $0)))"
+ else
+ echo -e "\nCreating temporary dir for OSM installation"
+ TEMPDIR="$(mktemp -d -q --tmpdir "installosm.XXXXXX")"
+ trap 'rm -rf "$TEMPDIR"' EXIT
+ fi
fi
need_packages="git jq"
|| FATAL "failed to install $package"
done
-if [ -z "$TEST_INSTALLER" ]; then
- echo -e "\nCloning devops repo temporarily"
- git clone https://osm.etsi.org/gerrit/osm/devops.git $TEMPDIR
- RC_CLONE=$?
-fi
+if [ -z "$OSM_DEVOPS" ]; then
+ if [ -z "$TEST_INSTALLER" ]; then
+ echo -e "\nCloning devops repo temporarily"
+ git clone https://osm.etsi.org/gerrit/osm/devops.git $TEMPDIR
+ RC_CLONE=$?
+ fi
-echo -e "\nGuessing the current stable release"
-LATEST_STABLE_DEVOPS=`git -C $TEMPDIR tag -l v[0-9].* | sort -V | tail -n1`
-[ -z "$COMMIT_ID" ] && [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
-echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
-[ -z "$COMMIT_ID" ] && [ -n "$LATEST_STABLE_DEVOPS" ] && COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
-[ -z "$TEST_INSTALLER" ] && git -C $TEMPDIR checkout tags/$LATEST_STABLE_DEVOPS
+ echo -e "\nGuessing the current stable release"
+ LATEST_STABLE_DEVOPS=`git -C $TEMPDIR tag -l v[0-9].* | sort -V | tail -n1`
+ [ -z "$COMMIT_ID" ] && [ -z "$LATEST_STABLE_DEVOPS" ] && echo "Could not find the current latest stable release" && exit 0
+ echo "Latest tag in devops repo: $LATEST_STABLE_DEVOPS"
+ [ -z "$COMMIT_ID" ] && [ -n "$LATEST_STABLE_DEVOPS" ] && COMMIT_ID="tags/$LATEST_STABLE_DEVOPS"
+
+ if [ -n "$RELEASE_DAILY" ]; then
+ echo "Using master/HEAD devops"
+ git -C $TEMPDIR checkout master
+ elif [ -z "$TEST_INSTALLER" ]; then
+ git -C $TEMPDIR checkout tags/$LATEST_STABLE_DEVOPS
+ fi
+ OSM_DEVOPS=$TEMPDIR
+fi
-OSM_DEVOPS=$TEMPDIR
-OSM_JENKINS="$TEMPDIR/jenkins"
+OSM_JENKINS="$OSM_DEVOPS/jenkins"
. $OSM_JENKINS/common/all_funcs
[ -n "$UNINSTALL" ] && uninstall && echo -e "\nDONE" && exit 0
#Installation starts here
echo -e "\nInstalling OSM from refspec: $COMMIT_ID"
-if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
+if [ -n "$INSTALL_FROM_SOURCE" ] && [ -z "$ASSUME_YES" ]; then
! ask_user "The installation will take about 75-90 minutes. Continue (Y/n)? " y && echo "Cancelled!" && exit 1
fi
lxd --version &>/dev/null || FATAL "lxd not present, exiting."
[ -n "$INSTALL_LXD" ] && echo -e "\nInstalling and configuring lxd" && install_lxd
-wget -q -O- https://osm-download.etsi.org/ftp/osm-3.0-three/README.txt &> /dev/null
+wget -q -O- https://osm-download.etsi.org/ftp/osm-4.0-four/README.txt &> /dev/null
track start
# use local devops for containers
ro_is_up && track RO
$OSM_DEVOPS/jenkins/host/start_build VCA || FATAL "VCA container build failed"
vca_is_up && track VCA
+ $OSM_DEVOPS/jenkins/host/start_build MON || FATAL "MON install failed"
+ mon_is_up && track MON
$OSM_DEVOPS/jenkins/host/start_build SO checkout $COMMIT_ID || FATAL "SO container build failed (refspec: '$COMMIT_ID')"
$OSM_DEVOPS/jenkins/host/start_build UI checkout $COMMIT_ID || FATAL "UI container build failed (refspec: '$COMMIT_ID')"
#so_is_up && track SOUI
ro_is_up && track RO
$OSM_DEVOPS/jenkins/host/start_build VCA || FATAL "VCA install failed"
vca_is_up && track VCA
+ $OSM_DEVOPS/jenkins/host/install MON || FATAL "MON build failed"
+ mon_is_up && track MON
$OSM_DEVOPS/jenkins/host/install SO $REPOSITORY $RELEASE $REPOSITORY_KEY $REPOSITORY_BASE || FATAL "SO install failed"
$OSM_DEVOPS/jenkins/host/install UI $REPOSITORY $RELEASE $REPOSITORY_KEY $REPOSITORY_BASE || FATAL "UI install failed"
#so_is_up && track SOUI
#Install osmclient
[ -z "$NOCONFIGURE" ] && install_osmclient
-wget -q -O- https://osm-download.etsi.org/ftp/osm-3.0-three/README2.txt &> /dev/null
+#Install vim-emu (optional)
+if [ -n "$INSTALL_VIMEMU" ]; then
+ echo -e "\nInstalling vim-emu ..."
+ install_vimemu
+fi
+
+wget -q -O- https://osm-download.etsi.org/ftp/osm-4.0-four/README2.txt &> /dev/null
track end
echo -e "\nDONE"