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获取一组汉字拼音首字母的方法
Jul 01 Python
python脚本实现数据导出excel格式的简单方法(推荐)
Dec 30 Python
python批量下载网站马拉松照片的完整步骤
Dec 05 Python
详解Python做一个名片管理系统
Mar 14 Python
Django rstful登陆认证并检查session是否过期代码实例
Aug 13 Python
Python使用matplotlib实现交换式图形显示功能示例
Sep 06 Python
Python实现TCP通信的示例代码
Sep 09 Python
使用IDLE的Python shell窗口实例详解
Nov 19 Python
python实现名片管理器的示例代码
Dec 17 Python
OpenCV图片漫画效果的实现示例
Aug 18 Python
如何基于Django实现上下文章跳转
Sep 16 Python
python归并排序算法过程实例讲解
Nov 04 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中多进程编程的相关函数的使用
2015/08/18 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
2018/04/26 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
Javascript实例教程(19) 使用HoTMetal(1)
2006/12/23 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
jquery实现百叶窗效果
2017/01/12 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
vue src动态加载请求获取图片的方法
2018/10/17 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
Python sqlite3事务处理方法实例分析
2017/06/19 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
python环形单链表的约瑟夫问题详解
2018/09/27 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
Django密码系统实现过程详解
2019/07/19 Python
Python解压 rar、zip、tar文件的方法
2019/11/19 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
python global和nonlocal用法解析
2020/02/03 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
python开发入门——列表生成式
2020/09/03 Python
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
如何使用PHP session
2015/04/21 面试题
廉洁自律承诺书2015
2015/01/22 职场文书
工程技术员岗位职责
2015/04/11 职场文书
水电施工员岗位职责
2015/04/11 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python