Files
deb-python-fuelclient/fuelclient/objects/task.py
Dmitry Shulyak bb5434f0cf Add commands to operate snapshot config
Added two commands to dump snapshot config
and provide it for snapshot task

Will download default config and dump it to stdout

fuel snapshot --conf > conf.yaml

Next command will accept config as input and bypass it to snapshot
generation request

fuel snapshot < conf.yaml

This is required to overwrite certain parameters if needed,
some of those are:
- target directory of snapshot generation
- timeout of snapshot generation procedure
- exclusion/inclusion of certain directories

Depends on I5e01a7459cefe49a128192d82dd827f02866f909
Related-Bug: 1382511
Related-Bug: 1420054
DocImpact

Change-Id: I1ddab26fba1346dad30955289e7d28f4d3aa1562
2015-03-11 15:14:10 +02:00

105 lines
2.9 KiB
Python

# Copyright 2014 Mirantis, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from operator import methodcaller
from time import sleep
from fuelclient.cli.error import DeployProgressError
from fuelclient.objects.base import BaseObject
class Task(BaseObject):
class_api_path = "tasks/"
instance_api_path = "tasks/{0}/"
def delete(self, force=False):
return self.connection.delete_request(
"tasks/{0}/?force={1}".format(
self.id,
int(force),
))
@property
def progress(self):
return self.get_fresh_data()["progress"]
@property
def status(self):
return self.get_fresh_data()["status"]
@property
def is_finished(self):
return self.status in ("ready", "error")
def wait(self):
while not self.is_finished:
sleep(0.5)
class DeployTask(Task):
def __init__(self, obj_id, env_id):
from fuelclient.objects.environment import Environment
super(DeployTask, self).__init__(obj_id)
self.env = Environment(env_id)
self.nodes = self.env.get_all_nodes()
@classmethod
def init_with_data(cls, data):
return cls(data["id"], data["cluster"])
@property
def not_finished_nodes(self):
return filter(
lambda n: not n.is_finished(latest=False),
self.nodes
)
@property
def is_finished(self):
return super(DeployTask, self).is_finished and all(
map(
methodcaller("is_finished"),
self.not_finished_nodes
)
)
def __iter__(self):
return self
def next(self):
if not self.is_finished:
sleep(1)
deploy_task_data = self.get_fresh_data()
if deploy_task_data["status"] == "error":
raise DeployProgressError(deploy_task_data["message"])
for node in self.not_finished_nodes:
node.update()
return self.progress, self.nodes
else:
raise StopIteration
class SnapshotTask(Task):
@classmethod
def start_snapshot_task(cls, conf):
dump_task = cls.connection.put_request("logs/package", conf)
return cls(dump_task["id"])
@classmethod
def get_default_config(cls):
return cls.connection.get_request("logs/package/config/default/")