diff --git a/scaleComputeUsingXVA/config.ini b/scaleComputeUsingXVA/config.ini new file mode 100755 index 0000000..4adf915 --- /dev/null +++ b/scaleComputeUsingXVA/config.ini @@ -0,0 +1,19 @@ +[ComputeHost] +#name=xrtuk-11-36 +name=xrtuk-11-36 +#ip=10.62.65.34 +ip=10.71.192.128 +user=root +password=xenroot + +[ComputeNode] +name=computeTest +user=root +password=admin +ip=10.71.193.2 + +[ControlNode] +ip=10.62.20.182 + + + diff --git a/scaleComputeUsingXVA/config_cpu_node.sh b/scaleComputeUsingXVA/config_cpu_node.sh new file mode 100755 index 0000000..f271fa3 --- /dev/null +++ b/scaleComputeUsingXVA/config_cpu_node.sh @@ -0,0 +1,47 @@ +#!/bin/bash +set -x + +source ./readconfig.sh + +set -x + +function init_conf_info() { + CNODE_USER=$(readIni config.ini ComputeNode user) + CNODE_PWD=$(readIni config.ini ComputeNode password) + cnode_ip=$(readIni config.ini ComputeNode ip) + host_ip=$(readIni config.ini ComputeHost ip) + ctl_ip=$(readIni config.ini ControlNode ip) +} + +function config_cnode_entry() { + set -ex + if [ ! -f $CNODE_INFO_FILE ]; then + exit -1 + fi + echo $CNODE_INFO_FILE + init_conf_info + for ip in $cnode_ip + do + echo $cnode_ip + create_no_pwd_access $cnode_ip $CNODE_USER $CNODE_PWD + on_no_pwd_host $cnode_ip $CNODE_USER << CONFIG_CNODE_BLOCK +if ! sudo ls ~root/.ssh; +then + sudo mkdir -p ~root/.ssh/ +fi +CONFIG_CNODE_BLOCK + + scp $_SSH_OPTIONS ssh_key.priv root@$ip:/root/.ssh/id_rsa + scp $_SSH_OPTIONS ssh_key.priv.pub root@$ip:/root/.ssh/id_rsa.pub + + create_no_pwd_access $host_ip root xenroot + on_no_pwd_host $cnode_ip $CNODE_USER << CONFIG_CNODE_BLOCK + +set +e +set -x +sudo sed -i "s/10.62.66.6/$ctl_ip/g" \`grep 10.62.66.6 -rl /etc/\` +DEST=/opt/stack XENAPI_CONNECTION_URL="http://$host_ip" DOMZERO_USER='root' /opt/stack/os-xenapi/devstack/plugin.sh 'stack' install +CONFIG_CNODE_BLOCK + +done +} diff --git a/scaleComputeUsingXVA/prepare_cpu_node.sh b/scaleComputeUsingXVA/prepare_cpu_node.sh new file mode 100644 index 0000000..a038497 --- /dev/null +++ b/scaleComputeUsingXVA/prepare_cpu_node.sh @@ -0,0 +1,112 @@ +#!/bin/bash +set -ex + +source ./readconfig.sh + +ComputeHostName=$(readIni config.ini ComputeHost name) +ComputeHostIP=$(readIni config.ini ComputeHost ip) +ComputeHostUser=$(readIni config.ini ComputeHost user) +ComputeHostPassword=$(readIni config.ini ComputeHost password) +ComputeNodeName=$(readIni config.ini ComputeNode name) +ComputeNodeUser=$(readIni config.ini ComputeNode user) +ComputeNodePassword=$(readIni config.ini ComputeNode password) + + +#sshpass -p "xenroot" ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@xrtmia-07-34.xenrt.citrite.net "pwd; ls" +# ssh_command $host $user $password $command +sudo apt-get install sshpass + +function ssh_command { + sshpass -p ${ComputeHostPassword} ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${ComputeHostUser}@${ComputeHostIP} $@ +} + +VMUUID="" +VMIP="" +ControllerIP="10.62.66.6" + + +function import_cpu { + importXva="xe vm-import filename=/root/computeNodeFinal.xva" + VMUUID=$(ssh_command $importXva) +} + +function start_cpu { + start_cpu="xe vm-start uuid=$VMUUID" + ssh_command $start_cpu +} + +function get_xva_ip { + local period=10 + local max_tries=10 + local i=0 + + local get_ip="xe vm-param-get uuid=$VMUUID param-name=networks | tr ';' '\n' | grep '0/ip:' | cut -d: -f2" + while true; do + if [ $i -ge $max_tries ]; then + echo "Timeout; ip address for VM: $VMUUID" + exit 11 + fi + + ipaddress=$(ssh_command $get_ip) + + if [ -z "$ipaddress" ]; then + sleep $period + i=$((i+1)) + else + VMIP=$(echo $ipaddress | sed s/[[:space:]]//g) + break + fi + done +} + +function write_config { + writeIni config.ini ComputeNode ip $VMIP +} + +function ssh_cpu { + sshpass -p ${ComputeNodePassword} ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${ComputeNodeUser}@${VMIP} $@ +} + +function configure_cpu_hostIP { + findfile="grep -lr computeHostIP /etc" + files=$(ssh_cpu $findfile) + for file in $files; do + ssh_cpu sed -i \"s/computeHostIP/${ComputeHostIP}/g\" $file + done +} + +function configure_cpu_controllerIP { + findfile="grep -lr controllerIP /etc" + files=$(ssh_cpu $findfile) + for file in $files; do + ssh_cpu sed -i \"s/controllerIP/${ControllerIP}/g\" $file + done +} + +function configure_cpu_hostName { + findfile="grep -lr computeHostName /etc" + files=$(ssh_cpu $findfile) + for file in $files; do + ssh_cpu sed -i \"s/computeHostName/${ComputeHostName}/g\" $file + done +} + +function configure_cpu_myIP { + findfile="grep -lr computeNodeMyIP /etc" + files=$(ssh_cpu $findfile) + for file in $files; do + ssh_cpu sed -i \"s/computeNodeMyIP/${VMIP}/g\" $file + done +} + +function prepare_cpu_node_entry { + import_cpu + start_cpu + get_xva_ip + write_config + configure_cpu_hostIP + configure_cpu_controllerIP + configure_cpu_hostName + configure_cpu_myIP +} + diff --git a/scaleComputeUsingXVA/readconfig.sh b/scaleComputeUsingXVA/readconfig.sh new file mode 100644 index 0000000..2975e1d --- /dev/null +++ b/scaleComputeUsingXVA/readconfig.sh @@ -0,0 +1,16 @@ +readIni() { + file=$1;section=$2;item=$3; + val=$(awk -F '=' '/\['${section}'\]/{a=1} (a==1 && "'${item}'"==$1){a=0;print $2}' ${file}) + echo ${val} +} + +writeIni() { + file=$1;section=$2;item=$3;val=$4 + awk -F '=' '/\['${section}'\]/{a=1} (a==1 && "'${item}'"==$1){gsub($2,"'${val}'");a=0} {print $0}' ${file} 1<>${file} +} + +readIniSections() { + file=$1; + val=$(awk '/\[/{printf("%s ",$1)}' ${file} | sed 's/\[//g' | sed 's/\]//g') + echo ${val} +} \ No newline at end of file diff --git a/scaleComputeUsingXVA/scale_out_cpu.sh b/scaleComputeUsingXVA/scale_out_cpu.sh new file mode 100755 index 0000000..830bf24 --- /dev/null +++ b/scaleComputeUsingXVA/scale_out_cpu.sh @@ -0,0 +1,95 @@ +#!/bin/bash +set -ex + +tmp_path=$(mktemp -d) +CNODE_INFO_FILE=$tmp_path/cnode_info.txt +host_inv_path='' +controller_ip='' + +# the format of compute node information should like: +# host_ip: XENSERVER_IP_ADDR1 cnode_ip: CPU_IP_ADDR1 +# host_ip: XENSERVER_IP_ADDR2 cnode_ip: CPU_IP_ADDR2 +# ... +echo "cnode_ip: CPU_IP_ADDR" > $CNODE_INFO_FILE + +REMAINING_OPTIONS="$#" +while getopts ":i:p:" flag; do + REMAINING_OPTIONS=$(expr "$REMAINING_OPTIONS" - 1) + case "$flag" in + i) + host_inv_path="$OPTARG" + REMAINING_OPTIONS=$(expr "$REMAINING_OPTIONS" - 1) + ;; + p)rm + controller_ip="$OPTARG" + REMAINING_OPTIONS=$(expr "$REMAINING_OPTIONS" - 1) + ;; + \?) + echo "Unexpected argument" + exit -1 + esac +done + +if [ ! -f ssh_key.priv ] +then + yes | ssh-keygen -t rsa -N "" -f ssh_key.priv +fi + +# Set up internal variables +_SSH_OPTIONS="\ + -o BatchMode=yes \ + -o StrictHostKeyChecking=no \ + -o UserKnownHostsFile=/dev/null \ + -i ssh_key.priv" + +# input the server ip, username and password to acheive no pwd access +function create_no_pwd_access() { + username=$2 + server_ip=$1 + password=$3 + sshpass -p $password \ + ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + $username@$server_ip "if [ ! -f ~/.ssh/authorized_keys ]; then mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys; fi" + PUBKEY=$(cat ssh_key.priv.pub) + sshpass -p $password \ + ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ + $username@$server_ip "echo $PUBKEY >> ~/.ssh/authorized_keys" +} +# excute remote shell on no pwd host +function on_no_pwd_host() { + username=$2 + server_ip=$1 + ssh $_SSH_OPTIONS "$username@$server_ip" bash -s -- +} + +source prepare_cpu_node.sh # managed by liang +source config_cpu_node.sh + +prepare_cpu_node_entry # managed by liang +config_cnode_entry +echo $? +set -x + +source ./readconfig.sh + + CNODE_USER=$(readIni config.ini ComputeNode user) + CNODE_PWD=$(readIni config.ini ComputeNode password) + cnode_ip=$(readIni config.ini ComputeNode ip) + host_ip=$(readIni config.ini ComputeHost ip) + +on_no_pwd_host $cnode_ip $CNODE_USER <&1 | tee -a /tmp/test.wjh + systemctl start \$srv +done +CMDEND +#nova-manage cell_v2 simple_cell_setup +/opt/stack/devstack/tools/discover_hosts.sh > /tmp/dis.log +# verify staff +# log staff + +rm -rf $tmp_path diff --git a/scaleComputeUsingXVA/ssh_key.priv b/scaleComputeUsingXVA/ssh_key.priv new file mode 100644 index 0000000..5cc46a2 --- /dev/null +++ b/scaleComputeUsingXVA/ssh_key.priv @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAv1I/e4g0sD6SKIHuobwHziTZjkZLZH1XUM4VGIhSxuhQuUFD +KlGIfDvompjeyBpV5v/MfS/t+oNWufdevZToCc6Upzb1q5Q6gdXGDbxvD6fwxluc +O05+d7DF3K5qn78cFLLwbo4ZrTcT1iMrm4SoGloMEi5+6le5bxvLkFQ+AgiKT5Gf +RefM26fsosxVMKM5QvTu5m62am8FUSXrNJ7uxW5QpCp7bWfrbtvjewsndmRkYa9s +Pm8yNxYg30x/951DJNyciTAWmH04a6J42GLbwqIFPuiI1iyY3omuMVP9vgRU9OkB +3WeaDt4qMWbBoWCirO0f2wC3pxMsEyuNHKRQVQIDAQABAoIBAFoPW3bJHRRBwAd1 +cmGL45i0W/zPNjotjmapO+D6ewzK2wT5paZMDxV8FfiAMY68ZueATkA3yax9Gtwb +h+tyJvBG4E7+XhLQieIIQVzB8P3LrlmRUi/QuVOaUOma6PIdwhg0S12fYpLZNGs+ +zw48Ge2dqcT9Qh0KAm49BUwBe9b0Yc3laT7+Sj3w4h32C83NS9sstFuiYQ1E3AOT +SWEYcrSwIRufWzB74vuUS8zZDb2KQGPTVdHHR8yl78KU2wCLoKT0dUg5qCEreqdX +9hHTJrF1X5E6N2cdLAc2icEqKRY9xtBECcT25OpZcHUkkwXIfxLFuNc7TvQwCF97 +KtGc9IECgYEA4nE2Z0Z/Q7EiBGLGjnsL0ftA9Q4Gr2U/UQIOyhffQW4v0IiXbvbW +jALMEc6iWh9clFZY7hAlU32bFCsx73X//0YD+dl0xFXEU/q1KH8JJMTZ1614qMCN +kgot1Tl1U0HX1OOnSI36owbcTDxVvsWnPCvEctTM8o/CqFpfJ8AyQYUCgYEA2Etv +QfxCRVFmMOK7jxRQkpwGXVJRUVvNypPnrBZxivGNBRSVXY3+O7HF1lgb5+wqiHJW +bfC052eyFHujORTNiMYoft2c8mjMNkm0XBngJEHX5yT7Kfoy+XMZVmxT4m2lEIn9 +HSmliw+nwh7IBMfP/2Weagh5he3hsgvqzFGkpJECgYAmrkYn0CAPNSPlceYPEq/L +N8s50SKNNZNiSCK0nO1TJPpf+eU8XEf79MJdTFnpYTAUWseoKvPlVjB2eoZ2LEcF +mTU2qdHLdAcsfUgS2dh7AnFf6U8SLIpCZyC7KqyDA11WDWlW+IHW9WYOU8Ql6WeO +3L8bCoTT7oDG92EHzkoHbQKBgDXMhY7nHOC6/20XaEmNZwEgd+DMcdeHuycxJMXE +C1fg/w+NcB2GDP9yF2BaKA7GykmIDwFnhsesHjpECnRPPVRQ3Y+4taoB8RFrwcXK +1dqO2hHvO93UEsvDGkFJzo+acB0uBVw0mK1/Jl39ZAj0XkMLVpzPINL0OVgc6LkL +caVRAoGBAMF+t6ja3f74vHhJbtWfSf/jSSof4X3wPe4IVwM9d3zXd10VM9MUvhVI +XGSCGo035TWB1VKMtbjM04eYwkCKyQN5VCuqZ8WysRg1/7sz/WwlNKhlYKcv6HU3 +bcQwaV453NVcPXuttgrmV+nhAXiL3EU53mHTHgTq7YbKu1TF9aTo +-----END RSA PRIVATE KEY----- diff --git a/scaleComputeUsingXVA/ssh_key.priv.pub b/scaleComputeUsingXVA/ssh_key.priv.pub new file mode 100644 index 0000000..242d54b --- /dev/null +++ b/scaleComputeUsingXVA/ssh_key.priv.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/Uj97iDSwPpIoge6hvAfOJNmORktkfVdQzhUYiFLG6FC5QUMqUYh8O+iamN7IGlXm/8x9L+36g1a59169lOgJzpSnNvWrlDqB1cYNvG8Pp/DGW5w7Tn53sMXcrmqfvxwUsvBujhmtNxPWIyubhKgaWgwSLn7qV7lvG8uQVD4CCIpPkZ9F58zbp+yizFUwozlC9O7mbrZqbwVRJes0nu7FblCkKnttZ+tu2+N7Cyd2ZGRhr2w+bzI3FiDfTH/3nUMk3JyJMBaYfThronjYYtvCogU+6IjWLJjeia4xU/2+BFT06QHdZ5oO3ioxZsGhYKKs7R/bALenEywTK40cpFBV stack@DevStackOSDomU