Конфигурация и доступ к провайдеру¶
Конфигурация фиксирует намерения и владение. Аутентификация остаётся обязанностью адаптера провайдера; загрузка конфигурации не читает файл с учётными данными, не извлекает секреты из окружения и не обращается к облачному аккаунту.
Явная идентичность¶
Базовая конфигурация, например 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 и точную идентичность принадлежащего владельцу стека. Держите его в каталоге под контролем оператора и не коммитьте. Использование состояния другого владельца или изменение идентичности для присвоения произвольных ресурсов отклоняется.