Fixed fuyaql after spliting common and node part of deployment info

Change-Id: I98055b786eacda504df0c99f974ee0aba37a3b4d
Closes-Bug: 1626965
This commit is contained in:
Bulat Gaifullin 2016-09-23 13:41:32 +03:00
parent 0579f36876
commit c11cdf6730
2 changed files with 32 additions and 13 deletions

View File

@ -31,8 +31,10 @@ from nailgun.fuyaql import completion
from nailgun.logger import logger
from nailgun import objects
from nailgun.orchestrator import deployment_serializers
from nailgun.utils import uniondict
from nailgun import yaql_ext
logger.disabled = True
@ -46,7 +48,7 @@ class FuYaqlController(object):
self._tasks = [None, None]
self._infos = [None, None]
self._yaql_context = yaql_ext.create_context(
add_serializers=True, add_datadiff=True
add_serializers=True, add_datadiff=True, add_extensions=True
)
self._yaql_engine = yaql_ext.create_engine()
@ -161,14 +163,22 @@ class FuYaqlController(object):
def _set_info(self, state, info):
if state == self.EXPECTED:
self._node_id = None
if info is None:
serialized = deployment_serializers.serialize_for_lcm(
if not info:
info = deployment_serializers.serialize_for_lcm(
self._cluster,
objects.Cluster.get_nodes_not_for_deletion(self._cluster)
)
info = {node['uid']: node for node in serialized}
# TODO(bgaifullin) serializer should return nodes as dict
info['nodes'] = {n['uid']: n for n in info['nodes']}
self._infos[state] = info or {}
if info:
common = info['common']
nodes = info['nodes']
info = {n: uniondict.UnionDict(common, nodes[n]) for n in nodes}
else:
info = {}
self._infos[state] = info
def _get_info(self, state):
return self._infos[state]
@ -232,7 +242,7 @@ class FuyaqlInterpreter(object):
if self._check_cluster():
self.print_list(
('uid', 'status', 'roles'), self.controller.get_nodes(),
lambda x: node_ids.index(x['uid'])
lambda x: node_ids.index(x.get('uid'))
)
def show_cluster(self):

View File

@ -192,19 +192,28 @@ class TestFuyaqlController(base.BaseUnitTest):
self.controller._cluster = mock.MagicMock()
self.controller._node_id = 7
self.controller._set_info(self.controller.CURRENT, 'info')
self.assertEqual(self.controller._infos[self.controller.CURRENT],
'info')
self.controller._set_info(
self.controller.CURRENT, {'common': {}, 'nodes': {'1': {'v': 1}}}
)
self.assertEqual(
{'1': {'v': 1}}, self.controller._infos[self.controller.CURRENT],
)
self.assertEqual(self.controller._node_id, 7)
self.controller._set_info(self.controller.CURRENT, None)
self.assertEqual(self.controller._infos[self.controller.CURRENT], {})
self.assertEqual(self.controller._node_id, 7)
serialized.return_value = list(self.new_context.values())
self.controller._set_info(self.controller.EXPECTED, 'exp_info')
self.assertEqual(self.controller._infos[self.controller.EXPECTED],
'exp_info')
serialized.return_value = {
'common': {}, 'nodes': self.new_context.values()
}
self.controller._set_info(
self.controller.EXPECTED, {'common': {'a': 2}, 'nodes': {'1': {}}}
)
self.assertEqual(
{'1': {'a': 2}},
self.controller._infos[self.controller.EXPECTED],
)
self.assertEqual(self.controller._node_id, None)
self.controller._node_id = 8