您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Fabric API 以及实例讲解
FabricAPI以及实例讲解CoreAPI核心API主要有七类:带颜色的输出类(coloroutput),上下文管理类(contextmanagers),装饰器类(decorators),网络类(network),操作类(oprations),任务类(tasks),工具类(utils)。ColorOutput每一个包含这个模块的函数返回String带有颜色。比如:1.Fromfabric.apiimportgreen,red2.Print(red(Thissentenceisred,exceptfor+green(thesewords,whicharegreen)+.))共包括以下:1.fabric.colors.blue(text,bold=False)2.fabric.colors.cyan(text,bold=False)3.fabric.colors.green(text,bold=False)4.fabric.colors.magenta(text,bold=False)5.fabric.colors.red(text,bold=False)6.fabric.colors.white(text,bold=False)7.fabric.colors.yellow(text,bold=False)ContextManagersContextManagers使用都需要结合with语句。连续使用多个时可嵌套也可用逗号隔开连接使用。举例如下:1.withcd('/path/to/app'):2.withprefix('workonmyvenv'):3.run('./manage.pysyncdb')4.run('./manage.pyloaddatamyfixture')它等价于1.withcd('/path/to/app'),prefix('workonmyvenv'):2.run('./manage.pysyncdb')3.run('./manage.pyloaddatamyfixture')注意此时在python2.5中的写法:withnested(cd('/path/to/app'),prefix('workonmyvenv')):此类包括:1.fabric.context_managers.cd(path)cd(远程主机更新工作目录)任何被包括在withcd(path):代码块里的命令run/sudo/get/put相当于执行cd&&那么很明显它与shell命令cd的区别举例如下:1.withcd('/var/):2.run('ls')#Turnsintocd/var/比较1.run('cd/var/)2.run('ls')前者相当于执行:run(‘cd/var/’)后者相当于执行:ls时并没在/var/路径下,而是在默认路径$HOME路径下cd可嵌套:1.withcd('/var/):2.run('ls')#cd/var/('website1'):4.run('ls')#cd/var/(path)lcd(本地主机更新工作目录)同cd用法相同,只是它改变的的是本地工作目录,而cd改变的远程主机工作目录,所以它只能改变local的调用以及put/get的本地参数,它的默认路径与fabfile所在路径相关,由环境变量env.realfabfile指定目前,cd和lcd的实现视是通过改变环境变量env.cwd和env.lcwd实现的,所以如果要实现这个也可以通过环境变量来实现,但是不建议这么做。因为按照官方文档说明,将来这种实现方式可能要改。fabric.context_managers.hide(*groups)hide(将指定参数输出级别默认设置为False)指定默认隐藏的输出级别group是一个或多个之前output指定的类别之一,执行时它会将这些输出类型置为False。比如你不想看到[hostname]:run:xxxx,以及阻止标准输出和错误就可以用下面这样1.defmy_task():2.withhide('running','stdout','stderr'):3.run('ls/var/)4.fabric.context_managers.show(\*groups)show(将指定参数输出级别默认设置为False)指定默认输出的输出级别用法同hide,作用刚好相反。默认是所有都输出,所以show的一个作用就是打开默认隐藏的debug。fabric.context_managers.path(path,behavior='append')默认设置为将参数path附加在系统/用户环境变量$PATH,即PATH=$PATH:指定run/sudo路径behavior默认还有两个参数:1.prepend:将指定参数path在$PATH前置即:PATH=path:$PATH2.replace:将指定参数代替$PATH,即PATH=pathfabric.context_managers.prefix(command)prefix(对于所有包括在其中的run/sudo命令相当于再给定参数命令后加了&&)这与cd用法相同,只是在嵌套调用时,它是直接在后面附加字符串,而不是cd中的修改字符串。大多数时候,会用它来export或alter环境变量。1.withprefix('workonmyvenv'):2.run('./manage.pysyncdb')等价于执行#workonmyvenv&&./manage.pysyncdb嵌套调用举例:1.withprefix('workonmyenv'):2.run('ls')3.withprefix('source/some/script'):4.run('toucha_file')结果是:1.$workonmyenv&&ls2.$workonmyenv&&source/some/script&&toucha_file和cd是兼容的,结合使用举例:1.withcd('/path/to/app'):2.withprefix('workonmyvenv'):3.run('./manage.pysyncdb')4.run('./manage.pyloaddatamyfixture')结果如下:1.$cd/path/to/app&&workonmyvenv&&./manage.pysyncdb2.$cd/path/to/app&&workonmyvenv&&./manage.pyloaddatamyfixturefabric.context_managers.settings(*args,**kwargs)setting(嵌套的上下文管理器覆盖env变量)它有两个作用:大多数情况下,它会暂时覆盖/更新任何提到的关键字的env变量的值。比如:withsettings(user='foo'):相当于设定env.user=‘foo’。出了这个代码块,setting中的值就会失效。此时注意clean_revert=True对作用域的影响,若此时在代码块中重新更新env的值,则该值就被更新即使出了代码块直到下次更新。1.#Beforetheblock,env.paralleldefaultstoFalse,host_stringtoNone2.withsettings(parallel=True,host_string='myhost'):3.#env.parallelisTrue4.#env.host_stringis'myhost'5.env.host_string='otherhost'6.#env.host_stringisnow'otherhost'7.#Outsidetheblock:8.#*env.parallelisFalseagain9.#*env.host_stringisNoneagain另外,它还能对env变量中未提到的关键字(即env变量中没有的,这些可能会是其他的上下文管理器)进行指定值,比如:1.defmy_task():2.withsettings(3.hide('warnings','running','stdout','stderr'),4.warn_only=True5.):6.ifrun('ls/etc/lsb-release'):7.return'Ubuntu'8.elifrun('ls/etc/redhat-release'):9.return'RedHat'最后就是clean_revert设置带来的变化注意对比前面例子:1.#Beforetheblock,env.paralleldefaultstoFalse,host_stringtoNone2.withsettings(parallel=True,host_string='myhost',clean_revert=True):3.#env.parallelisTrue4.#env.host_stringis'myhost'5.env.host_string='otherhost'6.#env.host_stringisnow'otherhost'7.#Outsidetheblock:8.#*env.parallelisFalseagain9.#*env.host_stringremains'otherhost'Decorators1.fabric.decorators.hosts(\*host_list)定义哪个或者哪些主机来执行这些命令,定义方式:2.@hosts('host1')3.@hosts('host1','host2')4.@hosts(['host1','host2']))5.fabric.decorators.roles(\*role_list)定义执行任务的roles,与主机对应6.env.roledefs.update({7.'webserver':['],8.'dbserver':['db1']})9.@roles('webserver','dbserver')10.defmy_func():11.pass同hosts一样,roles的参数既可以是一个参数列表,或者一个可迭代对象1.fabric.decorators.serial(func)(串行执行,不允许并行)强制func串行执行2.fabric.decorators.parallel(pool_size=None)(并行执行,而不是串行)3.fabric.decorators.task(\*args,**kwargs)即新风格任务,参照前面定义任务时的参数给其设定参数4.fabric.decorators.with_settings(\*arg_settings,**kw_settings)作用同于上下文管理器中的with,只是它的作用域应该是整个函数。5.@with_settings(warn_only=True)6.deffoo():7....8.fabric.decorators.runs_once(func)函数仅执行一次Network1.fabric.network.disconnect_all()用于与所有当前连接的服务器断开连接。一般用于fab主循环,也同时用于将Fabric作为类库使用。Operations1.fabric.operations.get(remote_path,local_path=None)从远程主机下载一个或多个文件2.fabric.operations.put(local_path,remote_path,use_sudo=False,mirror_local_mode=False,mode=None)从本地上传一个或多个文件至远程主机很多时候用法类似scp或
本文标题:Fabric API 以及实例讲解
链接地址:https://www.777doc.com/doc-4311819 .html