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读写Excel文件方法介绍
Nov 22 Python
python中map()函数的使用方法示例
Sep 29 Python
解决Python 中英文混输格式对齐的问题
Jul 16 Python
Python将一个Excel拆分为多个Excel
Nov 07 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
Python实现的线性回归算法示例【附csv文件下载】
Dec 29 Python
python中如何使用分步式进程计算详解
Mar 22 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
python3.8 微信发送服务器监控报警消息代码实现
Nov 05 Python
python多进程并发demo实例解析
Dec 13 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
Python如何实现爬取B站视频
May 20 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 curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
2014/09/06 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
javascript基础知识大集锦(一) 推荐收藏
2011/01/13 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
深入理解vue $refs的基本用法
2017/07/13 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
2018/10/12 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
2019/12/06 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
原生js实现无缝轮播图效果
2021/01/28 Javascript
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
python list删除元素时要注意的坑点分享
2018/04/18 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
Tensorflow累加的实现案例
2020/02/05 Python
解决Python import docx出错DLL load failed的问题
2020/02/13 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
html5 利用重力感应实现摇一摇换颜色可用来做抽奖等等
2014/05/07 HTML / CSS
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
几道PHP的面试题
2012/05/19 面试题
网络安全方面的面试题
2016/01/07 面试题
我的网上商城创业计划书
2013/12/26 职场文书
网络技术专业推荐信
2014/02/20 职场文书
房地产广告词大全
2014/03/19 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
社区党员干部承诺书
2015/05/04 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书