diff --git a/Readme.md b/Readme.md index 75d8655..aadf9ee 100644 --- a/Readme.md +++ b/Readme.md @@ -183,6 +183,8 @@ $ ./scripts/openapi2jsonschema.py https://raw.githubusercontent.com/aws/amazon-s JSON schema written to trainingjob_v1.json ``` +The `FILENAME_FORMAT` environment variable can be used to change the output file name (Available variables: `kind`, `group`, `version`) (Default: `{kind}_{version}`). + ### Speed comparison with Kubeval Running on a pretty large kubeconfigs setup, on a laptop with 4 cores: diff --git a/scripts/openapi2jsonschema.py b/scripts/openapi2jsonschema.py index f80abfa..52a0c80 100755 --- a/scripts/openapi2jsonschema.py +++ b/scripts/openapi2jsonschema.py @@ -88,6 +88,21 @@ def append_no_duplicates(obj, key, value): obj[key].append(value) +def write_schema_file(schema, filename): + schemaJSON = "" + + schema = additional_properties(schema) + schema = replace_int_or_string(schema) + schemaJSON = json.dumps(schema) + + # Dealing with user input here.. + filename = os.path.basename(filename) + f = open(filename, "w") + f.write(schemaJSON) + f.close() + print("JSON schema written to {filename}".format(filename=filename)) + + if len(sys.argv) == 0: print("missing file") exit(1) @@ -104,30 +119,27 @@ for crdFile in sys.argv[1:]: if y["kind"] != "CustomResourceDefinition": continue + filename_format = os.getenv("FILENAME_FORMAT", "{kind}_{version}") filename = "" - schemaJSON = "" if "spec" in y and "validation" in y["spec"] and "openAPIV3Schema" in y["spec"]["validation"]: - filename = y["spec"]["names"]["kind"].lower()+"_"+y["spec"]["version"].lower()+".json" + filename = filename_format.format( + kind=y["spec"]["names"]["kind"], + group=y["spec"]["group"].split(".")[0], + version=y["spec"]["version"], + ).lower() + ".json" schema = y["spec"]["validation"]["openAPIV3Schema"] - schema = additional_properties(schema) - schema = replace_int_or_string(schema) - schemaJSON = json.dumps(schema) + write_schema_file(schema, filename) elif "spec" in y and "versions" in y["spec"]: for version in y["spec"]["versions"]: if "schema" in version and "openAPIV3Schema" in version["schema"]: - filename = y["spec"]["names"]["kind"].lower()+"_"+version["name"].lower()+".json" + filename = filename_format.format( + kind=y["spec"]["names"]["kind"], + group=y["spec"]["group"].split(".")[0], + version=version["name"], + ).lower() + ".json" schema = version["schema"]["openAPIV3Schema"] - schema = additional_properties(schema) - schema = replace_int_or_string(schema) - schemaJSON = json.dumps(schema) - - # Dealing with user input here.. - filename = os.path.basename(filename) - f = open(filename, "w") - f.write(schemaJSON) - f.close() - print("JSON schema written to {filename}".format(filename=filename)) + write_schema_file(schema, filename) exit(0)