#!/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