Fabric外部節點部署自動化指令碼
阿新 • • 發佈:2020-09-01
#!/bin/bash # zoujiaojiao 2020-0829 # 變數全部大寫,函式首字母大寫下劃線拼接 MASTER_FILE=$2_master.txt echo $MASTER_FILE NODE_FILE=$2_node.txt TRANSFER_PROJECT=/ OTHER=$3 FABRIC_PATH=/mnt/nfs/vbaas/fabric #獲取主機IP賬戶密碼資訊 Get_Variable(){ TRANSFER_HOST=`echo ${LINE}|cut -d" " -f 2 ` TRANSFER_USER=`echo ${LINE}|cut -d" " -f 3` TRANSFER_PASSWORD=`echo ${LINE}|cut -d" " -f 4` NETWROK_NAME=`echo ${LINE}|cut -d" " -f 5` ORG_NAME=`echo ${LINE}|cut -d" " -f 6` ORG_HOST=`echo ${LINE}|cut -d" " -f 7` TRANSFER_FILE=${OTHER:-${TRANSFER_HOST}_file.tar.gz} echo ${TRANSFER_HOST} ${TRANSFER_USER} ${TRANSFER_PASSWORD} ${TRANSFER_FILE} ${NETWROK_NAME} ${ORG_NAME} ${ORG_HOST} } #所有主機執行操作 All_Hosts(){ cat $MASTER_FILE $NODE_FILE | while read LINE do Get_Variable ${ACTION} done } #master執行操作 Master_Hosts(){ cat $MASTER_FILE | while read LINE do Get_Variable REMOTE_SHELL="sh /swarm_init_master.sh" ${ACTION} ${REMOTE_TO_LOAL} done } #node執行操作 Node_Hosts(){ cat $NODE_FILE | while read LINE do Get_Variable ${LOAL_TO_REMOTE} ${ACTION} REMOTE_SHELL="sh /swarm_add_node.sh" done } #生成客戶端需要的檔案 Touch_Files(){ cat $MASTER_FILE | while read LINE do Get_Variable if [ ! ${OTHER} ];then sed "s/MASTER_HOST/${TRANSFER_HOST}/g" swarm_init_master.sh > swarm_init_master_${TRANSFER_HOST}.sh echo "TRANSFER_HOST:${TRANSFER_HOST}" tar zcvf ${TRANSFER_HOST}_file.tar.gz swarm_init_master_${TRANSFER_HOST}.sh ${NODE_FILE} docker_check.sh fabric_check.sh swarm_add_node.sh fabric_bin.tar.gz else sed "s/NETWORKNAME/${NETWROK_NAME}/g" org-start-stack.sh > org-start-stack_${TRANSFER_HOST}_${ORG_NAME}.sh sed -i "s/ORGNAME/${ORG_NAME}/g" org-start-stack_${MASTER_HOST}_${ORG_NAME}.sh > org-start-stack_${TRANSFER_HOST}_${ORG_NAME}.sh tar zcvf ${OTHER}.tar.gz $FABRIC_PATH/networks/${NETWROK_NAME}/orgs/${ORG_NAME} $FABRIC_PATH/networks/${NETWROK_NAME}/crypto-config/peerOrganizations/${ORG_HOST} org-start-stack_${TRANSFER_HOST}_${ORG_NAME}.sh fi done } #fuction 檔案傳輸 Remote_Transfer() { expect -c " set timeout -1 #spawn scp -r "$@" spawn scp -r ${TRANSFER_FILE} ${TRANSFER_USER}@${TRANSFER_HOST}:${TRANSFER_PROJECT} expect { \"*assword\" { send \"${TRANSFER_PASSWORD}\r\" } \"yes/no\" { send \"yes\r\"; exp_continue } }; send \"exit\r\" expect eof " } #遠端執行 Remote_Execution() { expect -c " set timeout 5 spawn ssh ${TRANSFER_USER}@${TRANSFER_HOST}; expect { \"*assword\" { send \"${TRANSFER_PASSWORD}\r\" } \"yes/no\" { send \"yes\r\"; exp_continue } } ; expect "#" send \"${REMOTE_SHELL}\r\" expect "#" send \"exit\r\" expect eof " } #主函式 Main() { case $1 in "transfer") Touch_Files ACTION=Remote_Transfer All_Hosts;; "fabric") ACTION=Remote_Execution REMOTE_SHELL="tar zxvf /${TRANSFER_HOST}_file.tar.gz -C / && sh /fabric_check.sh" All_Hosts;; "docker") ACTION=Remote_Execution REMOTE_SHELL="sh /docker_check.sh" All_Hosts;; "swarm_master") ACTION=Remote_Execution REMOTE_TO_LOAL="Remote_Transfer \"${TRANSFER_USER}@${TRANSFER_HOST}:/${TRANSFER_HOST}_token ${TRANSFER_PROJECT}\"" Master_Hosts;; "swarm_node") ACTION=Remote_Execution LOAL_TO_REMOTE="Remote_Transfer \"${TRANSFER_PROJECT}${TRANSFER_HOST}_token ${TRANSFER_USER}@${TRANSFER_HOST}:${TRANSFER_PROJECT}\"" Node_Hosts;; "create_org") ACTION=Remote_Transfer REMOTE_SHELL="sh /org-start-stack_${TRANSFER_HOST}_${ORG_NAME}.sh" Master_Hosts;; *) echo "Usage :" echo "sh main.sh transfer master_ip_orgname \"filename1 filename2\"" echo " 傳檔案。預設傳輸當前master_host_file.tar.gz,自定義檔案可以在雙引號中寫多個檔案引數" echo " " echo "sh main.sh fabric master_ip_orgname" echo " 安裝和檢查fabric環境" echo " " echo "sh main.sh docker master_ip_orgname" echo " 安裝和檢查docker環境" echo " " echo "sh main.sh swarm_master master_ip_orgname" echo " 初始化swarm叢集master節點" echo " " echo "sh main.sh swarm_node master_ip_orgname" echo " 新增swarm叢集node節點" echo " " echo "sh main.sh create_org master_ip_orgname " echo " 建立組織";; esac } # 增加一個安裝expect的函式,給node進行安裝 #執行 Main $@