我查看了文档并且没有找到这个。 fab -l </ strong>或 fab -d 不显示预期参数。我还玩* fab -l&lt; task&gt; * 等等,看看是否有一些未记录的支持。任何人都知道如何或有建议?
答案 0 :(得分:4)
我没有找到任何自动化方式。我所做的是把它放在docstring中,如:
@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 :(得分:2)
我有面料版本1.8.2,当我运行fab -d sometask
时,我得到以下
⇒ fab -d build
Displaying detailed information for task 'build':
Build task description
Arguments: version='dev'
我还没有添加任何关于docstring中的参数的内容。所以我认为Fabric的开发者已经添加了这个功能。
答案 2 :(得分:0)
这似乎不适用于除了@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")
我想这可能与冒泡的论点有关。
答案 3 :(得分:0)
你可以让它有点摆弄。我正在运行1.11.1。它似乎与装饰器的顺序有很大关系。例如,以下是各种组合以及为这些代码块运行fab -d <task>
的结果:
以下是 JUST @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
添加@runs_once装饰器 BELOW @task并且不显示args:
@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:
添加@runs_once装饰器 ABOVE @task并显示args:
@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
添加一个@parallel装饰器 BELOW @task并且没有显示args(就像@runs_once一样)但是,尝试添加@parallel ABOVE @task使得Fabric认为这个甚至不再是一项任务了。如果用@serial替换@parallel(在@task之上)它会显示args。
@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 ABOVE @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