用于创建更好的结构任务的实用程序。
vo-fabutils的Python项目详细描述
用于创建更好的结构任务的实用程序。
安装
$ pip install vo-fabutils
用法
在fab文件中导入正确的fabutils模块 天。
示例
以json格式定义环境
首先,必须创建一个包含环境的json文件 配置。
#/path/to/environments/file.json{"devel":{"user":"devel-user","hosts":["dev.host.com"],"site_dir":"/path/to/devel/site/www/","command_prefixes":["/path/to/devel/site/env/bin/activate"]},"production":{"user":"prod-user","hosts":["host.com"],"site_dir":"/path/to/production/site/www/","command_prefixes":["/path/to/production/site/env/bin/activate"]}}
请注意:
- 可以将任意字符串定义为env属性,这些属性将传递给任务的env。
- 由织物“保留”名称的属性将由织物识别,并采用织物对其具有的特殊方法进行处理。
- 唯一需要注意的是,如果您定义了一个command_prefixes数组,那么您必须只列出脚本的路径,并且它将自动以单词“souce”开头。例如,如果在命令前缀中定义../some_script,则它将转换为source ../some_script。
- 每个目录路径都必须以斜杠结尾。
接下来,在fabfile中导入fabutils.env.set_env,并创建一个任务,用json文件的路径调用它。
# fabfile.pyfromfabric.apiimporttaskfromfabutils.envimportset_env@taskdefenvironment(env_name):set_env(env_name,'/path/to/environments/file.json')
现在可以通过调用
environment:name之前
您的任务。
# Run a task in devel environment $ fab environment:devel some_task # Run a task in production environment $ fab environment:production some_task
任意选项和参数
有时你只需要传递一个未知的
a的选项/参数
命令,在这种情况下,可以使用join、options和
argumentsutils到
将pythonic*args转换为命令参数并**kwargs
至
命令选项。
fromfabric.apiimporttask,runfromfabutilsimportjoin,arguments,options@taskdefsome_task(*args,**kwargs):run(join('some_command',arguments(*args,**kwargs))
然后使用结构符号调用任务
$ fab some_task:arg1,arg2,kwarg1=val1,kwarg2=val2 # The above will be translated to: # some_command arg1 arg2 kwarg1=val1 kwarg2=val2
如果将*kwargs传递给options,则
计算为布尔值
true将转换为--{key}符号。
...@taskdefanother_task(**kwargs):return(join('another_command',options(**kwargs)))...
$ fab another_task:option1=True,option2=No,option3=1,option4=False # The above will be translated to: # another_command --option1 --option3
当然,你可以把这两种方法结合起来。
...fromfabutilsimportboolean@taskdefthe_task(*args,**kwargs):options={}arguments={}fork,vinkwargs:ifboolean(v):options[k]=velse:arguments[k]=vrun(join('the_command',arguments(*args,**arguments),options(**options)))...
$ fab the_task:arg1,arg2=val2,option1=True # The above will be translated to: # the_command arg1 arg2=val2 --option1