Sobes.tech
Senior

Hogyan fejlesszünk saját szolgáltatót a Terraformban?

sobes.tech MI

Válasz az MI-től

A saját Terraform-szolgáltató fejlesztéséhez a következőkre van szükség:

  1. Válasszon nyelvet: Go - a fő nyelv a Terraform-szolgáltatókhoz.

  2. Telepítse az SDK-t: Go és Terraform Plugin SDK.

  3. Projektstruktúra létrehozása:

    # Alapfájlok létrehozása
    mkdir terraform-provider-myprovider
    cd terraform-provider-myprovider
    go mod init github.com/myorg/terraform-provider-myprovider
    go get github.com/hashicorp/terraform-plugin-sdk/v2
    
  4. Szolgáltató megvalósítása: hozzon létre provider.go fájlt, és határozza meg a Provider struktúrát, beleértve:

    • Schema: a szolgáltató konfigurációs paramétereinek meghatározása.
    • ResourcesMap: erőforrásnevek és azok megvalósításainak leképezése.
    • DataSourcesMap: adatforrásnevek és azok megvalósításainak leképezése.
    package main
    
    import (
    	"context"
    
    	"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
    	"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
    )
    
    func Provider() *schema.Provider {
    	return &schema.Provider{
    		Schema: map[string]*schema.Schema{
    			"endpoint": { // Példa a szolgáltató konfigurációs paraméterre
    				Type:        schema.TypeString,
    				Optional:    true,
    				DefaultFunc: schema.EnvDefaultFunc("MYPROVIDER_ENDPOINT", nil),
    			},
    		},
    		ResourcesMap: map[string]*schema.Resource{
    			"myprovider_resource": resourceMyProviderResource(), // Erőforrás megvalósítása
    		},
    		DataSourcesMap: map[string]*schema.Resource{
    			// Adatforrások megvalósítása
    		},
    		ConfigureContextFunc: providerConfigure, // Konfigurációs függvény
    	}
    }
    
    func providerConfigure(ctx context.Context, d *schema.ResourceData) (interface{}, diag.Diagnostics) {
    	// A szolgáltató kliensének konfigurálási logikája
    	return nil, nil
    }
    
    func main() {
    	// Belépési pont
    }
    
  5. Erőforrások és adatforrások megvalósítása: hozzon létre külön fájlokat minden erőforráshoz és adatforráshoz (pl. resource_myprovider_resource.go). Minden erőforrásnak meg kell valósítania a következő függvényeket:

    • Schema: az erőforrás paramétereinek meghatározása.
    • Create: az erőforrás létrehozása.
    • Read: az erőforrás állapotának olvasása.
    • Update: az erőforrás frissítése.
    • Delete: az erőforrás törlése.
    • Exists: az erőforrás létezésének ellenőrzése (opcionális).
    package main
    
    import (
        "context"
    
        "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
        "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
    )
    
    func resourceMyProviderResource() *schema.Resource {
        return &schema.Resource{
            CreateContext: resourceMyProviderResourceCreate,
            ReadContext:   resourceMyProviderResourceRead,
            UpdateContext: resourceMyProviderResourceUpdate,
            DeleteContext: resourceMyProviderResourceDelete,
            Schema: map[string]*schema.Schema{
                "name": { // Példa a paraméterre
                    Type:     schema.TypeString,
                    Required: true,
                },
            },
        }
    }
    
    func resourceMyProviderResourceCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
        // Az erőforrás létrehozásának logikája
        return nil
    }
    // ... Implementálja a Read, Update, Delete függvényeket
    
  6. Fordítás: fordítsa le a szolgáltató futtatható fájlját.

  7. Telepítés: helyezze a fordított bináris fájlt a Terraform pluginok könyvtárába (~/.terraform.d/plugins/ vagy más hely, amit a Terraform konfigurációban megadott).

  8. Tesztelés: írjon Acceptance Tests-t a szolgáltató helyes működésének ellenőrzéséhez.

További lépések lehetnek:

  • A szolgáltató dokumentálása.
  • A szolgáltató közzététele a Terraform Registry-ben.
  • Framework használata SDK helyett a modernebb fejlesztés érdekében.