Repository for dip
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tenant-catalog/kubeflow/common/istio-cni-1-24/split-istio-packages

72 lines
2.2 KiB

#!/usr/bin/env python3
import sys
import argparse
import ruamel.yaml
DESCRIPTION = """ Separate Istio YAML into separate components.
Separate Istio YAML definitions into four separate components: crds, install
and cluster-local-gateway.
"""
class YAMLEmitterNoVersionDirective(ruamel.yaml.emitter.Emitter):
"""YAML Emitter that doesn't emit the YAML version directive."""
def write_version_directive(self, version_text):
"""Disable emitting version directive, i.e., %YAML 1.1."""
pass
class YAML(ruamel.yaml.YAML):
"""Wrapper of the ruamel.yaml.YAML class with our custom settings."""
def __init__(self, *args, **kwargs):
super(YAML, self).__init__(*args, **kwargs)
# XXX: Explicitly set version for producing K8s compatible manifests.
# https://yaml.readthedocs.io/en/latest/detail.html#document-version-support
self.version = (1, 1)
# XXX: Do not emit version directive since tools might fail to
# parse manifests.
self.Emitter = YAMLEmitterNoVersionDirective
yaml = YAML()
def parse_args():
parser = argparse.ArgumentParser(
description=DESCRIPTION,
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-f", "--manifest-file", type=str, required=True,
dest="manifest_file",
help="Istio YAML, generated by istioctl.")
return parser.parse_args()
def main():
args = parse_args()
with open(args.manifest_file, "r") as f:
objects = [obj for obj in list(yaml.load_all(f)) if obj]
crds, install, cluster_local = [], [], []
for obj in objects:
if obj.get("kind") == "CustomResourceDefinition":
crds.append(obj)
elif (obj.get("metadata", {}).get("name", "").
startswith("cluster-local-gateway")):
cluster_local.append(obj)
else:
install.append(obj)
with open("crd.yaml", "w") as f:
yaml.dump_all(crds, f)
with open("install.yaml", "w") as f:
yaml.dump_all(install, f)
with open("cluster-local-gateway.yaml", "w") as f:
yaml.dump_all(cluster_local, f)
if __name__ == "__main__":
sys.exit(main())