阿汤博客-承接中小企业服务器维护和网站维护,有意者可以联系博主!

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

运维维护 75℃ 0评论

#!/bin/bash

#Name:ks-cp.sh

#Author: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

转载请注明:阿汤博客 » SaltStack根据主机名称复制文件或者目录Shell脚本

喜欢 (0)or分享 (0)