marketplace/deployer_util/schema_values_common.py (43 lines of code) (raw):
# Copyright 2018 Google LLC
#
# 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 functools
import config_helper
VALUES_FILE = {
'stdin': '-',
'raw': '/data/values.yaml',
'expanded': '/data/final_values.yaml',
}
VALUES_DIR = {
'stdin': '/dev/null',
'raw': '/data/values',
'expanded': '/data/final_values',
}
def add_to_argument_parser(parser):
parser.add_argument(
'--schema_file',
help='Path to the schema file',
default='/data/schema.yaml')
parser.add_argument(
'--values_mode',
help='"expanded" for expanded, and "raw" for not, and stdin for '
'specified via standard in.',
choices=VALUES_FILE.keys(),
default='expanded')
def memoize(func):
cache = func.cache = {}
@functools.wraps(func)
def memoized_func(*args, **kwargs):
key = str(args) + str(kwargs)
if key not in cache:
cache[key] = func(*args, **kwargs)
return cache[key]
return memoized_func
@memoize
def load_schema(parsed_args):
return config_helper.Schema.load_yaml_file(parsed_args.schema_file)
def load_schema_and_validate(parsed_args):
return load_schema(parsed_args).validate()
@memoize
def load_values(parsed_args):
values_file = VALUES_FILE[parsed_args.values_mode]
values_dir = VALUES_DIR[parsed_args.values_mode]
return config_helper.load_values(values_file, values_dir,
load_schema(parsed_args))