我查看了文档并没有找到这个。 fab -l或fab -d不显示预期的参数。我还玩了* fab -l <task>*等,看看是否有一些无证支持。有人知道怎么做或有建议吗?
4 回答
我还没有找到任何自动化的方法。我所做的是将它放入文档字符串中,如下所示:
@task
def sometask(parma='Foo'):
"""Does some common, tedious task.
sometask:parma=Foo
"""
因此,当您执行时,fab -d sometask
您会得到:
Displaying detailed information for task 'sometask':
Does some common, tedious task.
sometask:parma=Foo
我有织物版本 1.8.2,当我运行时,fab -d sometask
我得到以下
⇒ fab -d build
Displaying detailed information for task 'build':
Build task description
Arguments: version='dev'
而且我没有在文档字符串中添加任何关于参数的内容。所以我想Fabric的开发人员已经添加了这个功能。
这似乎不适用于任何用默认装饰器(如@task)以外的任何东西装饰的任务。
fab -d hostName
Displaying detailed information for task 'hostName':
No docstring provided
Arguments: arg='test'
这就是 Fabric 任务。
@task
def hostName(arg='test'):
run("hostname -f")
我想这可能与争论的冒泡有关
您可以通过一些摆弄来使其工作。我正在运行 1.11.1。它似乎与装饰器的顺序有很大关系。例如,以下是fab -d <task>
这些代码块的各种组合和运行结果:
使用@task装饰器可以按预期工作:
@task
def setupDNS(search, nameserver, interface):
'''
Configure search and nameserver in /etc/resolv.conf
'''
[mpetronic@mpws.ws fabric]$ fab -d setupDNS
Displaying detailed information for task 'setupDNS':
Configure search and nameserver in /etc/resolv.conf
Arguments: search, nameserver, interface
在@task下方添加一个@runs_once 装饰器,并且不显示任何参数:
@task
@runs_once
def setupDNS(search, nameserver, interface):
'''
Configure search and nameserver in /etc/resolv.conf
'''
[mpetronic@mpws.ws fabric]$ fab -d setupDNS
Displaying detailed information for task 'setupDNS':
Configure search and nameserver in /etc/resolv.conf
Arguments:
在@task上方添加一个@runs_once 装饰器,并显示参数:
@runs_once
@task
def setupDNS(search, nameserver, interface):
'''
Configure search and nameserver in /etc/resolv.conf
'''
[mpetronic@mpws.ws fabric]$ fab -d setupDNS
Displaying detailed information for task 'setupDNS':
Configure search and nameserver in /etc/resolv.conf
Arguments: search, nameserver, interface
在@task下方添加一个@parallel 装饰器,并且不显示args(就像@runs_once 一样)但是,尝试在@task 上方添加@parallel会使fabric 认为这甚至不再是一项任务。如果您将@parallel 替换为@serial(@task 上方),它会显示参数。
@parallel
@task
def setupDNS(search, nameserver, interface):
'''
Configure search and nameserver in /etc/resolv.conf
'''
[mpetronic@mpws.ws fabric]$ fab -d setupDNS
Fatal error: Task 'setupDNS' does not appear to exist. Valid task names:
addNode
auditHost
但是,@parallel 装饰器有一个解决方法。你必须为装饰器提供一个参数。我只是使用默认值 None ,因此在内部,执行期间不会发生任何行为变化,但结构很高兴并为我显示 args。您仍然需要将@parallel 堆叠在@task之上。
@parallel(pool_size=None)
@task
def setupDNS(search, nameserver, interface):
'''
Configure search and nameserver in /etc/resolv.conf
'''
[mpetronic@mpws.ws fabric]$ fab -d setupDNS
Displaying detailed information for task 'setupDNS':
Configure search and nameserver in /etc/resolv.conf
Arguments: search, nameserver, interface