Add app in the nodejs mongodb template
The current template does not make much sense as it's having nodejs and mongodb deployed on two different instances but without any connection between them. Add a nodejs app on the app server which uses mongodb database. Nodejs custom type is not needed as it can use webserver type. Also, a better test will be added with mapping to actual HOT template, not just resources, as part of generator side work. Partial-Bug: #1452545 Change-Id: I7f4ed72368bf7fcc89da6fbe9b322b8c6872e100
This commit is contained in:
parent
3adf9474c7
commit
8c04192af8
@ -1,186 +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.
|
||||
|
||||
import os
|
||||
from translator.hot.tosca_translator import TOSCATranslator
|
||||
from translator.tests.base import TestCase
|
||||
from translator.toscalib.tosca_template import ToscaTemplate
|
||||
import translator.toscalib.utils.yamlparser
|
||||
|
||||
|
||||
class ToscaMongoNodejsTest(TestCase):
|
||||
parsed_params = {'storage_snapshot_id': 'test_id',
|
||||
'storage_location': '/test', 'cpus': '1',
|
||||
'storage_size': '1'}
|
||||
|
||||
'''TOSCA template with nodejs, app and mongodb on 2 servers.'''
|
||||
tosca_tpl = os.path.join(
|
||||
os.path.dirname(os.path.abspath(__file__)),
|
||||
"../toscalib/tests/data/tosca_nodejs_mongodb_two_instances.yaml")
|
||||
tosca = ToscaTemplate(tosca_tpl)
|
||||
|
||||
def test_relationship_def(self):
|
||||
expected_relationship = ['tosca.relationships.HostedOn']
|
||||
expected_capabilities_names = ['node']
|
||||
for tpl in self.tosca.nodetemplates:
|
||||
if tpl.name == 'nodejs':
|
||||
def_keys = tpl.type_definition.relationship.keys()
|
||||
self.assertEqual(
|
||||
expected_relationship,
|
||||
sorted([x.type for x in def_keys]))
|
||||
self.assertEqual(
|
||||
expected_capabilities_names,
|
||||
sorted([x.capability_name for x in def_keys]))
|
||||
|
||||
def test_relationships(self):
|
||||
expected_relationship = ['tosca.relationships.HostedOn']
|
||||
expected_relatednodes = ['app_server']
|
||||
for tpl in self.tosca.nodetemplates:
|
||||
rels = tpl.relationships
|
||||
if rels:
|
||||
if tpl.name == 'nodejs':
|
||||
self.assertEqual(
|
||||
expected_relationship,
|
||||
sorted([x.type for x in tpl.relationships.keys()]))
|
||||
self.assertEqual(
|
||||
expected_relatednodes,
|
||||
sorted([y.name for y in tpl.relationships.values()]))
|
||||
|
||||
def test_related_nodes(self):
|
||||
expected_nodejs = ['app_server']
|
||||
actual_nodejs = []
|
||||
for tpl in self.tosca.nodetemplates:
|
||||
if tpl.name == 'nodejs':
|
||||
for node in tpl.related_nodes:
|
||||
actual_nodejs.append(node.name)
|
||||
self.assertEqual(sorted(actual_nodejs), expected_nodejs)
|
||||
|
||||
def test_translate_nodejs_mongodb(self):
|
||||
translate = TOSCATranslator(self.tosca, self.parsed_params)
|
||||
output = translate.translate()
|
||||
|
||||
expected_resource = {'mongo_dbms_create_config':
|
||||
{'properties':
|
||||
{'config':
|
||||
{'get_file': 'mongodb/create.sh'},
|
||||
'group': 'script'},
|
||||
'type': 'OS::Heat::SoftwareConfig'},
|
||||
'mongo_dbms_configure_config':
|
||||
{'properties':
|
||||
{'config':
|
||||
{'get_file': 'mongodb/config.sh'},
|
||||
'group': 'script'},
|
||||
'type': 'OS::Heat::SoftwareConfig'},
|
||||
'mongo_dbms_start_config':
|
||||
{'properties':
|
||||
{'config':
|
||||
{'get_file': 'mongodb/start.sh'},
|
||||
'group': 'script'},
|
||||
'type': 'OS::Heat::SoftwareConfig'},
|
||||
'nodejs_create_config':
|
||||
{'properties':
|
||||
{'config':
|
||||
{'get_file': 'nodejs/create.sh'},
|
||||
'group': 'script'},
|
||||
'type': 'OS::Heat::SoftwareConfig'},
|
||||
'nodejs_configure_config':
|
||||
{'properties':
|
||||
{'config':
|
||||
{'get_file': 'nodejs/config.sh'},
|
||||
'group': 'script'},
|
||||
'type': 'OS::Heat::SoftwareConfig'},
|
||||
'nodejs_start_config':
|
||||
{'properties':
|
||||
{'config':
|
||||
{'get_file': 'nodejs/start.sh'},
|
||||
'group': 'script'},
|
||||
'type': 'OS::Heat::SoftwareConfig'},
|
||||
'mongo_dbms_create_deploy':
|
||||
{'properties':
|
||||
{'config':
|
||||
{'get_resource': 'mongo_dbms_create_config'},
|
||||
'server':
|
||||
{'get_resource': 'mongo_server'}},
|
||||
'type': 'OS::Heat::SoftwareDeployment'},
|
||||
'mongo_dbms_configure_deploy':
|
||||
{'type': 'OS::Heat::SoftwareDeployment',
|
||||
'depends_on':
|
||||
['mongo_dbms_create_deploy'],
|
||||
'properties':
|
||||
{'config':
|
||||
{'get_resource': 'mongo_dbms_configure_config'},
|
||||
'input_values':
|
||||
{'mongodb_ip':
|
||||
{'get_attr':
|
||||
['mongo_server', 'networks', 'private', 0]}},
|
||||
'server':
|
||||
{'get_resource': 'mongo_server'}}},
|
||||
'mongo_dbms_start_deploy':
|
||||
{'type': 'OS::Heat::SoftwareDeployment',
|
||||
'depends_on': ['mongo_dbms_configure_deploy'],
|
||||
'properties':
|
||||
{'config':
|
||||
{'get_resource': 'mongo_dbms_start_config'},
|
||||
'server':
|
||||
{'get_resource': 'mongo_server'}}},
|
||||
'nodejs_create_deploy':
|
||||
{'properties':
|
||||
{'config':
|
||||
{'get_resource': 'nodejs_create_config'},
|
||||
'server':
|
||||
{'get_resource': 'app_server'}},
|
||||
'type': 'OS::Heat::SoftwareDeployment'},
|
||||
'nodejs_configure_deploy':
|
||||
{'depends_on':
|
||||
['nodejs_create_deploy'],
|
||||
'properties':
|
||||
{'config':
|
||||
{'get_resource': 'nodejs_configure_config'},
|
||||
'input_values':
|
||||
{'github_url':
|
||||
'https://github.com/sample.git',
|
||||
'mongodb_ip':
|
||||
{'get_attr':
|
||||
['mongo_server', 'networks', 'private', 0]}},
|
||||
'server':
|
||||
{'get_resource': 'app_server'}},
|
||||
'type': 'OS::Heat::SoftwareDeployment'},
|
||||
'nodejs_start_deploy':
|
||||
{'depends_on': ['nodejs_configure_deploy'],
|
||||
'properties':
|
||||
{'config':
|
||||
{'get_resource': 'nodejs_start_config'},
|
||||
'server':
|
||||
{'get_resource': 'app_server'}},
|
||||
'type': 'OS::Heat::SoftwareDeployment'},
|
||||
'app_server':
|
||||
{'properties':
|
||||
{'flavor': 'm1.medium',
|
||||
'image': 'ubuntu-software-config-os-init',
|
||||
'key_name': 'userkey',
|
||||
'user_data_format': 'SOFTWARE_CONFIG'},
|
||||
'type': 'OS::Nova::Server'},
|
||||
'mongo_server':
|
||||
{'properties':
|
||||
{'flavor': 'm1.medium',
|
||||
'image': 'ubuntu-software-config-os-init',
|
||||
'key_name': 'userkey',
|
||||
'user_data_format': 'SOFTWARE_CONFIG'},
|
||||
'type': 'OS::Nova::Server'}}
|
||||
|
||||
output_dict = translator.toscalib.utils.yamlparser.simple_parse(output)
|
||||
|
||||
resources = output_dict.get('resources')
|
||||
for resource_name in resources:
|
||||
translated_value = resources.get(resource_name)
|
||||
expected_value = expected_resource.get(resource_name)
|
||||
self.assertEqual(translated_value, expected_value)
|
63
translator/tests/test_template.py
Executable file
63
translator/tests/test_template.py
Executable file
@ -0,0 +1,63 @@
|
||||
# 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.
|
||||
|
||||
import os
|
||||
from translator.tests.base import TestCase
|
||||
from translator.toscalib.tosca_template import ToscaTemplate
|
||||
|
||||
|
||||
class ToscaMongoNodejsTest(TestCase):
|
||||
parsed_params = {'storage_snapshot_id': 'test_id',
|
||||
'storage_location': '/test', 'cpus': '1',
|
||||
'storage_size': '1'}
|
||||
|
||||
'''TOSCA template with nodejs, app and mongodb on 2 servers.'''
|
||||
tosca_tpl = os.path.join(
|
||||
os.path.dirname(os.path.abspath(__file__)),
|
||||
"../toscalib/tests/data/tosca_nodejs_mongodb_two_instances.yaml")
|
||||
tosca = ToscaTemplate(tosca_tpl)
|
||||
|
||||
def test_relationship_def(self):
|
||||
expected_relationship = ['tosca.relationships.HostedOn']
|
||||
expected_capabilities_names = ['node']
|
||||
for tpl in self.tosca.nodetemplates:
|
||||
if tpl.name == 'nodejs':
|
||||
def_keys = tpl.type_definition.relationship.keys()
|
||||
self.assertEqual(
|
||||
expected_relationship,
|
||||
sorted([x.type for x in def_keys]))
|
||||
self.assertEqual(
|
||||
expected_capabilities_names,
|
||||
sorted([x.capability_name for x in def_keys]))
|
||||
|
||||
def test_relationships(self):
|
||||
expected_relationship = ['tosca.relationships.HostedOn']
|
||||
expected_relatednodes = ['app_server']
|
||||
for tpl in self.tosca.nodetemplates:
|
||||
rels = tpl.relationships
|
||||
if rels:
|
||||
if tpl.name == 'nodejs':
|
||||
self.assertEqual(
|
||||
expected_relationship,
|
||||
sorted([x.type for x in tpl.relationships.keys()]))
|
||||
self.assertEqual(
|
||||
expected_relatednodes,
|
||||
sorted([y.name for y in tpl.relationships.values()]))
|
||||
|
||||
def test_related_nodes(self):
|
||||
expected_nodejs = ['app_server']
|
||||
actual_nodejs = []
|
||||
for tpl in self.tosca.nodetemplates:
|
||||
if tpl.name == 'nodejs':
|
||||
for node in tpl.related_nodes:
|
||||
actual_nodejs.append(node.name)
|
||||
self.assertEqual(sorted(actual_nodejs), expected_nodejs)
|
@ -1,16 +0,0 @@
|
||||
tosca_definitions_version: tosca_simple_yaml_1_0_0
|
||||
|
||||
node_types:
|
||||
tosca.nodes.SoftwareComponent.Nodejs:
|
||||
derived_from: tosca.nodes.SoftwareComponent
|
||||
properties:
|
||||
github_url:
|
||||
required: no
|
||||
type: string
|
||||
description: location of the application on the github.
|
||||
default: https://github.com/mmm/testnode.git
|
||||
interfaces:
|
||||
Standard:
|
||||
inputs:
|
||||
github_url:
|
||||
type: string
|
@ -4,7 +4,7 @@ description: >
|
||||
TOSCA simple profile with nodejs and mongodb.
|
||||
|
||||
imports:
|
||||
- custom_types/nodejs.yaml
|
||||
- custom_types/paypalpizzastore_nodejs_app.yaml
|
||||
|
||||
dsl_definitions:
|
||||
host_capabilities: &host_capabilities
|
||||
@ -28,36 +28,47 @@ topology_template:
|
||||
github_url:
|
||||
type: string
|
||||
description: The URL to download nodejs.
|
||||
default: https://github.com/sample.git
|
||||
default: http://github.com/paypal/rest-api-sample-app-nodejs.git
|
||||
|
||||
node_templates:
|
||||
nodejs:
|
||||
type: tosca.nodes.SoftwareComponent.Nodejs
|
||||
paypal_pizzastore:
|
||||
type: tosca.nodes.WebApplication.PayPalPizzaStore
|
||||
properties:
|
||||
github_url: https://github.com/sample.git
|
||||
github_url: { get_input: github_url }
|
||||
requirements:
|
||||
- host:
|
||||
capability: tosca.capabilities.Container
|
||||
node: app_server
|
||||
relationship: tosca.relationships.HostedOn
|
||||
node: nodejs
|
||||
- database_connection:
|
||||
node: mongo_db
|
||||
interfaces:
|
||||
Standard:
|
||||
create: nodejs/create.sh
|
||||
configure:
|
||||
implementation: nodejs/config.sh
|
||||
inputs:
|
||||
github_url: { get_property: [ SELF, github_url ] }
|
||||
github_url: http://github.com/paypal/rest-api-sample-app-nodejs.git
|
||||
mongodb_ip: { get_attribute: [mongo_server, private_address] }
|
||||
start: nodejs/start.sh
|
||||
nodejs:
|
||||
type: tosca.nodes.WebServer
|
||||
requirements:
|
||||
- host:
|
||||
node: app_server
|
||||
interfaces:
|
||||
Standard:
|
||||
create: nodejs/create.sh
|
||||
mongo_db:
|
||||
type: tosca.nodes.Database
|
||||
requirements:
|
||||
- host:
|
||||
node: mongo_dbms
|
||||
interfaces:
|
||||
Standard:
|
||||
create: mongodb/create_database.sh
|
||||
mongo_dbms:
|
||||
type: tosca.nodes.DBMS
|
||||
requirements:
|
||||
- host:
|
||||
capability: tosca.capabilities.Container
|
||||
node: mongo_server
|
||||
relationship: tosca.relationships.HostedOn
|
||||
properties:
|
||||
port: 27017
|
||||
interfaces:
|
||||
Standard:
|
||||
create: mongodb/create.sh
|
||||
|
Loading…
x
Reference in New Issue
Block a user