| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: BUSL-1.1 |
| |
| package providers |
| |
| import ( |
| "github.com/zclconf/go-cty/cty" |
| |
| "github.com/hashicorp/terraform/internal/configs/configschema" |
| "github.com/hashicorp/terraform/internal/tfdiags" |
| ) |
| |
| // Interface represents the set of methods required for a complete resource |
| // provider plugin. |
| type Interface interface { |
| // GetSchema returns the complete schema for the provider. |
| GetProviderSchema() GetProviderSchemaResponse |
| |
| // GetResourceIdentitySchemas returns the identity schemas for all managed resources |
| // for the provider. Usually you don't need to call this method directly as GetProviderSchema |
| // will merge the identity schemas into the provider schema. |
| GetResourceIdentitySchemas() GetResourceIdentitySchemasResponse |
| |
| // ValidateProviderConfig allows the provider to validate the configuration. |
| // The ValidateProviderConfigResponse.PreparedConfig field is unused. The |
| // final configuration is not stored in the state, and any modifications |
| // that need to be made must be made during the Configure method call. |
| ValidateProviderConfig(ValidateProviderConfigRequest) ValidateProviderConfigResponse |
| |
| // ValidateResourceConfig allows the provider to validate the resource |
| // configuration values. |
| ValidateResourceConfig(ValidateResourceConfigRequest) ValidateResourceConfigResponse |
| |
| // ValidateDataResourceConfig allows the provider to validate the data source |
| // configuration values. |
| ValidateDataResourceConfig(ValidateDataResourceConfigRequest) ValidateDataResourceConfigResponse |
| |
| // ValidateEphemeralResourceConfig allows the provider to validate the |
| // ephemeral resource configuration values. |
| ValidateEphemeralResourceConfig(ValidateEphemeralResourceConfigRequest) ValidateEphemeralResourceConfigResponse |
| |
| // UpgradeResourceState is called when the state loader encounters an |
| // instance state whose schema version is less than the one reported by the |
| // currently-used version of the corresponding provider, and the upgraded |
| // result is used for any further processing. |
| UpgradeResourceState(UpgradeResourceStateRequest) UpgradeResourceStateResponse |
| |
| // UpgradeResourceIdentity is called when the state loader encounters an |
| // instance identity whose schema version is less than the one reported by |
| // the currently-used version of the corresponding provider, and the upgraded |
| // result is used for any further processing. |
| UpgradeResourceIdentity(UpgradeResourceIdentityRequest) UpgradeResourceIdentityResponse |
| |
| // Configure configures and initialized the provider. |
| ConfigureProvider(ConfigureProviderRequest) ConfigureProviderResponse |
| |
| // Stop is called when the provider should halt any in-flight actions. |
| // |
| // Stop should not block waiting for in-flight actions to complete. It |
| // should take any action it wants and return immediately acknowledging it |
| // has received the stop request. Terraform will not make any further API |
| // calls to the provider after Stop is called. |
| // |
| // The error returned, if non-nil, is assumed to mean that signaling the |
| // stop somehow failed and that the user should expect potentially waiting |
| // a longer period of time. |
| Stop() error |
| |
| // ReadResource refreshes a resource and returns its current state. |
| ReadResource(ReadResourceRequest) ReadResourceResponse |
| |
| // PlanResourceChange takes the current state and proposed state of a |
| // resource, and returns the planned final state. |
| PlanResourceChange(PlanResourceChangeRequest) PlanResourceChangeResponse |
| |
| // ApplyResourceChange takes the planned state for a resource, which may |
| // yet contain unknown computed values, and applies the changes returning |
| // the final state. |
| ApplyResourceChange(ApplyResourceChangeRequest) ApplyResourceChangeResponse |
| |
| // ImportResourceState requests that the given resource be imported. |
| ImportResourceState(ImportResourceStateRequest) ImportResourceStateResponse |
| |
| // MoveResourceState retrieves the updated value for a resource after it |
| // has moved resource types. |
| MoveResourceState(MoveResourceStateRequest) MoveResourceStateResponse |
| |
| // ReadDataSource returns the data source's current state. |
| ReadDataSource(ReadDataSourceRequest) ReadDataSourceResponse |
| |
| // OpenEphemeralResource opens an ephemeral resource instance. |
| OpenEphemeralResource(OpenEphemeralResourceRequest) OpenEphemeralResourceResponse |
| // RenewEphemeralResource extends the validity of a previously-opened ephemeral |
| // resource instance. |
| RenewEphemeralResource(RenewEphemeralResourceRequest) RenewEphemeralResourceResponse |
| // CloseEphemeralResource closes an ephemeral resource instance, with the intent |
| // of rendering it invalid as soon as possible. |
| CloseEphemeralResource(CloseEphemeralResourceRequest) CloseEphemeralResourceResponse |
| |
| // CallFunction calls a provider-contributed function. |
| CallFunction(CallFunctionRequest) CallFunctionResponse |
| |
| // Close shuts down the plugin process if applicable. |
| Close() error |
| } |
| |
| // GetProviderSchemaResponse is the return type for GetProviderSchema, and |
| // should only be used when handling a value for that method. The handling of |
| // of schemas in any other context should always use ProviderSchema, so that |
| // the in-memory representation can be more easily changed separately from the |
| // RPC protocol. |
| type GetProviderSchemaResponse struct { |
| // Provider is the schema for the provider itself. |
| Provider Schema |
| |
| // ProviderMeta is the schema for the provider's meta info in a module |
| ProviderMeta Schema |
| |
| // ResourceTypes map the resource type name to that type's schema. |
| ResourceTypes map[string]Schema |
| |
| // DataSources maps the data source name to that data source's schema. |
| DataSources map[string]Schema |
| |
| // EphemeralResourceTypes maps the name of an ephemeral resource type |
| // to its schema. |
| EphemeralResourceTypes map[string]Schema |
| |
| // Functions maps from local function name (not including an namespace |
| // prefix) to the declaration of a function. |
| Functions map[string]FunctionDecl |
| |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| |
| // ServerCapabilities lists optional features supported by the provider. |
| ServerCapabilities ServerCapabilities |
| } |
| |
| // GetResourceIdentitySchemasResponse is the return type for GetResourceIdentitySchemas, |
| // and should only be used when handling a value for that method. The handling of |
| // of schemas in any other context should always use ResourceIdentitySchemas, so that |
| // the in-memory representation can be more easily changed separately from the |
| // RPC protocol. |
| type GetResourceIdentitySchemasResponse struct { |
| // IdentityTypes map the resource type name to that type's identity schema. |
| IdentityTypes map[string]IdentitySchema |
| |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| } |
| |
| type IdentitySchema struct { |
| Version int64 |
| |
| Body *configschema.Object |
| } |
| |
| // Schema pairs a provider or resource schema with that schema's version. |
| // This is used to be able to upgrade the schema in UpgradeResourceState. |
| // |
| // This describes the schema for a single object within a provider. Type |
| // "Schemas" (plural) instead represents the overall collection of schemas |
| // for everything within a particular provider. |
| type Schema struct { |
| Version int64 |
| Body *configschema.Block |
| |
| IdentityVersion int64 |
| Identity *configschema.Object |
| } |
| |
| // ServerCapabilities allows providers to communicate extra information |
| // regarding supported protocol features. This is used to indicate availability |
| // of certain forward-compatible changes which may be optional in a major |
| // protocol version, but cannot be tested for directly. |
| type ServerCapabilities struct { |
| // PlanDestroy signals that this provider expects to receive a |
| // PlanResourceChange call for resources that are to be destroyed. |
| PlanDestroy bool |
| |
| // The GetProviderSchemaOptional capability indicates that this |
| // provider does not require calling GetProviderSchema to operate |
| // normally, and the caller can used a cached copy of the provider's |
| // schema. |
| GetProviderSchemaOptional bool |
| |
| // The MoveResourceState capability indicates that this provider supports |
| // the MoveResourceState RPC. |
| MoveResourceState bool |
| } |
| |
| // ClientCapabilities allows Terraform to publish information regarding |
| // supported protocol features. This is used to indicate availability of |
| // certain forward-compatible changes which may be optional in a major |
| // protocol version, but cannot be tested for directly. |
| type ClientCapabilities struct { |
| // The deferral_allowed capability signals that the client is able to |
| // handle deferred responses from the provider. |
| DeferralAllowed bool |
| |
| // The write_only_attributes_allowed capability signals that the client |
| // is able to handle write_only attributes for managed resources. |
| WriteOnlyAttributesAllowed bool |
| } |
| |
| type ValidateProviderConfigRequest struct { |
| // Config is the raw configuration value for the provider. |
| Config cty.Value |
| } |
| |
| type ValidateProviderConfigResponse struct { |
| // PreparedConfig is unused and will be removed with support for plugin protocol v5. |
| PreparedConfig cty.Value |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| } |
| |
| type ValidateResourceConfigRequest struct { |
| // TypeName is the name of the resource type to validate. |
| TypeName string |
| |
| // Config is the configuration value to validate, which may contain unknown |
| // values. |
| Config cty.Value |
| |
| // ClientCapabilities contains information about the client's capabilities. |
| ClientCapabilities ClientCapabilities |
| } |
| |
| type ValidateResourceConfigResponse struct { |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| } |
| |
| type ValidateDataResourceConfigRequest struct { |
| // TypeName is the name of the data source type to validate. |
| TypeName string |
| |
| // Config is the configuration value to validate, which may contain unknown |
| // values. |
| Config cty.Value |
| } |
| |
| type ValidateDataResourceConfigResponse struct { |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| } |
| |
| type ValidateEphemeralResourceConfigRequest struct { |
| // TypeName is the name of the data source type to validate. |
| TypeName string |
| |
| // Config is the configuration value to validate, which may contain unknown |
| // values. |
| Config cty.Value |
| } |
| |
| type ValidateEphemeralResourceConfigResponse struct { |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| } |
| |
| type UpgradeResourceStateRequest struct { |
| // TypeName is the name of the resource type being upgraded |
| TypeName string |
| |
| // Version is version of the schema that created the current state. |
| Version int64 |
| |
| // RawStateJSON and RawStateFlatmap contain the state that needs to be |
| // upgraded to match the current schema version. Because the schema is |
| // unknown, this contains only the raw data as stored in the state. |
| // RawStateJSON is the current json state encoding. |
| // RawStateFlatmap is the legacy flatmap encoding. |
| // Only one of these fields may be set for the upgrade request. |
| RawStateJSON []byte |
| RawStateFlatmap map[string]string |
| } |
| |
| type UpgradeResourceStateResponse struct { |
| // UpgradedState is the newly upgraded resource state. |
| UpgradedState cty.Value |
| |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| } |
| |
| type UpgradeResourceIdentityRequest struct { |
| // TypeName is the name of the resource type being upgraded |
| TypeName string |
| |
| // Version is version of the schema that created the current identity. |
| Version int64 |
| |
| // RawIdentityJSON contains the identity that needs to be |
| // upgraded to match the current schema version. |
| RawIdentityJSON []byte |
| } |
| |
| type UpgradeResourceIdentityResponse struct { |
| // UpgradedState is the newly upgraded resource identity. |
| UpgradedIdentity cty.Value |
| |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| } |
| |
| type ConfigureProviderRequest struct { |
| // Terraform version is the version string from the running instance of |
| // terraform. Providers can use TerraformVersion to verify compatibility, |
| // and to store for informational purposes. |
| TerraformVersion string |
| |
| // Config is the complete configuration value for the provider. |
| Config cty.Value |
| |
| // ClientCapabilities contains information about the client's capabilities. |
| ClientCapabilities ClientCapabilities |
| } |
| |
| type ConfigureProviderResponse struct { |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| } |
| |
| type ReadResourceRequest struct { |
| // TypeName is the name of the resource type being read. |
| TypeName string |
| |
| // PriorState contains the previously saved state value for this resource. |
| PriorState cty.Value |
| |
| // Private is an opaque blob that will be stored in state along with the |
| // resource. It is intended only for interpretation by the provider itself. |
| Private []byte |
| |
| // ProviderMeta is the configuration for the provider_meta block for the |
| // module and provider this resource belongs to. Its use is defined by |
| // each provider, and it should not be used without coordination with |
| // HashiCorp. It is considered experimental and subject to change. |
| ProviderMeta cty.Value |
| |
| // ClientCapabilities contains information about the client's capabilities. |
| ClientCapabilities ClientCapabilities |
| |
| // CurrentIdentity is the current identity data of the resource. |
| CurrentIdentity cty.Value |
| } |
| |
| // DeferredReason is a string that describes why a resource was deferred. |
| // It differs from the protobuf enum in that it adds more cases |
| // since it's more widely used to represent the reason for deferral. |
| // Reasons like instance count unknown and deferred prereq are not |
| // relevant for providers but can occur in general. |
| type DeferredReason string |
| |
| const ( |
| // DeferredReasonInvalid is used when the reason for deferring is |
| // unknown or irrelevant. |
| DeferredReasonInvalid DeferredReason = "invalid" |
| |
| // DeferredReasonInstanceCountUnknown is used when the reason for deferring |
| // is that the count or for_each meta-attribute was unknown. |
| DeferredReasonInstanceCountUnknown DeferredReason = "instance_count_unknown" |
| |
| // DeferredReasonResourceConfigUnknown is used when the reason for deferring |
| // is that the resource configuration was unknown. |
| DeferredReasonResourceConfigUnknown DeferredReason = "resource_config_unknown" |
| |
| // DeferredReasonProviderConfigUnknown is used when the reason for deferring |
| // is that the provider configuration was unknown. |
| DeferredReasonProviderConfigUnknown DeferredReason = "provider_config_unknown" |
| |
| // DeferredReasonAbsentPrereq is used when the reason for deferring is that |
| // a required prerequisite resource was absent. |
| DeferredReasonAbsentPrereq DeferredReason = "absent_prereq" |
| |
| // DeferredReasonDeferredPrereq is used when the reason for deferring is |
| // that a required prerequisite resource was itself deferred. |
| DeferredReasonDeferredPrereq DeferredReason = "deferred_prereq" |
| ) |
| |
| type Deferred struct { |
| Reason DeferredReason |
| } |
| |
| type ReadResourceResponse struct { |
| // NewState contains the current state of the resource. |
| NewState cty.Value |
| |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| |
| // Private is an opaque blob that will be stored in state along with the |
| // resource. It is intended only for interpretation by the provider itself. |
| Private []byte |
| |
| // Deferred if present signals that the provider was not able to fully |
| // complete this operation and a susequent run is required. |
| Deferred *Deferred |
| |
| // Identity is the object-typed value representing the identity of the remote |
| // object within Terraform. |
| Identity cty.Value |
| } |
| |
| type PlanResourceChangeRequest struct { |
| // TypeName is the name of the resource type to plan. |
| TypeName string |
| |
| // PriorState is the previously saved state value for this resource. |
| PriorState cty.Value |
| |
| // ProposedNewState is the expected state after the new configuration is |
| // applied. This is created by directly applying the configuration to the |
| // PriorState. The provider is then responsible for applying any further |
| // changes required to create the proposed final state. |
| ProposedNewState cty.Value |
| |
| // Config is the resource configuration, before being merged with the |
| // PriorState. Any value not explicitly set in the configuration will be |
| // null. Config is supplied for reference, but Provider implementations |
| // should prefer the ProposedNewState in most circumstances. |
| Config cty.Value |
| |
| // PriorPrivate is the previously saved private data returned from the |
| // provider during the last apply. |
| PriorPrivate []byte |
| |
| // ProviderMeta is the configuration for the provider_meta block for the |
| // module and provider this resource belongs to. Its use is defined by |
| // each provider, and it should not be used without coordination with |
| // HashiCorp. It is considered experimental and subject to change. |
| ProviderMeta cty.Value |
| |
| // ClientCapabilities contains information about the client's capabilities. |
| ClientCapabilities ClientCapabilities |
| |
| // PriorIdentity is the current identity data of the resource. |
| PriorIdentity cty.Value |
| } |
| |
| type PlanResourceChangeResponse struct { |
| // PlannedState is the expected state of the resource once the current |
| // configuration is applied. |
| PlannedState cty.Value |
| |
| // RequiresReplace is the list of the attributes that are requiring |
| // resource replacement. |
| RequiresReplace []cty.Path |
| |
| // PlannedPrivate is an opaque blob that is not interpreted by terraform |
| // core. This will be saved and relayed back to the provider during |
| // ApplyResourceChange. |
| PlannedPrivate []byte |
| |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| |
| // LegacyTypeSystem is set only if the provider is using the legacy SDK |
| // whose type system cannot be precisely mapped into the Terraform type |
| // system. We use this to bypass certain consistency checks that would |
| // otherwise fail due to this imprecise mapping. No other provider or SDK |
| // implementation is permitted to set this. |
| LegacyTypeSystem bool |
| |
| // Deferred if present signals that the provider was not able to fully |
| // complete this operation and a susequent run is required. |
| Deferred *Deferred |
| |
| // PlannedIdentity is the planned identity data of the resource. |
| PlannedIdentity cty.Value |
| } |
| |
| type ApplyResourceChangeRequest struct { |
| // TypeName is the name of the resource type being applied. |
| TypeName string |
| |
| // PriorState is the current state of resource. |
| PriorState cty.Value |
| |
| // Planned state is the state returned from PlanResourceChange, and should |
| // represent the new state, minus any remaining computed attributes. |
| PlannedState cty.Value |
| |
| // Config is the resource configuration, before being merged with the |
| // PriorState. Any value not explicitly set in the configuration will be |
| // null. Config is supplied for reference, but Provider implementations |
| // should prefer the PlannedState in most circumstances. |
| Config cty.Value |
| |
| // PlannedPrivate is the same value as returned by PlanResourceChange. |
| PlannedPrivate []byte |
| |
| // ProviderMeta is the configuration for the provider_meta block for the |
| // module and provider this resource belongs to. Its use is defined by |
| // each provider, and it should not be used without coordination with |
| // HashiCorp. It is considered experimental and subject to change. |
| ProviderMeta cty.Value |
| |
| // PlannedIdentity is the planned identity data of the resource. |
| PlannedIdentity cty.Value |
| } |
| |
| type ApplyResourceChangeResponse struct { |
| // NewState is the new complete state after applying the planned change. |
| // In the event of an error, NewState should represent the most recent |
| // known state of the resource, if it exists. |
| NewState cty.Value |
| |
| // Private is an opaque blob that will be stored in state along with the |
| // resource. It is intended only for interpretation by the provider itself. |
| Private []byte |
| |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| |
| // LegacyTypeSystem is set only if the provider is using the legacy SDK |
| // whose type system cannot be precisely mapped into the Terraform type |
| // system. We use this to bypass certain consistency checks that would |
| // otherwise fail due to this imprecise mapping. No other provider or SDK |
| // implementation is permitted to set this. |
| LegacyTypeSystem bool |
| |
| // NewIdentity is the new identity data of the resource. |
| NewIdentity cty.Value |
| } |
| |
| type ImportResourceStateRequest struct { |
| // TypeName is the name of the resource type to be imported. |
| TypeName string |
| |
| // ID is a string with which the provider can identify the resource to be |
| // imported. |
| ID string |
| |
| // ClientCapabilities contains information about the client's capabilities. |
| ClientCapabilities ClientCapabilities |
| |
| // Identity is the identity data of the resource. |
| Identity cty.Value |
| } |
| |
| type ImportResourceStateResponse struct { |
| // ImportedResources contains one or more state values related to the |
| // imported resource. It is not required that these be complete, only that |
| // there is enough identifying information for the provider to successfully |
| // update the states in ReadResource. |
| ImportedResources []ImportedResource |
| |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| |
| // Deferred if present signals that the provider was not able to fully |
| // complete this operation and a susequent run is required. |
| Deferred *Deferred |
| } |
| |
| // ImportedResource represents an object being imported into Terraform with the |
| // help of a provider. An ImportedResource is a RemoteObject that has been read |
| // by the provider's import handler but hasn't yet been committed to state. |
| type ImportedResource struct { |
| // TypeName is the name of the resource type associated with the |
| // returned state. It's possible for providers to import multiple related |
| // types with a single import request. |
| TypeName string |
| |
| // State is the state of the remote object being imported. This may not be |
| // complete, but must contain enough information to uniquely identify the |
| // resource. |
| State cty.Value |
| |
| // Private is an opaque blob that will be stored in state along with the |
| // resource. It is intended only for interpretation by the provider itself. |
| Private []byte |
| |
| // Identity is the identity data of the resource. |
| Identity cty.Value |
| } |
| |
| type MoveResourceStateRequest struct { |
| // SourceProviderAddress is the address of the provider that the resource |
| // is being moved from. |
| SourceProviderAddress string |
| |
| // SourceTypeName is the name of the resource type that the resource is |
| // being moved from. |
| SourceTypeName string |
| |
| // SourceSchemaVersion is the schema version of the resource type that the |
| // resource is being moved from. |
| SourceSchemaVersion int64 |
| |
| // SourceStateJSON contains the state of the resource that is being moved. |
| // Because the schema is unknown, this contains only the raw data as stored |
| // in the state. |
| SourceStateJSON []byte |
| |
| // SourcePrivate contains the private state of the resource that is being |
| // moved. |
| SourcePrivate []byte |
| |
| // TargetTypeName is the name of the resource type that the resource is |
| // being moved to. |
| TargetTypeName string |
| |
| // SourceIdentity is the identity data of the resource that is being moved. |
| SourceIdentity []byte |
| } |
| |
| type MoveResourceStateResponse struct { |
| // TargetState is the state of the resource after it has been moved to the |
| // new resource type. |
| TargetState cty.Value |
| |
| // TargetPrivate is the private state of the resource after it has been |
| // moved to the new resource type. |
| TargetPrivate []byte |
| |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| |
| // TargetIdentity is the identity data of the resource that is being moved. |
| TargetIdentity cty.Value |
| } |
| |
| type ReadDataSourceRequest struct { |
| // TypeName is the name of the data source type to Read. |
| TypeName string |
| |
| // Config is the complete configuration for the requested data source. |
| Config cty.Value |
| |
| // ProviderMeta is the configuration for the provider_meta block for the |
| // module and provider this resource belongs to. Its use is defined by |
| // each provider, and it should not be used without coordination with |
| // HashiCorp. It is considered experimental and subject to change. |
| ProviderMeta cty.Value |
| |
| // ClientCapabilities contains information about the client's capabilities. |
| ClientCapabilities ClientCapabilities |
| } |
| |
| type ReadDataSourceResponse struct { |
| // State is the current state of the requested data source. |
| State cty.Value |
| |
| // Diagnostics contains any warnings or errors from the method call. |
| Diagnostics tfdiags.Diagnostics |
| |
| // Deferred if present signals that the provider was not able to fully |
| // complete this operation and a susequent run is required. |
| Deferred *Deferred |
| } |
| |
| type CallFunctionRequest struct { |
| // FunctionName is the local name of the function to call, as it was |
| // declared by the provider in its schema and without any |
| // externally-imposed namespace prefixes. |
| FunctionName string |
| |
| // Arguments are the positional argument values given at the call site. |
| // |
| // Provider functions are required to behave as pure functions, and so |
| // if all of the argument values are known then two separate calls with the |
| // same arguments must always return an identical value, without performing |
| // any externally-visible side-effects. |
| Arguments []cty.Value |
| } |
| |
| type CallFunctionResponse struct { |
| // Result is the successful result of the function call. |
| // |
| // If all of the arguments in the call were known then the result must |
| // also be known. If any arguments were unknown then the result may |
| // optionally be unknown. The type of the returned value must conform |
| // to the return type constraint for this function as declared in the |
| // provider schema. |
| // |
| // If Diagnostics contains any errors, this field will be ignored and |
| // so can be left as cty.NilVal to represent the absense of a value. |
| Result cty.Value |
| |
| // Err is the error value from the function call. This may be an instance |
| // of function.ArgError from the go-cty package to specify a problem with a |
| // specific argument. |
| Err error |
| } |