Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Расширения взаимодействуют с Azure Developer CLI (azd) через подключение gRPC с помощью пакета SDK azdext. SDK позволяет вашему расширению читать данные проекта и среды, запрашивать ввод у пользователя и вызывать службы azd. В этой статье показано, как использовать пакет SDK для улучшения примера расширения Contoso Resource Tagger из краткого руководства по созданию примера расширения. К любому расширению можно применить те же шаблоны.
Замечание
azd расширения в настоящее время находятся в бета-версии.
Принцип работы коммуникации
Когда azd запускает ваше расширение, он запускает сервер gRPC и передаёт вашему расширению два значения через переменные среды:
-
AZD_SERVER: адрес сервера gRPC, напримерlocalhost:12345. -
AZD_ACCESS_TOKEN: Токен доступа JWT, который авторизует запросы вашего расширения.
Ваше расширение использует SDK azdext для подключения к этому серверу и вызова служб azd. Токен ограничивает каждый запрос к возможностям, которые ваше расширение объявляет в своём manifest.
Создание клиента azd
Функция azdext.NewAzdClient создает клиент, к которому подключается azd , с помощью переменных среды, которые azd предоставляют. Оберните входящий контекст в azdext.WithAccessToken, чтобы SDK добавлял маркер доступа к каждому запросу:
import (
"context"
"fmt"
"github.com/azure/azure-dev/cli/azd/pkg/azdext"
)
func run(ctx context.Context) error {
// Attach the AZD_ACCESS_TOKEN to outgoing requests.
ctx = azdext.WithAccessToken(ctx)
azdClient, err := azdext.NewAzdClient()
if err != nil {
return fmt.Errorf("failed to create azd client: %w", err)
}
defer azdClient.Close()
// Use azdClient to call azd services.
return nil
}
Прочитать данные проекта и среды
Используйте службы проекта и среды, чтобы получить сведения о текущем azd проекте и среде. Для примера расширения ознакомьтесь с проектом, чтобы проверить его ресурсы и теги:
// Get the current project.
getProject, err := azdClient.Project().Get(ctx, &azdext.EmptyRequest{})
if err != nil {
return fmt.Errorf("failed to get project: %w", err)
}
fmt.Printf("Project name: %s\n", getProject.Project.Name)
fmt.Printf("Project path: %s\n", getProject.Project.Path)
// Get the current environment.
getEnv, err := azdClient.Environment().GetCurrent(ctx, &azdext.EmptyRequest{})
if err != nil {
return fmt.Errorf("failed to get environment: %w", err)
}
fmt.Printf("Environment name: %s\n", getEnv.Environment.Name)
Чтение и запись значений среды
Служба среды считывает и записывает значения среды. Эти значения сохраняются в .azure каталоге проекта. Для примера расширения сохраните необходимое значение тега, которое предоставляет пользователь:
// Read an environment value.
getValue, err := azdClient.Environment().GetValue(ctx, &azdext.GetEnvRequest{
EnvName: getEnv.Environment.Name,
Key: "CONTOSO_COST_CENTER",
})
if err == nil {
fmt.Printf("Cost center: %s\n", getValue.Value)
}
// Write an environment value.
_, err = azdClient.Environment().SetValue(ctx, &azdext.SetEnvRequest{
EnvName: getEnv.Environment.Name,
Key: "CONTOSO_COST_CENTER",
Value: "CC-1001",
})
if err != nil {
return fmt.Errorf("failed to set environment value: %w", err)
}
Запрос пользователя
Служба подсказок предоставляет единообразные интерактивные подсказки, соответствующие azd пользовательскому опыту. Для примера расширения предложите пользователю указать отсутствующее значение тега:
promptResponse, err := azdClient.Prompt().Prompt(ctx, &azdext.PromptRequest{
Options: &azdext.PromptOptions{
Message: "Enter the cost center tag value",
},
})
if err != nil {
return fmt.Errorf("failed to prompt for value: %w", err)
}
costCenter := promptResponse.Value
Служба "Запрос" также поддерживает запросы выбора, запросы подтверждения и многопользовательские запросы. Используйте эти возможности вместо создания собственной обработки ввода, чтобы ваше расширение соответствовало внешнему виду и поведению azd.
Доступные службы
Пакет azdext SDK предоставляет следующие службы gRPC через клиент:
| Service | Description |
|---|---|
| Проект | Считывает текущую конфигурацию проекта. |
| Окружающая среда | Считывает и записывает окружения и значения окружения. |
| UserConfig | Считывает и записывает конфигурацию уровня пользователя. |
| Развертывание | Считывает контекст развертывания и результаты. |
| Учетная запись | Считывает сведения о подписке Azure и местоположении. |
| Prompt | Отображает интерактивные подсказки. |
| Модель ИИ | Взаимодействует с настроенными моделями ИИ. |
| Событие | Подписывается на события жизненного цикла. |
| Рабочий процесс | Выполняет azd рабочие процессы. |
| Телеметрия | Сообщает об использовании расширения с помощью azdClient.Telemetry().ReportUsage. |
Полный список служб и определений сообщений см. в файлах proto в репозитории azure-dev и в справочнике по платформе расширений.
Сообщить об ошибках
Возвращайте ошибки из обработчиков команд, чтобы azd мог единообразно отображать их и устанавливать правильный код завершения. Оборачивайте ошибки контекстом с помощью fmt.Errorf и глагола %w, чтобы вызывающие функции могли проверить исходную ошибку:
if err != nil {
return fmt.Errorf("failed to apply tags: %w", err)
}