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 02 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
Python中标准模块importlib详解
Apr 16 Python
解决python线程卡死的问题
Feb 18 Python
pytorch多进程加速及代码优化方法
Aug 19 Python
通过实例解析Python调用json模块
Dec 11 Python
Python安装whl文件过程图解
Feb 18 Python
Selenium启动Chrome时配置选项详解
Mar 18 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 Python
opencv 实现特定颜色线条提取与定位操作
Jun 02 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
Oct 15 Python
python推导式的使用方法实例
Feb 28 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 翻页 实例代码
2009/08/07 PHP
php header Content-Type类型小结
2011/07/03 PHP
PHP递归算法的详细示例分析
2013/02/19 PHP
PHP stripos()函数及注意事项的分析
2013/06/08 PHP
PHP中CheckBox多选框上传失败的代码写法
2017/02/13 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
javascript cookies操作集合
2010/04/12 Javascript
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
Vue使用axios出现options请求方法
2019/05/30 Javascript
JS实现提示效果弹出及延迟隐藏的功能
2019/08/26 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
Vite和Vue CLI的优劣
2021/01/30 Vue.js
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
python里大整数相乘相关技巧指南
2014/09/12 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
Python查找最长不包含重复字符的子字符串算法示例
2019/02/13 Python
在python中画正态分布图像的实例
2019/07/08 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
服务生自我鉴定
2014/01/22 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
2014年学生党支部工作总结
2014/12/20 职场文书
企业工会工作总结2015
2015/05/13 职场文书