前面一篇博文说到系统发布,维护的痛,于是尝试学习 fabric:
1,装 python2.7(系统自带的2.4版本太低了)
2,装 pip
3,pip install fabric
非常简单,可以参考网上的教程;
4,阅读docments,使用很简单;一个小时后,我写出了下面的玩意:
- from fabric.api import env, run, cd, hosts
- from fabric.colors import *
- env.passwords = {"***":'***', \
- "***" : "****"}
- env.hosts = ['****', 'xxxx']
- @hosts('xxxxxx', 'ooooo', 'xxxooxx')
- def host_type():
- run('uname -s')
- with cd('/usr/local/xxx'):
- ret = run('ls -l')
- print "====================="
- print ret.succeeded,ret.return_code
- print ret
- print "====================="
- def excute_file(shell_file):
- shell = ""
- try:
- fd = open(shell_file, "r")
- shell = fd.read()
- except:
- print "cant open file"
- exit()
- print(red("\n---------------start shell-------------------------------- |%s|\n"%(env.host)))
- run(shell)
- print(green("---------------end shell---------------------------------- |%s|\n\n"%(env.host)))
注:1) passwords 直接写到里面去了,这样就不用每次去输入密码了(蛋疼)
2) 首先参照教程写了个 host_type 的玩意,掌握了基本的用法后,觉得如果真要在实际项目中应用
貌似也挺不方便的,在python里面写shell脚本:一,太难看;二,不适合比较复杂比较大的脚本;
所以感觉直接在 python 里面写这类脚本,基本没有实际意义,于是尝试了另外一种方法:
3) 把这个 python 脚本当作壳子,真正的 shell 放入一个单独的shell脚本中去,这样,就和平时写
脚本没什么区别了,可以写的很大,写的很复杂了;然后在 python 中加载这个shell,然后调用
run(load_str);试了下,果然ok;
调用方法:fab excute_file:a.sh -f a.py
a.sh 随便写了几行:
- cd /usr/local/xxx;
- ls -lh;
- if [ -d rc ];then
- du -lh rc
- else
- echo "***** no rc *****"
- fi
以后可以用这个去发布系统和管理系统了
good job
阅读(2809) | 评论(0) | 转发(0) |