Sobes.tech
Senior

Ako vyvinúť vlastného poskytovateľa v Terraform?

sobes.tech AI

Odpoveď od AI

Pre vývoj vlastného poskytovateľa Terraform je potrebné:

  1. Vybrať jazyk: Go - hlavný jazyk pre poskytovateľov Terraform.

  2. Nainštalovať SDK: Go a Terraform Plugin SDK.

  3. Vytvoriť štruktúru projektu:

    # Vytvorenie základných súborov
    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. Implementovať poskytovateľa: vytvorte súbor provider.go a definujte štruktúru Provider, vrátane:

    • Schema: definícia konfiguračných parametrov poskytovateľa.
    • ResourcesMap: mapovanie názvov zdrojov na ich implementácie.
    • DataSourcesMap: mapovanie názvov zdrojov dát na ich implementácie.
    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": { // Príklad konfiguračného parametra poskytovateľa
    				Type:        schema.TypeString,
    				Optional:    true,
    				DefaultFunc: schema.EnvDefaultFunc("MYPROVIDER_ENDPOINT", nil),
    			},
    		},
    		ResourcesMap: map[string]*schema.Resource{
    			"myprovider_resource": resourceMyProviderResource(), // Implementácia zdroja
    		},
    		DataSourcesMap: map[string]*schema.Resource{
    			// Implementácia zdrojov dát
    		},
    		ConfigureContextFunc: providerConfigure, // Funkcia na konfiguráciu klienta
    	}
    }
    
    func providerConfigure(ctx context.Context, d *schema.ResourceData) (interface{}, diag.Diagnostics) {
    	// Logika konfigurácie klienta poskytovateľa
    	return nil, nil
    }
    
    func main() {
    	// Vstupný bod
    }
    
  5. Implementovať zdroje a zdroje dát: vytvorte samostatné súbory pre každý zdroj a zdroj dát (napríklad resource_myprovider_resource.go). Každý zdroj by mal implementovať funkcie:

    • Schema: definícia parametrov zdroja.
    • Create: vytvorenie zdroja.
    • Read: čítanie stavu zdroja.
    • Update: aktualizácia zdroja.
    • Delete: odstránenie zdroja.
    • Exists: kontrola existencie zdroja (voliteľné).
    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": { // Príklad parametra zdroja
                    Type:     schema.TypeString,
                    Required: true,
                },
            },
        }
    }
    
    func resourceMyProviderResourceCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
        // Logika vytvorenia zdroja
        return nil
    }
    // ... Implementujte Read, Update, Delete
    
  6. Kompilácia: zostavte spustiteľný súbor poskytovateľa.

  7. Inštalácia: umiestnite skompilovaný binárny súbor do adresára pluginov Terraform (~/.terraform.d/plugins/ alebo iné miesto uvedené v konfigurácii Terraform).

  8. Testovanie: napíšte Acceptance Tests na overenie správnej funkčnosti poskytovateľa.

Ďalšie kroky môžu zahŕňať:

  • Dokumentáciu poskytovateľa.
  • Zverejnenie poskytovateľa v Terraform Registry.
  • Použitie Framework namiesto SDK pre modernejší vývoj.