X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2Fdevops.git;a=blobdiff_plain;f=installers%2Ffull_install_osm.sh;h=b7864d19731c85c13039c6319d03bde5084b3eb8;hp=1202e33bf5e18f983cf00820e07d3b0118ea1dc3;hb=ce7b460470a5a68524533472dbb12beb5376281a;hpb=375b2703d4d15cd67a264d46b383c585ea10c00f diff --git a/installers/full_install_osm.sh b/installers/full_install_osm.sh index 1202e33b..b7864d19 100755 --- a/installers/full_install_osm.sh +++ b/installers/full_install_osm.sh @@ -139,6 +139,22 @@ function generate_secret() { [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } +function check_packages() { + NEEDED_PACKAGES="$1" + echo -e "Checking required packages: ${NEEDED_PACKAGES}" + for PACKAGE in ${NEEDED_PACKAGES} ; do + dpkg -L ${PACKAGE} + if [ $? -ne 0 ]; then + echo -e "Package ${PACKAGE} is not installed." + echo -e "Updating apt-cache ..." + sudo apt-get update + echo -e "Installing ${PACKAGE} ..." + sudo apt-get install -y ${PACKAGE} || FATAL "failed to install ${PACKAGE}" + fi + done + echo -e "Required packages are present: ${NEEDED_PACKAGES}" +} + function install_lxd() { [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function # Apply sysctl production values for optimal performance @@ -239,10 +255,6 @@ function generate_docker_images() { sg docker -c "docker pull wurstmeister/kafka:${KAFKA_TAG}" || FATAL "cannot get kafka docker image" fi - if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q MONGO ; then - sg docker -c "docker pull mongo" || FATAL "cannot get mongo docker image" - fi - if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q PROMETHEUS ; then sg docker -c "docker pull prom/prometheus:${PROMETHEUS_TAG}" || FATAL "cannot get prometheus docker image" fi @@ -253,6 +265,7 @@ function generate_docker_images() { if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q GRAFANA ; then sg docker -c "docker pull grafana/grafana:${GRAFANA_TAG}" || FATAL "cannot get grafana docker image" + sg docker -c "docker pull kiwigrid/k8s-sidecar:${KIWIGRID_K8S_SIDECAR_TAG}" || FATAL "cannot get kiwigrid k8s-sidecar docker image" fi if [ -z "$TO_REBUILD" ] || echo $TO_REBUILD | grep -q NBI || echo $TO_REBUILD | grep -q KEYSTONE-DB ; then @@ -326,7 +339,6 @@ function generate_k8s_manifest_files() { [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function #Kubernetes resources sudo cp -bR ${OSM_DEVOPS}/installers/docker/osm_pods $OSM_DOCKER_WORK_DIR - sudo rm -f $OSM_K8S_WORK_DIR/mongo.yaml [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } @@ -549,8 +561,7 @@ function parse_yaml() { } function update_manifest_files() { - [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function - osm_services="nbi lcm ro pol mon ng-ui keystone pla" + osm_services="nbi lcm ro pol mon ng-ui keystone pla prometheus" list_of_services="" for module in $osm_services; do module_upper="${module^^}" @@ -608,15 +619,19 @@ EOF" sudo sed -i "s|Proxy.*|Proxy \"${OSM_APT_PROXY}\"; }|" ${OSM_APT_PROXY_FILE} fi sudo apt-get update || FATAL "Configured apt proxy, but couldn't run 'apt-get update'. Check ${OSM_APT_PROXY_FILE}" - track apt_proxy_configured + track prereq apt_proxy_configured_ok [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } function install_osm() { [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function - track checkingroot + + trap ctrl_c INT + track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none installation_type $OSM_INSTALLATION_TYPE none none + + track checks checkingroot_ok [ "$USER" == "root" ] && FATAL "You are running the installer as root. The installer is prepared to be executed as a normal user with sudo privileges." - track noroot + track checks noroot_ok [ -z "$ASSUME_YES" ] && ! ask_user "The installation will do the following 1. Install and configure LXD @@ -626,7 +641,7 @@ function install_osm() { 5. Install and initialize Kubernetes as pre-requirements. Do you want to proceed (Y/n)? " y && echo "Cancelled!" && exit 1 - track proceed + track checks proceed_ok echo "Installing OSM" @@ -634,7 +649,7 @@ function install_osm() { 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 s ${DEFAULT_IF} |awk '{split($4,a,"/"); print a[1]}'` + DEFAULT_IP=`ip -o -4 a s ${DEFAULT_IF} |awk '{split($4,a,"/"); print a[1]; exit}'` [ -z "$DEFAULT_IP" ] && FATAL "Not possible to determine the IP address of the interface with the default route" # configure apt proxy @@ -642,41 +657,36 @@ function install_osm() { # if no host is passed in, we need to install lxd/juju, unless explicilty asked not to if [ -z "$OSM_VCA_HOST" ] && [ -z "$INSTALL_NOLXD" ] && [ -z "$LXD_CLOUD_FILE" ]; then - need_packages_lw="snapd" - echo -e "Checking required packages: $need_packages_lw" - dpkg -l $need_packages_lw &>/dev/null \ - || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \ - || sudo apt-get update \ - || FATAL "failed to run apt-get update" - dpkg -l $need_packages_lw &>/dev/null \ - || ! echo -e "Installing $need_packages_lw requires root privileges." \ - || sudo apt-get install -y $need_packages_lw \ - || FATAL "failed to install $need_packages_lw" install_lxd fi - track prereqok + track prereq prereqok_ok - [ -n "$INSTALL_NODOCKER" ] || $OSM_DEVOPS/installers/install_docker_ce.sh -p $DOCKER_PROXY_URL -D $OSM_DEVOPS $DEBUG_INSTALL + if [ ! -n "$INSTALL_NODOCKER" ]; then + DOCKER_CE_OPTS="-D ${OSM_DEVOPS} ${DEBUG_INSTALL}" + [ -n "${DOCKER_PROXY_URL}" ] && DOCKER_CE_OPTS="${DOCKER_CE_OPTS} -p ${DOCKER_PROXY_URL}" + $OSM_DEVOPS/installers/install_docker_ce.sh ${DOCKER_CE_OPTS} || FATAL_TRACK docker_ce "install_docker_ce.sh failed" + fi - track docker_ce + track docker_ce docker_ce_ok echo "Creating folders for installation" [ ! -d "$OSM_DOCKER_WORK_DIR" ] && sudo mkdir -p $OSM_DOCKER_WORK_DIR [ ! -d "$OSM_DOCKER_WORK_DIR/osm_pla" -a -n "$INSTALL_PLA" ] && sudo mkdir -p $OSM_DOCKER_WORK_DIR/osm_pla sudo cp -b $OSM_DEVOPS/installers/docker/cluster-config.yaml $OSM_DOCKER_WORK_DIR/cluster-config.yaml - $OSM_DEVOPS/installers/install_kubeadm_cluster.sh -i ${DEFAULT_IP} -d ${OSM_DOCKER_WORK_DIR} -D ${OSM_DEVOPS} ${DEBUG_INSTALL} - track k8scluster + $OSM_DEVOPS/installers/install_kubeadm_cluster.sh -i ${DEFAULT_IP} -d ${OSM_DOCKER_WORK_DIR} -D ${OSM_DEVOPS} ${DEBUG_INSTALL} || \ + FATAL_TRACK k8scluster "install_kubeadm_cluster.sh failed" + track k8scluster k8scluster_ok JUJU_OPTS="-D ${OSM_DEVOPS} -s ${OSM_STACK_NAME} -i ${DEFAULT_IP} ${DEBUG_INSTALL} ${INSTALL_NOJUJU} ${INSTALL_CACHELXDIMAGES}" [ -n "${OSM_VCA_HOST}" ] && JUJU_OPTS="$JUJU_OPTS -H ${OSM_VCA_HOST}" [ -n "${LXD_CLOUD_FILE}" ] && JUJU_OPTS="$JUJU_OPTS -l ${LXD_CLOUD_FILE}" [ -n "${LXD_CRED_FILE}" ] && JUJU_OPTS="$JUJU_OPTS -L ${LXD_CRED_FILE}" [ -n "${CONTROLLER_NAME}" ] && JUJU_OPTS="$JUJU_OPTS -K ${CONTROLLER_NAME}" - $OSM_DEVOPS/installers/install_juju.sh ${JUJU_OPTS} + $OSM_DEVOPS/installers/install_juju.sh ${JUJU_OPTS} || FATAL_TRACK juju "install_juju.sh failed" set_vca_variables - track juju + track juju juju_ok if [ -z "$OSM_DATABASE_COMMONKEY" ]; then OSM_DATABASE_COMMONKEY=$(generate_secret) @@ -685,42 +695,46 @@ function install_osm() { # Deploy OSM services [ -z "$DOCKER_NOBUILD" ] && generate_docker_images - track docker_build + track docker_images docker_images_ok generate_k8s_manifest_files - track manifest_files + track osm_files manifest_files_ok generate_docker_env_files - track env_files + track osm_files env_files_ok deploy_charmed_services + track deploy_osm deploy_charmed_services_ok kube_secrets + track deploy_osm kube_secrets_ok update_manifest_files + track deploy_osm update_manifest_files_ok namespace_vol + track deploy_osm namespace_vol_ok deploy_osm_services + track deploy_osm deploy_osm_services_k8s_ok if [ -n "$INSTALL_PLA"]; then # optional PLA install deploy_osm_pla_service - track deploy_osm_pla + track deploy_osm deploy_osm_pla_ok fi - track deploy_osm_services_k8s if [ -n "$INSTALL_K8S_MONITOR" ]; then # install OSM MONITORING install_k8s_monitoring - track install_k8s_monitoring + track deploy_osm install_k8s_monitoring_ok fi [ -z "$INSTALL_NOHOSTCLIENT" ] && install_osmclient - track osmclient + track osmclient osmclient_ok echo -e "Checking OSM health state..." $OSM_DEVOPS/installers/osm_health.sh -s ${OSM_STACK_NAME} -k || \ - echo -e "OSM is not healthy, but will probably converge to a healthy state soon." && \ + (echo -e "OSM is not healthy, but will probably converge to a healthy state soon." && \ echo -e "Check OSM status with: kubectl -n ${OSM_STACK_NAME} get all" && \ - track osm_unhealthy - track after_healthcheck + track healthchecks osm_unhealthy didnotconverge) + track healthchecks after_healthcheck_ok add_local_k8scluster - track add_local_k8scluster + track final_ops add_local_k8scluster_ok wget -q -O- https://osm-download.etsi.org/ftp/osm-11.0-eleven/README2.txt &> /dev/null track end @@ -787,7 +801,7 @@ function install_k8s_monitoring() { [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function # install OSM monitoring sudo chmod +x $OSM_DEVOPS/installers/k8s/*.sh - sudo $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh + sudo $OSM_DEVOPS/installers/k8s/install_osm_k8s_monitoring.sh || FATAL_TRACK install_k8s_monitoring "k8s/install_osm_k8s_monitoring.sh failed" [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } @@ -821,6 +835,8 @@ function dump_vars(){ echo "OPENSTACK_VM_NAME"="$OPENSTACK_VM_NAME" echo "OSM_DEVOPS=$OSM_DEVOPS" echo "OSM_DOCKER_TAG=$OSM_DOCKER_TAG" + echo "OSM_DOCKER_WORK_DIR=$OSM_DOCKER_WORK_DIR" + echo "OSM_K8S_WORK_DIR=$OSM_K8S_WORK_DIR" echo "OSM_STACK_NAME=$OSM_STACK_NAME" echo "OSM_VCA_HOST=$OSM_VCA_HOST" echo "OSM_VCA_PUBKEY=$OSM_VCA_PUBKEY" @@ -849,9 +865,16 @@ function parse_docker_registry_url() { [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function } +function ctrl_c() { + [ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function + echo "** Trapped CTRL-C" + FATAL "User stopped the installation" + [ -z "${DEBUG_INSTALL}" ] || DEBUG end of function +} + LXD_VERSION=4.0 JUJU_VERSION=2.9 -JUJU_AGENT_VERSION=2.9.17 +JUJU_AGENT_VERSION=2.9.22 UNINSTALL="" DEVELOP="" UPDATE="" @@ -907,8 +930,9 @@ OSM_DOCKER_TAG=latest DOCKER_USER=opensourcemano PULL_IMAGES="y" KAFKA_TAG=2.11-1.0.2 -PROMETHEUS_TAG=v2.4.3 -GRAFANA_TAG=latest +KIWIGRID_K8S_SIDECAR_TAG="1.15.6" +PROMETHEUS_TAG=v2.28.1 +GRAFANA_TAG=8.1.1 PROMETHEUS_NODE_EXPORTER_TAG=0.18.1 PROMETHEUS_CADVISOR_TAG=latest KEYSTONEDB_TAG=10 @@ -921,6 +945,7 @@ RE_CHECK='^[a-z0-9]([-a-z0-9]*[a-z0-9])?$' DOCKER_REGISTRY_URL= DOCKER_PROXY_URL= MODULE_DOCKER_TAG= +OSM_INSTALLATION_TYPE="Default" while getopts ":a:b:r:n:k:u:R:D:o:O:m:N:H:S:s:t:U:P:A:l:L:K:d:p:T:f:F:-: hy" o; do case "${o}" in @@ -1048,7 +1073,7 @@ while getopts ":a:b:r:n:k:u:R:D:o:O:m:N:H:S:s:t:U:P:A:l:L:K:d:p:T:f:F:-: hy" o; [ "${OPTARG}" == "nohostclient" ] && INSTALL_NOHOSTCLIENT="y" && continue [ "${OPTARG}" == "pullimages" ] && continue [ "${OPTARG}" == "k8s_monitor" ] && INSTALL_K8S_MONITOR="y" && continue - [ "${OPTARG}" == "charmed" ] && CHARMED="y" && continue + [ "${OPTARG}" == "charmed" ] && CHARMED="y" && OSM_INSTALLATION_TYPE="Charmed" && continue [ "${OPTARG}" == "bundle" ] && continue [ "${OPTARG}" == "k8s" ] && continue [ "${OPTARG}" == "lxd" ] && continue @@ -1095,9 +1120,11 @@ source $OSM_DEVOPS/common/all_funcs # Uninstall if "--uninstall" if [ -n "$UNINSTALL" ]; then if [ -n "$CHARMED" ]; then - ${OSM_DEVOPS}/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D $OSM_DEVOPS -t $DOCKER_TAG "$@" + ${OSM_DEVOPS}/installers/charmed_uninstall.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D $OSM_DEVOPS -t $DOCKER_TAG "$@" || \ + FATAL_TRACK charmed_uninstall "charmed_uninstall.sh failed" else - ${OSM_DEVOPS}/installers/uninstall_osm.sh "$@" + ${OSM_DEVOPS}/installers/uninstall_osm.sh "$@" || \ + FATAL_TRACK community_uninstall "uninstall_osm.sh failed" fi echo -e "\nDONE" exit 0 @@ -1105,7 +1132,12 @@ fi # Charmed installation if [ -n "$CHARMED" ]; then - ${OSM_DEVOPS}/installers/charmed_install.sh -R $RELEASE -r $REPOSITORY -u $REPOSITORY_BASE -D $OSM_DEVOPS -t $DOCKER_TAG "$@" + export OSM_TRACK_INSTALLATION_ID="$(date +%s)-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)" + track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none installation_type $OSM_INSTALLATION_TYPE none none + ${OSM_DEVOPS}/installers/charmed_install.sh --tag $OSM_DOCKER_TAG "$@" || \ + FATAL_TRACK charmed_install "charmed_install.sh failed" + wget -q -O- https://osm-download.etsi.org/ftp/osm-11.0-eleven/README2.txt &> /dev/null + track end installation_type $OSM_INSTALLATION_TYPE echo -e "\nDONE" exit 0 fi @@ -1125,17 +1157,8 @@ fi # if develop, we force master [ -z "$COMMIT_ID" ] && [ -n "$DEVELOP" ] && COMMIT_ID="master" -need_packages="git wget curl tar" - -echo -e "Checking required packages: $need_packages" -dpkg -l $need_packages &>/dev/null \ - || ! echo -e "One or several required packages are not installed. Updating apt cache requires root privileges." \ - || sudo apt-get update \ - || FATAL "failed to run apt-get update" -dpkg -l $need_packages &>/dev/null \ - || ! echo -e "Installing $need_packages requires root privileges." \ - || sudo apt-get install -y $need_packages \ - || FATAL "failed to install $need_packages" +check_packages "git wget curl tar snapd" + sudo snap install jq if [ -z "$OSM_DEVOPS" ]; then if [ -n "$TEST_INSTALLER" ]; then @@ -1169,22 +1192,7 @@ OSM_K8S_WORK_DIR="$OSM_DOCKER_WORK_DIR/osm_pods" && OSM_NAMESPACE_VOL="${OSM_HOS #Installation starts here wget -q -O- https://osm-download.etsi.org/ftp/osm-11.0-eleven/README.txt &> /dev/null -OSM_INSTALLATION_ID="$(date +%s)-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)" - -track start release $RELEASE none none docker_tag $OSM_DOCKER_TAG none none - +export OSM_TRACK_INSTALLATION_ID="$(date +%s)-$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16)" install_osm -echo -e "\nDONE" && exit 0 -echo -e "\nInstalling OSM from refspec: $COMMIT_ID" -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 - -echo -e "Checking required packages: lxd" -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-11.0-eleven/README2.txt &> /dev/null -track end echo -e "\nDONE" - +exit 0