[记录]Shell并发模式批量安装saltstack的脚本
生活随笔
收集整理的這篇文章主要介紹了
[记录]Shell并发模式批量安装saltstack的脚本
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
SaltStack+Shell:
salt-master的配置:#cat /etc/salt/masteruser: rootauto_accept: Truesalt-minion的配置(支持多master的配置):#cat /etc/salt/minion#minion唯一標識id: $minion_ipmodule_dirs:- /etc/salt/modulemaster:- master1_ip- master2_ip- master3_ip
說明:1./etc/salt/pki/master/minions,該目錄是master記錄minion_id的目錄,以此識別minion。2./etc/salt/pki/minion,該目錄下是公私鑰,若master識別不了可刪除minion_master.pub文件重啟minion。3.在建立多Master的配置中,主要的一點就是所有的Master使用同樣的private key. 這些key將在Master第一次啟動時自動生成。 因此在多Master環(huán)境建立時,需要從原始的(original)Master上拷貝其private key至第二個Master以提供它啟動時自動生成的那個, 以此類推。Master的private key存儲在Master本地的 pki_dir 目錄下. 默認的目錄是 /etc/salt/pki/master/master.pem 和/etc/salt/pki/master/master.pub兩個文件. 將該key拷貝到新增的master上. 需要注意的是,在拷貝的時候,需要確保新增的master上并沒有minion連接進來.==============================================================================================================
==============================================================================================================
#cat testlogin.sh
#檢查主機是否有權(quán)限登錄的腳本
#!/bin/bash#并發(fā)線程數(shù)
thead_num=50
#創(chuàng)建臨時輸入輸出管道文件
tmp_fifo_file="/tmp/$$.fifo"
mkfifo $tmp_fifo_file
#綁定管道文件到文件描述符,自定義3-9
exec 4<>$tmp_fifo_file
#刪除臨時管道文件,也可不刪除
rm -f $tmp_fifo_file#利用for循環(huán)向管道中輸入并發(fā)數(shù)量的空行
for ((i=0;i<$thead_num;i++))
do#輸出空行echo ""
done >&4 #輸出重導(dǎo)向到定義的文件描述符4上for i in $(cat /home/abc/iplist/all.ip | grep -vE "#|^$")
do
read -u4
{ssh $i "hostname" 2>&1if [ $? -eq 255 ];thenecho $i >> /home/abc/iplist/nologin.ipelseecho $i >> /home/abc/iplist/login_ok.ipfi#暫停一秒,緩沖時間sleep 1#再寫入一個空行,使掛起的循環(huán)繼續(xù)執(zhí)行echo "" >&4
}& #放入后臺執(zhí)行
done#等待所有后臺進程執(zhí)行完成
wait
#刪除文件描述符
exec 4>&-
exit 0==============================================================================================================
==============================================================================================================
#cat install_salt.sh
#執(zhí)行安裝并配置salt-minion的腳本
#!/bin/bashthead_num=50
tmp_fifo_file="/home/abc/$$.fifo"
mkfifo $tmp_fifo_file
exec 4<>$tmp_fifo_file
rm -f $tmp_fifo_file
for ((i=0;i<$thead_num;i++))
doecho ""
done >&4for i in $(cat /home/abc/iplist/login_ok.ip | grep -vE "#|^$")
do
read -u4
{OS=$(ssh $i "cat /etc/issue | awk '{print \$1}'| grep -vE \"^$\" | head -1" 2>&1)if [[ "x$OS" == "xCentOS" ]];then#安裝salt-minionssh $i "sudo yum install salt-minion -y"#檢查master的配置文件ssh $i "sudo grep -E "^master:" /etc/salt/minion"if [ $? -eq 0 ];then#替換master的配置ssh $i "sudo sed -i 's/^master:\(.*\)/master: salt-master/g' /etc/salt/minion"else#開啟master的配置并指定masterssh $i "sudo sed -i 's/#master: salt/master: salt-master/g' /etc/salt/minion"fi#檢查minion中id的配置ssh $i "sudo grep -E "^id:" /etc/salt/minion"if [ $? -eq 0 ]; then#替換id為自己的ipssh $i "sudo sed -i 's/^id:\(.*\)/id: $i/g' /etc/salt/minion"else#開啟id的配置并指定為自己的ipssh $i "sudo sed -i 's/#id:\(.*\)/id: $i/g' /etc/salt/minion"fi#重啟minion客戶端ssh $i "ps -ef | grep salt-minion|grep -v grep|awk '{print \$2}'| sudo xargs kill -9 && sudo rm -f /etc/salt/pki/minion/minion_master.pub && sudo salt-minion -d"elif [[ "x$OS" == "xUbuntu" ]];thenssh $i "sudo apt-get install salt-minion -y"ssh $i "sudo grep -E "^master:" /etc/salt/minion"if [ $? -eq 0 ];thenssh $i "sudo sed -i 's/^master:\(.*\)/master: salt-master/g' /etc/salt/minion"elsessh $i "sudo sed -i 's/#master: salt/master: salt-master/g' /etc/salt/minion"fissh $i "sudo grep -E "^id:" /etc/salt/minion"if [ $? -eq 0 ]; thenssh $i "sudo sed -i 's/^id:\(.*\)/id: $i/g' /etc/salt/minion"elsessh $i "sudo sed -i 's/#id:\(.*\)/id: $i/g' /etc/salt/minion"fissh $i "ps -ef | grep salt-minion|grep -v grep|awk '{print \$2}'| sudo xargs kill -9 && sudo rm -f /etc/salt/pki/minion/minion_master.pub && sudo salt-minion -d"elseecho $i >> /home/abc/iplist/yeslogin_but_error.ipfisleep 1echo "" >&4
}&
donewait
exec 4>&-
exit 0==============================================================================================================
==============================================================================================================
#cat check_install_salt.sh
#檢查是否安裝成功的腳本,得到成功的主機數(shù)應(yīng)該和在master上執(zhí)行的#salt "*" test.ping | grep -v True|sort |uniq |wc -l命令得到的數(shù)量一樣才對。
#!/bin/bashthead_num=50
tmp_fifo_file="/home/abc/$$.fifo"
mkfifo $tmp_fifo_file
exec 4<>$tmp_fifo_file
rm -f $tmp_fifo_file
for ((i=0;i<$thead_num;i++))
doecho ""
done >&4for i in $(cat /home/abc/iplist/login_ok.ip)
do
read -u4
{ssh $i "ps -ef | grep salt-minion| grep -v grep"if [ $? -eq 1 ];thenecho $i >> /home/abc/iplist/install_error.ipelseecho $i >> /home/abc/iplist/install_ok.ipfisleep 1echo "" >&4
}&
donewait
exec 4>&-
exit 0
如上圖所示,salt支持使用這樣的方式來指定特定的ip列表批量執(zhí)行命令,類似于分組管理,iplist.ip文件格式是使用空格分割ip。
#salt -L "`iplist.ip`" cmd.run 'uptime'
?
轉(zhuǎn)載于:https://www.cnblogs.com/wsjhk/p/8524547.html
總結(jié)
以上是生活随笔為你收集整理的[记录]Shell并发模式批量安装saltstack的脚本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android Instrumentat
- 下一篇: Standard C Episode 8