3

我查看了文档并没有找到这个。 fab -lfab -d不显示预期的参数。我还玩了* fab -l <​​task>*等,看看是否有一些无证支持。有人知道怎么做或有建议吗?

4

4 回答 4

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
于 2012-09-12T22:18:08.233 回答
2

我有织物版本 1.8.2,当我运行时,fab -d sometask我得到以下

⇒ fab -d build
Displaying detailed information for task 'build':

Build task description

Arguments: version='dev'

而且我没有在文档字符串中添加任何关于参数的内容。所以我想Fabric的开发人员已经添加了这个功能。

于 2014-10-27T16:10:57.447 回答
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")

我想这可能与争论的冒泡有关

于 2015-01-05T16:58:24.540 回答
0

您可以通过一些摆弄来使其工作。我正在运行 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
于 2016-11-04T19:37:10.910 回答