Created
August 3, 2015 08:44
-
-
Save ConoHa/e580397e313a3a352f0f to your computer and use it in GitHub Desktop.
このべんHadoopセットアップ記事-Slaveノード自動起動スクリプト
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/sh | |
| CURL_COMMAND="/usr/bin/curl -Ssif" | |
| JQ_COMMAND="/usr/bin/jq" | |
| CURL_HTTP_METHOD_POST="-X POST" | |
| CURL_HTTP_METHOD_GET="-X GET" | |
| CURL_HTTP_METHOD_PUT="-X PUT" | |
| CURL_HTTP_HEADER_ACCEPT_JSON='-H Accept:application/json' | |
| CURL_HTTP_CONTENT_TYPE_JSON='-H Content-Type:application/json' | |
| CONOHA_ENDPOINT_IDENTITY_SERVICE="https://identity.tyo1.conoha.io/v2.0/tokens" | |
| CONOHA_ENDPOINT_TOKYO_COMPUTE_SERVICE="https://compute.tyo1.conoha.io/v2" | |
| UUID_IMAGE_CENTOS_66="14961158-a69c-4af1-b375-b9a72982837d" | |
| UUID_IMAGE_HADOOP_SLAVENODE="acfb0e18-2be5-4f35-b073-af7ecd252bfb" | |
| requestNewAPIToken() { | |
| API_USERNAME=${1} | |
| API_PASSWORD=${2} | |
| API_TENANTID=${3} | |
| REQUEST_TOKEN_BODY='{"auth":{"passwordCredentials":{"username":"'${API_USERNAME}'","password":"'${API_PASSWORD}'"},"tenantId":"'${API_TENANTID}'"}}' | |
| JQ_GET_TOKEN_ID="jq .access.token.id" | |
| NEW_TOKEN_COMMAND="${CURL_COMMAND} ${CURL_HTTP_METHOD_POST} ${CURL_HTTP_HEADER_ACCEPT_JSON} -d ${REQUEST_TOKEN_BODY} ${CONOHA_ENDPOINT_IDENTITY_SERVICE}" | |
| NEW_TOKEN=`${NEW_TOKEN_COMMAND} 2>/dev/null | tail -n 1 | ${JQ_GET_TOKEN_ID}` | |
| echo ${NEW_TOKEN} | |
| } | |
| generateHeaderToken() { | |
| API_TOKEN=${1} | |
| echo '-H X-Auth-Token:'${API_TOKEN}'' | |
| } | |
| startNewSlaveNode() { | |
| API_TOKEN=${1} | |
| API_TENANTID=${2} | |
| UUID_FLAVOR_SELECTED=${3} | |
| VPS_ROOT_PASSWORD=${4} | |
| SECURITY_GROUP='[{"name":"gncs-ipv4-all"}]' | |
| START_NEW_VM_BODY='{"server":{"imageRef":"'${UUID_IMAGE_HADOOP_SLAVENODE}'","flavorRef":"'${UUID_FLAVOR_SELECTED}'","adminPass":"'${VPS_ROOT_PASSWORD}'","security_groups":'${SECURITY_GROUP}'}}' | |
| HEADER_TOKEN=`generateHeaderToken ${API_TOKEN}` | |
| NEWVM_COMMAND="${CURL_COMMAND} ${CURL_HTTP_METHOD_POST} ${CURL_HTTP_HEADER_ACCEPT_JSON} ${HEADER_TOKEN} -d ${START_NEW_VM_BODY} ${CONOHA_ENDPOINT_TOKYO_COMPUTE_SERVICE}/${API_TENANTID}/servers" | |
| NEW_SLAVENODE_UUID=`${NEWVM_COMMAND} | tail -n 1 | jq '.server.id'` | |
| echo ${NEW_SLAVENODE_UUID} | |
| } | |
| askNametag() { | |
| API_TOKEN=${1} | |
| API_TENANTID=${2} | |
| VM_UUID=${3} | |
| HEADER_TOKEN=`generateHeaderToken ${API_TOKEN}` | |
| ASK_NAMETAG_COMMAND="${CURL_COMMAND} ${CURL_HTTP_METHOD_GET} ${CURL_HTTP_CONTENT_TYPE_JSON} ${CURL_HTTP_HEADER_ACCEPT_JSON} ${HEADER_TOKEN} ${CONOHA_ENDPOINT_TOKYO_COMPUTE_SERVICE}/${API_TENANTID}/servers/${VM_UUID}/metadata" | |
| JQ_GET_HOSTNAME="jq .metadata.instance_name_tag" | |
| NEW_INSTANCE_NAMETAG=`${ASK_NAMETAG_COMMAND}| tail -n 1 |${JQ_GET_HOSTNAME}` | |
| echo ${NEW_INSTANCE_NAMETAG} | |
| } | |
| nametagToDefaultHostname() { | |
| NAMETAG=${1} | |
| echo "host-"${NAMETAG} | |
| } | |
| nametagToIPAddress(){ | |
| NAMETAG=${1} | |
| echo ${NAMETAG} | sed -e 's/-/\./g' | |
| } | |
| writeHostsFormat() { | |
| NAMETAG=${1} | |
| echo -e `nametagToIPAddress ${NAMETAG}`"\t"`nametagToDefaultHostname ${NAMETAG}` >> hosts | |
| } | |
| writeAnsibleInventoryFormat() { | |
| NAMETAG=${1} | |
| echo -e `nametagToDefaultHostname ${NAMETAG}` >> inventory | |
| } | |
| updateNametag() { | |
| API_TOKEN=${1} | |
| API_TENANTID=${2} | |
| VM_UUID=${3} | |
| NEW_NAMETAG=${4} | |
| HEADER_TOKEN=`generateHeaderToken ${API_TOKEN}` | |
| UPDATE_NAMETAG_BODY='{"metadata":{"instance_name_tag":"'${NEW_NAMETAG}'"}}' | |
| UPDATE_NAMETAG_COMMAND="${CURL_COMMAND} ${CURL_HTTP_METHOD_POST} ${CURL_HTTP_CONTENT_TYPE_JSON} ${CURL_HTTP_HEADER_ACCEPT_JSON} ${HEADER_TOKEN} -d ${UPDATE_NAMETAG_BODY} ${CONOHA_ENDPOINT_TOKYO_COMPUTE_SERVICE}/${API_TENANTID}/servers/${VM_UUID}/metadata" | |
| # ${UPDATE_NAMETAG_COMMAND} | |
| } | |
| addNewSlaveNode() { | |
| TOKEN=${1} | |
| API_TENANTID=${2} | |
| UUID_FLAVOR_SELECTED=${3} | |
| VPS_ROOT_PASSWORD=${4} | |
| SERVER_UUID=`startNewSlaveNode ${TOKEN} ${API_TENANTID} ${UUID_FLAVOR_SELECTED} ${VPS_ROOT_PASSWORD} | sed -e "s/\"//g"` | |
| NAMETAG_RAW=`askNametag ${TOKEN} ${API_TENANTID} ${SERVER_UUID}` | |
| NAMETAG=`echo ${NAMETAG_RAW}|sed -e "s/\"//g"` | |
| if [ "${NAMETAG}" = "null" ] || [ "${NAMETAG}" = "" ]; | |
| then | |
| echo "Failed to start vm or get nametag." 1>&2 | |
| exit 1 | |
| fi | |
| writeHostsFormat ${NAMETAG} | |
| writeAnsibleInventoryFormat ${NAMETAG} | |
| NEW_NAMETAG="Hadoop-slave-"${NAMETAG} | |
| updateNametag ${TOKEN} ${API_TENANTID} ${SERVER_UUID} ${NEW_NAMETAG} | |
| } | |
| selectFlavor() { | |
| FLAVOR_ARGS=${1} | |
| UUID_FLAVOR_1GB="7eea7469-0d85-4f82-8050-6ae742394681" | |
| UUID_FLAVOR_2GB="294639c7-72ba-43a5-8ff2-513c8995b869" | |
| UUID_FLAVOR_4GB="62e8fb4b-6a26-46cd-be13-e5bbf5614d15" | |
| UUID_FLAVOR_8GB="965affd4-d9e8-4ffb-b9a9-624d63e2d83f" | |
| UUID_FLAVOR_16GB="3aa001cd-95b6-46c9-a91e-e62d6f7f06a3" | |
| UUID_FLAVOR_32GB="a20905c6-3733-46c4-81cc-458c7dca1bae" | |
| UUID_FLAVOR_64GB="c2a97b05-1b4b-4038-bbcb-343201659279" | |
| case ${FLAVOR_ARGS} in | |
| 1GB) echo ${UUID_FLAVOR_1GB};; | |
| 2GB) echo ${UUID_FLAVOR_2GB};; | |
| 4GB) echo ${UUID_FLAVOR_4GB};; | |
| 8GB) echo ${UUID_FLAVOR_8GB};; | |
| 16GB) echo ${UUID_FLAVOR_16GB};; | |
| 32GB) echo ${UUID_FLAVOR_32GB};; | |
| 64GB) echo ${UUID_FLAVOR_64GB};; | |
| *) echo "Invalid flavor argument"; exit 1; | |
| esac | |
| } | |
| main() { | |
| API_USERNAME=${1} | |
| API_PASSWORD=${2} | |
| API_TENANTID=${3} | |
| VPS_FLAVOR=${4} | |
| NUMBER_OF_SLAVENODES=${5} | |
| VPS_ROOT_PASSWORD=${6} | |
| TOKEN=`requestNewAPIToken ${API_USERNAME} ${API_PASSWORD} ${API_TENANTID} | sed -e s/\"//g` | |
| if [ "${TOKEN}" = "" ] | |
| then | |
| echo "Failed to get token" 1>&2 | |
| exit 1 | |
| fi | |
| FLAVOR_UUID=`selectFlavor ${VPS_FLAVOR}` | |
| for i in `seq ${NUMBER_OF_SLAVENODES}` | |
| do | |
| echo ${i} | |
| addNewSlaveNode ${TOKEN} ${API_TENANTID} ${FLAVOR_UUID} ${VPS_ROOT_PASSWORD} | |
| done | |
| } | |
| main $* |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment