【问题标题】:Calling a class and then a function in a class in Fabric在 Fabric 中调用一个类,然后调用一个类中的函数
【发布时间】:2015-10-17 05:14:01
【问题描述】:

我想把一堆相关的代码组合到Fabric下的一个类中,并从命令行调用该类中定义的函数。

例如,这里有一些用于管理 Google Compute Engine 服务器的简化伪代码。

class GoogleCloud(Task):
    def __init__(self, zone="us-east-1c"):
        credentials = GoogleCredentials.get_application_default()
        self.compute = build('compute', 'v1', credentials=credentials)
        self.project = "my_project"
        self.zone = zone

    def server_create(self, hostname):
        config = {
           'name': hostname
        }
        instance = self.compute.instances().insert(
            project=self.project,
            zone=self.zone,
            body=config).execute()

    def server_delete(self, hostname):
          return self.compute.instances().delete(
             project=self.project,
             zone=self.zone,
             instance=hostname
             ).execute()

我希望能够从命令行同时调用 server_create 和 server_delete,如下所示:

fab GoogleCloud.server_delete:foobar

甚至将变量传递给 init 和函数...

fab GoogleCloud:us-east1-b.server_create:new_server

知道如何做到这一点吗?看起来它很有用,fabric 应该开箱即用地支持它,但我似乎无法弄清楚它可能记录在哪里。

当然,真正的代码要复杂得多,有AmazonCloud、KvmInstance等类。

【问题讨论】:

  • Fabric 支持namespaces。您可以将任务类移动到单独的子模块中。

标签: python fabric


【解决方案1】:

我有一个解决方案:

在您的 fabfile.py 旁边添加一个 __init__.py(非常重要。)

添加GoogleCloud.py

from fabric.api import task, env

env.zone = "us-east-1c"

@task
def zone(zone):
    env.zone = zone

@task
def server_create(hostname):
    print('create %s on %s' % (hostname, env.zone))

@task
def server_delete(hostname):
    print('delete %s on %s' % (hostname, env.zone))

然后你可以运行:

$ fab GoogleCloud.server_delete:hello
delete hello on us-east-1c

Done.
$ fab GoogleCloud.zone:other GoogleCloud.server_delete:hello
delete hello on other

Done.

你可以把它变成一个类,但我真的不明白告诉你真相的意义,因为每个任务都必须是它自己的类。无论如何,让我知道。 (我保留了你的名字,我建议你改变它)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多