From ea0fec328d9aa0d81b832a580e329afa778bd6e5 Mon Sep 17 00:00:00 2001 From: Trinh Nguyen Date: Thu, 14 Mar 2019 18:41:18 +0900 Subject: [PATCH] Move elasticsearch installation script to panko Only panko uses the openstack-dev/devstack/pkg/elasticsearch.sh script. It is a good practice to move it here and maintain the the way we want. Change-Id: I9119d4d720318fe9d1aa1bd8a6a4946dfa61940d --- devstack/lib/elasticsearch.sh | 152 ++++++++++++++++++++++++++++++++++ devstack/plugin.sh | 4 +- 2 files changed, 154 insertions(+), 2 deletions(-) create mode 100644 devstack/lib/elasticsearch.sh diff --git a/devstack/lib/elasticsearch.sh b/devstack/lib/elasticsearch.sh new file mode 100644 index 00000000..2fd3e46d --- /dev/null +++ b/devstack/lib/elasticsearch.sh @@ -0,0 +1,152 @@ +#!/bin/bash -xe + +# basic reference point for things like filecache +# +# TODO(sdague): once we have a few of these I imagine the download +# step can probably be factored out to something nicer +TOP_DIR=$(cd $(dirname "$0")/.. && pwd) +FILES=$TOP_DIR/files +source $TOP_DIR/stackrc + +# Package source and version, all pkg files are expected to have +# something like this, as well as a way to override them. +ELASTICSEARCH_VERSION=${ELASTICSEARCH_VERSION:-1.7.5} +ELASTICSEARCH_BASEURL=${ELASTICSEARCH_BASEURL:-https://download.elasticsearch.org/elasticsearch/elasticsearch} + +# Elastic search actual implementation +function wget_elasticsearch { + local file=${1} + + if [ ! -f ${FILES}/${file} ]; then + wget $ELASTICSEARCH_BASEURL/${file} -O ${FILES}/${file} + fi + + if [ ! -f ${FILES}/${file}.sha1.txt ]; then + wget $ELASTICSEARCH_BASEURL/${file}.sha1.txt -O ${FILES}/${file}.sha1.txt + fi + + pushd ${FILES}; sha1sum ${file} > ${file}.sha1.gen; popd + + if ! diff ${FILES}/${file}.sha1.gen ${FILES}/${file}.sha1.txt; then + echo "Invalid elasticsearch download. Could not install." + return 1 + fi + return 0 +} + +function download_elasticsearch { + if is_ubuntu; then + wget_elasticsearch elasticsearch-${ELASTICSEARCH_VERSION}.deb + elif is_fedora || is_suse; then + wget_elasticsearch elasticsearch-${ELASTICSEARCH_VERSION}.noarch.rpm + fi +} + +function configure_elasticsearch { + # currently a no op + : +} + +function _check_elasticsearch_ready { + # poll elasticsearch to see if it's started + if ! wait_for_service 120 http://localhost:9200; then + die $LINENO "Maximum timeout reached. Could not connect to ElasticSearch" + fi +} + +function start_elasticsearch { + if is_ubuntu; then + sudo /etc/init.d/elasticsearch start + _check_elasticsearch_ready + elif is_fedora; then + sudo /bin/systemctl start elasticsearch.service + _check_elasticsearch_ready + elif is_suse; then + sudo /usr/bin/systemctl start elasticsearch.service + _check_elasticsearch_ready + else + echo "Unsupported architecture...can not start elasticsearch." + fi +} + +function stop_elasticsearch { + if is_ubuntu; then + sudo /etc/init.d/elasticsearch stop + elif is_fedora; then + sudo /bin/systemctl stop elasticsearch.service + elif is_suse ; then + sudo /usr/bin/systemctl stop elasticsearch.service + else + echo "Unsupported architecture...can not stop elasticsearch." + fi +} + +function install_elasticsearch { + pip_install_gr elasticsearch + if is_package_installed elasticsearch; then + echo "Note: elasticsearch was already installed." + return + fi + if is_ubuntu; then + if [[ ${DISTRO} == "bionic" ]]; then + is_package_installed openjdk-8-jre-headless || install_package openjdk-8-jre-headless + else + is_package_installed default-jre-headless || install_package default-jre-headless + fi + + sudo dpkg -i ${FILES}/elasticsearch-${ELASTICSEARCH_VERSION}.deb + sudo update-rc.d elasticsearch defaults 95 10 + elif is_fedora; then + is_package_installed java-1.8.0-openjdk-headless || install_package java-1.8.0-openjdk-headless + yum_install ${FILES}/elasticsearch-${ELASTICSEARCH_VERSION}.noarch.rpm + sudo /bin/systemctl daemon-reload + sudo /bin/systemctl enable elasticsearch.service + elif is_suse; then + is_package_installed java-1_8_0-openjdk-headless || install_package java-1_8_0-openjdk-headless + zypper_install --no-gpg-checks ${FILES}/elasticsearch-${ELASTICSEARCH_VERSION}.noarch.rpm + sudo /usr/bin/systemctl daemon-reload + sudo /usr/bin/systemctl enable elasticsearch.service + else + echo "Unsupported install of elasticsearch on this architecture." + fi +} + +function uninstall_elasticsearch { + if is_package_installed elasticsearch; then + if is_ubuntu; then + sudo apt-get purge elasticsearch + elif is_fedora; then + sudo yum remove elasticsearch + elif is_suse; then + sudo zypper rm elasticsearch + else + echo "Unsupported install of elasticsearch on this architecture." + fi + fi +} + +# The PHASE dispatcher. All pkg files are expected to basically cargo +# cult the case statement. +PHASE=$1 +echo "Phase is $PHASE" + +case $PHASE in + download) + download_elasticsearch + ;; + install) + install_elasticsearch + ;; + configure) + configure_elasticsearch + ;; + start) + start_elasticsearch + ;; + stop) + stop_elasticsearch + ;; + uninstall) + uninstall_elasticsearch + ;; +esac diff --git a/devstack/plugin.sh b/devstack/plugin.sh index 3742e3e8..18834281 100644 --- a/devstack/plugin.sh +++ b/devstack/plugin.sh @@ -101,8 +101,8 @@ function _panko_prepare_storage_backend { fi if [ "$PANKO_BACKEND" = 'es' ] ; then - ${TOP_DIR}/pkg/elasticsearch.sh download - ${TOP_DIR}/pkg/elasticsearch.sh install + $PANKO_DIR/devstack/lib/elasticsearch.sh download + $PANKO_DIR/devstack/lib/elasticsearch.sh install fi }