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实现拷贝多个文件到同一目录的方法
Sep 19 Python
python实现txt文件格式转换为arff格式
May 31 Python
Tensorflow分类器项目自定义数据读入的实现
Feb 05 Python
基于Python函数和变量名解析
Jul 19 Python
Python实现非正太分布的异常值检测方式
Dec 09 Python
python函数定义和调用过程详解
Feb 09 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 Python
浅谈PyTorch中in-place operation的含义
Jun 27 Python
基于K.image_data_format() == 'channels_first' 的理解
Jun 29 Python
Python中Selenium模块的使用详解
Oct 09 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
Mar 02 Python
Python语言规范之Pylint的详细用法
Jun 24 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实现下载文件的两种方法
2013/07/05 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
2013/08/16 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
Yii框架扩展CGridView增加导出CSV功能的方法
2017/05/24 PHP
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
基于jQuery捕获超链接事件进行局部刷新代码
2012/05/10 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
JavaScript中setFullYear()方法的使用详解
2015/06/11 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
详解Node.js access_token的获取、存储及更新
2017/06/20 Javascript
react-redux中connect的装饰器用法@connect详解
2018/01/13 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
从零学Python之入门(五)缩进和选择
2014/05/27 Python
python中迭代器(iterator)用法实例分析
2015/04/29 Python
python执行get提交的方法
2015/04/29 Python
python自定义类并使用的方法
2015/05/07 Python
Python基于二分查找实现求整数平方根的方法
2016/05/12 Python
Python 3.x读写csv文件中数字的方法示例
2017/08/29 Python
Python编写Windows Service服务程序
2018/01/04 Python
python制作朋友圈九宫格图片
2019/11/03 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
Python通过kerberos安全认证操作kafka方式
2020/06/06 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
python音频处理的示例详解
2020/12/23 Python
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
Dogeared官网:在美国手工制作的珠宝
2019/08/24 全球购物
车间机修工岗位职责
2014/02/28 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
2016年师德学习心得体会
2016/01/12 职场文书
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android