From 30becb47063d79699c3101c745c28e4923e55474 Mon Sep 17 00:00:00 2001 From: Bitor Tonixa Balenca Date: Tue, 19 Dec 2023 23:31:44 +0000 Subject: [PATCH] Added http call to provider creation --- example/receitas.tf | 2 +- internal/provider/provider.go | 14 +++++++++++--- internal/provider/receita_resource.go | 27 +++++++++++++++++++++------ 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/example/receitas.tf b/example/receitas.tf index b7bd8e2..b69fb0c 100644 --- a/example/receitas.tf +++ b/example/receitas.tf @@ -7,7 +7,7 @@ terraform { } provider "receita" { - endpoint = "localhost:9999" + endpoint = "http://localhost:9999" } resource "receita_receita" "receita_one" { diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 5c76c60..f2336f7 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -22,6 +22,11 @@ type ReceitaProviderModel struct { Endpoint types.String `tfsdk:"endpoint"` } +type ReceitaProviderData struct { + Model ReceitaProviderModel + Client *http.Client +} + // Now we need to define the contract defined by provider.Provider from terraform // Set the metadata callback for the provider @@ -58,9 +63,12 @@ func (p *ReceitaProvider) Configure(ctx context.Context, req provider.ConfigureR return } - client := http.DefaultClient - resp.DataSourceData = client - resp.ResourceData = client + providerData := ReceitaProviderData{ + Model: data, + Client: http.DefaultClient, + } + resp.DataSourceData = &providerData + resp.ResourceData = &providerData } // Set the resources enabled by this provider diff --git a/internal/provider/receita_resource.go b/internal/provider/receita_resource.go index 45e7c05..23e836d 100644 --- a/internal/provider/receita_resource.go +++ b/internal/provider/receita_resource.go @@ -22,7 +22,7 @@ var _ resource.Resource = &ReceitaResource{} var _ resource.ResourceWithImportState = &ReceitaResource{} type ReceitaResource struct { - client *http.Client + providerData *ReceitaProviderData } func NewReceitaResource() resource.Resource { @@ -78,18 +78,18 @@ func (r *ReceitaResource) Configure(ctx context.Context, req resource.ConfigureR //Extract the http client from the provider data definition //This also casts the object, it will return fals in the ok field if the types are not castable - client, ok := req.ProviderData.(*http.Client) + providerData, ok := req.ProviderData.(*ReceitaProviderData) // if we can't fetch the client from the provider just notifies the terraform diagnostics and return silently if !ok { resp.Diagnostics.AddError( "Unexpected Resource Configure Type", - fmt.Sprintf("Expected *http.Client, got: %T. Please report this issue to the provider developers.", req.ProviderData), + fmt.Sprintf("Expected provider.ReceitaProviderData, got: %T. Please report this issue to the provider developers.", req.ProviderData), ) return } - r.client = client + r.providerData = providerData } func (r *ReceitaResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { @@ -102,11 +102,26 @@ func (r *ReceitaResource) Create(ctx context.Context, req resource.CreateRequest return } - // Do specific stuff - // Here just generates a random uuid data.Id = basetypes.NewStringValue(uuid.Must(uuid.NewRandom()).String()) + // Do specific stuff + endpoint := r.providerData.Model.Endpoint + + fmt.Println("Before the call") + + hResp, err := http.Get(endpoint.ValueString() + "/create") + + fmt.Println("After the call") + + if err != nil { + return + } + + if hResp.Close == false { + fmt.Println("http closed") + } + //log the creation of the resource in the terraform logging system tflog.Trace(ctx, "created a receita resource")