新西兰服务器

python中Fabric模块怎么用


python中Fabric模块怎么用

发布时间:2021-12-25 19:57:39 来源:高防服务器网 阅读:54 作者:小新 栏目:开发技术

这篇文章给大家分享的是有关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] Executing task 'go'

  13. [218.78.186.162] run: hostname

  14. [218.78.186.162] out: localhost.localdomain

  15. [218.78.186.162] out:

  16. [125.208.12.56] Executing task 'go'

  17. [125.208.12.56] run: hostname

  18. [125.208.12.56] out: host-192-168-1-56

  19. [125.208.12.56] out:

  20. Done.

  21. Disconnecting from 218.78.186.162… done.

  22. 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. 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

  7. def input_raw():

  8.     return prompt("please input directory name:",default="/home")

  9. def worktask(dirname):

  10.     run("ls -l "+dirname)

  11. @task

  12. def go():

  13.     getdirname = input_raw()

  14.     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')   ###直接调用该函数传参即可

感谢各位的阅读!关于“python中Fabric模块怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[