列出Fabric任务的预期参数

时间:2012-09-12 21:59:14

标签: python fabric

我查看了文档并且没有找到这个。 fab -l <​​/ strong>或 fab -d 不显示预期参数。我还玩* fab -l&lt; task&gt; * 等等,看看是否有一些未记录的支持。任何人都知道如何或有建议?

4 个答案:

答案 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