Remove default key_name property and pass through all others

- Remove the default "key_name: userkey" property which prevents
  the user from specifying their own key name

  - Handle all properties of the Compute node as Server properties
    and remove the special cases for image and flavor as they will
    now be handled by default

  - Support 'key_name' as a parameter which will be added as an
    input parameter to the HOT template and as a property to all
    Compute nodes, referencing the input parameter so it can be
    overridden at stack deployment time.

Change-Id: I6ae89e02642348074a92f9af638f43acd887ad91
Closes-Bug: 1544237
This commit is contained in:
Bob HADDLETON 2016-02-20 15:54:12 -06:00
parent 18763928c2
commit 1c4bfec4d5
38 changed files with 96 additions and 60 deletions

View File

@ -276,8 +276,7 @@ class ToscaComputeTest(TestCase):
mock_ks_response = mock.MagicMock()
mock_ks_content = {}
mock_ks_response.content = json.dumps(mock_ks_content)
expectedprops = {'key_name': 'userkey',
'flavor': 'm1.small',
expectedprops = {'flavor': 'm1.small',
'user_data_format': 'SOFTWARE_CONFIG',
'image': None}
self._tosca_compute_test(

View File

@ -95,9 +95,10 @@ class ToscaCompute(HotResource):
self.nodetemplate.get_capability('host'),
self.nodetemplate.get_capability('os'))
self.properties['user_data_format'] = 'SOFTWARE_CONFIG'
# TODO(anyone): handle user key
# hardcoded here for testing
self.properties['key_name'] = 'userkey'
tosca_props = self._get_tosca_props(
self.nodetemplate.get_properties_objects())
for key, value in tosca_props.items():
self.properties[key] = value
# To be reorganized later based on new development in Glance and Graffiti
def translate_compute_flavor_and_image(self,
@ -112,14 +113,10 @@ class ToscaCompute(HotResource):
for prop in host_capability.get_properties_objects():
host_cap_props[prop.name] = prop.value
flavor = self._best_flavor(host_cap_props)
else:
flavor = self.nodetemplate.get_property_value("flavor") or None
if os_capability:
for prop in os_capability.get_properties_objects():
os_cap_props[prop.name] = prop.value
image = self._best_image(os_cap_props)
else:
image = self.nodetemplate.get_property_value("image") or None
hot_properties['flavor'] = flavor
hot_properties['image'] = image
return hot_properties

View File

@ -14,6 +14,7 @@
import logging
from toscaparser.dataentity import DataEntity
from toscaparser.elements.scalarunit import ScalarUnit_Size
from toscaparser.parameters import Input
from toscaparser.utils.gettextutils import _
from toscaparser.utils.validateutils import TOSCAVersionProperty
from translator.hot.syntax.hot_parameter import HotParameter
@ -71,6 +72,14 @@ class TranslateInputs(object):
def _translate_inputs(self):
hot_inputs = []
if 'key_name' in self.parsed_params and 'key_name' not in self.inputs:
name = 'key_name'
type = 'string'
default = self.parsed_params[name]
schema_dict = {'type': type, 'default': default}
input = Input(name, schema_dict)
self.inputs.append(input)
log.info(_('Translating TOSCA input type to HOT input type.'))
for input in self.inputs:
hot_default = None

View File

@ -19,6 +19,7 @@ import six
from toscaparser.functions import GetAttribute
from toscaparser.functions import GetInput
from toscaparser.functions import GetProperty
from toscaparser.properties import Property
from toscaparser.relationship_template import RelationshipTemplate
from toscaparser.utils.gettextutils import _
from translator.common.exception import ToscaClassAttributeError
@ -197,6 +198,13 @@ class TranslateNodeTemplates(object):
volume_name)
if attachment_node:
self.hot_resources.append(attachment_node)
for i in self.tosca.inputs:
if (i.name == 'key_name' and
node.get_property_value('key_name') is None):
schema = {'type': i.type, 'default': i.default}
value = {"get_param": "key_name"}
prop = Property(i.name, value, schema)
node._properties.append(prop)
# Handle life cycle operations: this may expand each node
# into multiple HOT resources and may change their name

View File

@ -20,7 +20,6 @@ resources:
properties:
flavor: m1.small
image: ubuntu-12.04-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
customwebserver_create_config:
type: OS::Heat::SoftwareConfig

View File

@ -17,7 +17,6 @@ resources:
properties:
flavor: m1.small
image: ubuntu-12.04-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
customwebserver_create_config:
type: OS::Heat::SoftwareConfig

View File

@ -18,7 +18,6 @@ resources:
properties:
flavor: m1.small
image: ubuntu-12.04-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
customwebserver_create_config:
type: OS::Heat::SoftwareConfig

View File

@ -472,7 +472,6 @@ resources:
properties:
flavor: m1.large
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
mongo_server:
@ -480,7 +479,6 @@ resources:
properties:
flavor: m1.large
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
logstash_server:
@ -488,7 +486,6 @@ resources:
properties:
flavor: m1.large
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
elasticsearch_server:
@ -496,7 +493,6 @@ resources:
properties:
flavor: m1.large
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
kibana_server:
@ -504,7 +500,6 @@ resources:
properties:
flavor: m1.large
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
outputs:

View File

@ -472,7 +472,6 @@ resources:
properties:
flavor: m1.large
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
mongo_server:
@ -480,7 +479,6 @@ resources:
properties:
flavor: m1.large
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
logstash_server:
@ -488,7 +486,6 @@ resources:
properties:
flavor: m1.large
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
elasticsearch_server:
@ -496,7 +493,6 @@ resources:
properties:
flavor: m1.large
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
kibana_server:
@ -504,7 +500,6 @@ resources:
properties:
flavor: m1.large
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
outputs:

View File

@ -1,15 +1,18 @@
heat_template_version: 2013-05-23
description: >
Template for deploying a server with custom properties for image and flavor.
Template for deploying a server with custom properties for image, flavor and key_name.
parameters: {}
parameters:
key_name:
type: string
default: inputkey
resources:
my_server:
type: OS::Nova::Server
properties:
flavor: m1.medium
image: rhel-6.5-test-image
key_name: userkey
key_name: {get_param: key_name}
user_data_format: SOFTWARE_CONFIG
outputs: {}

View File

@ -0,0 +1,18 @@
heat_template_version: 2013-05-23
description: >
Template for deploying a server with custom properties for image, flavor and key_name.
parameters:
key_name:
type: string
default: paramkey
resources:
my_server:
type: OS::Nova::Server
properties:
flavor: m1.medium
image: rhel-6.5-test-image
key_name: {get_param: key_name}
user_data_format: SOFTWARE_CONFIG
outputs: {}

View File

@ -10,6 +10,5 @@ resources:
properties:
flavor: m1.medium
image: rhel-6.5-test-image
key_name: userkey
user_data_format: SOFTWARE_CONFIG
outputs: {}

View File

@ -0,0 +1,19 @@
heat_template_version: 2013-05-23
description: >
Template for deploying a single server with predefined properties.
parameters:
key_name:
type: string
default: userkey
resources:
my_server:
type: OS::Nova::Server
properties:
flavor: m1.medium
image: rhel-6.5-test-image
key_name: { get_param: key_name }
user_data_format: SOFTWARE_CONFIG
outputs: {}

View File

@ -16,7 +16,6 @@ resources:
properties:
flavor: m1.medium
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
logstash_server:
@ -24,7 +23,6 @@ resources:
properties:
flavor: m1.medium
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
app_collectd_create_config:

View File

@ -157,7 +157,6 @@ resources:
properties:
flavor: m1.medium
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
app_server:
@ -165,7 +164,6 @@ resources:
properties:
flavor: m1.medium
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
outputs:

View File

@ -188,7 +188,6 @@ resources:
properties:
flavor: m1.xlarge
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
outputs:

View File

@ -186,7 +186,6 @@ resources:
properties:
flavor: m1.xlarge
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
outputs:

View File

@ -23,7 +23,6 @@ resources:
properties:
flavor: m1.small
image: ubuntu-12.04-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
outputs:

View File

@ -23,7 +23,6 @@ resources:
properties:
flavor: m1.small
image: ubuntu-12.04-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
outputs:

View File

@ -23,7 +23,6 @@ resources:
properties:
flavor: m1.large
image: ubuntu-12.04-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
outputs:

View File

@ -13,6 +13,5 @@ resources:
properties:
flavor: m1.medium
image: rhel-6.5-test-image
key_name: userkey
user_data_format: SOFTWARE_CONFIG
outputs: {}

View File

@ -21,7 +21,6 @@ resources:
properties:
flavor: m1.small
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
my_software_create_deploy:

View File

@ -26,7 +26,6 @@ resources:
properties:
flavor: m1.medium
image: ubuntu-software-config-os-init
key_name: userkey
user_data_format: SOFTWARE_CONFIG
web_server_create_deploy:

View File

@ -15,7 +15,6 @@ resources:
properties:
flavor: m1.small
image: cirros-0.3.2-x86_64-uec
key_name: userkey
networks:
- port: { get_resource: my_port }
user_data_format: SOFTWARE_CONFIG

View File

@ -11,7 +11,6 @@ resources:
properties:
flavor: m1.small
image: cirros-0.3.2-x86_64-uec
key_name: userkey
networks:
- port: { get_resource: my_port1 }
- port: { get_resource: my_port2 }

View File

@ -15,7 +15,6 @@ resources:
properties:
flavor: m1.small
image: cirros-0.3.2-x86_64-uec
key_name: userkey
networks:
- port: { get_resource: my_port }
user_data_format: SOFTWARE_CONFIG

View File

@ -27,7 +27,6 @@ resources:
properties:
flavor: m1.small
image: cirros-0.3.2-x86_64-uec
key_name: userkey
networks:
- port: { get_resource: my_port }
user_data_format: SOFTWARE_CONFIG
@ -37,7 +36,6 @@ resources:
properties:
flavor: m1.small
image: cirros-0.3.2-x86_64-uec
key_name: userkey
networks:
- port: { get_resource: my_port2 }
user_data_format: SOFTWARE_CONFIG

View File

@ -34,7 +34,6 @@ resources:
properties:
flavor: m1.small
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage

View File

@ -38,7 +38,6 @@ resources:
properties:
flavor: m1.medium
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage
@ -57,7 +56,6 @@ resources:
properties:
flavor: m1.medium
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage

View File

@ -38,7 +38,6 @@ resources:
properties:
flavor: m1.medium
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage
@ -57,7 +56,6 @@ resources:
properties:
flavor: m1.medium
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage

View File

@ -42,7 +42,6 @@ resources:
properties:
flavor: m1.small
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage
@ -61,7 +60,6 @@ resources:
properties:
flavor: m1.small
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage

View File

@ -42,7 +42,6 @@ resources:
properties:
flavor: m1.small
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage
@ -61,7 +60,6 @@ resources:
properties:
flavor: m1.small
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage

View File

@ -34,7 +34,6 @@ resources:
properties:
flavor: m1.small
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage

View File

@ -30,7 +30,6 @@ resources:
properties:
flavor: m1.small
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage

View File

@ -33,7 +33,6 @@ resources:
properties:
flavor: m1.medium
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage
@ -61,7 +60,6 @@ resources:
properties:
flavor: m1.medium
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage2

View File

@ -33,7 +33,6 @@ resources:
properties:
flavor: m1.medium
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage
@ -61,7 +60,6 @@ resources:
properties:
flavor: m1.medium
image: fedora-amd64-heat-config
key_name: userkey
user_data_format: SOFTWARE_CONFIG
depends_on:
- my_storage2

View File

@ -1,20 +1,29 @@
tosca_definitions_version: tosca_simple_yaml_1_0
description: Template for deploying a server with custom properties for image and flavor.
description: Template for deploying a server with custom properties for image, flavor and key_name.
node_types:
tosca.nodes.nfv.VDU:
derived_from: tosca.nodes.Compute
properties:
key_name:
type: string
image:
type: string
flavor:
type: string
topology_template:
inputs:
key_name:
type: string
default: inputkey
node_templates:
my_server:
type: tosca.nodes.nfv.VDU
properties:
flavor: m1.medium
image: rhel-6.5-test-image
key_name:
get_input: key_name

View File

@ -512,6 +512,16 @@ class ToscaHotTranslationTest(TestCase):
self.assertEqual({}, diff, '<difference> : ' +
json.dumps(diff, indent=4, separators=(', ', ': ')))
def test_hot_translate_flavor_image_params(self):
tosca_file = '../tests/data/test_tosca_flavor_and_image.yaml'
hot_file = '../tests/data/hot_output/hot_flavor_and_image_params.yaml'
params = {'key_name': 'paramkey'}
diff = TranslationUtils.compare_tosca_translation_with_hot(tosca_file,
hot_file,
params)
self.assertEqual({}, diff, '<difference> : ' +
json.dumps(diff, indent=4, separators=(', ', ': ')))
def test_hot_translate_custom_type(self):
tosca_file = '../tests/data/test_tosca_custom_type.yaml'
hot_file = '../tests/data/hot_output/' \
@ -556,3 +566,13 @@ class ToscaHotTranslationTest(TestCase):
params)
self.assertEqual({}, diff, '<difference> : ' +
json.dumps(diff, indent=4, separators=(', ', ': ')))
def test_hot_translate_helloworld_with_userkey(self):
tosca_file = '../tests/data/tosca_helloworld.yaml'
hot_file = '../tests/data/hot_output/hot_hello_world_userkey.yaml'
params = {'key_name': 'userkey'}
diff = TranslationUtils.compare_tosca_translation_with_hot(tosca_file,
hot_file,
params)
self.assertEqual({}, diff, '<difference> : ' +
json.dumps(diff, indent=4, separators=(', ', ': ')))