Ինչպես զարգացնել ձեր սեփական մատակարարը Terraform-ում?
sobes.tech AI
Պատասխան AI-ից
Տեղական Terraform մատակարարի զարգացման համար անհրաժեշտ է.
-
Ընտրել լեզուն: Go - հիմնական լեզուն Terraform մատակարարների համար.
-
Տեղադրել SDK: Go և Terraform Plugin SDK.
-
Ստեղծել նախագիծը կառուցվածքը:
# Հիմնական ֆայլերի ստեղծում 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 -
Իրականացնել մատակարարը: ստեղծել
provider.goֆայլը և սահմանել Provider կառուցվածքը, ներառյալ՝Schema: մատակարարի կոնֆիգուրացիոն պարամետրերի սահմանում.ResourcesMap: ռեսուրսների անվանումների և նրանց իրականացման քարտեզը.DataSourcesMap: տվյալների աղբյուրների անվանումների և նրանց իրականացման քարտեզը.
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": { // Մատակարարի կոնֆիգուրացիոն պարամետր օրինակ Type: schema.TypeString, Optional: true, DefaultFunc: schema.EnvDefaultFunc("MYPROVIDER_ENDPOINT", nil), }, }, ResourcesMap: map[string]*schema.Resource{ "myprovider_resource": resourceMyProviderResource(), // ռեսուրսի իրականացում }, DataSourcesMap: map[string]*schema.Resource{ // տվյալների աղբյուրների իրականացում }, ConfigureContextFunc: providerConfigure, // Կոնֆիգուրացիայի ֆունկցիա } } func providerConfigure(ctx context.Context, d *schema.ResourceData) (interface{}, diag.Diagnostics) { // Մատակարարի հաճախորդի կարգավորելու լոգիկա return nil, nil } func main() { // Մուտքի կետ } -
Իրականացնել ռեսուրսները և տվյալների աղբյուրները: ստեղծել առանձին ֆայլեր յուրաքանչյուր ռեսուրսի և աղբյուրի համար (օրինակ՝
resource_myprovider_resource.go). Յուրաքանչյուր ռեսուրս պետք է իրականացնի հետևյալ ֆունկցիաները:Schema: ռեսուրսի պարամետրերի սահմանում.Create: ռեսուրսի ստեղծում.Read: ռեսուրսի վիճակի ընթերցում.Update: ռեսուրսի թարմացում.Delete: ռեսուրսի ջնջում.Exists: ռեսուրսի գոյության ստուգում (ընտրովի).
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": { // Օրինակ ռեսուրսի պարամետր Type: schema.TypeString, Required: true, }, }, } } func resourceMyProviderResourceCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics { // Ռեսուրսի ստեղծման լոգիկա return nil } // ... Read, Update, Delete իրականացումները -
Կոմպիլացիա: հավաքել մատակարարի գործարկելի ֆայլը.
-
Տեղադրում: տեղադրել կոմպիլացված բինարի ֆայլը Terraform պլագինների թղթապանակում (
~/.terraform.d/plugins/կամ այլ տեղ, որը նշված է Terraform կոնֆիգուրացիայում). -
Թեստավորում: գրել Acceptance Tests՝ մատակարարի ճիշտ աշխատանքի ստուգման համար.
Լրացուցիչ քայլեր կարող են լինել՝
- Մատակարարի փաստաթղթավորում
- Մատակարարի հրապարակում Terraform Registry-ում
- Օգտագործել Framework փոխարեն SDK՝ ավելի ժամանակակից զարգացման համար։