Merge "YAML version support"
This commit is contained in:
@@ -113,6 +113,14 @@ additional ``--api-ref-src`` argument:
|
|||||||
Your API documentation should now be looking much better. You'll even have
|
Your API documentation should now be looking much better. You'll even have
|
||||||
documentation available inline.
|
documentation available inline.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
Beware that the output YAML file follows version 1.2 of the YAML
|
||||||
|
specification and there are libraries, such as PyYAML, that only support
|
||||||
|
version 1.1 and will parse the contents incorrectly.
|
||||||
|
|
||||||
|
Option ``--yaml-version 1.1`` can be passed on the call to force the output
|
||||||
|
to use specification version 1.1.
|
||||||
|
|
||||||
There are a variety of options available, which you can view with the
|
There are a variety of options available, which you can view with the
|
||||||
``--help`` option.
|
``--help`` option.
|
||||||
|
|
||||||
|
@@ -167,6 +167,18 @@ def main():
|
|||||||
],
|
],
|
||||||
help="Target for which to generate code",
|
help="Target for which to generate code",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--yaml-version",
|
||||||
|
choices=["1.1", "1.2"],
|
||||||
|
default="",
|
||||||
|
help=(
|
||||||
|
"Yaml specification version to use for openapi-spec target "
|
||||||
|
"output. Defaults to latest supported version without the YAML "
|
||||||
|
"directive, which will be included if version is explicit (eg: "
|
||||||
|
"%%YAML 1.2). Beware of libraries like PyYaml that only support "
|
||||||
|
"version 1.1"
|
||||||
|
),
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--work-dir", help="Working directory for the generated code"
|
"--work-dir", help="Working directory for the generated code"
|
||||||
)
|
)
|
||||||
|
@@ -493,7 +493,11 @@ class BarbicanGenerator(OpenStackServerSourceBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.dump_openapi(
|
self.dump_openapi(
|
||||||
openapi_spec, Path(impl_path), args.validate, "key-manager"
|
openapi_spec,
|
||||||
|
Path(impl_path),
|
||||||
|
args.validate,
|
||||||
|
"key-manager",
|
||||||
|
args.yaml_version,
|
||||||
)
|
)
|
||||||
|
|
||||||
lnk = Path(impl_path.parent, "v1.yaml")
|
lnk = Path(impl_path.parent, "v1.yaml")
|
||||||
|
@@ -191,12 +191,21 @@ class OpenStackServerSourceBase:
|
|||||||
if spec:
|
if spec:
|
||||||
return SpecSchema(**spec)
|
return SpecSchema(**spec)
|
||||||
|
|
||||||
def dump_openapi(self, spec, path, validate: bool, service_type: str):
|
def dump_openapi(
|
||||||
|
self,
|
||||||
|
spec,
|
||||||
|
path,
|
||||||
|
validate: bool,
|
||||||
|
service_type: str,
|
||||||
|
yaml_version: str = "",
|
||||||
|
):
|
||||||
"""Dump OpenAPI spec into the file"""
|
"""Dump OpenAPI spec into the file"""
|
||||||
if validate:
|
if validate:
|
||||||
self.validate_spec(spec, service_type)
|
self.validate_spec(spec, service_type)
|
||||||
yaml = YAML()
|
yaml = YAML()
|
||||||
yaml.preserve_quotes = True
|
yaml.preserve_quotes = True
|
||||||
|
if yaml_version:
|
||||||
|
yaml.version = yaml_version
|
||||||
yaml.indent(mapping=2, sequence=4, offset=2)
|
yaml.indent(mapping=2, sequence=4, offset=2)
|
||||||
with open(path, "w") as fp:
|
with open(path, "w") as fp:
|
||||||
yaml.dump(
|
yaml.dump(
|
||||||
|
@@ -183,7 +183,11 @@ class CinderV3Generator(OpenStackServerSourceBase):
|
|||||||
merge_api_ref_doc(openapi_spec, args.api_ref_src)
|
merge_api_ref_doc(openapi_spec, args.api_ref_src)
|
||||||
|
|
||||||
self.dump_openapi(
|
self.dump_openapi(
|
||||||
openapi_spec, impl_path, args.validate, "block-storage"
|
openapi_spec,
|
||||||
|
impl_path,
|
||||||
|
args.validate,
|
||||||
|
"block-storage",
|
||||||
|
args.yaml_version,
|
||||||
)
|
)
|
||||||
|
|
||||||
lnk = Path(impl_path.parent, "v3.yaml")
|
lnk = Path(impl_path.parent, "v3.yaml")
|
||||||
|
@@ -250,7 +250,13 @@ class DesignateGenerator(OpenStackServerSourceBase):
|
|||||||
openapi_spec, args.api_ref_src, allow_strip_version=False
|
openapi_spec, args.api_ref_src, allow_strip_version=False
|
||||||
)
|
)
|
||||||
|
|
||||||
self.dump_openapi(openapi_spec, Path(impl_path), args.validate, "dns")
|
self.dump_openapi(
|
||||||
|
openapi_spec,
|
||||||
|
Path(impl_path),
|
||||||
|
args.validate,
|
||||||
|
"dns",
|
||||||
|
args.yaml_version,
|
||||||
|
)
|
||||||
|
|
||||||
lnk = Path(impl_path.parent, "v2.yaml")
|
lnk = Path(impl_path.parent, "v2.yaml")
|
||||||
lnk.unlink(missing_ok=True)
|
lnk.unlink(missing_ok=True)
|
||||||
|
@@ -333,7 +333,9 @@ class GlanceGenerator(OpenStackServerSourceBase):
|
|||||||
if args.api_ref_src:
|
if args.api_ref_src:
|
||||||
merge_api_ref_doc(openapi_spec, args.api_ref_src)
|
merge_api_ref_doc(openapi_spec, args.api_ref_src)
|
||||||
|
|
||||||
self.dump_openapi(openapi_spec, impl_path, args.validate, "image")
|
self.dump_openapi(
|
||||||
|
openapi_spec, impl_path, args.validate, "image", args.yaml_version
|
||||||
|
)
|
||||||
|
|
||||||
lnk = Path(impl_path.parent, "v2.yaml")
|
lnk = Path(impl_path.parent, "v2.yaml")
|
||||||
lnk.unlink(missing_ok=True)
|
lnk.unlink(missing_ok=True)
|
||||||
|
@@ -193,7 +193,11 @@ class IronicGenerator(OpenStackServerSourceBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.dump_openapi(
|
self.dump_openapi(
|
||||||
openapi_spec, Path(impl_path), args.validate, "baremetal"
|
openapi_spec,
|
||||||
|
Path(impl_path),
|
||||||
|
args.validate,
|
||||||
|
"baremetal",
|
||||||
|
args.yaml_version,
|
||||||
)
|
)
|
||||||
|
|
||||||
lnk = Path(impl_path.parent, "v1.yaml")
|
lnk = Path(impl_path.parent, "v1.yaml")
|
||||||
|
@@ -162,7 +162,13 @@ class KeystoneGenerator(OpenStackServerSourceBase):
|
|||||||
openapi_spec, args.api_ref_src, allow_strip_version=False
|
openapi_spec, args.api_ref_src, allow_strip_version=False
|
||||||
)
|
)
|
||||||
|
|
||||||
self.dump_openapi(openapi_spec, impl_path, args.validate, "identity")
|
self.dump_openapi(
|
||||||
|
openapi_spec,
|
||||||
|
impl_path,
|
||||||
|
args.validate,
|
||||||
|
"identity",
|
||||||
|
args.yaml_version,
|
||||||
|
)
|
||||||
|
|
||||||
lnk = Path(impl_path.parent, "v3.yaml")
|
lnk = Path(impl_path.parent, "v3.yaml")
|
||||||
lnk.unlink(missing_ok=True)
|
lnk.unlink(missing_ok=True)
|
||||||
|
@@ -237,6 +237,7 @@ class MagnumGenerator(OpenStackServerSourceBase):
|
|||||||
Path(impl_path),
|
Path(impl_path),
|
||||||
args.validate,
|
args.validate,
|
||||||
"container-infrastructure-management",
|
"container-infrastructure-management",
|
||||||
|
args.yaml_version,
|
||||||
)
|
)
|
||||||
|
|
||||||
lnk = Path(impl_path.parent, "v1.yaml")
|
lnk = Path(impl_path.parent, "v1.yaml")
|
||||||
|
@@ -123,7 +123,11 @@ class ManilaGenerator(OpenStackServerSourceBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.dump_openapi(
|
self.dump_openapi(
|
||||||
openapi_spec, impl_path, args.validate, "shared-file-system"
|
openapi_spec,
|
||||||
|
impl_path,
|
||||||
|
args.validate,
|
||||||
|
"shared-file-system",
|
||||||
|
args.yaml_version,
|
||||||
)
|
)
|
||||||
|
|
||||||
lnk = Path(impl_path.parent, "v2.yaml")
|
lnk = Path(impl_path.parent, "v2.yaml")
|
||||||
|
@@ -180,7 +180,13 @@ class NeutronGenerator(OpenStackServerSourceBase):
|
|||||||
# Add base resource routes exposed as a pecan app
|
# Add base resource routes exposed as a pecan app
|
||||||
self._process_base_resource_routes(openapi_spec, processed_routes)
|
self._process_base_resource_routes(openapi_spec, processed_routes)
|
||||||
|
|
||||||
self.dump_openapi(openapi_spec, impl_path, args.validate, "network")
|
self.dump_openapi(
|
||||||
|
openapi_spec,
|
||||||
|
impl_path,
|
||||||
|
args.validate,
|
||||||
|
"network",
|
||||||
|
args.yaml_version,
|
||||||
|
)
|
||||||
|
|
||||||
def process_neutron_with_vpnaas(self, work_dir, processed_routes, args):
|
def process_neutron_with_vpnaas(self, work_dir, processed_routes, args):
|
||||||
"""Setup base Neutron with enabled vpnaas"""
|
"""Setup base Neutron with enabled vpnaas"""
|
||||||
@@ -240,7 +246,13 @@ class NeutronGenerator(OpenStackServerSourceBase):
|
|||||||
|
|
||||||
(impl_path, openapi_spec) = self._read_spec(work_dir)
|
(impl_path, openapi_spec) = self._read_spec(work_dir)
|
||||||
self._process_router(router, openapi_spec, processed_routes)
|
self._process_router(router, openapi_spec, processed_routes)
|
||||||
self.dump_openapi(openapi_spec, impl_path, args.validate, "network")
|
self.dump_openapi(
|
||||||
|
openapi_spec,
|
||||||
|
impl_path,
|
||||||
|
args.validate,
|
||||||
|
"network",
|
||||||
|
args.yaml_version,
|
||||||
|
)
|
||||||
|
|
||||||
def _read_spec(self, work_dir):
|
def _read_spec(self, work_dir):
|
||||||
"""Read the spec from file or create an empty one"""
|
"""Read the spec from file or create an empty one"""
|
||||||
@@ -374,7 +386,11 @@ class NeutronGenerator(OpenStackServerSourceBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.dump_openapi(
|
self.dump_openapi(
|
||||||
openapi_spec, Path(impl_path), args.validate, "network"
|
openapi_spec,
|
||||||
|
Path(impl_path),
|
||||||
|
args.validate,
|
||||||
|
"network",
|
||||||
|
args.yaml_version,
|
||||||
)
|
)
|
||||||
|
|
||||||
return impl_path
|
return impl_path
|
||||||
|
@@ -112,7 +112,13 @@ class NovaGenerator(OpenStackServerSourceBase):
|
|||||||
doc_url_prefix="/v2.1",
|
doc_url_prefix="/v2.1",
|
||||||
)
|
)
|
||||||
|
|
||||||
self.dump_openapi(openapi_spec, impl_path, args.validate, "compute")
|
self.dump_openapi(
|
||||||
|
openapi_spec,
|
||||||
|
impl_path,
|
||||||
|
args.validate,
|
||||||
|
"compute",
|
||||||
|
args.yaml_version,
|
||||||
|
)
|
||||||
|
|
||||||
lnk = Path(impl_path.parent, "v2.yaml")
|
lnk = Path(impl_path.parent, "v2.yaml")
|
||||||
lnk.unlink(missing_ok=True)
|
lnk.unlink(missing_ok=True)
|
||||||
|
@@ -1092,7 +1092,11 @@ class OctaviaGenerator(OpenStackServerSourceBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.dump_openapi(
|
self.dump_openapi(
|
||||||
openapi_spec, Path(impl_path), args.validate, "load-balancer"
|
openapi_spec,
|
||||||
|
Path(impl_path),
|
||||||
|
args.validate,
|
||||||
|
"load-balancer",
|
||||||
|
args.yaml_version,
|
||||||
)
|
)
|
||||||
|
|
||||||
lnk = Path(impl_path.parent, "v2.yaml")
|
lnk = Path(impl_path.parent, "v2.yaml")
|
||||||
|
@@ -121,7 +121,13 @@ class PlacementGenerator(OpenStackServerSourceBase):
|
|||||||
openapi_spec, args.api_ref_src, allow_strip_version=False
|
openapi_spec, args.api_ref_src, allow_strip_version=False
|
||||||
)
|
)
|
||||||
|
|
||||||
self.dump_openapi(openapi_spec, impl_path, args.validate, "placement")
|
self.dump_openapi(
|
||||||
|
openapi_spec,
|
||||||
|
impl_path,
|
||||||
|
args.validate,
|
||||||
|
"placement",
|
||||||
|
args.yaml_version,
|
||||||
|
)
|
||||||
|
|
||||||
lnk = Path(impl_path.parent, "v1.yaml")
|
lnk = Path(impl_path.parent, "v1.yaml")
|
||||||
lnk.unlink(missing_ok=True)
|
lnk.unlink(missing_ok=True)
|
||||||
|
Reference in New Issue
Block a user