simple provider for internal testing
Simple is a minimal provider implementation using the grpcwrap package, intended for use in internal tests.
This commit is contained in:
parent
65340f51be
commit
eee581ae54
|
@ -0,0 +1,16 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/terraform/internal/grpcwrap"
|
||||
simple "github.com/hashicorp/terraform/internal/provider-simple"
|
||||
"github.com/hashicorp/terraform/internal/tfplugin5"
|
||||
"github.com/hashicorp/terraform/plugin"
|
||||
)
|
||||
|
||||
func main() {
|
||||
plugin.Serve(&plugin.ServeOpts{
|
||||
GRPCProviderFunc: func() tfplugin5.ProviderServer {
|
||||
return grpcwrap.New(simple.Provider())
|
||||
},
|
||||
})
|
||||
}
|
|
@ -0,0 +1,128 @@
|
|||
// simple provider a minimal provider implementation for testing
|
||||
package simple
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/terraform/configs/configschema"
|
||||
"github.com/hashicorp/terraform/providers"
|
||||
"github.com/zclconf/go-cty/cty"
|
||||
ctyjson "github.com/zclconf/go-cty/cty/json"
|
||||
)
|
||||
|
||||
type simple struct {
|
||||
schema providers.GetSchemaResponse
|
||||
}
|
||||
|
||||
func Provider() providers.Interface {
|
||||
simpleResource := providers.Schema{
|
||||
Block: &configschema.Block{
|
||||
Attributes: map[string]*configschema.Attribute{
|
||||
"id": {
|
||||
Computed: true,
|
||||
Type: cty.String,
|
||||
},
|
||||
"value": {
|
||||
Optional: true,
|
||||
Type: cty.String,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return simple{
|
||||
schema: providers.GetSchemaResponse{
|
||||
Provider: providers.Schema{
|
||||
Block: nil,
|
||||
},
|
||||
ResourceTypes: map[string]providers.Schema{
|
||||
"simple_resource": simpleResource,
|
||||
},
|
||||
DataSources: map[string]providers.Schema{
|
||||
"simple_resource": simpleResource,
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (s simple) GetSchema() providers.GetSchemaResponse {
|
||||
return s.schema
|
||||
}
|
||||
|
||||
func (s simple) PrepareProviderConfig(req providers.PrepareProviderConfigRequest) (resp providers.PrepareProviderConfigResponse) {
|
||||
return resp
|
||||
}
|
||||
|
||||
func (s simple) ValidateResourceTypeConfig(req providers.ValidateResourceTypeConfigRequest) (resp providers.ValidateResourceTypeConfigResponse) {
|
||||
return resp
|
||||
}
|
||||
|
||||
func (s simple) ValidateDataSourceConfig(req providers.ValidateDataSourceConfigRequest) (resp providers.ValidateDataSourceConfigResponse) {
|
||||
return resp
|
||||
}
|
||||
|
||||
func (p simple) UpgradeResourceState(req providers.UpgradeResourceStateRequest) (resp providers.UpgradeResourceStateResponse) {
|
||||
ty := p.schema.ResourceTypes[req.TypeName].Block.ImpliedType()
|
||||
val, err := ctyjson.Unmarshal(req.RawStateJSON, ty)
|
||||
resp.Diagnostics = resp.Diagnostics.Append(err)
|
||||
resp.UpgradedState = val
|
||||
return resp
|
||||
}
|
||||
|
||||
func (s simple) Configure(providers.ConfigureRequest) (resp providers.ConfigureResponse) {
|
||||
return resp
|
||||
}
|
||||
|
||||
func (s simple) Stop() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s simple) ReadResource(req providers.ReadResourceRequest) (resp providers.ReadResourceResponse) {
|
||||
// just return the same state we received
|
||||
resp.NewState = req.PriorState
|
||||
return resp
|
||||
}
|
||||
|
||||
func (s simple) PlanResourceChange(req providers.PlanResourceChangeRequest) (resp providers.PlanResourceChangeResponse) {
|
||||
m := req.ProposedNewState.AsValueMap()
|
||||
_, ok := m["id"]
|
||||
if !ok {
|
||||
m["id"] = cty.UnknownVal(cty.String)
|
||||
}
|
||||
|
||||
resp.PlannedState = cty.ObjectVal(m)
|
||||
return resp
|
||||
}
|
||||
|
||||
func (s simple) ApplyResourceChange(req providers.ApplyResourceChangeRequest) (resp providers.ApplyResourceChangeResponse) {
|
||||
if req.PlannedState.IsNull() {
|
||||
resp.NewState = req.PlannedState
|
||||
return resp
|
||||
}
|
||||
|
||||
m := req.PlannedState.AsValueMap()
|
||||
_, ok := m["id"]
|
||||
if !ok {
|
||||
m["id"] = cty.StringVal(time.Now().String())
|
||||
}
|
||||
resp.NewState = cty.ObjectVal(m)
|
||||
|
||||
return resp
|
||||
}
|
||||
|
||||
func (s simple) ImportResourceState(providers.ImportResourceStateRequest) (resp providers.ImportResourceStateResponse) {
|
||||
resp.Diagnostics = resp.Diagnostics.Append(errors.New("unsupported"))
|
||||
return resp
|
||||
}
|
||||
|
||||
func (s simple) ReadDataSource(req providers.ReadDataSourceRequest) (resp providers.ReadDataSourceResponse) {
|
||||
m := req.Config.AsValueMap()
|
||||
m["id"] = cty.StringVal("static_id")
|
||||
resp.State = cty.ObjectVal(m)
|
||||
return resp
|
||||
}
|
||||
|
||||
func (s simple) Close() error {
|
||||
return nil
|
||||
}
|
Loading…
Reference in New Issue