github.com/eliastor/durgaform@v0.0.0-20220816172711-d0ab2d17673e/internal/provider-simple/provider.go (about)

     1  // simple provider a minimal provider implementation for testing
     2  package simple
     3  
     4  import (
     5  	"errors"
     6  	"time"
     7  
     8  	"github.com/eliastor/durgaform/internal/configs/configschema"
     9  	"github.com/eliastor/durgaform/internal/providers"
    10  	"github.com/zclconf/go-cty/cty"
    11  	ctyjson "github.com/zclconf/go-cty/cty/json"
    12  )
    13  
    14  type simple struct {
    15  	schema providers.GetProviderSchemaResponse
    16  }
    17  
    18  func Provider() providers.Interface {
    19  	simpleResource := providers.Schema{
    20  		Block: &configschema.Block{
    21  			Attributes: map[string]*configschema.Attribute{
    22  				"id": {
    23  					Computed: true,
    24  					Type:     cty.String,
    25  				},
    26  				"value": {
    27  					Optional: true,
    28  					Type:     cty.String,
    29  				},
    30  			},
    31  		},
    32  	}
    33  
    34  	return simple{
    35  		schema: providers.GetProviderSchemaResponse{
    36  			Provider: providers.Schema{
    37  				Block: nil,
    38  			},
    39  			ResourceTypes: map[string]providers.Schema{
    40  				"simple_resource": simpleResource,
    41  			},
    42  			DataSources: map[string]providers.Schema{
    43  				"simple_resource": simpleResource,
    44  			},
    45  			ServerCapabilities: providers.ServerCapabilities{
    46  				PlanDestroy: true,
    47  			},
    48  		},
    49  	}
    50  }
    51  
    52  func (s simple) GetProviderSchema() providers.GetProviderSchemaResponse {
    53  	return s.schema
    54  }
    55  
    56  func (s simple) ValidateProviderConfig(req providers.ValidateProviderConfigRequest) (resp providers.ValidateProviderConfigResponse) {
    57  	return resp
    58  }
    59  
    60  func (s simple) ValidateResourceConfig(req providers.ValidateResourceConfigRequest) (resp providers.ValidateResourceConfigResponse) {
    61  	return resp
    62  }
    63  
    64  func (s simple) ValidateDataResourceConfig(req providers.ValidateDataResourceConfigRequest) (resp providers.ValidateDataResourceConfigResponse) {
    65  	return resp
    66  }
    67  
    68  func (p simple) UpgradeResourceState(req providers.UpgradeResourceStateRequest) (resp providers.UpgradeResourceStateResponse) {
    69  	ty := p.schema.ResourceTypes[req.TypeName].Block.ImpliedType()
    70  	val, err := ctyjson.Unmarshal(req.RawStateJSON, ty)
    71  	resp.Diagnostics = resp.Diagnostics.Append(err)
    72  	resp.UpgradedState = val
    73  	return resp
    74  }
    75  
    76  func (s simple) ConfigureProvider(providers.ConfigureProviderRequest) (resp providers.ConfigureProviderResponse) {
    77  	return resp
    78  }
    79  
    80  func (s simple) Stop() error {
    81  	return nil
    82  }
    83  
    84  func (s simple) ReadResource(req providers.ReadResourceRequest) (resp providers.ReadResourceResponse) {
    85  	// just return the same state we received
    86  	resp.NewState = req.PriorState
    87  	return resp
    88  }
    89  
    90  func (s simple) PlanResourceChange(req providers.PlanResourceChangeRequest) (resp providers.PlanResourceChangeResponse) {
    91  	if req.ProposedNewState.IsNull() {
    92  		// destroy op
    93  		resp.PlannedState = req.ProposedNewState
    94  		resp.PlannedPrivate = req.PriorPrivate
    95  		return resp
    96  	}
    97  
    98  	m := req.ProposedNewState.AsValueMap()
    99  	_, ok := m["id"]
   100  	if !ok {
   101  		m["id"] = cty.UnknownVal(cty.String)
   102  	}
   103  
   104  	resp.PlannedState = cty.ObjectVal(m)
   105  	return resp
   106  }
   107  
   108  func (s simple) ApplyResourceChange(req providers.ApplyResourceChangeRequest) (resp providers.ApplyResourceChangeResponse) {
   109  	if req.PlannedState.IsNull() {
   110  		resp.NewState = req.PlannedState
   111  		return resp
   112  	}
   113  
   114  	m := req.PlannedState.AsValueMap()
   115  	_, ok := m["id"]
   116  	if !ok {
   117  		m["id"] = cty.StringVal(time.Now().String())
   118  	}
   119  	resp.NewState = cty.ObjectVal(m)
   120  
   121  	return resp
   122  }
   123  
   124  func (s simple) ImportResourceState(providers.ImportResourceStateRequest) (resp providers.ImportResourceStateResponse) {
   125  	resp.Diagnostics = resp.Diagnostics.Append(errors.New("unsupported"))
   126  	return resp
   127  }
   128  
   129  func (s simple) ReadDataSource(req providers.ReadDataSourceRequest) (resp providers.ReadDataSourceResponse) {
   130  	m := req.Config.AsValueMap()
   131  	m["id"] = cty.StringVal("static_id")
   132  	resp.State = cty.ObjectVal(m)
   133  	return resp
   134  }
   135  
   136  func (s simple) Close() error {
   137  	return nil
   138  }