Перейти к содержанию

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

Конфигурация фиксирует намерения и владение. Аутентификация остаётся обязанностью адаптера провайдера; загрузка конфигурации не читает файл с учётными данными, не извлекает секреты из окружения и не обращается к облачному аккаунту.

Явная идентичность

Базовая конфигурация, например intent.toml, использует версию схемы 1:

schema_version = 1
profile = "secure-gateway"

[identity]
project = "example-project"
stack = "example-stack"
provider = "yandex-cloud"
scope_id = "example-folder"
owner_id = "example-owner"

[[resources]]
logical_id = "gateway"
kind = "instance"
name = "example-gateway"

Это синтетические идентификаторы. Перед вызовами провайдера подставьте выбранную папку и идентичность владельца. Основные имена начинаются с буквы и используют строчные буквы, цифры и дефисы; непрозрачный идентификатор области проверяется отдельно. Неизвестные поля, повторяющиеся логические ID и неподдерживаемые версии схемы приводят к отказу.

Проверьте локально через API конфигурации:

from flayer.core.config import LoadConfig

config = LoadConfig("intent.toml")
print(config.identity.project, config.profile)

Эта базовая модель описывает идентификаторы ресурсов. План развёртывания жизненного цикла добавляет явные зависимости и параметры провайдера; для него используется отдельный загрузчик. Профиль шлюза компилирует настройки безопасности в этот план. Путь второй волны описан в первом развёртывании.

Существующая аутентификация Yandex CLI

Установите официальный CLI Yandex Cloud и настройте именованный аккаунт и профиль по инструкции поставщика. Выберите нужную папку самостоятельно. F-Layer не создаёт профили, не экспортирует токены доступа и не использует папку профиля по умолчанию.

yc --version

Создание адаптера выполняется локально; операции чтения обращаются к выбранному аккаунту:

from flayer.providers.contracts import ResourceKind
from flayer.providers.yandex import YandexCloudProvider, YandexCloudSettings

provider = YandexCloudProvider(
    YandexCloudSettings(folder_id="example-folder", profile="example")
)
status = provider.CheckAuthentication()

if status.authenticated:
    instances = provider.ListResources(ResourceKind.INSTANCE)
    print(len(instances))

Используйте реальные значения области и профиля авторизованного аккаунта. Каждая облачная команда передаёт явные папку и профиль; полученные идентификаторы области должны совпадать. Успешная аутентификация чтения не доказывает права на изменения или доступ к каждому виду ресурсов. Адаптер не включает исходные stdout/stderr поставщика в публичные ошибки. Контракт провайдера и справочник API описывают точные типы результатов.

Учётные данные и долговременное состояние

Необязательные записи учётных данных содержат ссылки, а не значения:

[[credentials]]
name = "provider-auth"
source = "env"
reference = "EXAMPLE_PROVIDER_AUTH"

Базовый загрузчик сохраняет ссылку, не разрешая её. Текущий адаптер Yandex использует существующую аутентификацию yc; такая запись не настраивает адаптер и не добавляет токен в команды.

Рабочее состояние хранит минимальные внешние ID и точную идентичность принадлежащего владельцу стека. Держите его в каталоге под контролем оператора и не коммитьте. Использование состояния другого владельца или изменение идентичности для присвоения произвольных ресурсов отклоняется.