# -*- coding: utf-8 -*- # # 2010-2015 Nico Schottelius (nico-cdist at schottelius.org) # 2012-2017 Steven Armstrong (steven-cdist at armstrong.cc) # # This file is part of cdist. # # cdist is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # cdist is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with cdist. If not, see . # # import os import hashlib import cdist.log import cdist.version VERSION = cdist.version.VERSION BANNER = """ .. . .x+=:. s dF @88> z` ^% :8 '88bu. %8P . 0: label_begin = '---- BEGIN ' + stderr_name + ':stderr ----' label_end = '---- END ' + stderr_name + ':stderr ----' output.append('\n' + label_begin) with open(stderr_path, 'r') as fd: output.append(fd.read()) output.append(label_end) return '\n'.join(output) def __str__(self): output = [] output.append(self.message) header = "\nError processing " + self.entity_name under_header = '=' * len(header) output.append(header) output.append(under_header) for param_name, param_value in self.entity_params: output.append(param_name + ': ' + str(param_value)) output.append(self.stderr + '\n') return '\n'.join(output) class CdistObjectError(CdistEntityError): """Something went wrong while working on a specific cdist object""" def __init__(self, cdist_object, subject=''): params = [ ('name', cdist_object.name, ), ('path', cdist_object.absolute_path, ), ('source', " ".join(cdist_object.source), ), ('type', cdist_object.cdist_type.absolute_path, ), ] stderr_paths = [] for stderr_name in os.listdir(cdist_object.stderr_path): stderr_path = os.path.join(cdist_object.stderr_path, stderr_name) stderr_paths.append((stderr_name, stderr_path, )) super().__init__("object '{}'".format(cdist_object.name), params, stderr_paths, subject) class InitialManifestError(CdistEntityError): """Something went wrong while executing initial manifest""" def __init__(self, initial_manifest, stderr_path, subject=''): params = [ ('path', initial_manifest, ), ] stderr_paths = [] stderr_paths = [ ('init', stderr_path, ), ] super().__init__('initial manifest', params, stderr_paths, subject) def file_to_list(filename): """Return list from \n seperated file""" if os.path.isfile(filename): file_fd = open(filename, "r") lines = file_fd.readlines() file_fd.close() # Remove \n from all lines lines = map(lambda s: s.strip(), lines) else: lines = [] return lines def str_hash(s): """Return hash of string s""" if isinstance(s, str): return hashlib.md5(s.encode('utf-8')).hexdigest() else: raise Error("Param should be string") def home_dir(): if 'HOME' in os.environ: return os.path.join(os.environ['HOME'], ".cdist") else: return None