Sobes.tech
Senior

Kā izstrādāt savu pakalpojumu Terraform?

sobes.tech AI

Atbilde no AI

Sava Terraform nodrošinātāja izstrāde prasa:

  1. Izvēlēties valodu: Go - galvenā valoda Terraform nodrošinātājiem.

  2. Uzstādīt SDK: Go un Terraform Plugin SDK.

  3. Izveidot projekta struktūru:

    # Galveno failu izveide
    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. Realizēt nodrošinātāju: izveidojiet provider.go failu un definējiet Provider struktūru, ieskaitot:

    • Schema: nodrošinātāja konfigurācijas parametru definīcija.
    • ResourcesMap: resursu nosaukumu un to realizācijas karte.
    • DataSourcesMap: datu avotu nosaukumu un to realizācijas karte.
    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": { // Konfigurācijas parametra piemērs
    				Type:        schema.TypeString,
    				Optional:    true,
    				DefaultFunc: schema.EnvDefaultFunc("MYPROVIDER_ENDPOINT", nil),
    			},
    		},
    		ResourcesMap: map[string]*schema.Resource{
    			"myprovider_resource": resourceMyProviderResource(), // Resursa realizācija
    		},
    		DataSourcesMap: map[string]*schema.Resource{
    			// Datu avotu realizācija
    		},
    		ConfigureContextFunc: providerConfigure, // Konfigurācijas funkcija
    	}
    }
    
    func providerConfigure(ctx context.Context, d *schema.ResourceData) (interface{}, diag.Diagnostics) {
    	// Nodrošinātāja klienta konfigurācijas loģika
    	return nil, nil
    }
    
    func main() {
    	// Ieejas punkts
    }
    
  5. Realizēt resursus un datu avotus: izveidojiet atsevišķus failus katram resursam un avotam (piemēram, resource_myprovider_resource.go). Katram resursam jārealizē šādas funkcijas:

    • Schema: resursa parametru definīcija.
    • Create: resursa izveide.
    • Read: resursa stāvokļa lasīšana.
    • Update: resursa atjaunināšana.
    • Delete: resursa dzēšana.
    • Exists: resursa eksistences pārbaude (neobligāti).
    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": { // Piemēra parametra
                    Type:     schema.TypeString,
                    Required: true,
                },
            },
        }
    }
    
    func resourceMyProviderResourceCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
        // Resursa izveides loģika
        return nil
    }
    // ... Lasīšanas, atjaunināšanas, dzēšanas realizācijas
    
  6. Kompilēt: savākt nodrošinātāja izpildāmo failu.

  7. Uzstādīt: novietot kompilēto bināro failu Terraform spraudņu direktorijā (~/.terraform.d/plugins/ vai citur, kas norādīts Terraform konfigurācijā).

  8. Testēt: uzrakstīt Acceptance Tests, lai pārbaudītu nodrošinātāja pareizu darbību.

Papildu soļi var ietvert:

  • nodrošinātāja dokumentācijas izstrādi.
  • nodrošinātāja publicēšanu Terraform Registry.
  • izmantot Framework vietā SDK, lai nodrošinātu mūsdienīgāku izstrādi.