【发布时间】: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。您可以将任务类移动到单独的子模块中。