Python利用ansible分发处理任务


Posted in Python onAugust 04, 2015

其实对python熟悉的人都可以自己用paramiko来写任务的分发系统,再结合gevent的协程就能实现异步的处理。

如果只想用工具的朋友可以使用一些工具,类似{puppet,saltstack,fabric,ansible,chef}等,其实这些工具的都是很好用的,不过于学习的成本,我建议大家使用ansible,这个模块封装的不错,功能也很齐全。

我们首先先安装ansible把

pip install ansible                           #其实我建议大家用ubuntu的系统,ubuntu的系统对开源的东西都支持的很好,而且apt的功能要比yum强不少。
mkdir -p /etc/ansible/                        #给ansible创建一个配置文件的目录
more hosts 
[Web]
192.168.6.210:22 ansible_ssh_user=root ansible_ssh_pass=123 
[Dubbo+Zookeeper]
192.168.6.212:22 ansible_ssh_user=root ansible_ssh_pass=123
[Mysql]
192.168.6.213:22 ansible_ssh_user=root ansible_ssh_pass=123

如果你的机器没有做无密码访问,那么就在后面加上密码吧,如果你的SSH端口做过改动,那么请在IP后面加上端口号。如果有报错的话,你先安装一下apt-get install sshpass

做完上面这些准备工作,我们的ansible就可以运行了

ansible Boss+Merchant+Web -m shell -a "hostname;ip a"                这里的Boss+Merchant+Web是我在hosts文件中定义的主机组  -m后面是接的模块 -a 就、后面是索要执行的命令
192.168.6.210 | success | rc=0 >>
Pay-Boss+Merchant+Web
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
  link/ether 00:0c:29:96:06:4e brd ff:ff:ff:ff:ff:ff
  inet 192.168.6.210/24 brd 192.168.6.255 scope global eth0

模块的信息可以从官网的教程下仔细查看,反正我一般都用shell。。。

现在来玩玩playbook,其实就是把命令保存到文件中,再执行,也就是一回事,不必非要用这个东西,我们自己也能写代码来封装这些命令

mkdir -p /etc/ansible/playbooks
touch boss.yml
more boss.yml
- hosts : Boss+Merchant+Web        hosts 文件中的主机组
 remote_user : root
 tasks :
    - name : update_boss       任务代号
     shell : source /etc/profile;whoami;uptime;cat /etc/issue        模块+命令
#     shell : echo "xxxxxxxxxxxxxxxxx"

执行

ansible-playbook boss.yml
 __________________________
< PLAY [Boss+Merchant+Web] >
 --------------------------
    \  ^__^
     \ (oo)\_______
      (__)\    )\/\
        ||----w |
        ||   ||

 _________________
< GATHERING FACTS >
 -----------------
    \  ^__^
     \ (oo)\_______
      (__)\    )\/\
        ||----w |
        ||   ||

ok: [192.168.6.210]
 ___________________
< TASK: update_boss >
 -------------------
    \  ^__^
     \ (oo)\_______
      (__)\    )\/\
        ||----w |
        ||   ||

changed: [192.168.6.210]
 ____________
< PLAY RECAP >
 ------------
    \  ^__^
     \ (oo)\_______
      (__)\    )\/\
        ||----w |
        ||   ||

192.168.6.210       : ok=2  changed=1  unreachable=0  failed=0

这个是结果,不过这个    cowsay是怎么打印出来的,我了个去,这是什么情况?

利用-vvvv来查看具体的执行情况

ansible Boss+Merchant+Web -m shell -a "hostname;ip a" -vvvv
<192.168.6.210> ESTABLISH CONNECTION FOR USER: root
<192.168.6.210> REMOTE_MODULE command hostname;ip a #USE_SHELL
<192.168.6.210> EXEC sshpass -d6 ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" -o GSSAPIAuthentication=no -o PubkeyAuthentication=no -o ConnectTimeout=10 192.168.6.210 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440 && echo $HOME/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440'
<192.168.6.210> PUT /tmp/tmpRfkD3R TO /root/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440/command
<192.168.6.210> EXEC sshpass -d6 ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" -o GSSAPIAuthentication=no -o PubkeyAuthentication=no -o ConnectTimeout=10 192.168.6.210 /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /root/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440/command; rm -rf /root/.ansible/tmp/ansible-tmp-1435819148.95-1730630738440/ >/dev/null 2>&1'
192.168.6.210 | success | rc=0 >>
Pay-Boss+Merchant+Web
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
  link/ether 00:0c:29:96:06:4e brd ff:ff:ff:ff:ff:ff
  inet 192.168.6.210/24 brd 192.168.6.255 scope global eth0

类似于debug。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Python 相关文章推荐
Python实现的简单文件传输服务器和客户端
Apr 08 Python
在Python中使用poplib模块收取邮件的教程
Apr 29 Python
python写入并获取剪切板内容的实例
May 31 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
Jan 17 Python
python set内置函数的具体使用
Jul 02 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
Python类中的魔法方法之 __slots__原理解析
Aug 26 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
Python实现LR1文法的完整实例代码
Oct 25 Python
python爬取2021猫眼票房字体加密实例
Feb 19 Python
合并百度影音的离线数据( with python 2.3)
Aug 04 #Python
python利用datetime模块计算时间差
Aug 04 #Python
使用python加密自己的密码
Aug 04 #Python
Python实现字典的key和values的交换
Aug 04 #Python
python利用装饰器进行运算的实例分析
Aug 04 #Python
浅谈python多线程和队列管理shell程序
Aug 04 #Python
python中使用序列的方法
Aug 03 #Python
You might like
PHP与已存在的Java应用程序集成
2006/10/09 PHP
Php部分常见问题总结
2006/10/09 PHP
php中curl和file_get_content的区别
2014/05/10 PHP
PHP获取windows登录用户名的方法
2014/06/24 PHP
php实现最简单的MVC框架实例教程
2014/09/08 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
php 如何禁用eval() 函数实例详解
2016/12/01 PHP
JS模拟多线程
2007/02/07 Javascript
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
国外大牛IE版本检测!现在IE都到9了,IE检测代码
2012/01/04 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
聊聊那些使用前端Javascript实现的机器学习类库
2017/09/18 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
python实现定时同步本机与北京时间的方法
2015/03/24 Python
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
python3.5绘制随机漫步图
2018/08/27 Python
python异常触发及自定义异常类解析
2019/08/06 Python
python 生成器需注意的小问题
2020/09/29 Python
Python爬虫教程知识点总结
2020/10/19 Python
python使用scapy模块实现ping扫描的过程详解
2021/01/21 Python
韩国著名的在线综合购物网站:Akmall
2016/08/07 全球购物
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
安全责任书怎么写
2014/07/28 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
2014小学教师个人工作总结
2014/11/10 职场文书
运动会报道稿大全
2015/07/23 职场文书
驾驶员管理制度范本
2015/08/06 职场文书