More on the receitas provider
This commit is contained in:
parent
76c96c8d37
commit
735c45f663
5 changed files with 108 additions and 9 deletions
0
example/receitas.tf
Normal file
0
example/receitas.tf
Normal file
79
internal/provider/provider.go
Normal file
79
internal/provider/provider.go
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
package provider
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/datasource"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/provider"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/provider/schema"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/resource"
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Struct for the provider implementation
|
||||||
|
type ReceitaProvider struct {
|
||||||
|
//Version identfier for our provider
|
||||||
|
version string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Datamodel for our provider
|
||||||
|
type ReceitaProviderModel struct {
|
||||||
|
Folder types.String `tfsdk:"folder"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now we need to define the contract defined by provider.Provider from terraform
|
||||||
|
|
||||||
|
// Set the metadata callback for the provider
|
||||||
|
// This callback is responsible to build metadata associated to the provider
|
||||||
|
func (p *ReceitaProvider) Metadata(ctx context.Context, req provider.MetadataRequest, resp *provider.MetadataResponse) {
|
||||||
|
//set the metadata on the response object
|
||||||
|
//get the version from the provider object
|
||||||
|
resp.Version = p.version
|
||||||
|
//set the name of the provider
|
||||||
|
resp.TypeName = "receita"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the schema of the provider
|
||||||
|
// This callback will be responsible to define the provider schema
|
||||||
|
func (p *ReceitaProvider) Schema(ctx context.Context, req provider.SchemaRequest, resp *provider.SchemaResponse) {
|
||||||
|
resp.Schema = schema.Schema{
|
||||||
|
Attributes: map[string]schema.Attribute{
|
||||||
|
"folder": schema.StringAttribute{
|
||||||
|
MarkdownDescription: "Folder under which the receitas will be stored",
|
||||||
|
Optional: false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the initializer for the provider
|
||||||
|
// Callback to build the provider
|
||||||
|
|
||||||
|
func (p *ReceitaProvider) Configure(ctx context.Context, req provider.ConfigureRequest, resp *provider.ConfigureResponse) {
|
||||||
|
var data ReceitaProviderModel
|
||||||
|
resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
|
||||||
|
|
||||||
|
if resp.Diagnostics.HasError() {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
client := http.DefaultClient
|
||||||
|
resp.DataSourceData = client
|
||||||
|
resp.ResourceData = client
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the resources enabled by this provider
|
||||||
|
|
||||||
|
func (p *ReceitaProvider) Resources(ctx context.Context) []func() resource.Resource {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *ReceitaProvider) DataSources(ctx context.Context) []func() datasource.DataSource {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is the builder method for our ReceitaProvider instances
|
||||||
|
func New() func() provider.Provider {
|
||||||
|
return nil
|
||||||
|
}
|
1
internal/provider/receita_datasource.go
Normal file
1
internal/provider/receita_datasource.go
Normal file
|
@ -0,0 +1 @@
|
||||||
|
package provider
|
1
internal/provider/receita_resource.go
Normal file
1
internal/provider/receita_resource.go
Normal file
|
@ -0,0 +1 @@
|
||||||
|
package provider
|
36
main.go
36
main.go
|
@ -1,14 +1,32 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import(
|
import (
|
||||||
"github.com/hashicorp/terraform/plugin"
|
"context"
|
||||||
"github.com/hashicorp/terraform/provider"
|
"flag"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform-plugin-framework/providerserver"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main(){
|
func main() {
|
||||||
plugin.Serve(&plugin.ServeOpts{
|
|
||||||
ProviderFunc: func() terraform.ResourceProvider {
|
var debug bool
|
||||||
return Provider()
|
|
||||||
}
|
flag.BoolVar(&debug, "debug", "set to true if debug mode")
|
||||||
})
|
flag.Parse()
|
||||||
|
|
||||||
|
// Initialize the structure to setup the provider service
|
||||||
|
// create the folder in .terraform.d/plugins/terraform.local/local
|
||||||
|
// otherwise you'll need to publish this provider to be able to use it
|
||||||
|
opts := providerserver.ServeOpts{
|
||||||
|
Address: "terraform.local/balhau/receita",
|
||||||
|
Debug: debug,
|
||||||
|
}
|
||||||
|
|
||||||
|
err := providerserver.Serve(context.Background(), provider.New(version), opts)
|
||||||
|
|
||||||
|
// If the creation of service give us an error just print it.
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue