
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
86 lines
3.4 KiB
Python
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
|