Сценарии администрирования#

Администратором является член команды с ролью Пользователь, который выполняет дополнительные административные задачи. Отдельной роли для администратора в продукте не предусмотрено.

Конфигурирование состава документации на сайте#

Конфигурация сайта хранится в репозитории content-configuration и имеет следующую структуру:

site-config/
  product-registry/
    products.json
    components.json
  <PRODUCT-CODE-1>/ # Вариант с отдельным файлом для каждой версии продукта
    <VERSION-11>
      components.ini
    <VERSION-12>
      components.ini
    ...
    <VERSION-1N>
      components.ini
  <PRODUCT-CODE-N>/ # Вариант с единым файлом для всех версий продукта
    components.ini
  ...
  doc-config.ini

Пример структуры каталогов в репозитории конфигурации сайта:

content-configuration/
├── BD/                        // каталог с названием кода продукта
│   ├── 5.11.2/                // каталог с названием версии продукта
│   │   └── components.ini     // файл конфигурации продукта
│   ├── 5.15.0/
│   │   └── components.ini
│   └── ...
├── SEI/
│   ├── 3.7/
│   │   └── components.ini
│   └── ...
└── ...

По умолчанию сайт документации имеет несколько пространств, которые определяют стадию (stage) готовности документации:

  • draft — собранная документация изначально попадает в это пространство. Данная сборка позволяет получить отчет сборки и информацию об исходном репозитории документации;

  • approved — перевод в пространство approved означает, что документация прошла внутреннее согласование и готова к внутренней приемке и публикации;

  • release — перевод в пространство release означает доступность документации для пользователей.

Каждый продукт может быть самостоятельным или включать в себя компоненты. Для перевода документации в нужное пространство, необходимо в файле components.ini продукта поставить соответствующий тег:

Стадия (stage)

Тег

draft

отсутствует

approved

approved

release

release

Пример components.ini для продукта с кодом PIF:

[PIF 1.0.0 release] # Раздел продукта в формате: код версия теги
common # Общая документация на продукт
PINF: 1.0.0 # Компонент, который есть в продукте (<COMPONENT-CODE>: <COMPONENT-VERSION>)
GDOC: 1.0.0 # Каждый компонент и его версия указываются на новой строке

[PIF 1.1.0 approved]
common
PINF: 1.1.0
GDOC: 1.1.0

[PIF 1.2.0]
common
PINF: 1.2.0
GDOC: 1.2.0

Установка тега release на головной элемент продукта (например, [PIF 1.0.0 release]) означает, что все элементы этой секции (общая документация и компоненты) должны быть доступны пользователям.

Важно

Головным элементом может быть только продукт - его трехбуквенный код и версия.

Установка тега release на отдельные элементы внутри головного (например, PINF: 1.0.0 release) означает, что только помеченные тегом release комплекты документации будут доступны пользователям.

Это действие может выполнять только релизный менеджер, контролирующий публикацию (список таких сотрудников указан в поле release-managers в doc-config.ini). Коммит с добавлением тега release, сделанный не релизным менеджером, будет отклонен автоматически.

Описание doc-config.ini:

[env]                                                     # Правила сборки
stage: draft, approved, release                           # Пространство для публикации. Доступны: draft - документация в разработке, approved - документация прошла внутренние согласования, release - готовая документация для пользователей
package: <PACKAGE-1>, <PACKAGE-2>, ..., <PACKAGE-N>       # Состав комплекта документации
audience: <AUDIENCE-1>, <AUDIENCE-2>, ..., <AUDIENCE-N>   # Целевая аудитория

# Пользователи, которые могут устанавливать тег release для публикации контента
release-managers:       user1,
                        user2

# Правила группировки документов
# [Имя группы документов]
[Общие документы]
# имя-директории-с-разделом-документации-в-репозитории: отображаемое-на-сайте-название-раздела
about:                  Описание
architecture:           Детальная архитектура
pmi:                    Программа и методика испытаний
release-notes:          Примечания к релизу
sizing:                 Методика расчета сайзинга
deployment-diagrams:    Диаграммы развертывания

[Руководства]
installation-guide:     Руководство по установке
administration-guide:   Руководство по системному администрированию
developer-guide:        Руководство прикладного разработчика
operators-guide:        Руководство оператора
security-guide:         Руководство по безопасности

[*]
*:      {title}

[Дополнительная документация]
*:      {title}

[Справочники API]
apis:   {title}

Ведение правил валидации контента#

Правила валидации документации хранятся в репозитории content-validation.

Структура правил в репозитории content-validation имеет следующую структуру:

.
└── content-validation/
    ├── rules/
    │   ├── software.yaml
    ├── styles/
    │   ├── <STYLE-1>/
    │   │   ├── <RULE-11>.yaml
    │   │   ├── <RULE-12>.yaml
    │   │   ├── ...
    │   │   └── <RULE-1N>.yaml
    │   ├── <STYLE-2>/
    │   │   ├── <RULE-21>.yaml
    │   │   ├── <RULE-22>.yaml
    │   │   ├── ...
    │   │   └── <RULE-2N>.yaml
    │   ├── ...
    │   ├── <STYLE-N>/
    │   │   ├── <RULE-N1>.yaml
    │   │   ├── <RULE-N2>.yaml
    │   │   ├── ...
    │   │   └── <RULE-NN>.yaml
    │   └── Vocab/
    │       ├── <VOCAB-1>/
    │       │   ├── accept.txt
    │       │   └── reject.txt
    │       ├── <VOCAB-2>/
    │       │   ├── accept.txt
    │       │   └── reject.txt
    │       ├── ...
    │       └── <VOCAB-N>/
    │           ├── accept.txt
    │           └── reject.txt
    └── .vale.ini

Базовые правила#

Данные правила проверяются при сборке документации (workflow build-doc), при запуске базовой валидации контента (workflow validate-doc) и валидации изображений (workflow validate-doc-images). К базовым проверкам могут относиться проверки правил внутреннего глоссария, стайлгайда, проверки на наличие запрещенной информации и т.д.

Ведение файла конфигурации .vale.ini и создание правил валидации описано в официальной документации Vale:

Правила проверки системных требований#

В GetDocs доступна проверка корректности указания системных требований в документации.

Одна из проверок проверяет, что упомянутое в документации программное обеспечение не является запрещенным и что версия этого ПО рекомендована к использованию. Список запрещенного ПО и рекомендуемых версий хранится в файле software.yaml в репозитории content-validation. Ниже приведен пример данного файла:

# в блок можно добавить слова, которые ошибочно распознаются валидатором, как ПО
ignore:
  - 'CLOSED|ERROR|FAIL|URL'
  - 'List|Map|String|Session|Data|Context|Value|Service'

# в блоке перечисляются рекомендуемые версии для разрешенного ПО в формате 'SoftwareName: version1, version2'
allow:
  - Kubernetes: 1.0, 1.21, 1.24
  - Prometheus: 2.21.0, 2.31
  - РЕД ОС: 7.3

# в блоке перечисляется нерекомендуемое ПО
prohibit:
  - (Atlassian )?BitBucket
  - (Red ?Hat )?Enterprise Linux

Значения в каждом блоке поддерживают регулярные выражения.

См. также

Детальная информация о механизме работы данного валидатора приведена в разделе Валидация системных требований Руководства пользователя.

Ведение продуктового учета#

Продуктовый учет - это набор продуктов и их компонентов, для которых готовится документация. Каждый продукт может быть самостоятельным или включать в себя компоненты.

Сайт с документацией формируется автоматически на основе данных из продуктового учета по модели: Категория > Продукты > Компоненты.

Продуктовый учет располагается в папке product-registry/.

Важно

Для корректной работы GetDocs с продуктовым учетом необходимо, чтобы продукты имели трехбуквенные коды-идентификаторы (поле code).

Продукты в учете регистрируются по кодам и ведутся в файле products.json:

{
  "entities": [
    {
      "code": "XYZ",
      "name": "Имя продукта.",
      "longDescription": "Длинное описание продукта.",
      "shortDescription": "Краткое описание продукта.",
      "category": {
        "name": "Имя категории, в которую входит продукт.",
        "description": "Описание категории, в которую входит продукт."
      },
      "type": {
        "name": "Зарезервировано для будущего использования."
      }
    }
  ]
}

Компоненты в учете регистрируются по кодам и ведутся в файле components.json:

{
  "entities": [
    {
      "code": "XYZA",
      "name": "Имя компонента.",
      "longDescription": "Длинное описание компонента.",
      "shortDescription": "Краткое описание компонента.",
      "category": {
        "name": "Имя категории продуктов, в которую входит компонент."
        "description": "Описание категории продуктов, в которую входит компонент."
      },
      "type": {
        "name": "Зарезервировано для будущего использования."
      }
    }
  ]
}

API token для Argo Workflows#

Создание токена#

  1. Создайте следующий скрипт create_argowf_token.sh, который создает API token для пользователя:

    #!/bin/bash
    
    if [ -z "$1" ]; then
        echo "ERROR: Please specify service account name."
        exit 1
    fi
    SA_NAME="$1"
    if [ -z "$2" ]; then
        echo "INFO: Privileges set to getdocs-prod namespace"
        NAMESPACE='getdocs-prod'
    else
      NAMESPACE="$2"
      echo "INFO: Privileges set to $NAMESPACE namespace"
    fi
    kubectl -n argo-wf create sa "$SA_NAME"
    kubectl -n $NAMESPACE create rolebinding "$SA_NAME" --role=argo-workflows-rx --serviceaccount=argo-wf:"$SA_NAME"
    kubectl -n argo-wf apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: $SA_NAME.service-account-token
      annotations:
        kubernetes.io/service-account.name: $SA_NAME
    type: kubernetes.io/service-account-token
    EOF
    
    ARGO_TOKEN="Bearer $(kubectl -n argo-wf get secret "$SA_NAME.service-account-token" -o=jsonpath='{.data.token}' | base64 --decode)"
    echo
    echo "Token for '$SA_NAME': $ARGO_TOKEN"
    
  2. Выполните данный скрипт с указанием имени пользователя <ACCOUNT_NAME>, для которого создается token:

    create_argowf_token.sh <ACCOUNT_NAME> <NAMESPACE>
    

    Параметр <NAMESPACE> является опциональным. Если он не передан, token будет создан для стандартного пространства имен getdocs-prod.

Удаление токена#

  1. Создайте следующий скрипт delete_argowf_token.sh, который удаляет пользовательский API token:

    #!/bin/bash
    
    if [ -z "$1" ]; then
        echo "ERROR: Please specify service account name."
        exit 1
    fi
    SA_NAME="$1"
    if [ -z "$2" ]; then
        echo "INFO: Privileges set to getdocs-prod namespace"
        NAMESPACE='getdocs-prod'
    else
      NAMESPACE="$2"
    fi
    
    kubectl -n argo-wf delete sa "$SA_NAME"
    kubectl -n $NAMESPACE delete rolebinding "$SA_NAME"
    kubectl -n argo-wf delete secret $SA_NAME.service-account-token
    
    echo
    echo "Deleted token for '$SA_NAME'"
    
  2. Выполните данный скрипт с указанием имени пользователя <ACCOUNT_NAME>, чей token необходимо удалить:

    delete_argowf_token.sh <SERVICE_ACCOUNT_NAME> <NAMESPACE>
    

    Параметр <NAMESPACE> является опциональным. Если он не передан, token будет удален для стандартного пространства имен getdocs-prod.