This commit is contained in:
2025-03-05 11:05:51 +00:00
commit 5e2a338031
72 changed files with 3508 additions and 0 deletions

35
otc_metadata/__init__.py Normal file
View File

@ -0,0 +1,35 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
__all__ = ["__version__", "Docs"]
import pbr.version
from otc_metadata.services import Services # flake8: noqa
__version__ = pbr.version.VersionInfo("otc-metadata").version_string()
_service_manager = None
def get_service_data(*args, **kwargs):
"""Return singleton instance of the Services object.
Parameters are all passed through to the
:class:`~otc_metadata.services.Services` constructor.
.. note::
Only one singleton is kept, so if instances with different parameter
values are desired, directly calling the constructor is necessary.
:returns: Singleton instance of
:class:`~otc_metadata.services.Services`
"""
global _service_manager
if not _service_manager:
_service_manager = Services(*args, **kwargs)
return _service_manager

View File

@ -0,0 +1,56 @@
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import os
import pathlib
import yaml
__all__ = ["read_data"]
DATA_DIR = os.path.dirname(__file__)
def read_data(filename):
"""Return data that is shipped inside the Python package."""
filepath = os.path.join(DATA_DIR, filename)
with open(filepath, "r") as fd:
data = yaml.safe_load(fd)
# Merge data found in individual element files
data.setdefault("documents", list())
data.setdefault("services", list())
data.setdefault("service_categories", list())
for item in pathlib.Path(DATA_DIR, "documents").glob("*.yaml"):
with open(item, "r") as fp:
data["documents"].append(yaml.safe_load(fp))
for item in pathlib.Path(DATA_DIR, "services").glob("*.yaml"):
with open(item, "r") as fp:
data["services"].append(yaml.safe_load(fp))
for item in pathlib.Path(DATA_DIR, "service_categories").glob(
"*.yaml"
):
with open(item, "r") as fp:
data["service_categories"].append(yaml.safe_load(fp))
return data
def rewrite_data(filename, data):
"""Rewrites data formatting it"""
from ruamel.yaml import YAML
_yaml = YAML()
_yaml.indent(mapping=2, sequence=4, offset=2)
filepath = os.path.join(DATA_DIR, filename)
with open(filepath, "w") as fd:
_yaml.dump(data, fd)

View File

@ -0,0 +1,10 @@
---
hc_location: api/as
html_location: docs/as/api-ref
link: /auto-scaling/api-ref/
pdf_enabled: true
pdf_environment: internal
rst_location: api-ref/source
service_type: as
title: API Reference
type: api-ref

View File

@ -0,0 +1,10 @@
---
hc_location: devg/as
html_location: docs/as/dev
link: /auto-scaling/dev-guide/
pdf_enabled: true
pdf_environment: internal
rst_location: dev_guide/source
service_type: as
title: Developer Guide
type: dev

View File

@ -0,0 +1,10 @@
---
hc_location: usermanual/as
html_location: docs/as/umn
link: /auto-scaling/umn/
pdf_enabled: true
pdf_environment: internal
rst_location: umn/source
service_type: as
title: User Guide
type: umn

View File

@ -0,0 +1,23 @@
---
service_type: as
- environment: public
repo: opentelekomcloud-docs/auto-scaling
type: github
cloud_environments:
- eu_de
- environment: internal
repo: docs/auto-scaling
type: gitea
- eu_de
- environment: public
repo: opentelekomcloud-docs-swiss/auto-scaling
type: github
cloud_environments:
- swiss
- environment: internal
repo: docs-swiss/auto-scaling
type: gitea
cloud_environments:
- swiss

View File

@ -0,0 +1,3 @@
---
name: application
title: Application Services

View File

@ -0,0 +1,3 @@
---
name: big_data
title: Big Data and Data Analysis

View File

@ -0,0 +1,3 @@
---
name: compute
title: Computing

View File

@ -0,0 +1,3 @@
---
name: container
title: Container

View File

@ -0,0 +1,3 @@
---
name: database
title: Databases

View File

@ -0,0 +1,3 @@
---
name: md
title: Management & Deployment

View File

@ -0,0 +1,3 @@
---
name: network
title: Networking

View File

@ -0,0 +1,3 @@
---
name: other
title: Other

View File

@ -0,0 +1,3 @@
---
name: security-services
title: Security Services

View File

@ -0,0 +1,3 @@
---
name: storage
title: Storage

View File

@ -0,0 +1,22 @@
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Please consult with otc_metadata.services.Services:_sort_data for expected
# sort order. When unsure perform tools/sort_metadata.py for getting it sorted.
# It is also supported, that content of files under
# documents/services/service_categories is being merged with
# the content here.
---
documents: []
service_categories: []
services: []

View File

@ -0,0 +1,13 @@
---
environment: public
repositories:
service_category: compute
service_title: Auto Scaling
service_type: as
service_uri: auto-scaling
cloud_environments:
- name: eu_de
- name: swiss
teams:
- name: docs-compute-rw
permission: write

37
otc_metadata/docs.py Normal file
View File

@ -0,0 +1,37 @@
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import copy
import otc_metadata.data
__all__ = ["Service"]
BUILTIN_DATA = otc_metadata.data.read_data("docs.yaml")
def _normalize_type(service_type):
if service_type:
return service_type.replace("_", "-")
class Service(object):
"""Encapsulation of the OTC Docs data"""
def __init__(self):
self._service_data = BUILTIN_DATA
@property
def all_services(self):
"Service Categories data listing."
return copy.deepcopy(self._service_data["services"])

308
otc_metadata/services.py Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,16 @@
sphinx>=2.0.0,!=2.1.0 # BSD
{% if target_environment == 'public' %}
otcdocstheme<2.0.0 # Apache-2.0
{% elif target_environment == 'internal' %}
otcdocstheme # Apache-2.0
{% else %}
otcdocstheme # Apache-2.0
{% endif %}
# releasenotes
reno>=3.1.0 # Apache-2.0
otc-sphinx-directives>=0.1.0
sphinx-minify>=0.0.1 # Apache-2.0
git+https://gitea.eco.tsi-dev.otc-service.com/infra/otc-metadata.git#egg=otc_metadata
setuptools
gitpython

View File

@ -0,0 +1,8 @@
{{ sbv_title }}
.. directive_wrapper::
:class: container-sbv
.. service_card::
:service_type: {{ service_type }}
:environment: {{ environment }}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,19 @@
---
- project:
merge-mode: squash-merge
default-branch: main
templates:
- helpcenter-base-jobs
vars:
sphinx_pdf_files:
{%- for doc in docs %}
{%- if doc.pdf_enabled %}
- {{ service_type }}-{{ doc.type }}.pdf
{%- endif %}
{%- endfor %}
check:
jobs:
- noop
gate:
jobs:
- noop

View File

View File

@ -0,0 +1,70 @@
# -*- coding: utf-8 -*-
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""
test_otc-metadata
----------------------------------
Tests for `otc-metadata` module.
"""
from unittest import TestCase
from otc_metadata import services
class TestOtcMetadata(TestCase):
def setUp(self):
self.data = services.Services()
def test_data_is_sorted(self):
curr = self.data
new = services.Services()
new._sort_data()
self.assertEqual(
curr._service_data, new._service_data, "Data is sorted properly"
)
def test_service_categories(self):
category = dict()
for cat in self.data._service_data["service_categories"]:
category[cat["name"]] = cat["title"]
for srv in self.data.all_services:
self.assertTrue(
srv["service_category"] in category,
f"Category {srv['service_category']} is present",
)
self.assertGreater(
len(self.data._service_data["service_categories"]),
1,
"More then 1 service category",
)
def test_doc_contains_required_data(self):
srv_types = dict()
for srv in self.data.all_services:
srv_types[srv["service_type"]] = srv
for doc in self.data.all_docs:
for attr in [
"rst_location",
"service_type",
"title",
"type",
]:
self.assertIn(attr, doc, f"Document {doc} contains {attr}")
self.assertIn(
doc["service_type"],
srv_types,
f"Document {doc} contains valid service_type",
)