Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las extensiones se comunican con la CLI de Azure Developer (azd) a través de una conexión gRPC mediante el azdext SDK. El SDK permite que la extensión lea los datos del proyecto y del entorno, pida al usuario y llame a los azd servicios. En este artículo se muestra cómo usar el SDK para ampliar la extensión de ejemplo Contoso Resource Tagger de la guía de inicio rápido Compilación de una extensión de ejemplo. Puede aplicar los mismos patrones a cualquier extensión.
Note
azd las extensiones están actualmente en versión beta.
Funcionamiento de la comunicación
Cuando azd ejecuta la extensión, inicia un servidor gRPC y pasa dos valores a la extensión a través de variables de entorno:
-
AZD_SERVER: la dirección del servidor gRPC, comolocalhost:12345. -
AZD_ACCESS_TOKEN: Un token de acceso JWT que autoriza las solicitudes de tu extensión.
La extensión usa el SDK azdext para conectarse a este servidor y llamar a los servicios azd. El token limita cada solicitud a las funcionalidades que la extensión declara en su manifiesto.
Creación de un cliente azd
La azdext.NewAzdClient función crea un cliente al que se conecta azd mediante las variables de entorno que azd proporciona. Envuelva el contexto entrante con azdext.WithAccessToken para que el SDK adjunte el token de acceso a cada solicitud:
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
}
Leer datos de proyecto y entorno
Utilice los servicios de Proyecto y Entorno para leer información sobre el azd proyecto y el entorno actuales. Para la extensión de ejemplo, lea el proyecto para poder inspeccionar sus recursos y etiquetas:
// 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)
Leer y escribir valores de entorno
El servicio Environment lee y escribe valores de entorno. Estos valores persisten en el .azure directorio del proyecto. Para la extensión de ejemplo, almacene un valor de etiqueta necesario que proporcione el usuario:
// 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)
}
Preguntar al usuario
El servicio Prompt proporciona avisos coherentes e interactivos que coinciden con la experiencia del azd usuario. Para la extensión de ejemplo, solicite al usuario un valor de etiqueta que falta:
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
El servicio Prompt también admite avisos de selección, avisos de confirmación y avisos de selección múltiple. Utiliza estas opciones en lugar de escribir tu propia gestión de entradas para que tu extensión coincida con el aspecto y el comportamiento de azd.
Servicios disponibles
El azdext SDK expone los siguientes servicios gRPC a través del cliente:
| Service | Description |
|---|---|
| Proyecto | Lee la configuración actual del proyecto. |
| Medio ambiente | Lee y escribe entornos y valores de entorno. |
| UserConfig | Lee y escribe la configuración de nivel de usuario. |
| Implementación | Lee el contexto de implementación y los resultados. |
| Cuenta | Lee información de la suscripción de Azure y de la ubicación. |
| Prompt | Muestra avisos interactivos. |
| Modelo de IA | Interactúa con los modelos de IA configurados. |
| Evento | Se suscribe a eventos de ciclo de vida. |
| Redactar | Lee y modifica el conjunto compuesto de servicios y recursos. |
| Flujo de trabajo | Ejecuta azd flujos de trabajo. |
| Telemetry | Notifica el uso de la extensión mediante azdClient.Telemetry().ReportUsage. |
Para obtener la lista completa de servicios y definiciones de mensajes, consulte los archivos proto en el repositorio azure-dev y la referencia del marco de extensión.
Notificar errores
Devuelve los errores de tus manejadores de comandos para que azd pueda mostrarlos de forma coherente y establecer el código de salida correcto. Envuelve los errores con contexto usando fmt.Errorf y el verbo %w para que quienes llamen puedan inspeccionar el error subyacente:
if err != nil {
return fmt.Errorf("failed to apply tags: %w", err)
}