ARIA-56 Implement ip property on node instance model
Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/3caf1771 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/3caf1771 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/3caf1771 Branch: refs/heads/ARIA-56-node-ip Commit: 3caf17717a70041d878ad11b4e4234d362a7f000 Parents: fa221f7 Author: Dan Kilman <d...@gigaspaces.com> Authored: Thu Jan 5 15:01:16 2017 +0200 Committer: Dan Kilman <d...@gigaspaces.com> Committed: Thu Jan 5 16:51:25 2017 +0200 ---------------------------------------------------------------------- aria/.pylintrc | 2 +- aria/storage/base_model.py | 12 ++++++ tests/storage/test_models.py | 80 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3caf1771/aria/.pylintrc ---------------------------------------------------------------------- diff --git a/aria/.pylintrc b/aria/.pylintrc index 13a84fc..ee4d0ef 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 http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3caf1771/aria/storage/base_model.py ---------------------------------------------------------------------- diff --git a/aria/storage/base_model.py b/aria/storage/base_model.py index 97c541c..418d3b6 100644 --- a/aria/storage/base_model.py +++ b/aria/storage/base_model.py @@ -495,6 +495,18 @@ class NodeInstanceBase(ModelMixin): 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): """ http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/3caf1771/tests/storage/test_models.py ---------------------------------------------------------------------- diff --git a/tests/storage/test_models.py b/tests/storage/test_models.py index df81f95..2088676 100644 --- a/tests/storage/test_models.py +++ b/tests/storage/test_models.py @@ -664,6 +664,86 @@ class TestNodeInstance(object): 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(