Bővítményfunkciók hozzáadása

A képességek határozzák meg, hogy mit tehet egy Azure fejlesztői parancssori felület (azd) bővítmény az egyéni parancsok hozzáadásától az üzembehelyezési életciklushoz való csatlakoztatásig. Ez a cikk bemutatja, hogyan adhat hozzá képességeket a Contoso Resource Tagger mintabővítményhez a Mintabővítmény létrehozása rövid útmutatóból. Ugyanezeket a mintákat bármely bővítményre alkalmazhatja.

Minden képességhez két dologra van szükség: egy bejegyzésre a capabilitiesbővítményjegyzék tömbjében, és a bővítménykód megfelelő implementációjára.

Megjegyzés:

A azd bővítmény keretrendszere általánosan elérhető. Az egyes bővítmények vagy képességek saját előzetes verziós állapotúak lehetnek. A GA-részletekért lásd: Általánosan elérhető: Azure Fejlesztői CLI (azd) bővítmény-keretrendszer.

Elérhető képességek

azd a bővítmények a következő képességeket deklarálhatják:

  • custom-commands: Új parancsokat és parancscsoportokat azd ad hozzá a bővítmény névteréhez. Például a mintabővítmény hozzáadja a(z) azd tagger show elemet. Ezzel a funkcióval elérhetővé teheti a felhasználók által közvetlenül a parancssorból futtatott feladatokat.
  • lifecycle-events: Előfizet azokra az eseményekre, amelyek azd futás közben merülnek fel, például preprovision, postprovisionvagy postdeploy. A bővítmény ezeken a pontokon egyéni logikát futtat anélkül, hogy a felhasználó közvetlenül meghívná. A mintabővítmény például ellenőrzi a szükséges címkéket az preprovision erőforrások létrehozása előtt.
  • service-target-provider: Regisztrál egy új telepítési célt, hogy azd tudja, hogyan kell csomagolni és telepíteni egy szolgáltatást egy olyan kiszolgálóra, amelyet alapértelmezetten nem támogat. A szolgáltatáscél a(z) host értékre van leképezve a következőben: azure.yaml. Hozzáadhat például egy szolgáltatót, amely üzembe helyez egy szolgáltatást egy külső platformon vagy egy belső üzemeltetési környezetben.
  • framework-service-provider: Egy nyelv vagy keretrendszer támogatását regisztrálja, így azd tudja, hogyan állíthatja vissza, állíthatja össze és csomagolhatja be a projekttípust. Ez a language található azure.yaml értéknek felel meg. Hozzáadhat például buildtámogatást egy olyan nyelvhez, amely azd alapértelmezés szerint nem ismer fel.
  • provisioning-provider: Lecseréli, hogy a azd hogyan biztosítja az infrastruktúrát a azd provision és a azd up során. A beépített Bicep vagy Terraform-folyamat helyett a bővítmény határozza meg, hogy mi történik. Integrálhat például egy másik, kódként használható infrastruktúrát vagy egyéni üzembehelyezési API-t.
  • validation-provider: Hozzájárul a azd projekten vagy környezeten futó ellenőrzési folyamat ellenőrzéséhez. Például ellenőrizheti, hogy az elnevezési konvenciók, a szükséges címkék vagy a biztonsági beállítások érvényben vannak-e az üzembe helyezés folytatása előtt.
  • mcp-server: Modellkörnyezeti protokollként (MCP) teszi elérhetővé a bővítmény funkcióit, amelyeket az AI-ügynökök, például a GitHub Copilot képesek felderíteni és meghívni. A mintabővítmény például közzétehet egy suggest_tags eszközt. További információ: McP-kiszolgáló hozzáadása bővítményhez.
  • metadata: Gazdagabb parancs- és konfigurációs azd metaadatokat biztosít a bővítmény leírásához, például részletes parancsleírásokat és konfigurációs tippeket a súgó kimenetében és az IntelliSense-ben.

Ez a cikk a két leggyakoribb képességre összpontosít: az egyéni parancsokra és az életciklus-eseményekre. A funkcióról mcp-server további információt az MCP-kiszolgáló hozzáadása bővítményhez című témakörben talál. A szolgáltató képességeivel kapcsolatos részletes információkért tekintse meg a bővítmény-keretrendszer referenciáit.

Egyéni parancsok hozzáadása

A(z) custom-commands képesség lehetővé teszi, hogy a bővítmény új parancsokat regisztráljon egy névtér alatt a(z) azd elemben. A mintabővítmény már használja ezt a képességet a azd tagger show parancshoz.

  1. Deklarálja a képességet a következőben extension.yaml: .

    capabilities:
      - custom-commands
    
  2. A parancsokat a azdext.NewExtensionRootCommand segéd használatával hozhatja létre, amely regisztrálja a szabványos azd jelzőket és a környezeti változók kezelését, így nem kell manuálisan deklarálnia őket:

    import "github.com/azure/azure-dev/cli/azd/pkg/azdext"
    
    func NewRootCommand() *cobra.Command {
        rootCmd, extCtx := azdext.NewExtensionRootCommand(azdext.ExtensionCommandOptions{
            Name:  "tagger",
            Use:   "tagger <command> [options]",
            Short: "Standardize and report Azure resource tags.",
        })
    
        rootCmd.AddCommand(newShowCommand(extCtx))
        // Add other subcommands here.
        return rootCmd
    }
    

    A segéd egy olyan értéket *ExtensionContext ad vissza, amely elérhetővé teszi a standard jelzők feloldott értékeit, például Environment és OutputFormat. Adja át a kontextust az alparancsoknak, és a szabványos jelzők újbóli deklarálása helyett olvassák ki azt a RunE kezelőkben.

Feliratkozás életciklus-eseményekre

A lifecycle-events funkció lehetővé teszi, hogy a bővítmény egyéni logikát futtasson a projekt- és szolgáltatáséletciklus-események, például preprovision vagy postdeploy. A mintakiterjesztéshez használjon egy eseményt preprovision annak ellenőrzésére, hogy a szükséges címkék be vannak-e állítva az erőforrások üzembe helyezése előtt azd .

  1. Deklarálja a képességet a következőben extension.yaml: .

    capabilities:
      - custom-commands
      - lifecycle-events
    
  2. Adjon hozzá egy parancsot listen a bővítményhez. azd meghívja ezt a parancsot az eseményekhez használt kétirányú kapcsolat létrehozásához. Az eseménykezelők regisztrálása a azdext.NewExtensionHost szerkesztő használatával:

    func newListenCommand() *cobra.Command {
        return &cobra.Command{
            Use:    "listen",
            Short:  "Starts the extension and listens for azd events.",
            Hidden: true,
            RunE: func(cmd *cobra.Command, args []string) error {
                ctx := azdext.WithAccessToken(cmd.Context())
    
                azdClient, err := azdext.NewAzdClient()
                if err != nil {
                    return fmt.Errorf("failed to create azd client: %w", err)
                }
                defer azdClient.Close()
    
                host := azdext.NewExtensionHost(azdClient).
                    WithProjectEventHandler(
                        "preprovision",
                        func(ctx context.Context, args *azdext.ProjectEventArgs) error {
                            fmt.Printf("Verifying required tags for project: %s\n", args.Project.Name)
                            // Add your tag validation logic here.
                            return nil
                        },
                    )
    
                // Run blocks until azd closes the connection.
                if err := host.Run(ctx); err != nil {
                    return fmt.Errorf("failed to run extension: %w", err)
                }
    
                return nil
            },
        }
    }
    
  3. Regisztrálja a listen parancsot a gyökérparancson:

    rootCmd.AddCommand(newListenCommand())
    

Amikor egy felhasználó lefuttatja a azd provision vagy a azd up parancsot, a azd meghívja a bővítményt, és az erőforrások kiépítése előtt meghívja a preprovision kezelőt.

Szolgáltatásesemények szűrése

A szolgáltatásesemény-kezelők támogatják az opcionális szűrést, így csak bizonyos szolgáltatástípusokat kezelhet. Az eseményt például csak Python prepackage tárolóalkalmazás-szolgáltatások esetében kezelheti:

host := azdext.NewExtensionHost(azdClient).
    WithServiceEventHandler(
        "prepackage",
        func(ctx context.Context, args *azdext.ServiceEventArgs) error {
            fmt.Printf("Packaging service: %s\n", args.Service.Name)
            return nil
        },
        &azdext.ServiceEventOptions{
            Host:     "containerapp",
            Language: "python",
        },
    )

Újraépítés és tesztelés

Miután hozzáadott egy képességet, építse újra a bővítményt, és tesztelje az új viselkedést:

  1. Ha a figyelőt használja, a módosításai automatikusan újraépülnek. Ellenkező esetben manuálisan készítse el a következőt:

    azd x build
    
  2. Tesztelje a képességet. Életciklus-események esetén futtasson egy parancsot, amely elindítja az eseményt, például azd provision.