Add support for HOST as first argument in get_property function.
It uses a similar solution used in the get_attribute function. Change-Id: I70b75a415b8d3d78c25c61bdfc351f40d62bae2a Related-Bug: 1511344
This commit is contained in:
parent
4c65bf3f75
commit
0d31c251fe
@ -18,6 +18,7 @@ import six
|
|||||||
from toscaparser.common.exception import ExceptionCollector
|
from toscaparser.common.exception import ExceptionCollector
|
||||||
from toscaparser.common.exception import UnknownInputError
|
from toscaparser.common.exception import UnknownInputError
|
||||||
from toscaparser.dataentity import DataEntity
|
from toscaparser.dataentity import DataEntity
|
||||||
|
from toscaparser.elements.entity_type import EntityType
|
||||||
from toscaparser.utils.gettextutils import _
|
from toscaparser.utils.gettextutils import _
|
||||||
|
|
||||||
|
|
||||||
@ -179,7 +180,6 @@ class GetAttribute(Function):
|
|||||||
def _find_host_containing_attribute(self, node_template_name=SELF):
|
def _find_host_containing_attribute(self, node_template_name=SELF):
|
||||||
node_template = self._find_node_template(node_template_name)
|
node_template = self._find_node_template(node_template_name)
|
||||||
if node_template:
|
if node_template:
|
||||||
from toscaparser.elements.entity_type import EntityType
|
|
||||||
hosted_on_rel = EntityType.TOSCA_DEF[HOSTED_ON]
|
hosted_on_rel = EntityType.TOSCA_DEF[HOSTED_ON]
|
||||||
for r in node_template.requirements:
|
for r in node_template.requirements:
|
||||||
for requirement, target_name in r.items():
|
for requirement, target_name in r.items():
|
||||||
@ -328,6 +328,9 @@ class GetProperty(Function):
|
|||||||
def _find_node_template(self, node_template_name):
|
def _find_node_template(self, node_template_name):
|
||||||
if node_template_name == SELF:
|
if node_template_name == SELF:
|
||||||
return self.context
|
return self.context
|
||||||
|
# enable the HOST value in the function
|
||||||
|
if node_template_name == HOST:
|
||||||
|
return self._find_host_containing_property()
|
||||||
if not hasattr(self.tosca_tpl, 'nodetemplates'):
|
if not hasattr(self.tosca_tpl, 'nodetemplates'):
|
||||||
return
|
return
|
||||||
for node_template in self.tosca_tpl.nodetemplates:
|
for node_template in self.tosca_tpl.nodetemplates:
|
||||||
@ -338,6 +341,28 @@ class GetProperty(Function):
|
|||||||
'Node template "{0}" was not found.'
|
'Node template "{0}" was not found.'
|
||||||
).format(node_template_name)))
|
).format(node_template_name)))
|
||||||
|
|
||||||
|
# Add this functions similar to get_attribute case
|
||||||
|
def _find_host_containing_property(self, node_template_name=SELF):
|
||||||
|
node_template = self._find_node_template(node_template_name)
|
||||||
|
hosted_on_rel = EntityType.TOSCA_DEF[HOSTED_ON]
|
||||||
|
for r in node_template.requirements:
|
||||||
|
for requirement, target_name in r.items():
|
||||||
|
target_node = self._find_node_template(target_name)
|
||||||
|
target_type = target_node.type_definition
|
||||||
|
for capability in target_type.get_capabilities_objects():
|
||||||
|
if capability.type in hosted_on_rel['valid_target_types']:
|
||||||
|
if self._property_exists_in_type(target_type):
|
||||||
|
return target_node
|
||||||
|
return self._find_host_containing_property(
|
||||||
|
target_name)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def _property_exists_in_type(self, type_definition):
|
||||||
|
props_def = type_definition.get_properties_def()
|
||||||
|
found = [props_def[self.args[1]]] \
|
||||||
|
if self.args[1] in props_def else []
|
||||||
|
return len(found) == 1
|
||||||
|
|
||||||
def result(self):
|
def result(self):
|
||||||
if len(self.args) == 3:
|
if len(self.args) == 3:
|
||||||
property_value = self._find_req_or_cap_property(self.args[1],
|
property_value = self._find_req_or_cap_property(self.args[1],
|
||||||
|
13
toscaparser/tests/data/custom_types/compute_with_prop.yaml
Normal file
13
toscaparser/tests/data/custom_types/compute_with_prop.yaml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
tosca_definitions_version: tosca_simple_yaml_1_0
|
||||||
|
|
||||||
|
description: >
|
||||||
|
Compute node type with a parameter for the get property with host test
|
||||||
|
|
||||||
|
node_types:
|
||||||
|
tosca.nodes.ComputeWithProp:
|
||||||
|
derived_from: tosca.nodes.Compute
|
||||||
|
properties:
|
||||||
|
test:
|
||||||
|
required: false
|
||||||
|
type: integer
|
||||||
|
|
@ -0,0 +1,65 @@
|
|||||||
|
tosca_definitions_version: tosca_simple_yaml_1_0
|
||||||
|
|
||||||
|
description: >
|
||||||
|
TOSCA simple profile to test the get property function with HOST parameter
|
||||||
|
|
||||||
|
imports:
|
||||||
|
- ../custom_types/compute_with_prop.yaml
|
||||||
|
|
||||||
|
topology_template:
|
||||||
|
inputs:
|
||||||
|
db_name:
|
||||||
|
type: string
|
||||||
|
description: The name of the database.
|
||||||
|
default: wordpress
|
||||||
|
db_user:
|
||||||
|
type: string
|
||||||
|
description: The user name of the DB user.
|
||||||
|
default: wp_user
|
||||||
|
db_pwd:
|
||||||
|
type: string
|
||||||
|
description: The WordPress database admin account password.
|
||||||
|
default: wp_pass
|
||||||
|
db_root_pwd:
|
||||||
|
type: string
|
||||||
|
description: Root password for MySQL.
|
||||||
|
db_port:
|
||||||
|
type: PortDef
|
||||||
|
description: Port for the MySQL database.
|
||||||
|
default: 3306
|
||||||
|
|
||||||
|
node_templates:
|
||||||
|
|
||||||
|
mysql_database:
|
||||||
|
type: tosca.nodes.Database
|
||||||
|
properties:
|
||||||
|
name: { get_input: db_name }
|
||||||
|
user: { get_input: db_user }
|
||||||
|
password: { get_input: db_pwd }
|
||||||
|
capabilities:
|
||||||
|
database_endpoint:
|
||||||
|
properties:
|
||||||
|
port: { get_input: db_port }
|
||||||
|
requirements:
|
||||||
|
- host: mysql_dbms
|
||||||
|
interfaces:
|
||||||
|
Standard:
|
||||||
|
configure:
|
||||||
|
implementation: mysql/mysql_database_configure.sh
|
||||||
|
inputs:
|
||||||
|
db_port: { get_property: [ HOST, port ] }
|
||||||
|
test: { get_property: [ HOST, test ] }
|
||||||
|
|
||||||
|
mysql_dbms:
|
||||||
|
type: tosca.nodes.DBMS
|
||||||
|
properties:
|
||||||
|
root_password: { get_input: db_root_pwd }
|
||||||
|
port: { get_input: db_port }
|
||||||
|
requirements:
|
||||||
|
- host: server
|
||||||
|
|
||||||
|
server:
|
||||||
|
type: tosca.nodes.ComputeWithProp
|
||||||
|
properties:
|
||||||
|
test: 1
|
||||||
|
|
@ -27,9 +27,11 @@ class IntrinsicFunctionsTest(TestCase):
|
|||||||
params = {'db_name': 'my_wordpress', 'db_user': 'my_db_user'}
|
params = {'db_name': 'my_wordpress', 'db_user': 'my_db_user'}
|
||||||
tosca = ToscaTemplate(tosca_tpl, parsed_params=params)
|
tosca = ToscaTemplate(tosca_tpl, parsed_params=params)
|
||||||
|
|
||||||
def _get_node(self, node_name):
|
def _get_node(self, node_name, tosca=None):
|
||||||
|
if tosca is None:
|
||||||
|
tosca = self.tosca
|
||||||
return [
|
return [
|
||||||
node for node in self.tosca.nodetemplates
|
node for node in tosca.nodetemplates
|
||||||
if node.name == node_name][0]
|
if node.name == node_name][0]
|
||||||
|
|
||||||
def _get_operation(self, interfaces, operation):
|
def _get_operation(self, interfaces, operation):
|
||||||
@ -116,6 +118,22 @@ class IntrinsicFunctionsTest(TestCase):
|
|||||||
'root_password')
|
'root_password')
|
||||||
self.assertIsNone(dbms_root_password.result())
|
self.assertIsNone(dbms_root_password.result())
|
||||||
|
|
||||||
|
def test_get_property_with_host(self):
|
||||||
|
tosca_tpl = os.path.join(
|
||||||
|
os.path.dirname(os.path.abspath(__file__)),
|
||||||
|
"data/functions/test_get_property_with_host.yaml")
|
||||||
|
mysql_database = self._get_node('mysql_database',
|
||||||
|
ToscaTemplate(tosca_tpl))
|
||||||
|
operation = self._get_operation(mysql_database.interfaces, 'configure')
|
||||||
|
db_port = operation.inputs['db_port']
|
||||||
|
self.assertTrue(isinstance(db_port, functions.GetProperty))
|
||||||
|
result = db_port.result()
|
||||||
|
self.assertEqual(3306, result)
|
||||||
|
test = operation.inputs['test']
|
||||||
|
self.assertTrue(isinstance(test, functions.GetProperty))
|
||||||
|
result = test.result()
|
||||||
|
self.assertEqual(1, result)
|
||||||
|
|
||||||
|
|
||||||
class GetAttributeTest(TestCase):
|
class GetAttributeTest(TestCase):
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user