Sobes.tech
Senior

Kaip sukurti savo tiekėją Terraform?

sobes.tech AI

Atsakymas iš AI

Savo Terraform teikėjo kūrimas reikalauja:

  1. Pasirinkti kalbą: Go - pagrindinė kalba Terraform teikėjams.

  2. Įdiegti SDK: Go ir Terraform Plugin SDK.

  3. Sukurkite projekto struktūrą:

    # Pagrindinių failų kūrimas
    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. Įgyvendinti teikėją: sukurkite provider.go failą ir apibrėžkite Provider struktūrą, įskaitant:

    • Schema: teikėjo konfigūracijos parametrų apibrėžimas.
    • ResourcesMap: išteklių pavadinimų ir jų įgyvendinimo žemėlapis.
    • DataSourcesMap: duomenų šaltinių pavadinimų ir jų įgyvendinimo žemėlapis.
    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": { // Konfigūracijos parametro pavyzdys
    				Type:        schema.TypeString,
    				Optional:    true,
    				DefaultFunc: schema.EnvDefaultFunc("MYPROVIDER_ENDPOINT", nil),
    			},
    		},
    		ResourcesMap: map[string]*schema.Resource{
    			"myprovider_resource": resourceMyProviderResource(), // Išteklių įgyvendinimas
    		},
    		DataSourcesMap: map[string]*schema.Resource{
    			// Duomenų šaltinių įgyvendinimas
    		},
    		ConfigureContextFunc: providerConfigure, // Konfigūracijos funkcija
    	}
    }
    
    func providerConfigure(ctx context.Context, d *schema.ResourceData) (interface{}, diag.Diagnostics) {
    	// Teikėjo kliento konfigūracijos logika
    	return nil, nil
    }
    
    func main() {
    	// Įėjimo taškas
    }
    
  5. Įgyvendinti išteklius ir duomenų šaltinius: sukurkite atskirus failus kiekvienam ištekliui ir šaltiniui (pvz., resource_myprovider_resource.go). Kiekvienas išteklius turi įgyvendinti šias funkcijas:

    • Schema: išteklių parametrų apibrėžimas.
    • Create: išteklių kūrimas.
    • Read: išteklių būsenos skaitymas.
    • Update: išteklių atnaujinimas.
    • Delete: išteklių ištrynimas.
    • Exists: išteklių egzistavimo patikrinimas (pasirinktinai).
    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": { // Pavyzdžio parametras
                    Type:     schema.TypeString,
                    Required: true,
                },
            },
        }
    }
    
    func resourceMyProviderResourceCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
        // Išteklių kūrimo logika
        return nil
    }
    // ... Skaitymo, atnaujinimo, trinimo įgyvendinimai
    
  6. Kompiliuoti: surinkite teikėjo vykdomąjį failą.

  7. Įdiegti: įdėkite sukompiliuotą binarinį failą į Terraform plaginų katalogą (~/.terraform.d/plugins/ arba kitur, nurodytame Terraform konfigūracijoje).

  8. Testuoti: parašykite Acceptance Tests, kad patikrintumėte teikėjo teisingą veikimą.

Papildomi žingsniai gali apimti:

  • teikėjo dokumentacijos parengimą.
  • teikėjo publikavimą Terraform Registry.
  • naudoti Framework vietoje SDK, siekiant modernesnio vystymo.