| #!/bin/bash |
| |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| # Eagle Ambari Plugin |
| # |
| # Author: hchen9@xyz.com |
| # Version: 0.0.1 |
| # |
| # Plan: |
| # 1. Implement create service through REST API: https://cwiki.apache.org/confluence/display/AMBARI/Adding+a+New+Service+to+an+Existing+Cluster |
| # 2. Integrate with ambari configuration |
| |
| AMBARI_HOST=localhost |
| AMBARI_PORT=8080 |
| AMBARI_CLUSTER_NAME=Sandbox |
| AMBARI_USER=admin |
| AMBARI_PASSWORD=admin |
| |
| EAGLE_VERSION=0.0.1 |
| HDP_VERSION=2.0.6 |
| |
| AMBARI_SERVER_HOME=/var/lib/ambari-server/ |
| AMBARI_EAGLE_STACK_DIR=/var/lib/ambari-server/resources/stacks/HDP/${HDP_VERSION}/services/EAGLE/ |
| AMBARI_EAGLE_COMMON_DIR=/var/lib/ambari-server/resources/common-services/EAGLE/${EAGLE_VERSION}/ |
| DEFAULT_EAGLE_HOME=/usr/hdp/current/eagle |
| AMBARI_SERVER_APP_JS=/usr/lib/ambari-server/web/javascripts/app.js.gz |
| |
| cd `dirname $0`/../ |
| |
| function usage() { |
| echo "Usage: $0 [options] {start|stop|install|uninstall}" |
| |
| echo "" |
| echo "Eagle Version: ${EAGLE_VERSION} HDP Version: ${HDP_VERSION}" |
| echo "" |
| echo "Commands:" |
| echo " start Start EAGLE components in Ambari" |
| echo " stop Stop EAGLE components in Ambari" |
| echo " install Install EAGLE components into Ambari" |
| echo " uninstall Uninstall EAGLE components from from Ambari" |
| echo "Options:" |
| echo " --host Ambari server host, default: localhost" |
| echo " --port Ambari server port, default: 8080" |
| echo " --cluster Ambari cluster name, default: Sandbox" |
| echo " --user Ambari account username, default: admin" |
| echo " --password Ambari account password, default: admin" |
| echo "" |
| exit 1 |
| } |
| |
| function install(){ |
| if [ -z "$EAGLE_HOME" ];then |
| EAGLE_HOME=$DEFAULT_EAGLE_HOME |
| else |
| echo "EAGLE_HOME: $EAGLE_HOME" |
| fi |
| |
| if [ ! -e $EAGLE_HOME ]; then |
| echo "Failure: ${EAGLE_HOME} not exists, please download latest eagle package and install to ${EAGLE_HOME}" |
| exit 1 |
| fi |
| |
| if [ ! -e $AMBARI_SERVER_HOME ];then |
| echo "Failure: $AMBARI_SERVER_HOME not exists, maybe because Ambari server is not installed" |
| exit 1 |
| fi |
| |
| echo "Install EAGLE Ambari Plugin" |
| # 1. Install EAGLE service into /var/lib/ambari-server/resources/stacks/HDP/2.0.6/services/EAGLE/ |
| echo "> Installing $AMBARI_EAGLE_STACK_DIR" |
| if [ -e $AMBARI_EAGLE_STACK_DIR ];then |
| echo "${AMBARI_EAGLE_STACK_DIR} already exists, override ..." |
| rm -rf $AMBARI_EAGLE_STACK_DIR |
| fi |
| |
| mkdir -p $AMBARI_EAGLE_STACK_DIR |
| cp lib/metainfo.xml $AMBARI_EAGLE_STACK_DIR |
| |
| # 2. Install EAGLE package into /var/lib/ambari-server/resources/common-services/EAGLE/0.0.1/ |
| echo "> Installing $AMBARI_EAGLE_COMMON_DIR" |
| if [ -e $AMBARI_EAGLE_COMMON_DIR ];then |
| echo "${AMBARI_EAGLE_COMMON_DIR} already exists, override ..." |
| fi |
| |
| mkdir -p $AMBARI_EAGLE_COMMON_DIR |
| cp -rf lib/EAGLE/* $AMBARI_EAGLE_COMMON_DIR |
| |
| # 3. Install eagle quick links |
| echo "> Installing eagle quick links" |
| if [ ! -e lib/EAGLE/package/patches/app.js.gz ];then |
| gzip lib/EAGLE/package/patches/app.js lib/EAGLE/package/patches/app.js.gz |
| fi |
| cp lib/EAGLE/package/patches/app.js.gz $AMBARI_SERVER_APP_JS |
| |
| # create |
| echo "" |
| |
| which ambari-server >/dev/null 2>&1 |
| if [ $? == 0 ];then |
| echo "Restarting ambari server" |
| ambari-server restart |
| echo "Congratulations! you almost finish, please add EAGLE through Ambari UI" |
| else |
| echo "Congratulations! you almost finish, please restart ambari server by 'ambari-sever restart' and add EAGLE through Ambari UI" |
| fi |
| |
| exit 0 |
| } |
| |
| function uninstall(){ |
| echo "Stopping EAGLE" |
| echo "" |
| curl -u $AMBARI_USER:$AMBARI_PASSWORD -i -H 'X-Requested-By: ${AMBARI_USER}' -X PUT -d '{"RequestInfo": {"context" :"Stop EAGLE via REST"}, "Body": {"ServiceInfo": {"state": "INSTALLED"}}}' http://${AMBARI_HOST}:${AMBARI_PORT}/api/v1/clusters/${AMBARI_CLUSTER_NAME}/services/EAGLE |
| |
| echo "Uninstalling EAGLE" |
| curl -H "X-Requested-By: $AMBARI_USER" -u $AMBARI_USER:$AMBARI_PASSWORD -X DELETE http://${AMBARI_HOST}:${AMBARI_PORT}/api/v1/clusters/${AMBARI_CLUSTER_NAME}/services/EAGLE |
| |
| echo "Finished to uninstall EAGLE from Ambari" |
| } |
| |
| function create(){ |
| # TODO: Fix bug in service creation |
| |
| echo "WARNING: Creating EAGLE service in Ambari, which still has problem" |
| echo "" |
| curl -u $AMBARI_USER:$AMBARI_PASSWORD -i -H 'X-Requested-By: ${AMBARI_USER}' -i -X POST -d '{"ServiceInfo":{"service_name":"EAGLE"}}' http://${AMBARI_HOST}:${AMBARI_PORT}/api/v1/clusters/${AMBARI_CLUSTER_NAME}/services |
| curl -u $AMBARI_USER:$AMBARI_PASSWORD -i -H 'X-Requested-By: ${AMBARI_USER}' -i -X POST -d '{"components":[{"ServiceComponentInfo":{"component_name":"EAGLE_SERVICE"}},{"ServiceComponentInfo":{"component_name":"EAGLE_TOPOLOGY"}}]}' http://${AMBARI_HOST}:${AMBARI_PORT}/api/v1/clusters/${AMBARI_CLUSTER_NAME}/services?ServiceInfo/service_name=EAGLE |
| curl -u $AMBARI_USER:$AMBARI_PASSWORD -i -H 'X-Requested-By: ${AMBARI_USER}' -X PUT -d '{"RequestInfo": {"context" :"Installing EAGLE via REST", "operation_level":{"level":"CLUSTER","cluster_name":"$AMABRI_CLUSTER_NAME"}}, "Body": {"ServiceInfo": {"state": "INSTALLED"}}}' "http://${AMBARI_HOST}:${AMBARI_PORT}/api/v1/clusters/${AMBARI_CLUSTER_NAME}/services?ServiceInfo/service_name.in(EAGLE)" |
| } |
| |
| function start(){ |
| echo "Starting EAGLE" |
| echo "" |
| curl -u $AMBARI_USER:$AMBARI_PASSWORD -i -H 'X-Requested-By: ${AMBARI_USER}' -X PUT -d '{"RequestInfo": {"context" :"Start EAGLE via REST"}, "Body": {"ServiceInfo": {"state": "STARTED"}}}' http://${AMBARI_HOST}:${AMBARI_PORT}/api/v1/clusters/${AMBARI_CLUSTER_NAME}/services/EAGLE |
| } |
| |
| function stop(){ |
| echo "Stopping EAGLE" |
| echo "" |
| curl -u $AMBARI_USER:$AMBARI_PASSWORD -i -H 'X-Requested-By: ${AMBARI_USER}' -X PUT -d '{"RequestInfo": {"context" :"Stop EAGLE via REST"}, "Body": {"ServiceInfo": {"state": "INSTALLED"}}}' http://${AMBARI_HOST}:${AMBARI_PORT}/api/v1/clusters/${AMBARI_CLUSTER_NAME}/services/EAGLE |
| } |
| |
| case $1 in |
| "--host") |
| if [ $# -lt 2 ]; then |
| usage |
| exit 1 |
| fi |
| AMBARI_HOST=$2 |
| shift 2 |
| ;; |
| "--port") |
| if [ $# -lt 2 ]; then |
| usage |
| exit 1 |
| fi |
| AMBARI_PORT=$2 |
| shift 2 |
| ;; |
| "--cluster") |
| if [ $# -lt 2 ]; then |
| usage |
| exit 1 |
| fi |
| AMBARI_CLUSTER=$2 |
| shift 2 |
| ;; |
| "--user") |
| if [ $# -lt 2 ]; then |
| usage |
| exit 1 |
| fi |
| AMBARI_USER=$2 |
| shift 2 |
| ;; |
| "--password") |
| if [ $# -lt 2 ]; then |
| usage |
| exit 1 |
| fi |
| AMBARI_PASSWORD=$2 |
| shift 2 |
| ;; |
| "install") |
| install |
| exit |
| ;; |
| "uninstall") |
| uninstall |
| exit |
| ;; |
| "start") |
| start |
| exit |
| ;; |
| "stop") |
| stop |
| exit |
| ;; |
| *) |
| usage |
| exit 1 |
| ;; |
| esac |