terraform-provider-gitea/vendor/github.com/hashicorp/terraform-plugin-go/tfprotov5/resource.go
dependabot[bot] 910ccdb092
Bump github.com/hashicorp/terraform-plugin-sdk/v2 from 2.26.1 to 2.27.0
Bumps [github.com/hashicorp/terraform-plugin-sdk/v2](https://github.com/hashicorp/terraform-plugin-sdk) from 2.26.1 to 2.27.0.
- [Release notes](https://github.com/hashicorp/terraform-plugin-sdk/releases)
- [Changelog](https://github.com/hashicorp/terraform-plugin-sdk/blob/main/CHANGELOG.md)
- [Commits](https://github.com/hashicorp/terraform-plugin-sdk/compare/v2.26.1...v2.27.0)

---
updated-dependencies:
- dependency-name: github.com/hashicorp/terraform-plugin-sdk/v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-03 20:21:30 +00:00

475 lines
20 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package tfprotov5
import (
"context"
"github.com/hashicorp/terraform-plugin-go/tftypes"
)
// ResourceServer is an interface containing the methods a resource
// implementation needs to fill.
type ResourceServer interface {
// ValidateResourceTypeConfig is called when Terraform is checking that
// a resource's configuration is valid. It is guaranteed to have types
// conforming to your schema. This is your opportunity to do custom or
// advanced validation prior to a plan being generated.
ValidateResourceTypeConfig(context.Context, *ValidateResourceTypeConfigRequest) (*ValidateResourceTypeConfigResponse, error)
// UpgradeResourceState is called when Terraform has encountered a
// resource with a state in a schema that doesn't match the schema's
// current version. It is the provider's responsibility to modify the
// state to upgrade it to the latest state schema.
UpgradeResourceState(context.Context, *UpgradeResourceStateRequest) (*UpgradeResourceStateResponse, error)
// ReadResource is called when Terraform is refreshing a resource's
// state.
ReadResource(context.Context, *ReadResourceRequest) (*ReadResourceResponse, error)
// PlanResourceChange is called when Terraform is attempting to
// calculate a plan for a resource. Terraform will suggest a proposed
// new state, which the provider can modify or return unmodified to
// influence Terraform's plan.
PlanResourceChange(context.Context, *PlanResourceChangeRequest) (*PlanResourceChangeResponse, error)
// ApplyResourceChange is called when Terraform has detected a diff
// between the resource's state and the user's config, and the user has
// approved a planned change. The provider is to apply the changes
// contained in the plan, and return the resulting state.
ApplyResourceChange(context.Context, *ApplyResourceChangeRequest) (*ApplyResourceChangeResponse, error)
// ImportResourceState is called when a user has requested Terraform
// import a resource. The provider should fetch the information
// specified by the passed ID and return it as one or more resource
// states for Terraform to assume control of.
ImportResourceState(context.Context, *ImportResourceStateRequest) (*ImportResourceStateResponse, error)
}
// ValidateResourceTypeConfigRequest is the request Terraform sends when it
// wants to validate a resource's configuration.
type ValidateResourceTypeConfigRequest struct {
// TypeName is the type of resource Terraform is validating.
TypeName string
// Config is the configuration the user supplied for that resource. See
// the documentation on `DynamicValue` for more information about
// safely accessing the configuration.
//
// The configuration is represented as a tftypes.Object, with each
// attribute and nested block getting its own key and value.
//
// This configuration may contain unknown values if a user uses
// interpolation or other functionality that would prevent Terraform
// from knowing the value at request time. Any attributes not directly
// set in the configuration will be null.
Config *DynamicValue
}
// ValidateResourceTypeConfigResponse is the response from the provider about
// the validity of a resource's configuration.
type ValidateResourceTypeConfigResponse struct {
// Diagnostics report errors or warnings related to the given
// configuration. Returning an empty slice indicates a successful
// validation with no warnings or errors generated.
Diagnostics []*Diagnostic
}
// UpgradeResourceStateRequest is the request Terraform sends when it needs a
// provider to upgrade the state of a given resource.
type UpgradeResourceStateRequest struct {
// TypeName is the type of resource that Terraform needs to upgrade the
// state for.
TypeName string
// Version is the version of the state the resource currently has.
Version int64
// RawState is the state as Terraform sees it right now. See the
// documentation for `RawState` for information on how to work with the
// data it contains.
RawState *RawState
}
// UpgradeResourceStateResponse is the response from the provider containing
// the upgraded state for the given resource.
type UpgradeResourceStateResponse struct {
// UpgradedState is the upgraded state for the resource, represented as
// a `DynamicValue`. See the documentation on `DynamicValue` for
// information about safely creating the `DynamicValue`.
//
// The state should be represented as a tftypes.Object, with each
// attribute and nested block getting its own key and value.
//
// Terraform CLI 0.12 through 0.14 require the Msgpack field to be
// populated or an EOF error will be returned.
UpgradedState *DynamicValue
// Diagnostics report errors or warnings related to upgrading the
// state of the requested resource. Returning an empty slice indicates
// a successful validation with no warnings or errors generated.
Diagnostics []*Diagnostic
}
// ReadResourceRequest is the request Terraform sends when it wants to get the
// latest state for a resource.
type ReadResourceRequest struct {
// TypeName is the type of resource Terraform is requesting an upated
// state for.
TypeName string
// CurrentState is the current state of the resource as far as
// Terraform knows, represented as a `DynamicValue`. See the
// documentation for `DynamicValue` for information about safely
// accessing the state.
//
// The state is represented as a tftypes.Object, with each attribute
// and nested block getting its own key and value.
CurrentState *DynamicValue
// Private is any provider-defined private state stored with the
// resource. It is used for keeping state with the resource that is not
// meant to be included when calculating diffs.
//
// To ensure private state data is preserved, copy any necessary data to
// the ReadResourceResponse type Private field.
Private []byte
// ProviderMeta supplies the provider metadata configuration for the
// module this resource is in. Module-specific provider metadata is an
// advanced feature and usage of it should be coordinated with the
// Terraform Core team by raising an issue at
// https://github.com/hashicorp/terraform/issues/new/choose. See the
// documentation on `DynamicValue` for information about safely
// accessing the configuration.
//
// The configuration is represented as a tftypes.Object, with each
// attribute and nested block getting its own key and value.
//
// This configuration will have known values for all fields.
ProviderMeta *DynamicValue
}
// ReadResourceResponse is the response from the provider about the current
// state of the requested resource.
type ReadResourceResponse struct {
// NewState is the current state of the resource according to the
// provider, represented as a `DynamicValue`. See the documentation for
// `DynamicValue` for information about safely creating the
// `DynamicValue`.
//
// The state should be represented as a tftypes.Object, with each
// attribute and nested block getting its own key and value.
NewState *DynamicValue
// Diagnostics report errors or warnings related to retrieving the
// current state of the requested resource. Returning an empty slice
// indicates a successful validation with no warnings or errors
// generated.
Diagnostics []*Diagnostic
// Private should be set to any state that the provider would like sent
// with requests for this resource. This state will be associated with
// the resource, but will not be considered when calculating diffs.
Private []byte
}
// PlanResourceChangeRequest is the request Terraform sends when it is
// generating a plan for a resource and wants the provider's input on what the
// planned state should be.
type PlanResourceChangeRequest struct {
// TypeName is the type of resource Terraform is generating a plan for.
TypeName string
// PriorState is the state of the resource before the plan is applied,
// represented as a `DynamicValue`. See the documentation for
// `DynamicValue` for information about safely accessing the state.
//
// The state is represented as a tftypes.Object, with each attribute
// and nested block getting its own key and value.
PriorState *DynamicValue
// ProposedNewState is the state that Terraform is proposing for the
// resource, with the changes in the configuration applied, represented
// as a `DynamicValue`. See the documentation for `DynamicValue` for
// information about safely accessing the state.
//
// The ProposedNewState merges any non-null values in the configuration
// with any computed attributes in PriorState as a utility to help
// providers avoid needing to implement such merging functionality
// themselves.
//
// The state is represented as a tftypes.Object, with each attribute
// and nested block getting its own key and value.
//
// The ProposedNewState will be null when planning a delete operation.
ProposedNewState *DynamicValue
// Config is the configuration the user supplied for the resource. See
// the documentation on `DynamicValue` for more information about
// safely accessing the configuration.
//
// The configuration is represented as a tftypes.Object, with each
// attribute and nested block getting its own key and value.
//
// This configuration may contain unknown values if a user uses
// interpolation or other functionality that would prevent Terraform
// from knowing the value at request time.
Config *DynamicValue
// PriorPrivate is any provider-defined private state stored with the
// resource. It is used for keeping state with the resource that is not
// meant to be included when calculating diffs.
//
// To ensure private state data is preserved, copy any necessary data to
// the PlanResourceChangeResponse type PlannedPrivate field.
PriorPrivate []byte
// ProviderMeta supplies the provider metadata configuration for the
// module this resource is in. Module-specific provider metadata is an
// advanced feature and usage of it should be coordinated with the
// Terraform Core team by raising an issue at
// https://github.com/hashicorp/terraform/issues/new/choose. See the
// documentation on `DynamicValue` for information about safely
// accessing the configuration.
//
// The configuration is represented as a tftypes.Object, with each
// attribute and nested block getting its own key and value.
//
// This configuration will have known values for all fields.
ProviderMeta *DynamicValue
}
// PlanResourceChangeResponse is the response from the provider about what the
// planned state for a given resource should be.
type PlanResourceChangeResponse struct {
// PlannedState is the provider's indication of what the state for the
// resource should be after apply, represented as a `DynamicValue`. See
// the documentation for `DynamicValue` for information about safely
// creating the `DynamicValue`.
//
// This is usually derived from the ProposedNewState passed in the
// PlanResourceChangeRequest, with default values substituted for any
// null values and overriding any computed values that are expected to
// change as a result of the apply operation. This may contain unknown
// values if the value could change but its new value won't be known
// until apply time.
//
// Any value that was non-null in the configuration must either
// preserve the exact configuration value or return the corresponding
// value from the prior state. The value from the prior state should be
// returned when the configuration value is semantically equivalent to
// the state value.
//
// Any value that is marked as computed in the schema and is null in
// the configuration may be set by the provider to any value of the
// expected type.
//
// PlanResourceChange will actually be called twice; once when
// generating the plan for the user to approve, once during the apply.
// During the apply, additional values from the configuration--upstream
// values interpolated in that were computed at apply time--will be
// populated. During this second call, any attribute that had a known
// value in the first PlannedState must have an identical value in the
// second PlannedState. Any unknown values may remain unknown or may
// take on any value of the appropriate type. This means the values
// returned in PlannedState should be deterministic and unknown values
// should be used if a field's value may change depending on what value
// ends up filling an unknown value in the config.
//
// The state should be represented as a tftypes.Object, with each
// attribute and nested block getting its own key and value.
PlannedState *DynamicValue
// RequiresReplace is a list of tftypes.AttributePaths that require the
// resource to be replaced. They should point to the specific field
// that changed that requires the resource to be destroyed and
// recreated.
RequiresReplace []*tftypes.AttributePath
// PlannedPrivate should be set to any state that the provider would
// like sent with requests for this resource. This state will be
// associated with the resource, but will not be considered when
// calculating diffs.
//
// This private state data will be sent in the ApplyResourceChange RPC, in
// relation to the types of this package, the ApplyResourceChangeRequest
// type PlannedPrivate field.
PlannedPrivate []byte
// Diagnostics report errors or warnings related to determining the
// planned state of the requested resource. Returning an empty slice
// indicates a successful validation with no warnings or errors
// generated.
Diagnostics []*Diagnostic
// UnsafeToUseLegacyTypeSystem should only be set by
// hashicorp/terraform-plugin-sdk. It modifies Terraform's behavior to
// work with the legacy expectations of that SDK.
//
// Nobody else should use this. Ever. For any reason. Just don't do it.
//
// We have to expose it here for terraform-plugin-sdk to be muxable, or
// we wouldn't even be including it in this type. Don't use it. It may
// go away or change behavior on you with no warning. It is
// explicitly unsupported and not part of our SemVer guarantees.
//
// Deprecated: Really, just don't use this, you don't need it.
UnsafeToUseLegacyTypeSystem bool
}
// ApplyResourceChangeRequest is the request Terraform sends when it needs to
// apply a planned set of changes to a resource.
type ApplyResourceChangeRequest struct {
// TypeName is the type of resource Terraform wants to change.
TypeName string
// PriorState is the state of the resource before the changes are
// applied, represented as a `DynamicValue`. See the documentation for
// `DynamicValue` for information about safely accessing the state.
//
// The state is represented as a tftypes.Object, with each attribute
// and nested block getting its own key and value.
PriorState *DynamicValue
// PlannedState is Terraform's plan for what the state should look like
// after the changes are applied, represented as a `DynamicValue`. See
// the documentation for `DynamicValue` for information about safely
// accessing the state.
//
// This is the PlannedState returned during PlanResourceChange.
//
// The state is represented as a tftypes.Object, with each attribute
// and nested block getting its own key and value.
PlannedState *DynamicValue
// Config is the configuration the user supplied for the resource. See
// the documentation on `DynamicValue` for more information about
// safely accessing the configuration.
//
// The configuration is represented as a tftypes.Object, with each
// attribute and nested block getting its own key and value.
//
// This configuration may contain unknown values.
Config *DynamicValue
// PlannedPrivate is any provider-defined private state stored with the
// resource. It is used for keeping state with the resource that is not
// meant to be included when calculating diffs.
//
// This private state data is sourced from the PlanResourceChange RPC, in
// relation to the types in this package, the PlanResourceChangeResponse
// type PlannedPrivate field.
//
// To ensure private state data is preserved, copy any necessary data to
// the ApplyResourceChangeResponse type Private field.
PlannedPrivate []byte
// ProviderMeta supplies the provider metadata configuration for the
// module this resource is in. Module-specific provider metadata is an
// advanced feature and usage of it should be coordinated with the
// Terraform Core team by raising an issue at
// https://github.com/hashicorp/terraform/issues/new/choose. See the
// documentation on `DynamicValue` for information about safely
// accessing the configuration.
//
// The configuration is represented as a tftypes.Object, with each
// attribute and nested block getting its own key and value.
//
// This configuration will have known values for all fields.
ProviderMeta *DynamicValue
}
// ApplyResourceChangeResponse is the response from the provider about what the
// state of a resource is after planned changes have been applied.
type ApplyResourceChangeResponse struct {
// NewState is the provider's understanding of what the resource's
// state is after changes are applied, represented as a `DynamicValue`.
// See the documentation for `DynamicValue` for information about
// safely creating the `DynamicValue`.
//
// Any attribute, whether computed or not, that has a known value in
// the PlannedState in the ApplyResourceChangeRequest must be preserved
// exactly as it was in NewState.
//
// Any attribute in the PlannedState in the ApplyResourceChangeRequest
// that is unknown must take on a known value at this time. No unknown
// values are allowed in the NewState.
//
// The state should be represented as a tftypes.Object, with each
// attribute and nested block getting its own key and value.
NewState *DynamicValue
// Private should be set to any state that the provider would like sent
// with requests for this resource. This state will be associated with
// the resource, but will not be considered when calculating diffs.
Private []byte
// Diagnostics report errors or warnings related to applying changes to
// the requested resource. Returning an empty slice indicates a
// successful validation with no warnings or errors generated.
Diagnostics []*Diagnostic
// UnsafeToUseLegacyTypeSystem should only be set by
// hashicorp/terraform-plugin-sdk. It modifies Terraform's behavior to
// work with the legacy expectations of that SDK.
//
// Nobody else should use this. Ever. For any reason. Just don't do it.
//
// We have to expose it here for terraform-plugin-sdk to be muxable, or
// we wouldn't even be including it in this type. Don't use it. It may
// go away or change behavior on you with no warning. It is
// explicitly unsupported and not part of our SemVer guarantees.
//
// Deprecated: Really, just don't use this, you don't need it.
UnsafeToUseLegacyTypeSystem bool
}
// ImportResourceStateRequest is the request Terraform sends when it wants a
// provider to import one or more resources specified by an ID.
type ImportResourceStateRequest struct {
// TypeName is the type of resource Terraform wants to import.
TypeName string
// ID is the user-supplied identifying information about the resource
// or resources. Providers decide and communicate to users the format
// for the ID, and use it to determine what resource or resources to
// import.
ID string
}
// ImportResourceStateResponse is the response from the provider about the
// imported resources.
type ImportResourceStateResponse struct {
// ImportedResources are the resources the provider found and was able
// to import.
ImportedResources []*ImportedResource
// Diagnostics report errors or warnings related to importing the
// requested resource or resources. Returning an empty slice indicates
// a successful validation with no warnings or errors generated.
Diagnostics []*Diagnostic
}
// ImportedResource represents a single resource that a provider has
// successfully imported into state.
type ImportedResource struct {
// TypeName is the type of resource that was imported.
TypeName string
// State is the provider's understanding of the imported resource's
// state, represented as a `DynamicValue`. See the documentation for
// `DynamicValue` for information about safely creating the
// `DynamicValue`.
//
// The state should be represented as a tftypes.Object, with each
// attribute and nested block getting its own key and value.
State *DynamicValue
// Private should be set to any state that the provider would like sent
// with requests for this resource. This state will be associated with
// the resource, but will not be considered when calculating diffs.
Private []byte
}