调用一个类,然后调用Fabric中的类中的函数
问题描述:
我想将一堆相关的代码组合到Fabric下的类中,并从命令行调用该类中定义的函数。调用一个类,然后调用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
甚至传递变量到两个初始化和功能...
fab GoogleCloud:us-east1-b.server_create:new_server
任何想法如何做到这一点?织物应该支持开箱即可使用,但我似乎无法弄清楚它可能会记录在哪里。
当然,真正的代码要复杂得多,用类AmazonCloud和KvmInstance等
答
我对你的解决方案:
旁边的fabfile.py
添加__init__.py
(SUPER重要。)
添加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.
你可以让它成为一个班级,但我真的没有看到它的要点告诉你真相,因为每个任务都必须是它自己的班级。无论如何,让我知道。 (我保持与你有相同的命名,我建议你改变它)
Fabric支持[namespaces](http://docs.fabfile.org/en/1.10/usage/tasks.html#namespaces)。您可以将您的任务类移至单独的子模块。 – approxiblue