More on terraform receita provider
This commit is contained in:
parent
9324ddd4b1
commit
5050270cc4
3 changed files with 66 additions and 8 deletions
|
@ -1,12 +1,12 @@
|
||||||
terraform {
|
terraform {
|
||||||
required_providers {
|
required_providers {
|
||||||
receita = {
|
receita = {
|
||||||
source = "terraform.local/local/receita"
|
source = "terraform.local/balhau/receita"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
provider "receitas" {
|
provider "receita" {
|
||||||
endpoint = "localhost:9999"
|
endpoint = "localhost:9999"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ type ReceitaProvider struct {
|
||||||
|
|
||||||
// Datamodel for our provider
|
// Datamodel for our provider
|
||||||
type ReceitaProviderModel struct {
|
type ReceitaProviderModel struct {
|
||||||
Folder types.String `tfsdk:"folder"`
|
Endpoint types.String `tfsdk:"endpoint"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now we need to define the contract defined by provider.Provider from terraform
|
// Now we need to define the contract defined by provider.Provider from terraform
|
||||||
|
@ -41,7 +41,7 @@ func (p *ReceitaProvider) Schema(ctx context.Context, req provider.SchemaRequest
|
||||||
Attributes: map[string]schema.Attribute{
|
Attributes: map[string]schema.Attribute{
|
||||||
"endpoint": schema.StringAttribute{
|
"endpoint": schema.StringAttribute{
|
||||||
MarkdownDescription: "Endpoint under which the receitas will be called upon",
|
MarkdownDescription: "Endpoint under which the receitas will be called upon",
|
||||||
Optional: false,
|
Required: true,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -66,11 +66,13 @@ func (p *ReceitaProvider) Configure(ctx context.Context, req provider.ConfigureR
|
||||||
// Set the resources enabled by this provider
|
// Set the resources enabled by this provider
|
||||||
|
|
||||||
func (p *ReceitaProvider) Resources(ctx context.Context) []func() resource.Resource {
|
func (p *ReceitaProvider) Resources(ctx context.Context) []func() resource.Resource {
|
||||||
return []func() resource.Resource{}
|
return []func() resource.Resource{
|
||||||
|
NewReceitaResource,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *ReceitaProvider) DataSources(ctx context.Context) []func() datasource.DataSource {
|
func (p *ReceitaProvider) DataSources(ctx context.Context) []func() datasource.DataSource {
|
||||||
return nil
|
return []func() datasource.DataSource{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is the builder method for our ReceitaProvider instances
|
// This is the builder method for our ReceitaProvider instances
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/path"
|
||||||
"github.com/hashicorp/terraform-plugin-framework/resource"
|
"github.com/hashicorp/terraform-plugin-framework/resource"
|
||||||
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
|
"github.com/hashicorp/terraform-plugin-framework/resource/schema"
|
||||||
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
|
"github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier"
|
||||||
|
@ -50,11 +51,11 @@ func (r *ReceitaResource) Schema(ctx context.Context, req resource.SchemaRequest
|
||||||
Attributes: map[string]schema.Attribute{
|
Attributes: map[string]schema.Attribute{
|
||||||
"name": schema.StringAttribute{
|
"name": schema.StringAttribute{
|
||||||
MarkdownDescription: "Name of the receita",
|
MarkdownDescription: "Name of the receita",
|
||||||
Optional: false,
|
Required: true,
|
||||||
},
|
},
|
||||||
"author": schema.StringAttribute{
|
"author": schema.StringAttribute{
|
||||||
MarkdownDescription: "Name of the author",
|
MarkdownDescription: "Name of the author",
|
||||||
Optional: false,
|
Required: true,
|
||||||
},
|
},
|
||||||
"id": schema.StringAttribute{
|
"id": schema.StringAttribute{
|
||||||
Computed: true,
|
Computed: true,
|
||||||
|
@ -101,6 +102,8 @@ func (r *ReceitaResource) Create(ctx context.Context, req resource.CreateRequest
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Do specific stuff
|
||||||
|
|
||||||
// Here just generates a random uuid
|
// Here just generates a random uuid
|
||||||
data.Id = basetypes.NewStringValue(uuid.Must(uuid.NewRandom()).String())
|
data.Id = basetypes.NewStringValue(uuid.Must(uuid.NewRandom()).String())
|
||||||
|
|
||||||
|
@ -109,3 +112,56 @@ func (r *ReceitaResource) Create(ctx context.Context, req resource.CreateRequest
|
||||||
|
|
||||||
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
|
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *ReceitaResource) Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResponse) {
|
||||||
|
var data ReceitaResourceModel
|
||||||
|
|
||||||
|
// Read Terraform prior state data into the model
|
||||||
|
resp.Diagnostics.Append(req.State.Get(ctx, &data)...)
|
||||||
|
|
||||||
|
if resp.Diagnostics.HasError() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do read specific operation
|
||||||
|
|
||||||
|
// Save updated data into Terraform state
|
||||||
|
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *ReceitaResource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) {
|
||||||
|
var data ReceitaResourceModel
|
||||||
|
|
||||||
|
//Read terraform state into model
|
||||||
|
//Append is a varadic method and Get returns an array we need to use ... to transform an array into varadic representation
|
||||||
|
resp.Diagnostics.Append(req.Plan.Get(ctx, &data)...)
|
||||||
|
|
||||||
|
// Return in case of error
|
||||||
|
if resp.Diagnostics.HasError() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//Do specific update stuff
|
||||||
|
|
||||||
|
//Finally update the terraform state
|
||||||
|
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *ReceitaResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
|
||||||
|
var data ReceitaResourceModel
|
||||||
|
|
||||||
|
// Load tf state into the model
|
||||||
|
resp.Diagnostics.Append(req.State.Get(ctx, &data)...)
|
||||||
|
|
||||||
|
if resp.Diagnostics.HasError() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Do specific delete logic
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *ReceitaResource) ImportState(ctx context.Context, req resource.ImportStateRequest, resp *resource.ImportStateResponse) {
|
||||||
|
resource.ImportStatePassthroughID(ctx, path.Root("id"), req, resp)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue