SaltStack根據(jù)主機名稱復制文件或者目錄Shell腳本

2018年7月18日11:51:59 發(fā)表評論 4,744 ℃
#!/bin/bash
#Name: ks-cp.sh
#Author: www.zhongjima.net
#Datetime: 2017-05-08
#Usage: sudo bash ks-cp.sh [-d|-f|-h]
#ln -s到/usr/local/bin目錄下面,chown +x 權限,就可以以Linux命令方式執(zhí)行
#定義顏色
RED='\033[31m'
BLUE='\033[36m'
GREEN='\033[32m'
END='\033[0m'
#文件復制
cp_file(){
    name=$1
    salt "${name}" cp.get_file salt://$PATH_NAME/$FILE ${ADDR}${FILE} >/dev/null 2>&1
    [[ $? -eq 0 ]] && echo -e "主機:"$name" to "${ADDR}${FILE}"    ${BLUE}[復制成功]${END}" || echo -e "主機:"$name" to "${ADDR}${FILE}"    ${RED}[復制失敗]${END}"   
}
#目錄復制 
cp_dir(){
    name=$1
    salt "${name}" cp.get_dir salt://$PATH_NAME $ADDR >/dev/null 2>&1
    [[ $? -eq 0 ]] && echo "主機:"$name" to "${ADDR}${PATH_NAME}"    ${BLUE}[復制成功]${END}" || echo "主機:"$name" to "${ADDR}${PATH_NAME}"    ${RED}[復制失敗]${END}"
}
#檢測狀態(tài),選擇復制
salt_test(){
    name=$1
    class=$2
    salt "${name}" test.ping >/dev/null 2>&1
    if [[ $? -eq 2  ]] ;then
        echo -e "${RED}主機名稱不正確or主機未安裝Salt-Minion:${END}"${BLUE}${name}${END}
        return 3
    else
        salt "${name}"  test.ping | grep "Minion did not return" >/dev/null 2>&1
        if [[ $? -eq 1  ]];then
            [[ $class == "f" ]] && cp_file $name 
            [[ $class == "d" ]] && cp_dir  $name 
        else
            echo -e "${RED}主機未開機or服務未啟動:${END}"${BLUE}${name}${END} 
            return 4
        fi
     fi
}
#拆分主機
ks_name(){
    var=$1
    var=${var//,/ }
    for names in $var;do
    salt_test $names $2
    done
}
#用法
usege(){
echo -e "${GREEN}用法:`basename $0` [-d|-f|-h]${END}"
echo -e "${GREEN} -d:復制目錄,salt倉庫目錄為根目錄(默認是/srv/salt/)${END}"
echo -e "${GREEN} -f:復制文件,以salt倉庫目錄為根目錄${END}"
echo -e "${GREEN} -h:獲取使用幫助${END}"
echo -e "${GREEN} 例如:復制/srv/salt/chrome目錄下面的chrome57.deb到Minion,Minion2主機下面的/var/tmp/目錄${END}"
        echo -e "${GREEN} 填寫格式如下:\n    主機名:Minion,Minion2\n    文件路徑:chrome\n    文件名稱:chrome57.deb\n    目標存放目錄:/var/tmp/${END}"
    }
#輸入條件
input(){
read -p "請輸入主機名稱(多個主機,隔開):" NAME
read -p "請輸入文件路徑(salt倉庫目錄為根目錄,/srv/salt/chrome,填寫chrome即可):" PATH_NAME
[[ $1 == "f" ]] && read -p "請輸入文件名稱:" FILE
read -p "請輸入目標存放目錄(如:/var/tmp/):" ADDR
ks_name $NAME $option 
}
#判斷參數(shù)是否正確
if [ $1 ];then
while getopts ":fdh"  option;do
case $option in
f)
input $option;;
d)
input $option;;
h)
usege
exit 0;;
*)
usege
exit 3;;
esac
done
else
    usege
exit 3
fi

【騰訊云】云服務器、云數(shù)據(jù)庫、COS、CDN、短信等云產品特惠熱賣中

發(fā)表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: