Sobes.tech
Senior

Kuidas arendada oma teenusepakkujat Terraformis?

sobes.tech AI

Vastus AI-lt

Sinu Terraformi pakkuja arendamiseks on vaja:

  1. Vali keel: Go - peamine keel Terraformi pakkujate jaoks.

  2. Paigalda SDK: Go ja Terraform Plugin SDK.

  3. Loo projekti struktuur:

    # Põhifailide loomine
    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. Teosta pakkuja: loo provider.go fail ja määra Provider struktuur, sealhulgas:

    • Schema: pakkuja konfiguratsiooniparameetrite määratlus.
    • ResourcesMap: ressursside nimede ja nende realiseerimise kaart.
    • DataSourcesMap: andmeallikate nimede ja nende realiseerimise kaart.
    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": { // Konfiguratsiooniparameetri näide
    				Type:        schema.TypeString,
    				Optional:    true,
    				DefaultFunc: schema.EnvDefaultFunc("MYPROVIDER_ENDPOINT", nil),
    			},
    		},
    		ResourcesMap: map[string]*schema.Resource{
    			"myprovider_resource": resourceMyProviderResource(), // Ressursi realiseerimine
    		},
    		DataSourcesMap: map[string]*schema.Resource{
    			// Andmeallikate realiseerimine
    		},
    		ConfigureContextFunc: providerConfigure, // Konfiguratsiooni funktsioon
    	}
    }
    
    func providerConfigure(ctx context.Context, d *schema.ResourceData) (interface{}, diag.Diagnostics) {
    	// Pakkuja kliendi seadistamise loogika
    	return nil, nil
    }
    
    func main() {
    	// Sisenemispunkt
    }
    
  5. Realiseeri ressursid ja andmeallikad: loo iga ressursi ja allika jaoks eraldi failid (näiteks resource_myprovider_resource.go). Iga ressursi peab realiseerima järgmised funktsioonid:

    • Schema: ressursi parameetrite määratlus.
    • Create: ressursi loomine.
    • Read: ressursi oleku lugemine.
    • Update: ressursi uuendamine.
    • Delete: ressursi kustutamine.
    • Exists: ressursi olemasolu kontroll (valikuline).
    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": { // Näidispaar
                    Type:     schema.TypeString,
                    Required: true,
                },
            },
        }
    }
    
    func resourceMyProviderResourceCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
        // Ressursi loomise loogika
        return nil
    }
    // ... Loe, uuenda, kustuta realiseeringud
    
  6. Kompileeri: koostage pakkuja täidetav fail.

  7. Paigalda: paigaldage kompileeritud binaarfail Terraformi pluginade kataloogi (~/.terraform.d/plugins/ või muusse asukohta, mis on määratud Terraformi konfiguratsioonis).

  8. Testi: kirjutage Acceptance Tests, et kontrollida pakkuja korrektset tööd.

Täiendavad sammud võivad hõlmata:

  • pakkuja dokumentatsiooni koostamist.
  • pakkuja avaldamist Terraform Registry-s.
  • kasutades Frameworki SDK asemel, kaasaegsema arenduse jaoks.