Implement tosca.capabilities.Container

1. Move num_cpus,disk_size,mem_size of tosca.node.Compute to
tosca.capabilities.Container.
2. Change all template files involves these properties.
3. Fix some unittests which become failed because of properties change.

Co-Authored-By: Sahdev Zala <spzala@us.ibm.com>

Blueprint tosca-container-capabilities

Change-Id: I107ee3906765fb4e2b1497a78433b1095eb7b792
This commit is contained in:
jiangyaoguo 2015-04-27 01:45:54 +08:00 committed by spzala
parent 2ed1526139
commit f151ccc4f3
38 changed files with 300 additions and 245 deletions

View File

@ -39,17 +39,17 @@ class ToscaComputeTest(TestCase):
def _compare_properties(self, hotprops, expectedprops):
return all(item in hotprops.items() for item in expectedprops.items())
def test_node_compute_with_properties_and_capabilities(self):
def test_node_compute_with_host_and_os_capabilities(self):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10
num_cpus: 4
mem_size: 4096
capabilities:
host:
properties:
disk_size: 10
num_cpus: 4
mem_size: 4096
os:
properties:
architecture: x86_64
@ -68,12 +68,12 @@ class ToscaComputeTest(TestCase):
node_templates:
server:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10
num_cpus: 4
mem_size: 4096
capabilities:
host:
properties:
disk_size: 10
num_cpus: 4
mem_size: 4096
#left intentionally
'''
expectedprops = {'flavor': 'm1.large',
@ -82,13 +82,11 @@ class ToscaComputeTest(TestCase):
tpl_snippet,
expectedprops)
def test_node_compute_without_properties(self):
def test_node_compute_without_host_capabilities(self):
tpl_snippet = '''
node_templates:
server:
type: tosca.nodes.Compute
properties:
#left intentionally
capabilities:
os:
properties:

View File

@ -69,10 +69,10 @@ class ToscaCompute(HotResource):
def handle_properties(self):
self.properties.update(self.translate_compute_flavor_and_image(
self.nodetemplate.get_properties_objects(),
self.nodetemplate.get_capability('host'),
self.nodetemplate.get_capability('os')))
self.properties = self.translate_compute_flavor_and_image(
self.nodetemplate.get_properties_objects(),
self.nodetemplate.get_capability('host'),
self.nodetemplate.get_capability('os'))
self.properties['user_data_format'] = 'SOFTWARE_CONFIG'
# TODO(anyone): handle user key
@ -80,16 +80,18 @@ class ToscaCompute(HotResource):
self.properties['key_name'] = 'userkey'
# To be reorganized later based on new development in Glance and Graffiti
def translate_compute_flavor_and_image(self, properties, os_capability):
def translate_compute_flavor_and_image(self,
host_capability,
os_capability):
hot_properties = {}
tosca_props = {}
host_cap_props = {}
os_cap_props = {}
image = None
flavor = None
if properties:
for prop in properties:
tosca_props[prop.name] = prop.value
flavor = self._best_flavor(tosca_props)
if host_capability:
for prop in host_capability.get_properties_objects():
host_cap_props[prop.name] = prop.value
flavor = self._best_flavor(host_cap_props)
if os_capability:
for prop in os_capability.get_properties_objects():
os_cap_props[prop.name] = prop.value

View File

@ -46,29 +46,6 @@ tosca.nodes.Root:
tosca.nodes.Compute:
derived_from: tosca.nodes.Root
properties:
num_cpus:
required: no
type: integer
constraints:
- greater_or_equal: 1
description: >
Number of (actual or virtual) CPUs associated with the Compute node.
disk_size:
required: no
type: scalar-unit.size
constraints:
- greater_or_equal: 0 MB
description: >
Size of the local disk, available to applications running on the
Compute node.
mem_size:
required: no
type: scalar-unit.size
constraints:
- greater_or_equal: 0 MB
description: >
Size of memory, available to applications running on the Compute node.
attributes:
private_address:
type: string
@ -420,6 +397,22 @@ tosca.capabilities.Node:
tosca.capabilities.Container:
derived_from: tosca.capabilities.Root
properties:
num_cpus:
required: no
type: integer
constraints:
- greater_or_equal: 1
disk_size:
required: no
type: scalar-unit.size
constraints:
- greater_or_equal: 0 MB
mem_size:
required: no
type: scalar-unit.size
constraints:
- greater_or_equal: 0 MB
tosca.capabilities.Endpoint:
derived_from: tosca.capabilities.Root

View File

@ -33,8 +33,10 @@ topology_template:
wordpress:
type: tosca.nodes.WebApplication.WordPress
requirements:
- host: webserver
- database_endpoint: mysql_database
- host:
node: webserver
- database_endpoint:
node: mysql_database
interfaces:
tosca.interfaces.node.lifecycle.Standard:
create: Scripts/WordPress/install.sh
@ -52,7 +54,8 @@ topology_template:
db_user: { get_input: db_user }
db_password: { get_input: db_pwd }
requirements:
- host: mysql_dbms
- host:
node: mysql_dbms
interfaces:
tosca.interfaces.node.lifecycle.Standard:
configure:
@ -69,7 +72,8 @@ topology_template:
dbms_root_password: { get_input: db_root_pwd }
dbms_port: { get_input: db_port }
requirements:
- host: server
- host:
node: server
interfaces:
tosca.interfaces.node.lifecycle.Standard:
create: Scripts/MYSQLDBMS/install.sh
@ -82,26 +86,26 @@ topology_template:
webserver:
type: tosca.nodes.WebServer
requirements:
- host: server
- host:
node: server
interfaces:
tosca.interfaces.node.lifecycle.Standard:
create: Scripts/WebServer/install.sh
start: Scripts/WebServer/start.sh
server:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
capabilities:
os:
properties:
architecture: x86_64
type: Linux
distribution: Fedora
version: 18
server:
type: tosca.nodes.Compute
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
os:
properties:
architecture: x86_64
type: Linux
distribution: Fedora
version: 18
outputs:
website_url:

View File

@ -7,9 +7,10 @@ topology_template:
node_templates:
server:
type: tosca.nodes.Compute
properties:
num_cpus: 2
capabilities:
host:
properties:
num_cpus: 2
dbms:
type: tosca.nodes.DBMS
requirements:
@ -20,7 +21,6 @@ topology_template:
implementation: configure.sh
inputs:
ip_address: { get_attribute: [ HOST, private_address ] }
database:
type: tosca.nodes.Database
requirements:

View File

@ -7,11 +7,14 @@ topology_template:
node_templates:
server:
type: tosca.nodes.Compute
properties:
num_cpus: 2
capabilities:
host:
properties:
num_cpus: 2
interfaces:
tosca.interfaces.node.lifecycle.Standard:
configure:
implementation: configure.sh
inputs:
ip_address: { get_attribute: [ HOST, private_address ] }

View File

@ -7,8 +7,10 @@ topology_template:
node_templates:
server:
type: tosca.nodes.Compute
properties:
num_cpus: 2
capabilities:
host:
properties:
num_cpus: 2
outputs:
ip_address:

View File

@ -12,8 +12,10 @@ topology_template:
node_templates:
server:
type: tosca.nodes.Compute
properties:
num_cpus: 2
capabilities:
host:
properties:
num_cpus: 2
interfaces:
tosca.interfaces.node.lifecycle.Standard:
configure:

View File

@ -12,8 +12,10 @@ topology_template:
node_templates:
server:
type: tosca.nodes.Compute
properties:
num_cpus: 2
capabilities:
host:
properties:
num_cpus: 2
interfaces:
tosca.interfaces.node.lifecycle.Standard:
configure:

View File

@ -7,14 +7,15 @@ topology_template:
node_templates:
server:
type: tosca.nodes.Compute
properties:
num_cpus: 2
capabilities:
host:
properties:
num_cpus: 2
dbms:
type: tosca.nodes.DBMS
properties:
dbms_root_password: 1234
dbms_port: 3672
database:
type: tosca.nodes.Database
properties:

View File

@ -8,8 +8,10 @@ topology_template:
node_templates:
server:
type: tosca.nodes.Compute
properties:
num_cpus: 2
capabilities:
host:
properties:
num_cpus: 2
interfaces:
tosca.interfaces.node.lifecycle.Standard:
configure:

View File

@ -5,7 +5,9 @@ description: >
topology_template:
node_templates:
server:
type: tosca.nodes.Compute
obj_store_server:
type: tosca.nodes.ObjectStorage
properties:
num_cpus: { get_input: cpus }
store_name: { get_input: objectstore_name }
store_size: 1024
store_maxsize: 1 GB

View File

@ -18,7 +18,7 @@ resources:
server:
type: OS::Nova::Server
properties:
flavor: null
flavor: m1.medium
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG

View File

@ -12,18 +12,18 @@ topology_template:
node_templates:
my_server:
type: tosca.nodes.Compute
properties:
disk_size: 10
num_cpus: 1
mem_size: 512
capabilities:
host:
properties:
disk_size: 10
num_cpus: 1
mem_size: 512
os:
properties:
architecture: x86_64
type: Linux
distribution: CirrOS
version: 0.3.2
my_network:
type: tosca.nodes.network.Network
properties:
@ -33,7 +33,6 @@ topology_template:
start_ip: '192.168.0.50'
end_ip: '192.168.0.200'
gateway_ip: '192.168.0.1'
my_port:
type: tosca.nodes.network.Port
requirements:

View File

@ -7,11 +7,12 @@ topology_template:
node_templates:
my_server:
type: tosca.nodes.Compute
properties:
disk_size: 10
num_cpus: 1
mem_size: 512
capabilities:
host:
properties:
disk_size: 10
num_cpus: 1
mem_size: 512
os:
properties:
architecture: x86_64

View File

@ -12,23 +12,22 @@ topology_template:
node_templates:
my_server:
type: tosca.nodes.Compute
properties:
disk_size: 10
num_cpus: 1
mem_size: 512
capabilities:
host:
properties:
disk_size: 10
num_cpus: 1
mem_size: 512
os:
properties:
architecture: x86_64
type: Linux
distribution: CirrOS
version: 0.3.2
my_network:
type: tosca.nodes.network.Network
properties:
network_name: { get_input: network_name }
my_port:
type: tosca.nodes.network.Port
requirements:

View File

@ -24,32 +24,32 @@ topology_template:
node_templates:
my_server:
type: tosca.nodes.Compute
properties:
disk_size: 10
num_cpus: 1
mem_size: 512
capabilities:
host:
properties:
disk_size: 10
num_cpus: 1
mem_size: 512
os:
properties:
architecture: x86_64
type: Linux
distribution: CirrOS
version: 0.3.2
my_server2:
type: tosca.nodes.Compute
properties:
disk_size: 10
num_cpus: 1
mem_size: 512
capabilities:
host:
properties:
disk_size: 10
num_cpus: 1
mem_size: 512
os:
properties:
architecture: x86_64
type: Linux
distribution: CirrOS
version: 0.3.2
my_network:
type: tosca.nodes.network.Network
properties:
@ -58,7 +58,6 @@ topology_template:
network_name: { get_input: network_name }
start_ip: { get_input: network_start_ip }
end_ip: { get_input: network_end_ip }
my_port:
type: tosca.nodes.network.Port
requirements:
@ -66,7 +65,6 @@ topology_template:
node: my_server
- link:
node: my_network
my_port2:
type: tosca.nodes.network.Port
requirements:

View File

@ -26,12 +26,12 @@ topology_template:
node_templates:
my_server:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
os:
properties:
architecture: x86_64

View File

@ -26,12 +26,12 @@ topology_template:
node_templates:
my_web_app_tier_1:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
os:
properties:
architecture: x86_64
@ -45,12 +45,12 @@ topology_template:
my_web_app_tier_2:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
os:
properties:
architecture: x86_64
@ -63,7 +63,6 @@ topology_template:
relationship: MyAttachTo
properties:
location: /some_other_data_location
my_storage:
type: tosca.nodes.BlockStorage
properties:

View File

@ -26,12 +26,12 @@ topology_template:
node_templates:
my_web_app_tier_1:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
os:
properties:
architecture: x86_64
@ -45,12 +45,12 @@ topology_template:
my_web_app_tier_2:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
os:
properties:
architecture: x86_64
@ -61,7 +61,6 @@ topology_template:
- local_storage:
node: my_storage
relationship: storage_attachesto_2
my_storage:
type: tosca.nodes.BlockStorage
properties:

View File

@ -24,12 +24,12 @@ topology_template:
node_templates:
my_server:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
os:
properties:
architecture: x86_64
@ -51,12 +51,12 @@ topology_template:
my_server2:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
os:
properties:
architecture: x86_64

View File

@ -7,5 +7,8 @@ topology_template:
node_templates:
server:
type: tosca.nodes.Compute
properties:
num_cpus: 2
capabilities:
host:
properties:
num_cpus: 2

View File

@ -7,7 +7,9 @@ topology_template:
node_templates:
server:
type: tosca.nodes.Compute
properties:
num_cpus: 2
capabilities:
host:
properties:
num_cpus: 2
outputs:

View File

@ -9,5 +9,7 @@ topology_template:
node_templates:
server:
type: tosca.nodes.Compute
properties:
num_cpus: 2
capabilities:
host:
properties:
num_cpus: 2

View File

@ -37,8 +37,10 @@ topology_template:
description: >
Specify requirement via a relationship template, as an explicit relationship.
type: tosca.nodes.Compute
properties:
num_cpus: 2
capabilities:
host:
properties:
num_cpus: 2
requirements:
- req1:
node: my_storage

View File

@ -14,12 +14,12 @@ topology_template:
node_templates:
server:
type: Compute
properties:
# compute properties (flavor)
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
os:
properties:
architecture: x86_64

View File

@ -12,12 +12,12 @@ topology_template:
node_templates:
server:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
os:
properties:
architecture: x86_64

View File

@ -14,12 +14,12 @@ topology_template:
node_template:
server:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
os:
properties:
architecture: x86_64

View File

@ -55,11 +55,12 @@ topology_template:
server:
type: tosca.nodes.Compute
properties:
disk_size: 10 GB
num_cpus: { get_input: my_cpus }
mem_size: 4096 MB
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: { get_input: my_cpus }
mem_size: 4096 MB
os:
properties:
architecture: x86_64

View File

@ -15,8 +15,7 @@ imports:
- custom_types/rsyslog.yaml
dsl_definitions:
ubuntu_node: &ubuntu_node
# compute properties (flavor)
host_capabilities: &host_capabilities
disk_size: 10 GB
num_cpus: 1
mem_size: 4096 MB
@ -176,32 +175,37 @@ topology_template:
start: Scripts/rsyslog/start.sh
app_server:
type: tosca.nodes.Compute
properties: *ubuntu_node
capabilities:
host:
properties: *host_capabilities
os:
properties: *os_capabilities
mongo_server:
type: tosca.nodes.Compute
properties: *ubuntu_node
capabilities:
host:
properties: *host_capabilities
os:
properties: *os_capabilities
elasticsearch_server:
type: tosca.nodes.Compute
properties: *ubuntu_node
capabilities:
host:
properties: *host_capabilities
os:
properties: *os_capabilities
logstash_server:
type: tosca.nodes.Compute
properties: *ubuntu_node
capabilities:
host:
properties: *host_capabilities
os:
properties: *os_capabilities
kibana_server:
type: tosca.nodes.Compute
properties: *ubuntu_node
capabilities:
host:
properties: *host_capabilities
os:
properties: *os_capabilities

View File

@ -7,16 +7,15 @@ imports:
- custom_types/nodejs.yaml
dsl_definitions:
ubuntu_node: &ubuntu_node
# compute properties (flavor)
disk_size: 10 GB
num_cpus: 1
mem_size: 4096 MB
os_capabilities: &os_capabilities
architecture: x86_64
type: Linux
distribution: Ubuntu
version: 14.04
host_capabilities: &host_capabilities
disk_size: 10 GB
num_cpus: 1
mem_size: 4096 MB
os_capabilities: &os_capabilities
architecture: x86_64
type: Linux
distribution: Ubuntu
version: 14.04
topology_template:
inputs:
@ -50,7 +49,6 @@ topology_template:
github_url: { get_property: [ SELF, github_url ] }
mongodb_ip: { get_attribute: [mongo_server, private_address] }
start: nodejs/start.sh
mongo_dbms:
type: tosca.nodes.DBMS
requirements:
@ -68,17 +66,18 @@ topology_template:
inputs:
mongodb_ip: { get_attribute: [mongo_server, private_address] }
start: mongodb/start.sh
mongo_server:
type: tosca.nodes.Compute
properties: *ubuntu_node
capabilities:
host:
properties: *host_capabilities
os:
properties: *os_capabilities
app_server:
type: tosca.nodes.Compute
properties: *ubuntu_node
capabilities:
host:
properties: *host_capabilities
os:
properties: *os_capabilities

View File

@ -103,15 +103,14 @@ topology_template:
tosca.interfaces.node.lifecycle.Standard:
create: webserver/webserver_install.sh
start: webserver/webserver_start.sh
server:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10 GB
num_cpus: 1
mem_size: 4096 MB
capabilities:
host:
properties:
disk_size: 10 GB
num_cpus: { get_input: cpus }
mem_size: 4096 MB
os:
properties:
architecture: x86_64

View File

@ -14,12 +14,13 @@ topology_template:
node_templates:
server:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10
num_cpus: { get_input: cpus }
mem_size: 4096
capabilities:
host:
properties:
# compute properties (flavor)
disk_size: 10
num_cpus: { get_input: cpus }
mem_size: 4096
os:
properties:
architecture: x86_64

View File

@ -26,8 +26,10 @@ class ScalarUnitPositiveTest(TestCase):
dict(tpl_snippet='''
server:
type: tosca.nodes.Compute
properties:
mem_size: 1024
capabilities:
host:
properties:
mem_size: 1024
''',
expected=1024)
),
@ -37,8 +39,10 @@ class ScalarUnitPositiveTest(TestCase):
dict(tpl_snippet='''
server:
type: tosca.nodes.Compute
properties:
mem_size: 1024 MB
capabilities:
host:
properties:
mem_size: 1024 MB
''',
expected='1024 MB')
),
@ -48,8 +52,10 @@ class ScalarUnitPositiveTest(TestCase):
dict(tpl_snippet='''
server:
type: tosca.nodes.Compute
properties:
mem_size: 1 GB
capabilities:
host:
properties:
mem_size: 1 GB
''',
expected='1 GB')
),
@ -59,8 +65,10 @@ class ScalarUnitPositiveTest(TestCase):
dict(tpl_snippet='''
server:
type: tosca.nodes.Compute
properties:
mem_size: 1tiB
capabilities:
host:
properties:
mem_size: 1tiB
''',
expected='1tiB')
),
@ -70,8 +78,10 @@ class ScalarUnitPositiveTest(TestCase):
dict(tpl_snippet='''
server:
type: tosca.nodes.Compute
properties:
mem_size: 1 GIB
capabilities:
host:
properties:
mem_size: 1 GIB
''',
expected='1 GIB')
),
@ -81,8 +91,10 @@ class ScalarUnitPositiveTest(TestCase):
dict(tpl_snippet='''
server:
type: tosca.nodes.Compute
properties:
mem_size: 1 tib
capabilities:
host:
properties:
mem_size: 1 tib
''',
expected='1 tib')
),
@ -92,7 +104,7 @@ class ScalarUnitPositiveTest(TestCase):
tpl = self.tpl_snippet
nodetemplates = yamlparser.simple_parse(tpl)
nodetemplate = NodeTemplate('server', nodetemplates)
props = nodetemplate.get_properties()
props = nodetemplate.get_capability('host').get_properties()
if props and 'mem_size' in props.keys():
prop = props['mem_size']
self.assertIsNone(prop.validate())

View File

@ -20,6 +20,7 @@ component_type = NodeType('tosca.nodes.SoftwareComponent')
network_type = NodeType('tosca.nodes.network.Network')
network_port_type = NodeType('tosca.nodes.network.Port')
webserver_type = NodeType('tosca.nodes.WebServer')
database_type = NodeType('tosca.nodes.Database')
class ToscaDefTest(TestCase):
@ -68,6 +69,7 @@ class ToscaDefTest(TestCase):
'tosca.capabilities.Endpoint',
'initiator')
self.assertEqual(None, endpoint_prop_def)
os_props = self._get_capability_properties_def_objects(
compute_type.get_capabilities_objects(),
'tosca.capabilities.OperatingSystem')
@ -76,6 +78,13 @@ class ToscaDefTest(TestCase):
sorted([p.name for p in os_props]))
self.assertTrue([p.required for p in os_props if p.name == 'type'])
host_props = self._get_capability_properties_def_objects(
compute_type.get_capabilities_objects(),
'tosca.capabilities.Container')
self.assertEqual(
['disk_size', 'mem_size', 'num_cpus'],
sorted([p.name for p in host_props]))
def _get_capability_properties_def_objects(self, caps, type):
properties_def = None
for cap in caps:
@ -102,8 +111,8 @@ class ToscaDefTest(TestCase):
def test_properties_def(self):
self.assertEqual(
['disk_size', 'mem_size', 'num_cpus'],
sorted(compute_type.get_properties_def().keys()))
['db_name', 'db_password', 'db_user'],
sorted(database_type.get_properties_def().keys()))
def test_attributes_def(self):
self.assertEqual(

View File

@ -222,7 +222,8 @@ class ToscaTemplateTest(TestCase):
if node_tpl.name == 'mongo_server':
self.assertEqual(
['disk_size', 'mem_size', 'num_cpus'],
sorted(node_tpl.get_properties().keys()))
sorted(node_tpl.get_capability('host').
get_properties().keys()))
def test_template_requirements(self):
"""Test different formats of requirements

View File

@ -142,12 +142,12 @@ class ToscaTemplateValidationTest(TestCase):
tpl_snippet = '''
node_templates:
server:
properties:
# compute properties (flavor)
disk_size: 10
num_cpus: 4
mem_size: 4096
capabilities:
host:
properties:
disk_size: 10
num_cpus: 4
mem_size: 4096
os:
properties:
architecture: x86_64
@ -289,12 +289,13 @@ class ToscaTemplateValidationTest(TestCase):
server:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10
num_cpus: { get_input: cpus }
mem_size: 4096
os_image: F18_x86_64
capabilities:
host:
properties:
disk_size: 10
num_cpus: { get_input: cpus }
mem_size: 4096
os:
properties:
architecture: x86_64
@ -433,12 +434,12 @@ class ToscaTemplateValidationTest(TestCase):
node_templates:
server:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10
num_cpus: { get_input: cpus }
mem_size: 4096
capabilities:
host:
properties:
disk_size: 10
num_cpus: { get_input: cpus }
mem_size: 4096
os:
properties:
architecture: x86_64
@ -481,12 +482,12 @@ class ToscaTemplateValidationTest(TestCase):
node_templates:
server:
type: tosca.nodes.Compute
properties:
# compute properties (flavor)
disk_size: 10
num_cpus: { get_input: cpus }
mem_size: 4096
capabilities:
host:
properties:
disk_size: 10
num_cpus: { get_input: cpus }
mem_size: 4096
os:
properties:
architecture: x86_64

View File

@ -180,6 +180,19 @@ class TopologyTemplate(object):
self,
req,
value)
if node_template.get_capabilities_objects():
for cap in node_template.get_capabilities_objects():
if cap.get_properties_objects():
for prop in cap.get_properties_objects():
propvalue = functions.get_function(
self,
node_template,
prop.value)
if isinstance(propvalue, functions.GetInput):
propvalue = propvalue.result()
for p, v in cap._properties.items():
if p == prop.name:
cap._properties[p] = propvalue
for output in self.outputs:
func = functions.get_function(self, self.outputs, output.value)
if isinstance(func, functions.GetAttribute):