Files
tripleo-common/tripleo_common/utils/meta.py
Ryan Brady 3340c7ea7a Initial workflow implementation of tripleo-common
This patch adds basic implementation for tripleo-common
as defined in the spec[1].  The PlanManager class provides
the workflow for the REST API or CLI interaction.

[1] http://bit.ly/1O5n9JV

Co-Authored-By: Florian Fuchs <flfuchs@redhat.com>
Change-Id: I2be06d7282f9ca44b91d1db22efc0e7ad0096400
2015-12-07 12:38:42 -05:00

86 lines
3.4 KiB
Python

# Copyright 2015 Red Hat, Inc.
# All Rights Reserved.
#
# 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 yaml
from tripleo_common.core import constants
from tripleo_common.core import exception
def add_key_prefix(source):
result = dict()
for keyname, value in source.items():
new_keyname = "%s%s" % (constants.OBJECT_META_KEY_PREFIX, keyname)
result[new_keyname] = value
return result
def remove_key_prefix(source):
result = dict()
for keyname, value in source.items():
new_keyname = keyname.replace(constants.OBJECT_META_KEY_PREFIX, '')
result[new_keyname] = value
return result
def add_file_metadata(plan_files):
cm = {k: v for (k, v) in plan_files.items()
if v.get('meta', {}).get('file-type') == 'capabilities-map'}
# if there is more than one capabilities-map file, throw an exception
# if there is a capabilities-map file, then process it and set metadata
# in files found
if len(cm) > 1:
raise exception.TooManyCapabilitiesMapFilesError()
if len(cm) == 1:
mapfile = yaml.load(list(cm.items())[0][1]['contents'])
# identify the root template
if mapfile['root_template']:
if plan_files[mapfile['root_template']]:
# if the file exists in the plan and has meta, update it
# otherwise add meta dict
if 'meta' in plan_files[mapfile['root_template']]:
plan_files[mapfile['root_template']]['meta'].update(
dict(constants.ROOT_TEMPLATE_META)
)
else:
plan_files[mapfile['root_template']]['meta'] =\
dict(constants.ROOT_TEMPLATE_META)
# identify all environments
for topic in mapfile['topics']:
for eg in topic['environment_groups']:
for env in eg['environments']:
if 'meta' in plan_files[env['file']]:
plan_files[env['file']]['meta'].update(
dict(constants.ENVIRONMENT_META)
)
else:
plan_files[env['file']]['meta'] =\
dict(constants.ENVIRONMENT_META)
# identify the root environment
if mapfile['root_environment']:
if plan_files[mapfile['root_environment']]:
# if the file exists in the plan and has meta, update it
# otherwise add meta dict
if 'meta' in plan_files[mapfile['root_environment']]:
plan_files[mapfile['root_environment']]['meta'].update(
dict(constants.ROOT_ENVIRONMENT_META)
)
else:
plan_files[mapfile['root_environment']]['meta'] =\
dict(constants.ROOT_ENVIRONMENT_META)
return plan_files