Пример #1
0
    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
Пример #2
0
    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
Пример #3
0
 def load_object(obj):
     return KubeObj.parse_obj(obj)
Пример #4
0
 def __init__(self, *args, **kwargs):
     KubeObj.__init__(self, *args, **kwargs)
     self._in_cluster = None