Commit 81b850de by 李杨杨

1.tx2升级脚本更新为全速版本;2.增加TX2配置和IP修改程序Purple_Gourd_for_TX2

1 parent 30d336d6
#!/usr/bin/env python3
import json
import shutil
from ansible.module_utils.common.collections import ImmutableDict
from ansible.parsing.dataloader import DataLoader
from ansible.vars.manager import VariableManager
from ansible.inventory.manager import InventoryManager
from ansible.playbook.play import Play
from ansible.executor.task_queue_manager import TaskQueueManager
from ansible.plugins.callback import CallbackBase
from ansible import context
import ansible.constants as C
class ResultCallback(CallbackBase):
"""A sample callback plugin used for performing an action as results come in
If you want to collect all results into a single object for processing at
the end of the execution, look into utilizing the ``json`` callback plugin
or writing your own custom callback plugin
"""
def format_print(self, backStatus, result):
host = result._host
print_color='yellow'
if backStatus == 'SUCESS' and result._result['changed'] == True:
status = 'CHANGED'
print_color = 'yellow'
elif backStatus == 'UNREACHABLE!' or backStatus == 'FAIL!':
status = backStatus
print_color = 'red'
else:
status = backStatus
print_color = 'green'
if status == 'UNREACHABLE!':
message = result._result['msg']
else:
message = '\n'.join(result._result['stdout_lines'])
if print_color == 'red':
print("\033[0;31m%s | %s >>\n%s\n\n\033[0m" % (host, status, message))
elif print_color == 'yellow':
print("\033[0;33m%s | %s >>\n%s\n\n\033[0m" % (host, status, message))
elif print_color == 'green':
print("\033[0;32m%s | %s >>\n%s\n\n\033[0m" % (host, status, message))
def v2_runner_on_ok(self, result, **kwargs):
"""Print a json representation of the result
This method could store the result in an instance attribute for retrieval later
"""
host = result._host
# print(json.dumps({host.name: result._result['stdout_lines']}, indent=4))
# print('SUCCESS: ' + host.name + ' ===> ' + json.dumps(result._result['stdout_lines']))
self.format_print('SUCESS', result)
def v2_runner_on_failed(self, result, **kwargs):
host = result._host
# print('FAIL: ' + host.name + ' ===> ' + result._result['stdout_lines'])
self.format_print('FAIL!', result)
def v2_runner_on_unreachable(self, result):
host = result._host
# print(json.dumps({host.name: result._result}, indent=4))
self.format_print('UNREACHABLE!', result)
#class ResultCallback(CallbackBase):
# """
# 重写callbackBase类的部分方法
# """
# def __init__(self, *args, **kwargs):
# super().__init__(*args, **kwargs)
# self.host_ok = {}
# self.host_unreachable = {}
# self.host_failed = {}
# self.task_ok = {}
# def v2_runner_on_unreachable(self, result):
# self.host_unreachable[result._host.get_name()] = result
#
# def v2_runner_on_ok(self, result, **kwargs):
# self.host_ok[result._host.get_name()] = result
#
# def v2_runner_on_failed(self, result, **kwargs):
# self.host_failed[result._host.get_name()] = result
class MyAnsiable():
def __init__(self,
connection='local', # 连接方式 local 本地方式,smart ssh方式
remote_user=None, # 远程用户
ack_pass=None, # 提示输入密码
sudo=None, sudo_user=None, ask_sudo_pass=None,
module_path=None, # 模块路径,可以指定一个自定义模块的路径
forks=10,
become=True, # 是否提权
become_method='sudo', # 提权方式 默认 sudo 可以是 su
become_user='root', # 提权后,要成为的用户,并非登录用户
check=False, diff=False,
listhosts=None, listtasks=None,listtags=None,
verbosity=3,
syntax=None,
start_at_task=None,
inventory=None):
# 函数文档注释
"""
初始化函数,定义的默认的选项值,
在初始化的时候可以传参,以便覆盖默认选项的值
"""
context.CLIARGS = ImmutableDict(
connection=connection,
remote_user=remote_user,
ack_pass=ack_pass,
sudo=sudo,
sudo_user=sudo_user,
ask_sudo_pass=ask_sudo_pass,
module_path=module_path,
become=become,
become_method=become_method,
become_user=become_user,
verbosity=verbosity,
listhosts=listhosts,
listtasks=listtasks,
listtags=listtags,
syntax=syntax,
start_at_task=start_at_task,
)
# 三元表达式,假如没有传递 inventory, 就使用 "localhost,"
# 确定 inventory 文件
self.inventory = inventory if inventory else "localhost,"
# 实例化数据解析器
self.loader = DataLoader()
# 实例化 资产配置对象
self.inv_obj = InventoryManager(loader=self.loader, sources=self.inventory)
# 设置密码,可以为空字典,但必须有此参数
self.passwords = {}
# 实例化回调插件对象
self.results_callback = ResultCallback()
# 变量管理器
self.variable_manager = VariableManager(self.loader, self.inv_obj)
def run(self, hosts='localhost', gether_facts="no", module="ping", args=''):
play_source = dict(
name = "Ad-hoc",
hosts = hosts,
gather_facts = gether_facts,
tasks = [
# 这里每个 task 就是这个列表中的一个元素,格式是嵌套的字典
# 也可以作为参数传递过来,这里就简单化了。
{"action":{"module": module, "args": args}},
])
play = Play().load(play_source, variable_manager=self.variable_manager, loader=self.loader)
tqm = None
try:
tqm = TaskQueueManager(
inventory=self.inv_obj ,
variable_manager=self.variable_manager,
loader=self.loader,
passwords=self.passwords,
stdout_callback=self.results_callback)
result = tqm.run(play)
finally:
if tqm is not None:
tqm.cleanup()
shutil.rmtree(C.DEFAULT_LOCAL_TMP, True)
def playbook(self,playbooks):
from ansible.executor.playbook_executor import PlaybookExecutor
playbook = PlaybookExecutor(playbooks=playbooks, # 注意这里是一个列表
inventory=self.inv_obj,
variable_manager=self.variable_manager,
loader=self.loader,
passwords=self.passwords)
# 使用回调函数
playbook._tqm._stdout_callback = self.results_callback
result = playbook.run()
def get_result(self):
result_raw = {'success':{},'failed':{},'unreachable':{}}
# print(self.results_callback.host_ok)
for host,result in self.results_callback.host_ok.items():
result_raw['success'][host] = result._result["stdout_lines"]
for host,result in self.results_callback.host_failed.items():
result_raw['failed'][host] = result._result
for host,result in self.results_callback.host_unreachable.items():
result_raw['unreachable'][host] = result._result
# 最终打印结果,并且使用 JSON 继续格式化
print(json.dumps(result_raw, indent=4))
if __name__ == '__main__':
ansible2 = MyAnsiable(inventory='tmp_hosts', connection='smart')
ansible2.run(hosts= "192.168.8.8", module="script", args='test_reboot.sh')
# ansible2.run(hosts= "192.168.8.100", module="raw", args='ls')
#ansible2.
# Purple_Gourd_for_TX2
## ----用于TX2配置和IP修改
1. 包含的功能有修改主节点配置/IP、修改子节点配置/IP,根据需要开启其中一种或多种
2. 更改为读取配置文件的执行方式,填写简要信息运行程序即可
3. 自动判断和安装ansible工具,直接调用Ansible API,根据配置动态生成主机列表
4. 摒弃开机脚本修改IP的方式,直接修改interfaces文件
5. 摒弃拷贝初始配置文件到各节点之后替换IP的配置方式,无需拷贝,直接修改各节点现有配置
6. 多进程方式提高配置速度
## 使用方式
```shell
# 根据modify.ini内提示联系实际场景,填写配置文件
chmod +x main.py
./main.py
```
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
class Inventory():
def __init__(self, hosts_path, group, hosts_list, user, passwd):
# ansible的hosts文件路径
self._hostsfile = hosts_path
self._data = self._getInventoryInfo(group, hosts_list, user, passwd)
if not self._genHostsFile():
print("生成失败临时hosts失败!")
sys.exit()
def _getInventoryInfo(self, group, hosts_list, user, passwd):
tempdata = {"Groupname": group, "Items": []}
for host in hosts_list:
tempdata['Items'].append(
{
"ansible_ssh_host": host,
"ansible_ssh_user": user,
"ansible_ssh_pass": passwd,
"ansible_sudo_pass": passwd
}
)
return tempdata
def _genHostsFile(self):
"""
生成hosts文件
:return: 生成成功返回True
"""
try:
with open(self._hostsfile, "a") as f:
groupname = self._data.get("Groupname")
f.write("["+groupname+"]\n")
for server in self._data.get("Items"):
ansible_ssh_host = server.get("ansible_ssh_host")
ansible_ssh_user = server.get("ansible_ssh_user")
ansible_ssh_pass = server.get("ansible_ssh_pass")
ansible_sudo_pass = server.get("ansible_sudo_pass")
info = "{0} ansible_ssh_user={1} ansible_ssh_pass={2} ansible_sudo_pass={3}".\
format(ansible_ssh_host, ansible_ssh_user, ansible_ssh_pass, ansible_sudo_pass)
line = info + "\n"
f.write(line)
except Exception as err:
print(err)
return False
return True
if __name__ == "__main__":
hosts_list=['192.168.8.100', '192.168.8.101', '192.168.8.102', '192.168.8.103', '192.168.8.105']
Inventory('tmp_hosts', 'tx2', hosts_list, 'ubuntu', 'ubuntu')
# 选择要进行的操作
[options]
;是否修改主节点IP 0-否 1-是
modify_ip_master = 0
;是否更新主节点配置 0-否 1-是
update_config_master = 0
;是否修改子节点IP 0-否 1-是
modify_ip_slave = 0
;是否更新子节点配置 0-否 1-是
update_config_slave = 0
######################################################
# 主节点信息 更新主节点/子节点配置时填写 填写最新的信息
[master_info]
;平台IP 更新主节点配置时填写
;平台和主节点内网IP互通时推荐填写平台内网IP
;例:plat_ip = 192.168.8.239
plat_ip =
;是否自动获取主节点信息 0-否 1-是
;不需要更改主节点IP仅更新配置时打开此功能才生效
;打开此项 之后的主节点信息不需要填写
;自动获取eth0的IP作为内网IP eth1的IP作为外网IP
auto_get = 1
;修改IP后是否重启系统 0-否 1-是
master_whether_reboot = 0
;主节点外网IP 修改主节点IP/更新主节点配置时填写
master_ext_ip =
;主节点内网IP 修改主节点IP/更新主节点配置/更新子节点配置时填写
master_int_ip =
;主节点外网掩码、内网掩码 修改主节点IP时填写
master_ext_mask = 255.255.255.0
master_int_mask = 255.255.255.0
;主节点外网路由 修改主节点IP时填写
master_gateway =
######################################################
# 子节点信息 操作子节点时填写
[slave_info]
;子节点IP范围 多个用;隔开 程序可以自动跳过当前主节点
;例:slave_ip = 192.168.8.2-21
slave_ip =
;修改IP后是否重启系统 0-否 1-是
slave_whether_reboot = 1
# 修改子节点IP时填写salve_new_IP newNetmask
;子节点新IP范围 多个用;隔开
#例:slave_new_ip = 192.168.88.2-21
slave_new_ip =
;掩码
slave_new_mask = 255.255.255.0
#!/bin/bash
if [[ $# == 3 ]]
then
type=inner
ip=$1
netmask=$2
whether_reboot=$3
elif [[ $# == 4 ]]
then
type=out
ip=$1
netmask=$2
gateway=$3
whether_reboot=$4
else
echo Modify IP ERROR!
exit 0
fi
if [[ $type == inner ]]
then
net=`egrep -o '^auto eth0$' /etc/network/interfaces`
if [[ $net ]]
then
sed -i /"^auto eth0$"/,/"^address.*$"/s/"address.*$"/"address $ip"/ /etc/network/interfaces
sed -i /"^auto eth0$"/,/"^netmask.*$"/s/"^netmask.*$"/"netmask $netmask"/ /etc/network/interfaces
sed -i /"^auto eth0$"/,/"^auto eth1"/s/"^gateway"/"#gateway"/ /etc/network/interfaces
fi
elif [[ $type == out ]]
then
net=`egrep -o '^auto eth1$' /etc/network/interfaces`
if [[ $net ]]
then
sed -i /"^auto eth1$"/,/"^address.*$"/s/"address.*$"/"address $ip"/ /etc/network/interfaces
sed -i /"^auto eth1$"/,/"^netmask.*$"/s/"^netmask.*$"/"netmask $netmask"/ /etc/network/interfaces
sed -i /"^auto eth1$"/,/"^gateway.*$"/s/"^gateway.*$"/"gateway $gateway"/ /etc/network/interfaces
fi
fi
if [[ $whether_reboot = reboot ]]
then
reboot_time=`date -d "1 minutes" +%H:%M`
echo "IP($ip)修改成功,系统将会在$reboot_time重启"
shutdown -r $reboot_time
else
echo "IP($ip)修改成功, 请在合适的时间重启系统(reboot -f)"
fi
#!/bin/bash
if [[ $# == 2 ]]
then
type=slave
slave_int_ip=$1
master_int_ip=$2
elif [[ $# == 3 ]]
then
type=master
master_ext_ip=$1
master_int_ip=$2
plat_ip=$3
else
echo Update Config ERROR!
exit 0
fi
master_int_short=`egrep -o [0-9]+.[0-9]+$ <<< $master_int_ip`
update_slave(){
slave_type='slave-'$master_int_short
if [[ `cat /proc/net/dev|egrep -o eth1` && `grep ^if /root/UserApp/Daemon/start.sh|grep eth1` ]]
then
#sed -i '/.\/OpsDaemon/a \\n=====' /root/UserApp/Daemon/start.sh
#sed -i '/^else/a \\n=====' /root/UserApp/Daemon/start.sh
#sed -i '/=====/,/=====/s/^/#/' /root/UserApp/Daemon/start.sh
#sed -i '/^fi/,$s/^/#/' /root/UserApp/Daemon/start.sh
mv /root/UserApp/Daemon/start.sh /root/UserApp/Daemon/start.sh.bk
echo -e '#!/bin/bash\n\ncd /root/UserApp/Daemon\nchmod +x OpsDaemon.sh\n./OpsDaemon.sh &\n\ncd /root/UserApp/Daemon\nchmod +x AnalysisDaemon.sh\n./AnalysisDaemon.sh &' > /root/UserApp/Daemon/start.sh
chmod +x /root/UserApp/Daemon/start.sh
cp /root/UserApp/vioncfg/Ops/ServerConfig_slave.xml /root/UserApp/vioncfg/Ops/ServerConfig.xml
pkill -9 mediaSvr
pkill -9 MediaServer
pkill -9 dataExport
pkill -9 DataExport
pkill -9 OpeateServer
pkill -9 Nginx
/root/UserApp/Daemon/AnalysisDaemon.sh
fi
sed -i "1s/[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/$slave_int_ip/" /root/UserApp/vioncfg/VAServer_System.xml
sed -i "2,\$s/<IP>[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/<IP>$master_int_ip/" /root/UserApp/vioncfg/VAServer_System.xml
sed -i "s/>2</>10</2" /root/UserApp/vioncfg/VAServer_System.xml
sed -i "1,/>8851</s/[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/$master_int_ip/" /root/UserApp/vioncfg/Ops/ServerConfig.xml
sed -i "s/deviceType1/$slave_type/" /root/UserApp/vioncfg/Ops/ServerConfig.xml
sed -i "/<NTP/,/<NTP/s/[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+<\/NTP/$master_int_ip<\/NTP/" /root/UserApp/vioncfg/Ops/ServerConfig.xml
pkill -9 VAServer
pkill -9 OpeateServer
}
update_master(){
master_type='master-'$master_int_short
sed -i "1,/>8851</s/[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/$plat_ip/" /root/UserApp/vioncfg/Ops/ServerConfig.xml
sed -i "/<DNS/,/<\/DNS/s/IP>[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/IP>$master_ext_ip/1" /root/UserApp/vioncfg/Ops/ServerConfig.xml
sed -i "/<DNS/,/<\/DNS/s/IP>[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/IP>$master_int_ip/2" /root/UserApp/vioncfg/Ops/ServerConfig.xml
sed -i "/<NTP/,\$s/[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+<\/NTP/$plat_ip<\/NTP/" /root/UserApp/vioncfg/Ops/ServerConfig.xml
sed -i "s/deviceType1/$master_type/" /root/UserApp/vioncfg/Ops/ServerConfig.xml
sed -i "/<ip>/,/<port>/s/[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/$master_int_ip/" /root/UserApp/vioncfg/DataExportService/DataExportConfig.xml
sed -i "s/<configServIp>[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/<configServIp>$plat_ip/" /root/UserApp/vioncfg/DataExportService/DataExportConfig.xml
sed -i "s/<LocalIp>[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/<LocalIp>$master_ext_ip/" /root/UserApp/vioncfg/MediaServer/mediaServer.xml
sed -i "s/<ServerIp>[0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/<ServerIp>$plat_ip/" /root/UserApp/vioncfg/MediaServer/mediaServer.xml
if [[ -f /etc/haproxy/haproxy.cfg_ ]]
then
sed -i "/videoupload/,/server/s/ [0-9]\+.[0-9]\+.[0-9]\+.[0-9]\+/ $plat_ip/" /etc/haproxy/haproxy.cfg
service haproxy restart
fi
pkill -9 OperateServer
pkill -9 DataExport
pkill -9 MediaServer
}
if [[ $type == slave ]]
then
update_slave
echo "子节点($slave_int_ip)配置更新完成!"
elif [[ $type == master ]]
then
update_master
echo "主节点($master_int_ip)配置更新完成!"
fi
# awesome script
跟运维相关的好脚本,分享一下吧。
......@@ -50,6 +52,14 @@ echo "05 2 * * * root elasticsearch_clean.py" >> /etc/crontab
诊断脚本,详细说明见diagnose_tx1目录中的README文档
## tx2_update_faster
## tx2_update_full_speed.sh
tx2分析程序升级脚本全速版,可以跑满主节点千兆带宽
```
chmod +x tx2_update_full_speed.sh
./tx2_update_full_speed.sh [IP组] [升级包名称]
```
## Purple_Gourd_for_TX2
tx2分析程序升级加速版,具体说明在tx2_update目录
\ No newline at end of file
用于更改TX2主节点的配置/IP、子节点的配置/IP,根据modify.ini内提示配置场景信息后执行main.py即可,具体说明见Purple_Gourd_for_TX2下的README
\ No newline at end of file
# tx2_update_faster
此工具基于ansible批量操作工具,利用FTP在传输升级包时去中心化,采用仿P2P方式提高整体传输速度,理论上升级包越大、节点越多速度提高越大。
请将此包放在/home/ubuntu下解压进入解压后目录,使用方法:
```shell
1. 升级包传至当前目录;
2. chmod +x tx2_update_faster.sh
./tx2_update_faster.sh IP组 升级包名称
例:
./tx2_update_faster.sh tx2 VAServer_LINUX-ARM-TX2_r78250-20200804-liuh.tar.gz
```
\ No newline at end of file
#!/bin/bash
flag=$1
host=$2
exist=`dpkg -l|grep vsftpd`
if [[ ! $exist && $flag == 0 ]]
then
if [[ -f /etc/vsftpd.conf ]];then
rm /etc/vsftpd.conf
fi
dpkg -i vsftpd_3.0.3-9build1_arm64.deb
systemctl disable vsftpd.service
echo 0
elif [[ $exist && $flag == 0 && `pgrep vsftpd` ]]
then
echo true
elif [[ ! $exist && $flag == 1 ]]
then
wget --ftp-user=ubuntu --ftp-password=ubuntu ftp://$host/tx2_update/vsftpd_3.0.3-9build1_arm64.deb
dpkg -i vsftpd_3.0.3-9build1_arm64.deb
rm vsftpd_3.0.3-9build1_arm64.deb
systemctl disable vsftpd.service
fi
sed -i 's/^#write_enable=YES$/write_enable=YES/' /etc/vsftpd.conf
systemctl restart vsftpd.service
#!/bin/bash
ori_dir=$(cd $(dirname $0);pwd)
cd $ori_dir
list_name=$1
file=$2
echo -e "\033[41;33mClean up residual of ansible tools, syslog and VAServer!\033[0m"
ansible $list_name -b -m raw -a "if [ -d /home/ubuntu/.ansible/tmp ];then rm -r /home/ubuntu/.ansible/tmp;fi;if [ -d /root/.ansible/tmp ];then rm -r /root/.ansible/tmp;fi;size=\$(du -sm /var/log|awk '{print \$1}');if [ \$size -gt 1000 ];then echo clean syslog;cat /dev/null > /var/log/syslog;cat /dev/null > /var/log/syslog.1;fi;cd /root/UserApp/services/analysis_service;if [ -d VAServer ];then rm -r VAServer;fi;pkill -9 VAServer"
echo -e "\033[41;33mCopy the analyzer to the child node!\033[0m"
chmod +x check_vsftp.sh
stop_flag=`./check_vsftp.sh 0`
ansible $list_name --list-hosts|egrep -o [0-9]+.[0-9]+.[0-9]+.[0-9]+ > hosts_a
cat /dev/null > hosts_b
if [[ ! -s hosts_a ]]
then
echo Please check /etc/ansible/hosts!
exit 0
fi
chmod 666 $file
first_host=`head -n 1 hosts_a`
self_host=`ip addr|grep inet|awk '{print $2}'|egrep -o [0-9]+.[0-9]+.[0-9]+.[0-9]+|grep ${first_host%.*}'\.'`
echo $self_host >> hosts_b
start=`date +%s`
while [[ -s hosts_a ]]
do
for host in `cat hosts_b`
do
if [[ -s hosts_a ]]
then
now_first=`head -n 1 hosts_a`
sed -i '1d' hosts_a
flag=0
#echo $now_first >> hosts_b
{
result=`ansible $now_first -b -m raw -a "\
mkdir -p /home/ubuntu/tx2_update;\
cd /home/ubuntu/tx2_update;\
wget --ftp-user=ubuntu --ftp-password=ubuntu ftp://$self_host/tx2_update/check_vsftp.sh;\
chmod +x check_vsftp.sh;./check_vsftp.sh 1 $self_host;rm check_vsftp.sh;\
wget --ftp-user=ubuntu --ftp-password=ubuntu ftp://$host/tx2_update/$file;\
chmod 666 $file"`
# echo "$result"
if [[ $result =~ 'CHANGED' ]]
then
printf "%-35s : %-8s\n" "$host --> $now_first" "SUCCESS!"
echo $now_first >> hosts_b
else
printf "%-35s : %-8s\n" "$host --> $now_first" "FAIL!"
fi
} &
fi
done
wait
done
end=`date +%s`
let use=end-start
echo Time-consuming: $use's'
rm hosts_a hosts_b
echo -e "\033[41;33mDelete junk files and restart the analyzer!\033[0m"
ansible $list_name -b -m raw -a "cd /home/ubuntu/tx2_update;tar -zxf $file -C /root/UserApp/services/analysis_service/;rm $file;systemctl stop vsftpd;rm -r /home/ubuntu/tx2_update;cat /root/UserApp/services/analysis_service/VAServer/last_version"
if [[ -z $stop_flag ]];
then
systemctl stop vsftpd
fi
#!/bin/bash
ori_dir=$(cd $(dirname $0);pwd)
cd $ori_dir
if [[ -p fifo_tmp ]]
then
rm fifo_tmp
fi
list_name=$1
file=$2
thread_num=11
mkfifo fifo_tmp
exec 9<>fifo_tmp
for i in `seq 1 $thread_num`
do
echo -ne "\n">&9
done
echo -e "\033[41;33mClean up residual of ansible tools, syslog and VAServer!\033[0m"
ansible $list_name -b -m raw -a "if [ -d /home/ubuntu/.ansible/tmp ];then rm -r /home/ubuntu/.ansible/tmp;fi;if [ -d /root/.ansible/tmp ];then rm -r /root/.ansible/tmp;fi;size=\$(du -sm /var/log|awk '{print \$1}');if [ \$size -gt 1000 ];then echo clean syslog;cat /dev/null > /var/log/syslog;cat /dev/null > /var/log/syslog.1;fi;cd /root/UserApp/services/analysis_service;if [ -d VAServer ];then rm -r VAServer;fi;pkill -9 VAServer;cat /dev/null"
echo -e "\033[41;33mCopy the analyzer to the child node!\033[0m"
hosts=`ansible $list_name --list-hosts|egrep -o [0-9]+.[0-9]+.[0-9]+.[0-9]+`
if [[ ! $hosts ]]
then
echo Please check /etc/ansible/hosts!
exit 0
fi
chmod 666 $file
time1=`date +%s`
IFS=$' '
while read host
do
read -u 9
{
sshpass -p ubuntu scp -o StrictHostKeyChecking=no $file ubuntu@$host:/home/ubuntu
printf "%-20s : %-8s\n-----------------\n\n" "==> $host" "DONE!"
echo -ne "\n">&9
} &
done <<< $hosts
wait
time2=`date +%s`
let cov=$time2-$time1
exec 9<&-;exec 9>&-
rm fifo_tmp
time2=`date +%s`
let use=time2-time1
echo Time-consuming: $use's'
echo -e "\033[41;33mUnzip the analyzer and clean the cache!\033[0m"
ansible $list_name -b -m raw -a "cd /home/ubuntu/;tar -zxf $file -C /root/UserApp/services/analysis_service/;rm $file;cat /root/UserApp/services/analysis_service/VAServer/last_version"
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!