def run(self, args): self.get_repository(can_fail=True) load_python.PythonBaseFile.get_kube_objs() if args.file == '-': data = sys.stdin.read() sys.stdin.close() else: with open(args.file) as f: data = f.read() value = None if data.lstrip().startswith('{'): try: value = json.loads(data) except ValueError: pass if value is None: try: value = kube_yaml.yaml_load(data) if not isinstance(value, dict): value = None except ValueError: pass if value is None: print("Cannot load {} as either JSON or YAML".format(args.file), file=sys.stderr) return 1 namespace = args.namespace if 'kind' in value and value['kind'] == 'List': values = value['items'] else: values = [value] last_ns = None for v in values: if args.namespace is None: try: namespace = v['metadata']['namespace'] except KeyError: pass indent = args.indent obj = KubeObj.parse_obj(v) if not obj._uses_namespace: namespace = None if namespace is not None and (args.namespace is not None or args.with_namespace): if namespace != last_ns: print((' ' * args.indent) + 'with namespace({}):'.format(repr(namespace))) indent += 4 print((' ' * indent) + obj.dump_obj(indent, args.include_defaults) + '\n') last_ns = namespace
def run(self, args): def walk(arg): if os.path.isfile(arg): return [arg] elif os.path.isdir(arg): ret = [] for d in os.listdir(arg): if d.startswith('.'): continue ret.extend(walk(os.path.join(arg, d))) return ret elif args.follow_symlinks and os.path.islink(arg): return walk(os.path.realpath(arg)) else: return [] files = [] for f in args.file_or_dir: files.extend(walk(f)) excludes = set() if args.exclude_namespace: excludes.add('namespace') excludes.add('project') if args.exclude is not None: for e in args.exclude: excludes.add(e.lower()) ordering = {} for ff in files: try: with open(ff) as f: data = f.read() value = None if data.lstrip().startswith('{'): try: value = json.loads(data) except ValueError: pass if value is None: value = kube_yaml.yaml_load(data) assert isinstance(value, dict) obj = KubeObj.find_class_from_obj(value) assert obj is not None assert obj.kind.lower() not in excludes if obj._output_order not in ordering: ordering[obj._output_order] = [] ordering[obj._output_order].append(ff) except: pass for k in sorted(ordering.keys(), reverse=args.reverse): for f in ordering[k]: print(f) return 0
def load_object(obj): return KubeObj.parse_obj(obj)
def __init__(self, *args, **kwargs): KubeObj.__init__(self, *args, **kwargs) self._in_cluster = None