Kā izstrādāt savu pakalpojumu Terraform?
sobes.tech AI
Atbilde no AI
Sava Terraform nodrošinātāja izstrāde prasa:
-
Izvēlēties valodu: Go - galvenā valoda Terraform nodrošinātājiem.
-
Uzstādīt SDK: Go un Terraform Plugin SDK.
-
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 -
Realizēt nodrošinātāju: izveidojiet
provider.gofailu 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 } -
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 -
Kompilēt: savākt nodrošinātāja izpildāmo failu.
-
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ā). -
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.