Merge "Add relative_path metadata to a stored file"
This commit is contained in:
commit
b5a4dc37be
@ -0,0 +1,24 @@
|
||||
# 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 oslo.db.sqlalchemy import utils
|
||||
from sqlalchemy import Column, String
|
||||
|
||||
|
||||
def upgrade(migrate_engine):
|
||||
stored_file = utils.get_table(migrate_engine, 'stored_file')
|
||||
relative_path = Column('relative_path', String(256), nullable=True)
|
||||
stored_file.create_column(relative_path)
|
||||
|
||||
|
||||
def downgrade(migrate_engine):
|
||||
raise NotImplementedError('Downgrade is unsupported.')
|
@ -234,5 +234,8 @@ class StoredFile(Base):
|
||||
#: Names provide a short human readable description of a file.
|
||||
name = Column(String(length=64), nullable=True)
|
||||
|
||||
#: Relative path to which the file belongs
|
||||
relative_path = Column(String(length=256), nullable=True)
|
||||
|
||||
#: Versions are an automatic incrementing count.
|
||||
version = Column(Integer(), nullable=True)
|
||||
|
@ -13,7 +13,8 @@
|
||||
|
||||
class Role(object):
|
||||
|
||||
def __init__(self, uuid, name, version, description, template):
|
||||
def __init__(self, uuid, name, version, description, template,
|
||||
relative_path=None):
|
||||
super(Role, self).__init__()
|
||||
|
||||
self.uuid = uuid
|
||||
@ -21,6 +22,7 @@ class Role(object):
|
||||
self.version = version
|
||||
self.description = description
|
||||
self.template = template
|
||||
self.relative_path = relative_path
|
||||
|
||||
|
||||
class DeploymentPlan(object):
|
||||
|
@ -20,6 +20,8 @@ such as:
|
||||
resource
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
|
||||
def generate_role_namespace(role_name, role_version):
|
||||
"""Creates a unique namespace for the given role name and version.
|
||||
@ -44,16 +46,22 @@ def parse_role_namespace(role_namespace):
|
||||
return role_namespace.rsplit('-', 1)
|
||||
|
||||
|
||||
def role_template_filename(role_name, role_version):
|
||||
def role_template_filename(role_name, role_version, role_relative_path):
|
||||
"""Generates the filename a role's template should be stored in when
|
||||
creating the deployment plan's Heat files.
|
||||
|
||||
:type role_name: str
|
||||
:type role_version: str
|
||||
:type role_relative_path: str or None
|
||||
:rtype: str
|
||||
"""
|
||||
namespace = generate_role_namespace(role_name, role_version)
|
||||
return 'provider-%s.yaml' % namespace
|
||||
|
||||
filename = 'provider-%s.yaml' % namespace
|
||||
if role_relative_path:
|
||||
filename = os.path.join(role_relative_path, filename)
|
||||
|
||||
return filename
|
||||
|
||||
|
||||
def master_template_filename(plan_name):
|
||||
|
@ -151,8 +151,9 @@ class PlansManager(object):
|
||||
# Use the combination logic to perform the addition.
|
||||
role_namespace = name_utils.generate_role_namespace(db_role.name,
|
||||
db_role.version)
|
||||
template_filename = name_utils.role_template_filename(db_role.name,
|
||||
db_role.version)
|
||||
template_filename = (
|
||||
name_utils.role_template_filename(db_role.name, db_role.version,
|
||||
db_role.relative_path))
|
||||
deployment_plan.add_template(role_namespace, role_template,
|
||||
template_filename,
|
||||
override_properties=special_properties)
|
||||
@ -375,7 +376,8 @@ class PlansManager(object):
|
||||
for role in plan_roles:
|
||||
contents = composer.compose_template(role.template)
|
||||
filename = name_utils.role_template_filename(role.name,
|
||||
role.version)
|
||||
role.version,
|
||||
role.relative_path)
|
||||
files_dict[filename] = contents
|
||||
|
||||
def _add_template_extra_data_for(templates, template_store):
|
||||
@ -423,7 +425,8 @@ class PlansManager(object):
|
||||
|
||||
# Convert to the Tuskar domain model.
|
||||
tuskar_role = models.Role(db_role.uuid, name, version,
|
||||
role.description, role)
|
||||
role.description, role,
|
||||
relative_path=db_role.relative_path)
|
||||
return tuskar_role
|
||||
|
||||
reg_mapping = self.registry_mapping_store.list()
|
||||
|
@ -21,7 +21,7 @@ class StoredFile(object):
|
||||
"""
|
||||
|
||||
def __init__(self, uuid, contents, store, name=None, created_at=None,
|
||||
updated_at=None, version=None):
|
||||
updated_at=None, version=None, relative_path=None):
|
||||
"""The constructor requires uuid, contents and store which are the
|
||||
common attributes in all drivers.
|
||||
|
||||
@ -56,6 +56,7 @@ class StoredFile(object):
|
||||
self.created_at = created_at
|
||||
self.updated_at = updated_at
|
||||
self.version = version
|
||||
self.relative_path = relative_path
|
||||
|
||||
def __eq__(self, other):
|
||||
return (isinstance(other, self.__class__)
|
||||
|
@ -32,9 +32,13 @@ class NameUtilsTestCases(unittest.TestCase):
|
||||
self.assertEqual('v1', version)
|
||||
|
||||
def test_role_template_filename(self):
|
||||
filename = name_utils.role_template_filename('r1', 'v1')
|
||||
filename = name_utils.role_template_filename('r1', 'v1', None)
|
||||
self.assertEqual('provider-r1-v1.yaml', filename)
|
||||
|
||||
def test_role_template_filename_with_relative_path(self):
|
||||
filename = name_utils.role_template_filename('r1', 'v1', 'l1')
|
||||
self.assertEqual('l1/provider-r1-v1.yaml', filename)
|
||||
|
||||
def test_master_template_filename(self):
|
||||
filename = name_utils.master_template_filename('p1')
|
||||
self.assertEqual('p1-template.yaml', filename)
|
||||
|
@ -395,7 +395,7 @@ class PlansManagerTestCase(TestCase):
|
||||
parsed_env = parser.parse_environment(templates['environment.yaml'])
|
||||
self.assertEqual(1, len(parsed_env.registry_entries))
|
||||
|
||||
role_filename = name_utils.role_template_filename('r1', '1')
|
||||
role_filename = name_utils.role_template_filename('r1', '1', None)
|
||||
self.assertTrue(role_filename in templates)
|
||||
parsed_role = parser.parse_template(templates[role_filename])
|
||||
self.assertEqual(parsed_role.description, 'Test provider resource foo')
|
||||
@ -428,7 +428,7 @@ class PlansManagerTestCase(TestCase):
|
||||
parsed_env = parser.parse_environment(templates['environment.yaml'])
|
||||
self.assertEqual(2, len(parsed_env.registry_entries))
|
||||
|
||||
role_filename = name_utils.role_template_filename('r1', '1')
|
||||
role_filename = name_utils.role_template_filename('r1', '1', None)
|
||||
self.assertTrue(role_filename in templates)
|
||||
parsed_role = parser.parse_template(templates[role_filename])
|
||||
self.assertEqual(parsed_role.description, 'Test provider resource foo')
|
||||
|
Loading…
x
Reference in New Issue
Block a user