【python】python 模块学习之--Fabric

基础一:

  1. #!/usr/bin/env python
  2. from fabric.api import *
  3. env.user='root'
  4. env.hosts=['218.78.186.162','125.208.12.56']
  5. env.passwords={ 'root@218.78.186.162:22':'XXX','root@125.208.12.56:22':'XXXX@0'}
  6. @runs_once ####runs_once代表只执行一次
  7. def local_task():
  8. local("hostname") ####local本地任务,不会ssh远程执行
  9. def remote_task():
  10. with cd("/tmp/"):
  11. run("hostname") ###run 远程命令
  12. @task ####task标记只有go函数可以调用remote_task函数
  13. def go():
  14. remote_task()

测试

  1. root@hostnfsd :/soft/python/pyauto/第七章/fabric\]$ fab -f simple1_test.py remote_task ###直接调用remote_task函数失败

  2. Warning: Command(s) not found:
  3. remote_task
  4. Available commands:
  5. go
  6. root@hostnfsd :/soft/python/pyauto/第七章/fabric\]$ fab -f simple1_test.py local_task ###有task表标识时直接调用local函数失败,meitask时才能直接调用local函数

  7. Warning: Command(s) not found:
  8. local_task
  9. Available commands:
  10. go
  11. root@hostnfsd :/soft/python/pyauto/第七章/fabric\]$ fab -f simple1_test.py go 通过go函数调用remote_task函数

  12. 218.78.186.162\] run: hostname

  13. 218.78.186.162\] out:

  14. 125.208.12.56\] Executing task 'go'

  15. 125.208.12.56\] out: host-192-168-1-56

  16. Done.
  17. Disconnecting from 218.78.186.162... done.
  18. Disconnecting from 125.208.12.56... done.

有时我们希望直接用脚本就可以执行,可以如下更改

  1. #!/usr/bin/env python
  2. from fabric.api import *
  3. env.user='root'
  4. env.hosts=['218.78.186.162','125.208.12.56']
  5. env.passwords={ 'root@218.78.186.162:22':'ESBecs00','root@125.208.12.56:22':'eRaMUnA612@0'}
  6. @runs_once
  7. def local_task():
  8. local("hostname")
  9. def remote_task():
  10. with cd("/tmp/"):
  11. run("hostname")
  12. def go():
    execute(remote_task) ####execute表示在脚本内执行即可
  13. execute (local_task)
    go()

直接运行即可

root@hostnfsd :/soft/python/pyauto/第七章/fabric\]$ python simple1_test.py 基础2: 1. #!/usr/bin/env python 2. from fabric.api import \* 3. 4. env.user='root' 5. env.hosts=\['218.78.186.162','125.208.12.56'

  1. env.passwords={ 'root@218.78.186.162:22':'XXX','root@125.208.12.56:22':'XXXX@0'}
  2. @runs_once
  3. def input_raw():
  4. return prompt("please input directory name:",default="/home")
  5. def worktask(dirname):
  6. run("ls -l "+dirname)
  7. @task
  8. def go():
  9. getdirname = input_raw()
  10. worktask(getdirname)

跳板机:

  1. #!/usr/bin/env python
  2. from fabric.api import *
  3. from fabric.context_managers import *
  4. from fabric.contrib.console import confirm
  5. env.user='root'
  6. env.gateway='218.78.186.162'
  7. env.hosts=['125.208.12.56']
  8. env.passwords={ 'root@218.78.186.162:22':'XX','root@125.208.12.56:22':'XXXX@0'}
  9. lpackpath="/home/install/lnmp0.9.tar.gz"
  10. rpackpath="/tmp/install"
  11. @task
  12. def put_task():
  13. run("mkdir -p /tmp/install")
  14. with settings(warn_only=True):
  15. result = put(lpackpath, rpackpath)
  16. if result.failed and not confirm("put file failed, Continue[Y/N]?"):
  17. abort("Aborting file put task!")
  18. @task
  19. def run_task():
  20. with cd("/tmp/install"):
  21. run("tar -zxvf lnmp0.9.tar.gz")
  22. run("ls -l")
  23. @task
  24. def go():
  25. put_task()
  26. run_task()

有时需要将这些功能模板写到django中,那么我们可以将该功能封装到一个类中

  1. #!/usr/bin/env python
  2. from fabric.api import *
  3. class Student(object):
  4. def init(self,user,ip):
  5. env.user=user
  6. env.hosts=[ip]
  7. env.password='XXX'
  8. @runs_once
  9. def local_task(self):
  10. local("hostname")
  11. def remote_task(self):
  12. vhost=run("df -h")
  13. return vhost
  14. def yunxing(user,ip):
  15. tom=Student(user,ip)
  16. print execute(tom.remote_task)
  17. yunxing('root','218.78.186.162') ###直接调用该函数传参即可
相关推荐
charlie1145141914 分钟前
深入理解C/C++的编译链接技术6——A2:动态库设计基础之ABI设计接口
c语言·开发语言·c++·学习·动态库·函数
white-persist10 分钟前
【攻防世界】reverse | Reversing-x64Elf-100 详细题解 WP
c语言·开发语言·网络·python·学习·安全·php
FeiHuo5651510 分钟前
微信个人号开发中如何高效实现API二次开发
java·开发语言·python·微信
love530love11 分钟前
【保姆级教程】Windows + Podman 从零部署 Duix-Avatar 数字人项目
人工智能·windows·笔记·python·数字人·podman·duix-avatar
AI绘画哇哒哒4 小时前
【收藏必看】大模型智能体六大设计模式详解:从ReAct到Agentic RAG,构建可靠AI系统
人工智能·学习·ai·语言模型·程序员·产品经理·转行
u***32435 小时前
使用python进行PostgreSQL 数据库连接
数据库·python·postgresql
小奶包他干奶奶7 小时前
Webpack学习——Loader(文件转换器)
前端·学习·webpack
小奶包他干奶奶8 小时前
Webpack学习——原理理解
学习·webpack·devops
青瓷程序设计8 小时前
动物识别系统【最新版】Python+TensorFlow+Vue3+Django+人工智能+深度学习+卷积神经网络算法
人工智能·python·深度学习
励志成为美貌才华为一体的女子8 小时前
强化学习PPO和GRPO逻辑学习
学习