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

2018年7月18日11:51:59 發(fā)表評(píng)論 4,867 ℃
#!/bin/bash
#Name: ks-cp.sh
#Author: m.maowutv.com
#Datetime: 2017-05-08
#Usage: sudo bash ks-cp.sh [-d|-f|-h]
#ln -s到/usr/local/bin目錄下面,chown +x 權(quán)限,就可以以Linux命令方式執(zhí)行
#定義顏色
RED='\033[31m'
BLUE='\033[36m'
GREEN='\033[32m'
END='\033[0m'
#文件復(fù)制
cp_file(){
    name=$1
    salt "${name}" cp.get_file salt://$PATH_NAME/$FILE ${ADDR}${FILE} >/dev/null 2>&1
    [[ $? -eq 0 ]] && echo -e "主機(jī):"$name" to "${ADDR}${FILE}"    ${BLUE}[復(fù)制成功]${END}" || echo -e "主機(jī):"$name" to "${ADDR}${FILE}"    ${RED}[復(fù)制失敗]${END}"   
}
#目錄復(fù)制 
cp_dir(){
    name=$1
    salt "${name}" cp.get_dir salt://$PATH_NAME $ADDR >/dev/null 2>&1
    [[ $? -eq 0 ]] && echo "主機(jī):"$name" to "${ADDR}${PATH_NAME}"    ${BLUE}[復(fù)制成功]${END}" || echo "主機(jī):"$name" to "${ADDR}${PATH_NAME}"    ${RED}[復(fù)制失敗]${END}"
}
#檢測狀態(tài),選擇復(fù)制
salt_test(){
    name=$1
    class=$2
    salt "${name}" test.ping >/dev/null 2>&1
    if [[ $? -eq 2  ]] ;then
        echo -e "${RED}主機(jī)名稱不正確or主機(jī)未安裝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}主機(jī)未開機(jī)or服務(wù)未啟動(dòng):${END}"${BLUE}${name}${END} 
            return 4
        fi
     fi
}
#拆分主機(jī)
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:復(fù)制目錄,salt倉庫目錄為根目錄(默認(rèn)是/srv/salt/)${END}"
echo -e "${GREEN} -f:復(fù)制文件,以salt倉庫目錄為根目錄${END}"
echo -e "${GREEN} -h:獲取使用幫助${END}"
echo -e "${GREEN} 例如:復(fù)制/srv/salt/chrome目錄下面的chrome57.deb到Minion,Minion2主機(jī)下面的/var/tmp/目錄${END}"
        echo -e "${GREEN} 填寫格式如下:\n    主機(jī)名:Minion,Minion2\n    文件路徑:chrome\n    文件名稱:chrome57.deb\n    目標(biāo)存放目錄:/var/tmp/${END}"
    }
#輸入條件
input(){
read -p "請輸入主機(jī)名稱(多個(gè)主機(jī),隔開):" NAME
read -p "請輸入文件路徑(salt倉庫目錄為根目錄,/srv/salt/chrome,填寫chrome即可):" PATH_NAME
[[ $1 == "f" ]] && read -p "請輸入文件名稱:" FILE
read -p "請輸入目標(biāo)存放目錄(如:/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

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

發(fā)表評(píng)論

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