Я хотел бы сгруппировать кучу связанного кода в класс под 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 и т.д.
Fabric поддерживает [пространства имен] (http://docs.fabfile.org/en/1.10/usage/tasks.html#namespaces). Вы можете переместить классы задач в отдельные подмодули. – approxiblue