SaltStack根据主机名称复制文件或者目录Shell脚本

2018年7月18日11:51:59 发表评论 3,262 ℃
#!/bin/bash
#Name: ks-cp.sh
#Author: www.amd5.cn
#Datetime: 2017-05-08
#Usage: sudo bash ks-cp.sh [-d|-f|-h]
#ln -s到/usr/local/bin目录下面,chown +x 权限,就可以以Linux命令方式执行
#定义颜色
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}"
}
#检测状态,选择复制
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 
}
#判断参数是否正确
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

【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

发表评论

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