Source code for narrenschiff.modules.helm

# Copyright 2021 The Narrenschiff Authors

# 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 os
from contextlib import suppress

from narrenschiff.modules.common import NarrenschiffModule
from narrenschiff.secretmap import Secretmap


[docs]class HelmException(Exception): """Raise when something is wrong with Helm module.""" pass
[docs]class Helm(NarrenschiffModule): """``helm`` module.""" @property def cmd(self): command = self.command.get('command') name = self.command.get('name', '') chart = self.command.get('chart', '') options = self.command.get('opts', []) arguments = self.command.get('args', {}) self.parse_secretmaps_args() try: args_set = self.command.get('args').get('set') except AttributeError: args_set = None opts = '' if options: opts = ' '.join(map(lambda opt: '--{}'.format(opt), options)) with suppress(AttributeError, TypeError): values = ','.join(self.command.get('args').get('values')) self.command['args']['values'] = values args = ' '.join( ['--{} {}'.format(key, value) for key, value in arguments.items() if key != 'set'] ) sets = '' if args_set: sets = ' '.join(['--set {}'.format(s) for s in args_set]) return ' '.join(['helm', command, name, chart, opts, args, sets])
[docs] def parse_secretmaps_args(self): """ Mutate secretmap arguments. Expand secretmap paths to match files in the ``/tmp`` directory. :return: Void :rtype: ``None`` """ for key, value in self.command.get('args', {}).items(): try: self.command['args'][key] = self._template_path(value) except AttributeError: if key == 'values': values = [self._template_path(v) for v in value] self.command['args'][key] = values
def _template_path(self, value): """Replace secretmap filter artifact with `/tmp` file path.""" secretmap = '{{secretmap}}/' if value.startswith(secretmap): basepath = value.replace(secretmap, '') tmp = Secretmap().tmp return os.path.join(tmp, basepath) return value
[docs] def dry_run_supported(self, cmd): whitelist = [ 'install', 'template', 'uninstall', 'upgrade', ] if cmd.split()[1] in whitelist: return True return False