Merge "Add start parameter for tasks execution"

This commit is contained in:
Jenkins
2015-02-12 08:53:11 +00:00
committed by Gerrit Code Review
5 changed files with 52 additions and 10 deletions

View File

@@ -69,7 +69,8 @@ class NodeAction(Action):
Args.get_skip_tasks(),
Args.get_tasks()
),
Args.get_graph_endpoint()
Args.get_graph_endpoint(),
Args.get_graph_startpoint(),
]
self.flag_func_map = (
@@ -83,6 +84,7 @@ class NodeAction(Action):
("tasks", self.execute_tasks),
("skip", self.execute_tasks),
("end", self.execute_tasks),
("start", self.execute_tasks),
(None, self.list)
)
@@ -246,6 +248,8 @@ class NodeAction(Action):
fuel node --node 2 --skip hiera netconfig
fuel node --node 2 --skip rsync --end pre_deployment
fuel node --node 2 --end netconfig
fuel node --node 2 --start hiera --end neutron
fuel node --node 2 --start post_deployment
"""
node_collection = NodeCollection.init_with_ids(params.node)
env_id_to_start = self.get_env_id(node_collection)
@@ -255,7 +259,8 @@ class NodeAction(Action):
if params.tasks:
tasks = params.tasks
else:
tasks = env.get_tasks(skip=params.skip, end=params.end)
tasks = env.get_tasks(
skip=params.skip, end=params.end, start=params.start)
task = env.execute_tasks(node_collection.collection, tasks=tasks)

View File

@@ -305,7 +305,16 @@ def get_graph_endpoint():
flags=('--end',),
action="store",
default=None,
help="Specify endpoint for the graph of tasks.")
help="Specify endpoint for the graph traversal.")
def get_graph_startpoint():
return get_arg(
'start',
flags=('--start',),
action="store",
default=None,
help="Specify start point for the graph traversal.")
def get_skip_tasks():

View File

@@ -378,21 +378,24 @@ class Environment(BaseObject):
)
)
def get_tasks(self, skip=None, end=None):
def get_tasks(self, skip=None, end=None, start=None):
"""Stores logic to filter tasks by known parameters.
:param skip: list of tasks or None
:param end: string or None
:param start: string or None
"""
tasks = [t['id'] for t in self.get_deployment_tasks(end=end)]
tasks = [t['id'] for t
in self.get_deployment_tasks(end=end, start=start)]
if skip:
tasks_to_execute = set(tasks) - set(skip)
return list(tasks_to_execute)
return tasks
def get_deployment_tasks(self, end=None):
def get_deployment_tasks(self, end=None, start=None):
url = self.deployment_tasks_path.format(self.id)
return self.connection.get_request(url, params={'end': end})
return self.connection.get_request(
url, params={'end': end, 'start': start})
def update_deployment_tasks(self, data):
url = self.deployment_tasks_path.format(self.id)

View File

@@ -60,4 +60,4 @@ class TestEnvironmentOstf(base.UnitTestCase):
end = 'task1'
self.env.get_deployment_tasks(end=end)
kwargs = mrequests.get.call_args[1]
self.assertEqual(kwargs['params'], {'end': end})
self.assertEqual(kwargs['params'], {'start': None, 'end': 'task1'})

View File

@@ -50,7 +50,7 @@ class TestNodeExecuteTasksAction(base.UnitTestCase):
['fuel', 'node', '--node', '1,2', '--end', self.tasks[-2]])
kwargs = mrequests.put.call_args_list[0][1]
self.assertEqual(json.loads(kwargs['data']), self.tasks[:2])
get_tasks.assert_called_once_with(end=self.tasks[-2])
get_tasks.assert_called_once_with(end=self.tasks[-2], start=None)
@patch('fuelclient.objects.environment.Environment.get_deployment_tasks')
def test_skip_with_end_param(self, get_tasks, mrequests):
@@ -61,4 +61,29 @@ class TestNodeExecuteTasksAction(base.UnitTestCase):
kwargs = mrequests.put.call_args_list[0][1]
self.assertEqual(json.loads(kwargs['data']), self.tasks[2:])
get_tasks.assert_called_once_with(end=self.tasks[-1])
get_tasks.assert_called_once_with(end=self.tasks[-1], start=None)
@patch('fuelclient.objects.environment.Environment.get_deployment_tasks')
def test_start_with_end_param(self, get_tasks, mrequests):
"""end will be included."""
start = 1
end = 2
get_tasks.return_value = [{'id': t} for t in self.tasks[start:end + 1]]
self.execute(
['fuel', 'node', '--node', '1,2', '--start', self.tasks[start],
'--end', self.tasks[end]])
kwargs = mrequests.put.call_args_list[0][1]
self.assertEqual(json.loads(kwargs['data']), self.tasks[start:end + 1])
get_tasks.assert_called_once_with(
end=self.tasks[2], start=self.tasks[1])
@patch('fuelclient.objects.environment.Environment.get_deployment_tasks')
def test_start_param(self, get_tasks, mrequests):
get_tasks.return_value = [{'id': t} for t in self.tasks[1:]]
self.execute(
['fuel', 'node', '--node', '1,2', '--start', self.tasks[1]])
kwargs = mrequests.put.call_args_list[0][1]
self.assertEqual(json.loads(kwargs['data']), self.tasks[1:])
get_tasks.assert_called_once_with(start=self.tasks[1], end=None)