github.com/cycloidio/terraform@v1.1.10-0.20220513142504-76d5c768dc63/provider-simple-v6/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/cycloidio/terraform/configs/configschema"
     9  	"github.com/cycloidio/terraform/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  		},
    46  	}
    47  }
    48  
    49  func (s simple) GetProviderSchema() providers.GetProviderSchemaResponse {
    50  	return s.schema
    51  }
    52  
    53  func (s simple) ValidateProviderConfig(req providers.ValidateProviderConfigRequest) (resp providers.ValidateProviderConfigResponse) {
    54  	return resp
    55  }
    56  
    57  func (s simple) ValidateResourceConfig(req providers.ValidateResourceConfigRequest) (resp providers.ValidateResourceConfigResponse) {
    58  	return resp
    59  }
    60  
    61  func (s simple) ValidateDataResourceConfig(req providers.ValidateDataResourceConfigRequest) (resp providers.ValidateDataResourceConfigResponse) {
    62  	return resp
    63  }
    64  
    65  func (p simple) UpgradeResourceState(req providers.UpgradeResourceStateRequest) (resp providers.UpgradeResourceStateResponse) {
    66  	ty := p.schema.ResourceTypes[req.TypeName].Block.ImpliedType()
    67  	val, err := ctyjson.Unmarshal(req.RawStateJSON, ty)
    68  	resp.Diagnostics = resp.Diagnostics.Append(err)
    69  	resp.UpgradedState = val
    70  	return resp
    71  }
    72  
    73  func (s simple) ConfigureProvider(providers.ConfigureProviderRequest) (resp providers.ConfigureProviderResponse) {
    74  	return resp
    75  }
    76  
    77  func (s simple) Stop() error {
    78  	return nil
    79  }
    80  
    81  func (s simple) ReadResource(req providers.ReadResourceRequest) (resp providers.ReadResourceResponse) {
    82  	// just return the same state we received
    83  	resp.NewState = req.PriorState
    84  	return resp
    85  }
    86  
    87  func (s simple) PlanResourceChange(req providers.PlanResourceChangeRequest) (resp providers.PlanResourceChangeResponse) {
    88  	m := req.ProposedNewState.AsValueMap()
    89  	_, ok := m["id"]
    90  	if !ok {
    91  		m["id"] = cty.UnknownVal(cty.String)
    92  	}
    93  
    94  	resp.PlannedState = cty.ObjectVal(m)
    95  	return resp
    96  }
    97  
    98  func (s simple) ApplyResourceChange(req providers.ApplyResourceChangeRequest) (resp providers.ApplyResourceChangeResponse) {
    99  	if req.PlannedState.IsNull() {
   100  		resp.NewState = req.PlannedState
   101  		return resp
   102  	}
   103  
   104  	m := req.PlannedState.AsValueMap()
   105  	_, ok := m["id"]
   106  	if !ok {
   107  		m["id"] = cty.StringVal(time.Now().String())
   108  	}
   109  	resp.NewState = cty.ObjectVal(m)
   110  
   111  	return resp
   112  }
   113  
   114  func (s simple) ImportResourceState(providers.ImportResourceStateRequest) (resp providers.ImportResourceStateResponse) {
   115  	resp.Diagnostics = resp.Diagnostics.Append(errors.New("unsupported"))
   116  	return resp
   117  }
   118  
   119  func (s simple) ReadDataSource(req providers.ReadDataSourceRequest) (resp providers.ReadDataSourceResponse) {
   120  	m := req.Config.AsValueMap()
   121  	m["id"] = cty.StringVal("static_id")
   122  	resp.State = cty.ObjectVal(m)
   123  	return resp
   124  }
   125  
   126  func (s simple) Close() error {
   127  	return nil
   128  }