Skip to content

Commit

Permalink
implement resource identity schema for builtin and testing providers
Browse files Browse the repository at this point in the history
  • Loading branch information
DanielMSchmidt committed Feb 12, 2025
1 parent deb1c89 commit a7441b6
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 16 deletions.
7 changes: 5 additions & 2 deletions internal/builtin/providers/terraform/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,11 @@ func (p *Provider) GetProviderSchema() providers.GetProviderSchemaResponse {
}

func (p *Provider) GetResourceIdentitySchemas() providers.GetResourceIdentitySchemasResponse {
// TODO
return providers.GetResourceIdentitySchemasResponse{}
return providers.GetResourceIdentitySchemasResponse{
IdentityTypes: map[string]providers.IdentitySchema{
"terraform_data": dataStoreResourceIdentitySchema(),
},
}
}

// ValidateProviderConfig is used to validate the configuration values.
Expand Down
19 changes: 16 additions & 3 deletions internal/builtin/providers/terraform/resource_data.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,19 @@ func dataStoreResourceSchema() providers.Schema {
}
}

func dataStoreResourceIdentitySchema() providers.IdentitySchema {
return providers.IdentitySchema{
Version: 0,
Attributes: configschema.IdentityAttributes{
"id": &configschema.IdentityAttribute{
Type: cty.String,
Description: "The unique identifier for the data store.",
RequiredForImport: true,
},
},
}
}

func validateDataStoreResourceConfig(req providers.ValidateResourceConfigRequest) (resp providers.ValidateResourceConfigResponse) {
if req.Config.IsNull() {
return resp
Expand Down Expand Up @@ -55,9 +68,9 @@ func upgradeDataStoreResourceState(req providers.UpgradeResourceStateRequest) (r
return resp
}

func upgradeDataStoreResourceIdentity(req providers.UpgradeResourceIdentityRequest) (resp providers.UpgradeResourceIdentityResponse) {
// TODO: Implement this
panic("not implemented")
func upgradeDataStoreResourceIdentity(providers.UpgradeResourceIdentityRequest) (resp providers.UpgradeResourceIdentityResponse) {
resp.Diagnostics = resp.Diagnostics.Append(fmt.Errorf("The builtin provider does not support provider upgrades since it has not changed the identity schema yet."))
return resp
}

func readDataStoreResourceState(req providers.ReadResourceRequest) (resp providers.ReadResourceResponse) {
Expand Down
14 changes: 11 additions & 3 deletions internal/plugin/grpc_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,9 @@ type GRPCProvider struct {

// schema stores the schema for this provider. This is used to properly
// serialize the requests for schemas.
mu sync.Mutex
schema providers.GetProviderSchemaResponse
mu sync.Mutex
schema providers.GetProviderSchemaResponse
identityTypes map[string]providers.IdentitySchema
}

func (p *GRPCProvider) GetProviderSchema() providers.GetProviderSchemaResponse {
Expand Down Expand Up @@ -192,7 +193,13 @@ func (p *GRPCProvider) GetResourceIdentitySchemas() providers.GetResourceIdentit
}
logger.Trace("GRPCProvider: GetResourceIdentitySchemas")

// TODO local cache?
// If the local cache is non-zero, we know this instance has called
// GetResourceIdentitySchema at least once and we can return early.
if p.identityTypes != nil {
return providers.GetResourceIdentitySchemasResponse{
IdentityTypes: p.identityTypes,
}
}

var resp providers.GetResourceIdentitySchemasResponse

Expand Down Expand Up @@ -222,6 +229,7 @@ func (p *GRPCProvider) GetResourceIdentitySchemas() providers.GetResourceIdentit
providers.ResourceIdentitySchemaCache.Set(p.Addr, resp)
}

p.identityTypes = resp.IdentityTypes
return resp
}

Expand Down
12 changes: 9 additions & 3 deletions internal/plugin6/grpc_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,9 @@ type GRPCProvider struct {

// schema stores the schema for this provider. This is used to properly
// serialize the requests for schemas.
mu sync.Mutex
schema providers.GetProviderSchemaResponse
mu sync.Mutex
schema providers.GetProviderSchemaResponse
identityTypes map[string]providers.IdentitySchema
}

func (p *GRPCProvider) GetProviderSchema() providers.GetProviderSchemaResponse {
Expand Down Expand Up @@ -192,7 +193,11 @@ func (p *GRPCProvider) GetResourceIdentitySchemas() providers.GetResourceIdentit
}
logger.Trace("GRPCProvider.v6: GetResourceIdentitySchemas")

// TODO local cache?
if p.identityTypes != nil {
return providers.GetResourceIdentitySchemasResponse{
IdentityTypes: p.identityTypes,
}
}

var resp providers.GetResourceIdentitySchemasResponse

Expand Down Expand Up @@ -221,6 +226,7 @@ func (p *GRPCProvider) GetResourceIdentitySchemas() providers.GetResourceIdentit
if !p.Addr.IsZero() {
providers.ResourceIdentitySchemaCache.Set(p.Addr, resp)
}
p.identityTypes = resp.IdentityTypes

return resp
}
Expand Down
17 changes: 14 additions & 3 deletions internal/provider-simple-v6/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func Provider() providers.Interface {
GetProviderSchemaOptional: true,
},
Functions: map[string]providers.FunctionDecl{
"noop": providers.FunctionDecl{
"noop": {
Parameters: []providers.FunctionParam{
{
Name: "noop",
Expand All @@ -81,8 +81,19 @@ func (s simple) GetProviderSchema() providers.GetProviderSchemaResponse {
}

func (s simple) GetResourceIdentitySchemas() providers.GetResourceIdentitySchemasResponse {
// TODO
return providers.GetResourceIdentitySchemasResponse{}
return providers.GetResourceIdentitySchemasResponse{
IdentityTypes: map[string]providers.IdentitySchema{
"simple_resource": {
Version: 0,
Attributes: configschema.IdentityAttributes{
"id": {
Type: cty.String,
RequiredForImport: true,
},
},
},
},
}
}

func (s simple) ValidateProviderConfig(req providers.ValidateProviderConfigRequest) (resp providers.ValidateProviderConfigResponse) {
Expand Down
15 changes: 13 additions & 2 deletions internal/provider-simple/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,19 @@ func (s simple) GetProviderSchema() providers.GetProviderSchemaResponse {
}

func (s simple) GetResourceIdentitySchemas() providers.GetResourceIdentitySchemasResponse {
// TODO
return providers.GetResourceIdentitySchemasResponse{}
return providers.GetResourceIdentitySchemasResponse{
IdentityTypes: map[string]providers.IdentitySchema{
"simple_resource": {
Version: 0,
Attributes: configschema.IdentityAttributes{
"id": {
Type: cty.String,
RequiredForImport: true,
},
},
},
},
}
}

func (s simple) ValidateProviderConfig(req providers.ValidateProviderConfigRequest) (resp providers.ValidateProviderConfigResponse) {
Expand Down

0 comments on commit a7441b6

Please sign in to comment.