Fabric实例
参考《Python自动化运维 技术与最佳实践》
1:查看本地与远程主机信息
#!/usr/bin/python from fabric.api import * env.user="lile" env.hosts=['10.0.0.145','10.0.0.147'] env.password="123456" #@runs_once def local_task(): local('uname -r') def remote_task(): with cd("/tmp"): run("ls")
with 的作用是让后面的表达式的语句继承当前状态,实现“cd /tmp && ls”的效果
上面的remote_task也可表示为:
def remote_task(): run("cd /tmp" && ls)
2:动态的获取远程目录列表
#!/usr/bin/python from fabric.api import * env.user="lile" env.hosts=['10.0.0.145','10.0.0.147'] env.password='123456' @runs_once def input_raw(): return prompt("please input directory name:",default="/home") def worktask(dirname): run("ls " + dirname) @task def go(): getdirname = input_raw() worktask(getdirname)
prompt 表示获取用户的信息
@task 函数修饰符,表示只有函数标记了,才为fab可调用,非标记的不可用
若注释掉@task,三个都可见
执行结果为:
这里的@runs_once表示只要输入一个,然后所有的主机都是查看这个路径下的东西,画红圈圈的[10.0.0.145]可以不用管。
3:上传tomcat,并解压,通过堡垒机的形式
#!/usr/bin/python from fabric.api import * from fabric.context_managers import * from fabric.contrib.console import confirm env.user="root" env.gateway="10.0.0.12" env.hosts=['10.0.0.145','10.0.0.147'] env.passwords={ 'root@10.0.0.12:22':'root123456', 'root@10.0.0.145:22':'123456', 'root@10.0.0.147:22':'123456' } lpath="/fabric/5/apache-tomcat-8.5.12.tar.gz" rpath="/tmp/install" @task def put_task(): run('mkdir -p /tmp/install') with settings(warn_only=True): result = put(lpath,rpath) if result.failed and not confirm("put file failed,Continue[Y/N]?"): abort("Aborting file put task!") @task def tar(): with cd("/tmp/install"): run("tar -zxvf apache-tomcat-8.5.12.tar.gz") @task def go(): put_task() tar()
这里是通过堡垒机的形式上传本地文件,文件不是放在堡垒机上,而是放在执行此脚本的本地机器上
env.gateway:定义网关IP(也就是中转,堡垒机IP)
env.passwords:设置密码,但是需要设置账户,主机,端口等信息
作者:李先生
-------------------------------------------
个性签名:在平凡中坚持前行,总有一天会遇见不一样的自己!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
微信公众号 微信打赏 支付宝打赏
posted on 2017-06-02 18:03 Captain_Li 阅读(1019) 评论(0) 编辑 收藏 举报