17 Commits

Author SHA1 Message Date
91e9962846 change service category to compute
All checks were successful
gl/check check status: success (91e99628462ed0b4dea8c9ac2d71e4220456ef0f)
gl/gate gate status: success (91e99628462ed0b4dea8c9ac2d71e4220456ef0f)
2025-06-11 08:12:51 +00:00
0147b46518 add overview README file
All checks were successful
gl/check check status: success (0147b46518dad6c219884b247db56ac436236b95)
2025-06-11 08:09:58 +00:00
a47e2a9d87 README.md files added documenting the metadata dependencies and usage
All checks were successful
gl/check check status: success (a47e2a9d87081c668fcb5b5ce9d90bd52c14018f)
2025-06-11 08:02:59 +00:00
f0db6132bb describe metadata overview
All checks were successful
gl/check check status: success (f0db6132bb80e23e1f1d38ca608df69d31205d90)
2025-06-10 13:45:41 +00:00
1c90e222ae Rename Big Data to Data Analysis according to OTC console
Reviewed-by: Gode, Sebastian <sebastian.gode@t-systems.com>
Co-authored-by: Tino Schreiber <tino.schreiber@t-systems.com>
Co-committed-by: Tino Schreiber <tino.schreiber@t-systems.com>
2025-06-02 10:13:24 +00:00
dc86ee3773 Change Categoring Networking title
Reviewed-by: Gode, Sebastian <sebastian.gode@t-systems.com>
Co-authored-by: Tino Schreiber <tino.schreiber@t-systems.com>
Co-committed-by: Tino Schreiber <tino.schreiber@t-systems.com>
2025-06-02 08:13:40 +00:00
a6993b58b6 Disable PDF for CCE swiss
Reviewed-by: Tino Schreiber <tino.schreiber@t-systems.com>
Co-authored-by: Sebastian Gode <sebastian.gode@telekom.de>
Co-committed-by: Sebastian Gode <sebastian.gode@telekom.de>
2025-05-27 07:58:02 +00:00
244122d66e Fix is_global
Reviewed-by: Tino Schreiber <tino.schreiber@t-systems.com>
Co-authored-by: Sebastian Gode <sebastian.gode@telekom.de>
Co-committed-by: Sebastian Gode <sebastian.gode@telekom.de>
2025-05-23 12:36:03 +00:00
c840bfddf7 Update otc_metadata/data/services/obs_3rd_party.yaml
Reviewed-by: Gode, Sebastian <sebastian.gode@t-systems.com>
Co-authored-by: Tino Schreiber <tino.schreiber@t-systems.com>
Co-committed-by: Tino Schreiber <tino.schreiber@t-systems.com>
2025-05-23 12:25:21 +00:00
5688aa9fa9 Update requirements
Reviewed-by: Tino Schreiber <tino.schreiber@t-systems.com>
Co-authored-by: Sebastian Gode <sebastian.gode@telekom.de>
Co-committed-by: Sebastian Gode <sebastian.gode@telekom.de>
2025-05-23 08:11:53 +00:00
483dd1ba13 Update 3rd_party-python-sdk
Reviewed-by: Hasko, Vladimir <vladimir.hasko@t-systems.com>
Co-authored-by: Sebastian Gode <sebastian.gode@telekom.de>
Co-committed-by: Sebastian Gode <sebastian.gode@telekom.de>
2025-05-23 08:05:22 +00:00
9c91fde599 Rename Application Services to Application according to OTC console
Reviewed-by: Gode, Sebastian <sebastian.gode@t-systems.com>
Co-authored-by: Tino Schreiber <tino.schreiber@t-systems.com>
Co-committed-by: Tino Schreiber <tino.schreiber@t-systems.com>
2025-05-20 09:16:16 +00:00
7d4aacf61d Docs constraints new architecture
Reviewed-by: Tino Schreiber <tino.schreiber@t-systems.com>
Co-authored-by: Sebastian Gode <sebastian.gode@telekom.de>
Co-committed-by: Sebastian Gode <sebastian.gode@telekom.de>
2025-05-15 11:11:16 +00:00
a41f77df9a Fix issue 2025-05-05 13:02:49 +00:00
c2a89cf6b1 Fix update_zuul 2025-04-30 12:22:17 +00:00
bf825ffdaa remove testservice 2025-04-30 09:18:33 +00:00
6960b72f63 Fix aom-api-ref 2025-04-30 09:17:42 +00:00
25 changed files with 244 additions and 90 deletions

View File

@ -0,0 +1,26 @@
# 📁 data/
This directory is the core of the metadata structure for Open Telekom Cloud Service Documentation. It contains structured definitions for services, their document types, categories, and repository configurations.
## 📂 Folder Overview
| Folder Name | Description |
|---------------------|-----------------------------------------------------------------------------|
| `services/` | Contains metadata for each individual service, including its cloud regions and access teams. |
| `documents/` | Holds metadata about documentation types (e.g., user guides, API refs) for each service and cloud region. |
| `service_categories/`| Lists available service categories used to group services (e.g., "Application", "Database"). |
| `repositories/` | Defines where the documentation source code is located (GitHub or Gitea) for each service per cloud environment. |
## 📦 Usage
These metadata files are used to:
- Build documentation portals.
- Generate links and visibility rules dynamically.
- Control contributor access.
- Connect documentation to source control repositories.
Each subfolder contains its own `README.md` with detailed field references and options.
## 📎 Example Structure
![Folder Structure](./folder_structure.png)

View File

@ -0,0 +1,69 @@
# 📁 documents/
This folder contains metadata about documentation files per service, such as user guides or API references. Each file describes a single document variant for a specific cloud environment.
## 🔧 Example: `ecs-umn.yaml`
```yaml
---
hc_location: usermanual/ecs
html_location: docs/ecs/umn
link: /elastic-cloud-server/umn/
rst_location: umn/source
service_type: ecs
title: User Guide
type: umn
cloud_environments:
- name: eu_de
visibility: public
pdf_visibility: public
pdf_enabled: true
- name: swiss
visibility: public
pdf_visibility: public
pdf_enabled: true
```
## 🔧 Example: `ecs-api-ref.yaml`
```yaml
---
hc_location: api/ecs
html_location: docs/ecs/api-ref
link: /elastic-cloud-server/api-ref/
rst_location: api-ref/source
service_type: ecs
title: API Reference
type: api-ref
cloud_environments:
- name: eu_de
visibility: public
pdf_visibility: public
pdf_enabled: true
- name: swiss
visibility: public
pdf_visibility: public
pdf_enabled: true
```
## Parameter Reference
| Field | Type | Description |
| -------------------- | ------ | -------------------------------------------------------- |
| `hc_location` | string | Path used in the Horizon Console. |
| `html_location` | string | Location of the built HTML output. |
| `link` | string | Target URL segment for this document. |
| `rst_location` | string | Source folder for `.rst` input. |
| `service_type` | string | Related service identifier (matches `services/`). |
| `title` | string | Display name of the document. |
| `type` | string | Document type (e.g., `umn`, `api-ref`, etc.). |
| `cloud_environments` | list | Region-specific metadata like visibility or PDF support. |
### `cloud_environments` Options:
| Field | Type | Allowed Values | Description |
| ---------------- | ------- | ------------------------------ | ---------------------------------- |
| `name` | string | e.g., `eu_de`, `swiss` | Name of the cloud region. |
| `visibility` | string | `public`, `internal`, `hidden` | Document visibility level. |
| `pdf_visibility` | string | `public`, `internal`, `hidden` | PDF visibility level |
| `pdf_enabled` | boolean | `true`, `false` | Enable PDF export |

View File

@ -1,11 +1,11 @@
--- ---
hc_location: usermanual/aom hc_location: api/aom
html_location: docs/aom/umn html_location: docs/aom/api-ref
link: /application-operations-management/umn/ link: /application-operations-management/api-ref/
rst_location: umn/source rst_location: api-ref/source
service_type: aom service_type: aom
title: User Guide title: API Reference
type: umn type: api-ref
cloud_environments: cloud_environments:
- name: eu_de - name: eu_de
visibility: public visibility: public

View File

@ -14,4 +14,4 @@ cloud_environments:
- name: swiss - name: swiss
visibility: public visibility: public
pdf_visibility: public pdf_visibility: public
pdf_enabled: true pdf_enabled: false

View File

@ -14,4 +14,4 @@ cloud_environments:
- name: swiss - name: swiss
visibility: public visibility: public
pdf_visibility: public pdf_visibility: public
pdf_enabled: true pdf_enabled: false

View File

@ -5,7 +5,7 @@ link: /object-storage-service-3rd-party/python-sdk/
rst_location: doc/python-sdk/source rst_location: doc/python-sdk/source
service_type: obs_3rd_party service_type: obs_3rd_party
title: Python SDK title: Python SDK
type: 3rd_party_sdk type: python-sdk
cloud_environments: cloud_environments:
- name: eu_de - name: eu_de
visibility: public visibility: public

View File

@ -1,13 +0,0 @@
---
hc_location: usermanual/testservice
html_location: docs/testservice/api-ref
link: /testservice/api-ref/
rst_location: api-ref/source
service_type: testservice
title: User Guide
type: api-ref
cloud_environments:
- name: swiss
visibility: public
pdf_visibility: public
pdf_enabled: true

View File

@ -1,13 +0,0 @@
---
hc_location: usermanual/testservice
html_location: docs/testservice/umn
link: /testservice/umn/
rst_location: umn/source
service_type: testservice
title: User Guide
type: umn
cloud_environments:
- name: eu_de
visibility: public
pdf_visibility: public
pdf_enabled: true

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,47 @@
# 📁 repositories/
Defines the documentation repositories associated with each service for both internal and public environments. Used for resolving documentation sources and CI sync jobs.
## 🔧 Example: `ecs.yaml`
```yaml
---
service_type: ecs
repositories:
- environment: public
repo: opentelekomcloud-docs/elastic-cloud-server
type: github
cloud_environments:
- eu_de
- environment: internal
repo: docs/elastic-cloud-server
type: gitea
cloud_environments:
- eu_de
- environment: public
repo: opentelekomcloud-docs-swiss/elastic-cloud-server
type: github
cloud_environments:
- swiss
- environment: internal
repo: docs-swiss/elastic-cloud-server
type: gitea
cloud_environments:
- swiss
```
## Parameter Options:
| Field | Type | Description |
| -------------- | ------ | ---------------------------------------------------- |
| `service_type` | string | Links this configuration to a service (`services/`). |
| `repositories` | list | List of repositories per environment and cloud. |
### `repositories` Options:
| Field | Type | Allowed Values | Description |
| -------------------- | ------ | ---------------------- | ------------------------------------- |
| `environment` | string | `public`, `internal` | Visibility level of the repository. |
| `repo` | string | Git path | Path to the Git repository. |
| `type` | string | `github`, `gitea` | Type of Git service. |
| `cloud_environments` | list | e.g., `eu_de`, `swiss` | Supported regions for the repository. |

View File

@ -5,9 +5,9 @@ repositories:
repo: opentelekomcloud-docs/glossary repo: opentelekomcloud-docs/glossary
type: github type: github
cloud_environments: cloud_environments:
- - eu_de
- environment: internal - environment: internal
repo: docs/glossary repo: docs/glossary
type: gitea type: gitea
cloud_environments: cloud_environments:
- - eu_de

View File

@ -1,13 +0,0 @@
---
service_type: testservice
repositories:
- environment: public
repo: opentelekomcloud-docs/testservice
type: github
cloud_environments:
- eu_de
- environment: internal
repo: docs/testservice
type: gitea
cloud_environments:
- eu_de

View File

@ -0,0 +1,18 @@
# 📁 service_categories/
Contains the list of service category definitions. These categories help group services (e.g., "Application", "Database").
## 🔧 Example: `compute.yaml`
```yaml
---
name: compute
title: Computing
```
## Parameter Reference
| Field | Type | Description |
| ------- | ------ | ------------------------------------- |
| `name` | string | Internal identifier for the category. |
| `title` | string | Display name used in UIs. |

View File

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

View File

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

View File

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

View File

@ -0,0 +1,48 @@
# 📁 services/
This folder contains metadata files that describe individual cloud services. Each file defines a single service and its configuration across environments.
## 🔧 Example: `ecs.yaml`
```yaml
---
service_category: compute
service_title: Elastic Cloud Server
service_type: ecs
service_uri: elastic-cloud-server
teams:
- name: docs-compute-rw
permission: write
cloud_environments:
- name: eu_de
visibility: public
- name: swiss
visibility: public
is_global: false
```
## Parameter Reference
| Parameter | Type | Description |
| -------------------- | ------- | --------------------------------------------------------------------- |
| `is_global` | boolean | Indicates whether the service is available globally (`true`/`false`). |
| `service_category` | string | Category reference, defined in `service_categories/`. |
| `service_title` | string | Display name of the service. |
| `service_type` | string | Unique identifier used across all metadata. |
| `service_uri` | string | URI component used in documentation links. |
| `cloud_environments` | list | List of cloud regions and their visibility settings. |
| `teams` | list | Contributor teams with write or read access. |
### `cloud_environments` Options:
| Field | Type | Allowed Values | Description |
| ------------ | ------ | ------------------------------ | ----------------------------------- |
| `name` | string | e.g., `eu_de`, `swiss` | Name of the cloud region. |
| `visibility` | string | `public`, `internal`, `hidden` | Controls visibility of the service. |
### `teams` Options:
| Field | Type | Allowed Values | Description |
| ------------ | ------ | --------------- | ---------------------------------------- |
| `name` | string | team identifier | Name of the team (e.g., `docs-compute-rw`). |
| `permission` | string | `read`, `write` | Access level to the metadata. |

View File

@ -11,4 +11,3 @@ cloud_environments:
- name: eu_de - name: eu_de
visibility: public visibility: public
is_global: false is_global: false
is_global: false

View File

@ -8,5 +8,5 @@ teams:
permission: write permission: write
cloud_environments: cloud_environments:
- name: eu_de - name: eu_de
visibility: internal visibility: hidden
is_global: false is_global: false

View File

@ -1,14 +0,0 @@
---
environment: public
is_global: false
service_category: security-services
service_title: Test Service
service_type: testservice
service_uri: testservice
cloud_environments:
- name: eu_de
visibility: internal
teams:
- name: docs-security-services-rw
permission: write
is_global: false

View File

@ -13,7 +13,6 @@
import copy import copy
import warnings import warnings
import json
import otc_metadata.data import otc_metadata.data
@ -76,7 +75,7 @@ class Services(object):
def all_docs(self): def all_docs(self):
"Service Docs data listing." "Service Docs data listing."
return copy.deepcopy(self._service_data["documents"]) return copy.deepcopy(self._service_data["documents"])
@property @property
def all_repositories(self): def all_repositories(self):
"Service Repositories data listing." "Service Repositories data listing."
@ -104,6 +103,11 @@ class Services(object):
for srv in self.all_services: for srv in self.all_services:
if environment and cloud_environment: if environment and cloud_environment:
cloud_environment_check = False cloud_environment_check = False
if srv["is_global"] is True:
if srv["environment"] == environment:
cloud_environment_check = True
else:
continue
if srv["is_global"] is not True: if srv["is_global"] is not True:
for srv_cloud_environment in srv["cloud_environments"]: for srv_cloud_environment in srv["cloud_environments"]:
if srv_cloud_environment["name"] == cloud_environment: if srv_cloud_environment["name"] == cloud_environment:
@ -151,7 +155,7 @@ class Services(object):
continue continue
for repositories in self.all_repositories: for repositories in self.all_repositories:
if repositories["service_type"] == service["service_type"]: if repositories["service_type"] == service["service_type"]:
res["repositories"] = repositories["repositories"] res[cat]["repositories"] = repositories["repositories"]
res[cat].setdefault("docs", []) res[cat].setdefault("docs", [])
res[cat]["docs"].append(res_doc) res[cat]["docs"].append(res_doc)
return res return res
@ -283,7 +287,7 @@ class Services(object):
if not service: if not service:
warnings.warn("No Service defition of type %s" % (cat)) warnings.warn("No Service defition of type %s" % (cat))
continue continue
for repositories in self.all_repositories: for repositories in self.all_repositories:
if repositories["service_type"] == service["service_type"]: if repositories["service_type"] == service["service_type"]:
res_doc = copy.deepcopy(doc) res_doc = copy.deepcopy(doc)
@ -386,7 +390,7 @@ class Services(object):
break break
break break
return res return res
def get_service_with_repo_by_service_type(self, service_type): def get_service_with_repo_by_service_type(self, service_type):
"""Retrieve service with repos by service_type """Retrieve service with repos by service_type
@ -417,7 +421,7 @@ class Services(object):
res[i]["repositories"] = repositories["repositories"] res[i]["repositories"] = repositories["repositories"]
break break
return res return res
def all_services_by_categories(self, cloud_environment, environments): def all_services_by_categories(self, cloud_environment, environments):
"""Retrieve all services sorted by categories """Retrieve all services sorted by categories
""" """
@ -440,7 +444,7 @@ class Services(object):
for i, category in enumerate(res): for i, category in enumerate(res):
if category["name"] == srv["service_category"]: if category["name"] == srv["service_category"]:
res[i]["services"].append(srv) res[i]["services"].append(srv)
# Sort services # Sort services
for category in res: for category in res:
category["services"].sort(key=lambda x: x.get("service_title", "").lower()) category["services"].sort(key=lambda x: x.get("service_title", "").lower())
@ -448,4 +452,4 @@ class Services(object):
# Sort categories # Sort categories
res.sort(key=lambda x: x.get("name", "").lower()) res.sort(key=lambda x: x.get("name", "").lower())
return res return res

View File

@ -11,10 +11,6 @@ reno>=3.1.0 # Apache-2.0
otc-sphinx-directives>=0.1.0 otc-sphinx-directives>=0.1.0
sphinx-minify>=0.0.1 # Apache-2.0 sphinx-minify>=0.0.1 # Apache-2.0
{% if otcdocs_cloud_environment == 'eu_de' %} git+https://gitea.eco.tsi-dev.otc-service.com/infra/otc-metadata-rework.git#egg=otc_metadata
git+https://gitea.eco.tsi-dev.otc-service.com/infra/otc-metadata.git#egg=otc_metadata
{% elif otcdocs_cloud_environment == 'swiss' %}
git+https://gitea.eco.tsi-dev.otc-service.com/infra/otc-metadata-swiss.git#egg=otc_metadata
{% endif %}
setuptools setuptools
gitpython gitpython

View File

@ -28,7 +28,7 @@ commands = {posargs}
[testenv:docs] [testenv:docs]
deps = deps =
-r{toxinidir}/doc/requirements.txt -r{toxinidir}/doc/requirements.txt
-c https://raw.githubusercontent.com/opentelekomcloud-docs/docs-constraints/main/constraints.txt -c https://raw.githubusercontent.com/opentelekomcloud-docs/docs-constraints/main/constraints/{{otcdocs_cloud_environment}}/{{target_environment}}/constraints.txt
allowlist_externals = allowlist_externals =
mkdir mkdir
cp cp

View File

@ -170,7 +170,7 @@ def process_repositories(args, service):
if target_repo.get("type") != "github": if target_repo.get("type") != "github":
context["git_type"] = target_repo["type"] context["git_type"] = target_repo["type"]
if (args.target_environment == "public" if (args.target_environment == "public"
and args.cloud_environment == "swiss"): and args.cloud_environment == "swiss"):
context["html_options"] = dict( context["html_options"] = dict(
logo_url="https://docs.sc.otc.t-systems.com", logo_url="https://docs.sc.otc.t-systems.com",
) )
@ -183,7 +183,7 @@ def process_repositories(args, service):
context["otcdocs_search_environment"] = "hc_de" context["otcdocs_search_environment"] = "hc_de"
context["otcdocs_search_index"] = "search_index_de" context["otcdocs_search_index"] = "search_index_de"
elif (args.target_environment == "internal" elif (args.target_environment == "internal"
and args.cloud_environment == "swiss"): and args.cloud_environment == "swiss"):
context["html_options"] = dict( context["html_options"] = dict(
disable_search=True, disable_search=True,
site_name="Internal Documentation Portal", site_name="Internal Documentation Portal",
@ -348,11 +348,11 @@ def process_repositories(args, service):
if cloud_environment["name"] == args.cloud_environment: if cloud_environment["name"] == args.cloud_environment:
if doc["type"] == "dev": if doc["type"] == "dev":
doc["type"] = "dev-guide" doc["type"] = "dev-guide"
if cloud_environment["name"] == "swiss":
context["template"] = "helpcenter-swiss-base-jobs"
elif cloud_environment["name"] == "eu_de":
context["template"] = "helpcenter-base-jobs"
context["docs"].append(doc) context["docs"].append(doc)
if args.cloud_environment == "swiss":
context["template"] = "helpcenter-swiss-base-jobs"
elif args.cloud_environment == "eu_de":
context["template"] = "helpcenter-base-jobs"
context["service_type"] = service['service_type'] context["service_type"] = service['service_type']
zuul_yaml_content = zuul_yaml_template.render(**context) zuul_yaml_content = zuul_yaml_template.render(**context)

View File

@ -24,7 +24,7 @@ def main():
data = otc_metadata.services.Services() data = otc_metadata.services.Services()
data._sort_data() data._sort_data()
docs = data.docs_html_by_category(environment="internal",cloud_environment=args.cloud_environment) docs = data.docs_html_by_category(environment="internal", cloud_environment=args.cloud_environment)
# Filter out documents with "disable_import": True # Filter out documents with "disable_import": True
for category, services in docs['categories'].items(): for category, services in docs['categories'].items():