fuel-web/nailgun/nailgun/test/integration/test_openstack_config_task_...

138 lines
5.2 KiB
Python

# Copyright 2015 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 mock import patch
from nailgun import consts
from nailgun.db.sqlalchemy.models import DeploymentGraphTask
from nailgun.orchestrator.tasks_templates import make_generic_task
from nailgun.task.manager import OpenstackConfigTaskManager
from nailgun.test import base
class TestOpenstackConfigTaskManager80(base.BaseIntegrationTest):
env_version = "liberty-8.0"
def setUp(self):
super(TestOpenstackConfigTaskManager80, self).setUp()
self.cluster = self.env.create(
cluster_kwargs={'net_provider': 'neutron',
'net_segment_type': 'gre'},
release_kwargs={'version': self.env_version,
'operating_system': consts.RELEASE_OS.ubuntu},
nodes_kwargs=[
{'roles': ['controller'], 'status': 'ready'},
{'roles': ['compute'], 'status': 'ready'},
{'roles': ['compute'], 'status': 'ready'},
{'roles': ['compute'], 'pending_addition': True},
]
)
self.release = self.env.releases[0]
self.nodes = self.env.nodes
# this mock configuration is used to insert into DB
self.refreshable_task = {
'task_name': 'test_task',
'type': 'puppet',
'groups': ['primary-controller', 'controller'],
'refresh_on': ['keystone_config'],
'parameters': {},
}
# add refreshable deployment task
task = DeploymentGraphTask(**self.refreshable_task)
deployment_graph_assoc = self.release.deployment_graphs_assoc.first()
deployment_graph_assoc.deployment_graph.tasks.append(task)
self.db().flush()
# this field is expected to be added for compatibility
self.refreshable_task['id'] = 'test_task'
self.env.create_openstack_config(
cluster_id=self.cluster.id,
configuration={
'keystone_config': {'param_a': 'cluster'},
})
self.env.create_openstack_config(
cluster_id=self.cluster.id,
node_id=self.env.nodes[0].id,
configuration={
'keystone_config': {'param_a': 'node_1'},
'nova_config': {'param_a': 'node_1'},
})
self.env.create_openstack_config(
cluster_id=self.cluster.id,
node_role='compute',
configuration={
'keystone_config': {},
})
@patch('nailgun.rpc.cast')
def test_configuration_execute(self, mocked_rpc):
task_manager = OpenstackConfigTaskManager(self.cluster.id)
task = task_manager.execute({'cluster_id': self.cluster.id})
self.assertEqual(task.status, consts.TASK_STATUSES.pending)
all_node_ids = [n.id for n in self.env.nodes[:3]]
self.assertItemsEqual(task.cache['nodes'], all_node_ids)
tasks = mocked_rpc.call_args[0][1]['args']['tasks']
# 3 tasks for all ready nodes with cluster config
# 1 task for node[0] with node specific config
# 2 tasks (1 per each compute node)
# 1 deployment task
self.assertEqual(len(tasks), 7)
cluster_uids = []
role_uids = []
node_uids = []
deployment_tasks = []
for task in tasks:
if task['type'] == 'upload_file':
if '/cluster' in task['parameters']['path']:
cluster_uids.extend(task['uids'])
if '/role' in task['parameters']['path']:
role_uids.extend(task['uids'])
if '/node' in task['parameters']['path']:
node_uids.extend(task['uids'])
else:
deployment_tasks.append(task)
self.assertItemsEqual(cluster_uids, map(str, all_node_ids))
self.assertItemsEqual(role_uids,
[self.nodes[1].uid, self.nodes[2].uid])
self.assertItemsEqual([self.nodes[0].uid], node_uids)
self.assertItemsEqual(deployment_tasks, [
make_generic_task([self.nodes[0].uid], self.refreshable_task)])
@patch('nailgun.rpc.cast')
def test_configuration_execute_by_node_id(self, mocked_rpc):
task_manager = OpenstackConfigTaskManager(self.cluster.id)
task = task_manager.execute({
'cluster_id': self.cluster.id,
'node_ids': [self.nodes[0].id],
})
self.assertEqual(task.status, consts.TASK_STATUSES.pending)
all_node_ids = [self.nodes[0].id]
self.assertEqual(task.cache['nodes'], all_node_ids)
class TestOpenstackConfigTaskManager90(TestOpenstackConfigTaskManager80):
env_version = "liberty-8.0"