From 3caf17717a70041d878ad11b4e4234d362a7f000 Mon Sep 17 00:00:00 2001 From: Dan Kilman Date: Thu, 5 Jan 2017 15:01:16 +0200 Subject: [PATCH] ARIA-56 Implement ip property on node instance model --- aria/.pylintrc | 2 +- aria/storage/base_model.py | 12 ++++++ tests/storage/test_models.py | 80 ++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 1 deletion(-) diff --git a/aria/.pylintrc b/aria/.pylintrc index 13a84fcf..ee4d0ef4 100644 --- a/aria/.pylintrc +++ b/aria/.pylintrc @@ -162,7 +162,7 @@ logging-modules=logging [BASIC] # Good variable names which should always be accepted, separated by a comma -good-names=i,j,k,v,f,ex,e,_,id +good-names=i,j,k,v,f,ex,e,_,id,ip # Bad variable names which should always be refused, separated by a comma bad-names=foo,bar,baz,toto,tutu,tata diff --git a/aria/storage/base_model.py b/aria/storage/base_model.py index 97c541cc..418d3b60 100644 --- a/aria/storage/base_model.py +++ b/aria/storage/base_model.py @@ -495,6 +495,18 @@ def node(cls): def node_name(cls): return association_proxy('node', cls.name_column_name()) + @property + def ip(self): + if not self.host_fk: + return None + host_node_instance = self.host + if 'ip' in host_node_instance.runtime_properties: # pylint: disable=no-member + return host_node_instance.runtime_properties['ip'] # pylint: disable=no-member + host_node = host_node_instance.node # pylint: disable=no-member + if 'ip' in host_node.properties: + return host_node.properties['ip'] + return None + class RelationshipInstanceBase(ModelMixin): """ diff --git a/tests/storage/test_models.py b/tests/storage/test_models.py index df81f95b..20886766 100644 --- a/tests/storage/test_models.py +++ b/tests/storage/test_models.py @@ -664,6 +664,86 @@ def test_node_instance_model_creation(self, node_storage, is_valid, name, runtim assert node_instance.deployment == node_storage.deployment.list()[0] +class TestNodeInstanceIP(object): + + ip = '1.1.1.1' + + def test_ip_on_none_hosted_node_instance(self, deployment_storage): + node = self._node(deployment_storage, ip='not considered') + node_instance = self._node_instance(deployment_storage, node, + is_host=False, + ip='not considered') + assert node_instance.ip is None + + def test_property_ip_on_host_node_instance(self, deployment_storage): + node = self._node(deployment_storage, ip=self.ip) + node_instance = self._node_instance(deployment_storage, node, + is_host=True, + ip=None) + assert node_instance.ip == self.ip + + def test_runtime_property_ip_on_host_node_instance(self, deployment_storage): + node = self._node(deployment_storage, ip='not considered') + node_instance = self._node_instance(deployment_storage, node, + is_host=True, + ip=self.ip) + assert node_instance.ip == self.ip + + def test_no_ip_configured_on_host_node_instance(self, deployment_storage): + node = self._node(deployment_storage, ip=None) + node_instance = self._node_instance(deployment_storage, node, + is_host=True, + ip=None) + assert node_instance.ip is None + + def test_runtime_property_on_hosted_node_instance(self, deployment_storage): + host_node = self._node(deployment_storage, ip=None) + host_node_instance = self._node_instance(deployment_storage, host_node, + is_host=True, + ip=self.ip) + node = self._node(deployment_storage, ip=None) + node_instance = self._node_instance(deployment_storage, node, + is_host=False, + ip=None, + host_fk=host_node_instance.id) + assert node_instance.ip == self.ip + + def _node(self, storage, ip): + kwargs = dict( + name='node', + deploy_number_of_instances=1, + max_number_of_instances=1, + min_number_of_instances=1, + number_of_instances=1, + planned_number_of_instances=1, + properties={}, + type='', + deployment=storage.deployment.list()[0] + ) + if ip: + kwargs['properties']['ip'] = ip + node = Node(**kwargs) + storage.node.put(node) + return node + + def _node_instance(self, storage, node, is_host, ip, host_fk=None): + kwargs = dict( + name='node_instance', + node=node, + runtime_properties={}, + state='' + ) + if ip: + kwargs['runtime_properties']['ip'] = ip + if is_host: + kwargs['host_fk'] = 1 + elif host_fk: + kwargs['host_fk'] = host_fk + node_instance = NodeInstance(**kwargs) + storage.node_instance.put(node_instance) + return node_instance + + class TestRelationshipInstance(object): def test_relatiship_instance_model_creation(self, node_instances_storage): relationship = mock.models.get_relationship(