X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=installers%2Ffull_install_osm.sh;h=99999269b2a23e531c190bad43bbb52262105a61;hb=refs%2Fchanges%2F12%2F9112%2F2;hp=5f267340fea51251680c7966ec6fd72e6d665c7f;hpb=69388c238f11ce1a2a324c64e90958dd2a281aac;p=osm%2Fdevops.git diff --git a/installers/full_install_osm.sh b/installers/full_install_osm.sh index 5f267340..99999269 100755 --- a/installers/full_install_osm.sh +++ b/installers/full_install_osm.sh @@ -37,7 +37,7 @@ function usage(){ echo -e " --elk_stack: additionally deploy an ELK docker stack for event logging" echo -e " --pla: install the PLA module for placement support" echo -e " -m : install OSM but only rebuild the specified docker images (LW-UI, NBI, LCM, RO, MON, POL, KAFKA, MONGO, PROMETHEUS, PROMETHEUS-CADVISOR, KEYSTONE-DB, PLA, NONE)" - echo -e " -o : ONLY (un)installs one of the addons (vimemu, elk_stack)" + echo -e " -o : ONLY (un)installs one of the addons (vimemu, elk_stack, k8s_monitor)" echo -e " -D use local devops installation path" echo -e " -w Location to store runtime installation" echo -e " -t specify osm docker tag (default is latest)" @@ -54,20 +54,21 @@ function usage(){ echo -e " --source: install OSM from source code using the latest stable tag" echo -e " --develop: (deprecated, use '-b master') install OSM from source code using the master branch" echo -e " --pullimages: pull/run osm images from docker.io/opensourcemano" - echo -e " --k8s_monitor: install the OSM kubernetes moitoring with prometheus and grafana" + echo -e " --k8s_monitor: install the OSM kubernetes monitoring with prometheus and grafana" # echo -e " --reconfigure: reconfigure the modules (DO NOT change 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 " -h / --help: print this help" - echo -e " --charmed: install OSM with charms" - echo -e " --bundle : Specify with which bundle to deploy OSM with charms (--charmed option)" - echo -e " --kubeconfig : Specify with which kubernetes to deploy OSM with charms (--charmed option)" - echo -e " --controller : Specifies the name of the controller to use - The controller must be already bootstrapped (--charmed option)" - echo -e " --lxd-cloud : Takes a YAML file as a parameter with the LXD Cloud information (--charmed option)" - echo -e " --lxd-credentials : Takes a YAML file as a parameter with the LXD Credentials information (--charmed option)" - echo -e " --microstack: Installs microstack as a vim. (--charmed option)" - echo -e " --tag: Docker image tag" + echo -e " --charmed: Deploy and operate OSM with Charms on k8s" + echo -e " [--bundle ]: Specify with which bundle to deploy OSM with charms (--charmed option)" + echo -e " [--k8s ]: Specify with which kubernetes to deploy OSM with charms (--charmed option)" + echo -e " [--vca ]: Specifies the name of the controller to use - The controller must be already bootstrapped (--charmed option)" + echo -e " [--lxd ]: Takes a YAML file as a parameter with the LXD Cloud information (--charmed option)" + echo -e " [--lxd-cred ]: Takes a YAML file as a parameter with the LXD Credentials information (--charmed option)" + echo -e " [--microstack]: Installs microstack as a vim. (--charmed option)" + echo -e " [--ha]: Installs High Availability bundle. (--charmed option)" + echo -e " [--tag]: Docker image tag" } @@ -125,7 +126,8 @@ function remove_iptables() { fi if [ -z "$DEFAULT_IP" ]; then - DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'` + DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}') + [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}') [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0" DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'` [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route" @@ -166,6 +168,23 @@ function remove_k8s_namespace() { kubectl delete ns $1 } +#removes helm only if there is nothing deployed in helm +function remove_helm() { + if [ "$(helm ls -q)" == "" ] ; then + sudo helm reset --force + kubectl delete --namespace kube-system serviceaccount tiller + kubectl delete clusterrolebinding tiller-cluster-rule + sudo rm /usr/local/bin/helm + rm -rf $HOME/.helm + fi +} + +#Uninstall osmclient +function uninstall_osmclient() { + sudo apt-get remove --purge -y python-osmclient + sudo apt-get remove --purge -y python3-osmclient +} + #Uninstall lightweight OSM: remove dockers function uninstall_lightweight() { if [ -n "$INSTALL_ONLY" ]; then @@ -212,6 +231,7 @@ EONG $WORKDIR_SUDO rm -rf $OSM_DOCKER_WORK_DIR [ -z "$CONTROLLER_NAME" ] && sg lxd -c "juju destroy-controller --destroy-all-models --yes $OSM_STACK_NAME" fi + uninstall_osmclient echo "Some docker images will be kept in case they are used by other docker stacks" echo "To remove them, just run 'docker image prune' in a terminal" return 0 @@ -231,7 +251,7 @@ function check_install_iptables_persistent(){ #Configure NAT rules, based on the current IP addresses of containers function nat(){ check_install_iptables_persistent - + echo -e "\nConfiguring NAT rules" echo -e " Required root privileges" sudo $OSM_DEVOPS/installers/nat_osm @@ -256,7 +276,8 @@ function install_lxd() { sudo usermod -a -G lxd `whoami` cat /usr/share/osm-devops/installers/lxd-preseed.conf | sed 's/^config: {}/config:\n core.https_address: '$DEFAULT_IP':8443/' | sg lxd -c "lxd init --preseed" sg lxd -c "lxd waitready" - DEFAULT_INTERFACE=$(route -n | awk '$1~/^0.0.0.0/ {print $8}') + DEFAULT_INTERFACE=$(ip route list|awk '$1=="default" {print $5; exit}') + [ -z "$DEFAULT_INTERFACE" ] && DEFAULT_INTERFACE=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}') DEFAULT_MTU=$(ip addr show $DEFAULT_INTERFACE | perl -ne 'if (/mtu\s(\d+)/) {print $1;}') sg lxd -c "lxc profile device set default eth0 mtu $DEFAULT_MTU" #sudo systemctl stop lxd-bridge @@ -322,11 +343,11 @@ function install_prometheus_nodeexporter(){ echo "Creating user node_exporter" sudo useradd --no-create-home --shell /bin/false node_exporter fi - sudo wget -q https://github.com/prometheus/node_exporter/releases/download/v$PROMETHEUS_NODE_EXPORTER_TAG/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz -P /tmp/ + wget -q https://github.com/prometheus/node_exporter/releases/download/v$PROMETHEUS_NODE_EXPORTER_TAG/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz -P /tmp/ sudo tar -C /tmp -xf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64.tar.gz sudo cp /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64/node_exporter /usr/local/bin sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter - sudo rm -rf node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64* + sudo rm -rf /tmp/node_exporter-$PROMETHEUS_NODE_EXPORTER_TAG.linux-amd64* sudo cp ${OSM_DEVOPS}/installers/docker/prometheus/node_exporter.service /etc/systemd/system/node_exporter.service sudo systemctl daemon-reload sudo systemctl restart node_exporter @@ -376,7 +397,7 @@ function install_docker_compose() { function install_juju() { echo "Installing juju" - sudo snap install juju --classic + sudo snap install juju --classic --channel=2.7/stable [[ ":$PATH": != *":/snap/bin:"* ]] && PATH="/snap/bin:${PATH}" echo "Finished installation of juju" return 0 @@ -386,7 +407,7 @@ function juju_createcontroller() { if ! juju show-controller $OSM_STACK_NAME &> /dev/null; then # Not found created, create the controller sudo usermod -a -G lxd ${USER} - sg lxd -c "juju bootstrap $OSM_VCA_CLOUDNAME $OSM_STACK_NAME" + sg lxd -c "juju bootstrap --bootstrap-series=xenial $OSM_VCA_CLOUDNAME $OSM_STACK_NAME" fi [ $(juju controllers | awk "/^${OSM_STACK_NAME}[\*| ]/{print $1}"|wc -l) -eq 1 ] || FATAL "Juju installation failed" } @@ -507,7 +528,7 @@ function generate_docker_images() { if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then sg docker -c "docker pull google/cadvisor:${PROMETHEUS_CADVISOR_TAG}" || FATAL "cannot get prometheus cadvisor docker image" - fi + fi echo "Finished generation of docker images" } @@ -752,6 +773,39 @@ function deploy_osm_pla_service() { kubectl apply -n $OSM_STACK_NAME -f $OSM_DOCKER_WORK_DIR/osm_pla } +#Install helm and tiller +function install_helm() { + helm > /dev/null 2>&1 + if [ $? != 0 ] ; then + # Helm is not installed. Install helm + curl https://get.helm.sh/helm-v2.15.2-linux-amd64.tar.gz --output helm-v2.15.2.tar.gz + tar -zxvf helm-v2.15.2.tar.gz + sudo mv linux-amd64/helm /usr/local/bin/helm + rm -r linux-amd64 + rm helm-v2.15.2.tar.gz + fi + + # Checking if tiller has being configured + kubectl --namespace kube-system get serviceaccount tiller > /dev/null 2>&1 + if [ $? == 1 ] ; then + # tiller account for kubernetes + kubectl --namespace kube-system create serviceaccount tiller + kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller + # HELM initialization + helm init --service-account tiller + + # Wait for Tiller to be up and running. If timeout expires, continue installing + tiller_timeout=120; counter=0 + while (( counter < tiller_timeout )) + do + tiller_status=`kubectl -n kube-system get deployment.apps/tiller-deploy --no-headers | awk '{print $2'}` + ( [ ! -z "$tiller_status" ] && [ $tiller_status == "1/1" ] ) && break + num=$((counter + 2)) + sleep 2 + done + fi +} + function parse_yaml() { osm_services="nbi lcm ro pol mon light-ui keystone" TAG=$1 @@ -921,9 +975,10 @@ function install_lightweight() { echo "Installing lightweight build of OSM" LWTEMPDIR="$(mktemp -d -q --tmpdir "installosmlight.XXXXXX")" trap 'rm -rf "${LWTEMPDIR}"' EXIT - DEFAULT_IF=`route -n |awk '$1~/^0.0.0.0/ {print $8}'` + DEFAULT_IF=$(ip route list|awk '$1=="default" {print $5; exit}') + [ -z "$DEFAULT_IF" ] && DEFAULT_IF=$(route -n |awk '$1~/^0.0.0.0/ {print $8; exit}') [ -z "$DEFAULT_IF" ] && FATAL "Not possible to determine the interface with the default route 0.0.0.0" - DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF}|awk '{split($4,a,"/"); print a[1]}'` + DEFAULT_IP=`ip -o -4 a |grep ${DEFAULT_IF} |awk '{split($4,a,"/"); print a[1]}'` [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route" DEFAULT_MTU=$(ip addr show ${DEFAULT_IF} | perl -ne 'if (/mtu\s(\d+)/) {print $1;}') @@ -1359,10 +1414,11 @@ while getopts ":b:r:c:k:u:R:D:o:m:H:S:s:w:t:U:P:A:l:L:K:-: hy" o; do [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue [ "${OPTARG}" == "charmed" ] && CHARMED="y" && continue [ "${OPTARG}" == "bundle" ] && continue - [ "${OPTARG}" == "kubeconfig" ] && continue - [ "${OPTARG}" == "lxdendpoint" ] && continue - [ "${OPTARG}" == "lxdcert" ] && continue + [ "${OPTARG}" == "k8s" ] && continue + [ "${OPTARG}" == "lxd" ] && continue + [ "${OPTARG}" == "lxd-cred" ] && continue [ "${OPTARG}" == "microstack" ] && continue + [ "${OPTARG}" == "ha" ] && continue [ "${OPTARG}" == "tag" ] && continue [ "${OPTARG}" == "pla" ] && INSTALL_PLA="y" && continue echo -e "Invalid option: '--$OPTARG'\n" >&2 @@ -1401,23 +1457,23 @@ if [ -n "$CHARMED" ]; then /usr/share/osm-devops/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@" else /usr/share/osm-devops/installers/charmed_install.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D /usr/share/osm-devops -t $DOCKER_TAG "$@" - fi - echo "Your installation is now complete, follow these steps for configuring the osmclient:" - echo - echo "1. Get the NBI IP with the following command:" - echo - echo "juju status --format yaml | yq r - applications.nbi-k8s.address" - echo - echo "2. Create the OSM_HOSTNAME environment variable with the NBI IP" - echo - echo "export OSM_HOSTNAME=" - echo - echo "3. Add the previous command to your .bashrc for other Shell sessions" - echo - echo "export OSM_HOSTNAME= >> ~/.bashrc" - echo - echo "DONE" + echo "Your installation is now complete, follow these steps for configuring the osmclient:" + echo + echo "1. Get the NBI IP with the following command:" + echo + echo NBI_IP='`juju status --format json | jq -rc '"'"'.applications."nbi-k8s".address'"'"'`' + echo + echo "2. Create the OSM_HOSTNAME environment variable with the NBI IP" + echo + echo "export OSM_HOSTNAME=\$NBI_IP" + echo + echo "3. Add the previous command to your .bashrc for other Shell sessions" + echo + echo "echo \"export OSM_HOSTNAME=\$NBI_IP\" >> ~/.bashrc" + echo + echo "DONE" + fi exit 0 fi @@ -1496,3 +1552,4 @@ wget -q -O- https://osm-download.etsi.org/ftp/osm-7.0-seven/README2.txt &> /dev/ track end echo -e "\nDONE" +