Accept defined unknown node types if they inherit a known TOSCA root type

Change-Id: I38c9d1e6ff6d071eb6f388def6c76a1f055718e3
Closes-Bug: #1357434
Signed-off-by: Mathieu Velten <mathieu.velten@cern.ch>
This commit is contained in:
Mathieu Velten 2016-01-18 14:29:25 +01:00
parent f84d82dc70
commit fc6342ff8f
10 changed files with 15 additions and 243 deletions

View File

@ -1,30 +0,0 @@
#
# 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 translator.hot.syntax.hot_resource import HotResource
# Name used to dynamically load appropriate map class.
TARGET_CLASS_NAME = 'ToscaCollectd'
class ToscaCollectd(HotResource):
'''Translate TOSCA node type tosca.nodes.SoftwareComponent.Collectd.'''
toscatype = 'tosca.nodes.SoftwareComponent.Collectd'
def __init__(self, nodetemplate):
super(ToscaCollectd, self).__init__(nodetemplate)
pass
def handle_properties(self):
pass

View File

@ -1,30 +0,0 @@
#
# 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 translator.hot.syntax.hot_resource import HotResource
# Name used to dynamically load appropriate map class.
TARGET_CLASS_NAME = 'ToscaElasticsearch'
class ToscaElasticsearch(HotResource):
'''Translate TOSCA type tosca.nodes.SoftwareComponent.Elasticsearch.'''
toscatype = 'tosca.nodes.SoftwareComponent.Elasticsearch'
def __init__(self, nodetemplate):
super(ToscaElasticsearch, self).__init__(nodetemplate)
pass
def handle_properties(self):
pass

View File

@ -1,30 +0,0 @@
#
# 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 translator.hot.syntax.hot_resource import HotResource
# Name used to dynamically load appropriate map class.
TARGET_CLASS_NAME = 'ToscaKibana'
class ToscaKibana(HotResource):
'''Translate TOSCA node type tosca.nodes.SoftwareComponent.Kibana.'''
toscatype = 'tosca.nodes.SoftwareComponent.Kibana'
def __init__(self, nodetemplate):
super(ToscaKibana, self).__init__(nodetemplate)
pass
def handle_properties(self):
pass

View File

@ -1,30 +0,0 @@
#
# 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 translator.hot.syntax.hot_resource import HotResource
# Name used to dynamically load appropriate map class.
TARGET_CLASS_NAME = 'ToscaLogstash'
class ToscaLogstash(HotResource):
'''Translate TOSCA node type tosca.nodes.SoftwareComponent.Logstash.'''
toscatype = 'tosca.nodes.SoftwareComponent.Logstash'
def __init__(self, nodetemplate):
super(ToscaLogstash, self).__init__(nodetemplate)
pass
def handle_properties(self):
pass

View File

@ -1,30 +0,0 @@
#
# 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 translator.hot.syntax.hot_resource import HotResource
# Name used to dynamically load appropriate map class.
TARGET_CLASS_NAME = 'ToscaNodejs'
class ToscaNodejs(HotResource):
'''Translate TOSCA node type tosca.nodes.SoftwareComponent.Nodejs.'''
toscatype = 'tosca.nodes.SoftwareComponent.Nodejs'
def __init__(self, nodetemplate):
super(ToscaNodejs, self).__init__(nodetemplate)
pass
def handle_properties(self):
pass

View File

@ -1,30 +0,0 @@
#
# 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 translator.hot.syntax.hot_resource import HotResource
# Name used to dynamically load appropriate map class.
TARGET_CLASS_NAME = 'ToscaPaypalPizzaStore'
class ToscaPaypalPizzaStore(HotResource):
'''Translate TOSCA type tosca.nodes.WebApplication.PayPalPizzaStore.'''
toscatype = 'tosca.nodes.WebApplication.PayPalPizzaStore'
def __init__(self, nodetemplate):
super(ToscaPaypalPizzaStore, self).__init__(nodetemplate)
pass
def handle_properties(self):
pass

View File

@ -1,30 +0,0 @@
#
# 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 translator.hot.syntax.hot_resource import HotResource
# Name used to dynamically load appropriate map class.
TARGET_CLASS_NAME = 'ToscaRsyslog'
class ToscaRsyslog(HotResource):
'''Translate TOSCA node type tosca.nodes.SoftwareComponent.Rsyslog.'''
toscatype = 'tosca.nodes.SoftwareComponent.Rsyslog'
def __init__(self, nodetemplate):
super(ToscaRsyslog, self).__init__(nodetemplate)
pass
def handle_properties(self):
pass

View File

@ -1,30 +0,0 @@
#
# 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 translator.hot.syntax.hot_resource import HotResource
# Name used to dynamically load appropriate map class.
TARGET_CLASS_NAME = 'ToscaWordpress'
class ToscaWordpress(HotResource):
'''Translate TOSCA node type tosca.nodes.WebApplication.WordPress.'''
toscatype = 'tosca.nodes.WebApplication.WordPress'
def __init__(self, nodetemplate):
super(ToscaWordpress, self).__init__(nodetemplate)
pass
def handle_properties(self):
pass

View File

@ -290,7 +290,8 @@ class HotResource(object):
# capability is a list of dict # capability is a list of dict
# For now just check if it's type tosca.nodes.Compute # For now just check if it's type tosca.nodes.Compute
# TODO(anyone): match up requirement and capability # TODO(anyone): match up requirement and capability
if node.type == 'tosca.nodes.Compute': base_type = HotResource.get_base_type(node.type_definition)
if base_type.type == 'tosca.nodes.Compute':
return True return True
else: else:
return False return False
@ -309,3 +310,13 @@ class HotResource(object):
else: else:
tosca_props[prop.name] = prop.value tosca_props[prop.name] = prop.value
return tosca_props return tosca_props
@staticmethod
def get_base_type(node_type):
if node_type.parent_type is not None:
if node_type.parent_type.type.endswith('.Root'):
return node_type
else:
return HotResource.get_base_type(node_type.parent_type)
else:
return node_type

View File

@ -165,13 +165,14 @@ class TranslateNodeTemplates(object):
suffix = 0 suffix = 0
# Copy the TOSCA graph: nodetemplate # Copy the TOSCA graph: nodetemplate
for node in self.nodetemplates: for node in self.nodetemplates:
hot_node = TOSCA_TO_HOT_TYPE[node.type](node) base_type = HotResource.get_base_type(node.type_definition)
hot_node = TOSCA_TO_HOT_TYPE[base_type.type](node)
self.hot_resources.append(hot_node) self.hot_resources.append(hot_node)
self.hot_lookup[node] = hot_node self.hot_lookup[node] = hot_node
# BlockStorage Attachment is a special case, # BlockStorage Attachment is a special case,
# which doesn't match to Heat Resources 1 to 1. # which doesn't match to Heat Resources 1 to 1.
if node.type == "tosca.nodes.Compute": if base_type.type == "tosca.nodes.Compute":
volume_name = None volume_name = None
requirements = node.requirements requirements = node.requirements
if requirements: if requirements: