contractnaming

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 13, 2026 License: AGPL-3.0 Imports: 2 Imported by: 0

Documentation

Overview

Package contractnaming — ЕДИНСТВЕННОЕ объявление в модуле службы того, КТО владеет пакетом контракта модуля платформы.

Почему пакет заведён

Форма записи каталога прав — `<владелец>.cloud.<модуль>.v1.<Служба>/<Метод>`. До 2026-09 владелец ВЫВОДИЛСЯ приставкой имени платформы и был у всех один: `kacho`. Вывод был верен, пока имя платформы было и именем каждой её части.

Служба управления доступом получила собственное имя продукта — Kaname (решение владельца, задача #2076), и её контракт переехал в `kaname.cloud.iam.v1`. С этого момента владелец пакета контракта и имя платформы — РАЗНЫЕ СЛОВАРИ, и приставка их больше не связывает.

Чем это было опасно (задача #2168)

Правило «владелец = kacho» стояло литералом в разборе записи каталога и в отборе полосы, за которую служба отвечает. Распознаватель, ключующийся на приставке, чужое имя НЕ ОТВЕРГАЕТ — он его НЕ ВИДИТ: все 116 записей iam выпали из привязки, семь ключей закрытой таблицы перестали производиться, а полоса пообъектной фильтрации перечислением не находилась вовсе. Проверки манифеста при этом выходили кодом 0 — молча.

Поэтому владелец объявлен здесь один раз, а не выведен в каждом месте заново.

Ведомость держится ГЕЙТОМ, а не обещанием

Запись сверяется с ДЕСКРИПТОРОМ, который генерация произвела из контракта (contractnaming_test.go): ведомость, разошедшаяся с контрактом, — находка, а не «настройка». Гейт печатает объём осмотренного и падает на пустой ведомости.

Родство с `internal/productnaming` названо, а не подразумевается

Тот же факт («iam зовётся kaname») объявлен в корневом модуле платформы — `internal/productnaming`, откуда берутся имя чарта, имя образа, приставка окружения и пространство рядов метрик. Импортировать его отсюда НЕЛЬЗЯ: он лежит под `internal/` ЧУЖОГО модуля (`github.com/PRO-Robotech/kacho`), и правило Go закрывает такой импорт by construction. Поэтому здесь стои́т СВОЁ объявление — но не второе место об одном предмете «на честном слове»: его истинность проверяется не сверкой с тем объявлением, а сверкой с КОНТРАКТОМ, который для обоих является источником.

Index

Constants

View Source
const OwnModule = "iam"

OwnModule — модуль платформы, чей код лежит в этом репозитории.

Имя МОДУЛЯ переезда не переживало и пережить не может: оно и есть каталог исходников под `services/`. Переехал ВЛАДЕЛЕЦ его пакета контракта — за ним сюда и ходят. Константа объявлена здесь, а не у каждого читателя, потому что читателей у неё три и они в разных пакетах.

Variables

This section is empty.

Functions

func ContractPackage

func ContractPackage(module string) string

ContractPackage — имя пакета контракта модуля: `<владелец>.cloud.<модуль>.v1`.

Здесь объявлена ВСЯ форма имени пакета, и второй раз она не объявляется: разбор записи каталога спрашивает у этого пакета части, а не собирает форму заново (см. Split).

func KnownOwners

func KnownOwners() []string

KnownOwners — владельцы, объявленные деревом, в детерминированном порядке. Заведено для переписей: перечень, зависящий от обхода карты, читался бы по-разному от прогона к прогону.

func OwnContractPackage

func OwnContractPackage() string

OwnContractPackage — пакет контракта ЭТОЙ службы: `kaname.cloud.iam.v1`.

func Owner

func Owner(module string) string

Owner — владелец пакета контракта названного модуля.

func OwnsModule

func OwnsModule(owner, module string) bool

OwnsModule — объявлен ли названный владелец владельцем пакета этого модуля.

Отвечает на вопрос «эта запись наша?» одним сравнением с ведомостью, поэтому приставка, которую не объявлял никто, отвергается ТАК ЖЕ, как приставка, объявленная за другим модулем: и то и другое — запись, за которую в дереве никто не отвечает.

func PlatformOwner

func PlatformOwner() string

PlatformOwner — владелец контрактов платформы.

func RenamedModules

func RenamedModules() map[string]string

RenamedModules — ведомость для гейта: он обязан убедиться, что каждая её запись сходится с дескриптором контракта. Возвращается копия — ведомость правится решением, а не вызывающим.

func Split

func Split(protoPackage string) (owner, module string, ok bool)

Split разбирает имя пакета контракта на владельца и модуль.

Второй возврат — имеет ли имя ФОРМУ пакета контракта модуля. Ложь означает «это не пакет модуля» (платформенная служба без сегмента версии, посторонняя строка), а не «модуля нет»: существование модуля решает вызывающий.

Владелец здесь НЕ СВЕРЯЕТСЯ с ведомостью намеренно: форма и принадлежность — разные вопросы, и слив их в один отдал бы вызывающему одно «нет» на две разные находки. Принадлежность спрашивают отдельно — OwnsModule.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL