terraform/internal/plans/internal/planproto/planfile.proto

234 lines
9.5 KiB
Protocol Buffer

syntax = "proto3";
package tfplan;
// For Terraform's own parsing, the proto stub types go into an internal Go
// package. The public API is in github.com/hashicorp/terraform/plans/planfile .
option go_package = "github.com/hashicorp/terraform/internal/plans/internal/planproto";
// Plan is the root message type for the tfplan file
message Plan {
// Version is incremented whenever there is a breaking change to
// the serialization format. Programs reading serialized plans should
// verify that version is set to the expected value and abort processing
// if not. A breaking change is any change that may cause an older
// consumer to interpret the structure incorrectly. This number will
// not be incremented if an existing consumer can either safely ignore
// changes to the format or if an existing consumer would fail to process
// the file for another message- or field-specific reason.
uint64 version = 1;
// The mode that was active when this plan was created.
//
// This is saved only for UI purposes, so that Terraform can tailor its
// rendering of the plan depending on the mode. This must never be used to
// make decisions in Terraform Core during the applying of a plan.
Mode ui_mode = 17;
// The variables that were set when creating the plan. Each value is
// a msgpack serialization of an HCL value.
map<string, DynamicValue> variables = 2;
// An unordered set of proposed changes to resources throughout the
// configuration, including any nested modules. Use the address of
// each resource to determine which module it belongs to.
repeated ResourceInstanceChange resource_changes = 3;
// An unordered set of detected drift: changes made to resources outside of
// Terraform, computed by comparing the previous run's state to the state
// after refresh.
repeated ResourceInstanceChange resource_drift = 18;
// An unordered set of proposed changes to outputs in the root module
// of the configuration. This set also includes "no action" changes for
// outputs that are not changing, as context for detecting inconsistencies
// at apply time.
repeated OutputChange output_changes = 4;
// An unordered set of target addresses to include when applying. If no
// target addresses are present, the plan applies to the whole
// configuration.
repeated string target_addrs = 5;
// An unordered set of force-replace addresses to include when applying.
// This must match the set of addresses that was used when creating the
// plan, or else applying the plan will fail when it reaches a different
// conclusion about what action a particular resource instance needs.
repeated string force_replace_addrs = 16;
// The version string for the Terraform binary that created this plan.
string terraform_version = 14;
// Backend is a description of the backend configuration and other related
// settings at the time the plan was created.
Backend backend = 13;
}
// Mode describes the planning mode that created the plan.
enum Mode {
NORMAL = 0;
DESTROY = 1;
REFRESH_ONLY = 2;
}
// Backend is a description of backend configuration and other related settings.
message Backend {
string type = 1;
DynamicValue config = 2;
string workspace = 3;
}
// Action describes the type of action planned for an object.
// Not all action values are valid for all object types.
enum Action {
NOOP = 0;
CREATE = 1;
READ = 2;
UPDATE = 3;
DELETE = 5;
DELETE_THEN_CREATE = 6;
CREATE_THEN_DELETE = 7;
}
// Change represents a change made to some object, transforming it from an old
// state to a new state.
message Change {
// Not all action values are valid for all object types. Consult
// the documentation for any message that embeds Change.
Action action = 1;
// msgpack-encoded HCL values involved in the change.
// - For update and replace, two values are provided that give the old and new values,
// respectively.
// - For create, one value is provided that gives the new value to be created
// - For delete, one value is provided that describes the value being deleted
// - For read, two values are provided that give the prior value for this object
// (or null, if no prior value exists) and the value that was or will be read,
// respectively.
// - For no-op, one value is provided that is left unmodified by this non-change.
repeated DynamicValue values = 2;
// An unordered set of paths into the old value which are marked as
// sensitive. Values at these paths should be obscured in human-readable
// output. This set is always empty for create.
repeated Path before_sensitive_paths = 3;
// An unordered set of paths into the new value which are marked as
// sensitive. Values at these paths should be obscured in human-readable
// output. This set is always empty for delete.
repeated Path after_sensitive_paths = 4;
}
// ResourceInstanceActionReason sometimes provides some additional user-facing
// context for why a particular action was chosen for a resource instance.
// This is for user feedback only and never used to drive behavior during the
// subsequent apply step.
enum ResourceInstanceActionReason {
NONE = 0;
REPLACE_BECAUSE_TAINTED = 1;
REPLACE_BY_REQUEST = 2;
REPLACE_BECAUSE_CANNOT_UPDATE = 3;
DELETE_BECAUSE_NO_RESOURCE_CONFIG = 4;
DELETE_BECAUSE_WRONG_REPETITION = 5;
DELETE_BECAUSE_COUNT_INDEX = 6;
DELETE_BECAUSE_EACH_KEY = 7;
DELETE_BECAUSE_NO_MODULE = 8;
}
message ResourceInstanceChange {
// addr is a string representation of the resource instance address that
// this change will apply to.
string addr = 13;
// prev_run_addr is a string representation of the address at which
// this resource instance was tracked during the previous apply operation.
//
// This is populated only if it would be different from addr due to
// Terraform having reacted to refactoring annotations in the configuration.
// If empty, the previous run address is the same as the current address.
string prev_run_addr = 14;
// NOTE: Earlier versions of this format had fields 1 through 6 describing
// various indivdual parts of "addr". We're now using our standard compact
// string representation to capture the same information. We don't support
// preserving plan files from one Terraform version to the next, so we
// no longer declare nor accept those fields.
// deposed_key, if set, indicates that this change applies to a deposed
// object for the indicated instance with the given deposed key. If not
// set, the change applies to the instance's current object.
string deposed_key = 7;
// provider is the address of the provider configuration that this change
// was planned with, and thus the configuration that must be used to
// apply it.
string provider = 8;
// Description of the proposed change. May use "create", "read", "update",
// "replace", "delete" and "no-op" actions.
Change change = 9;
// raw blob value provided by the provider as additional context for the
// change. Must be considered an opaque value for any consumer other than
// the provider that generated it, and will be returned verbatim to the
// provider during the subsequent apply operation.
bytes private = 10;
// An unordered set of paths that prompted the change action to be
// "replace" rather than "update". Empty for any action other than
// "replace".
repeated Path required_replace = 11;
// Optional extra user-oriented context for why change.Action was chosen.
// This is for user feedback only and never used to drive behavior during
// apply.
ResourceInstanceActionReason action_reason = 12;
}
message OutputChange {
// Name of the output as defined in the root module.
string name = 1;
// Description of the proposed change. May use "no-op", "create",
// "update" and "delete" actions.
Change change = 2;
// Sensitive, if true, indicates that one or more of the values given
// in "change" is sensitive and should not be shown directly in any
// rendered plan.
bool sensitive = 3;
}
// DynamicValue represents a value whose type is not decided until runtime,
// often based on schema information obtained from a plugin.
//
// At present dynamic values are always encoded as msgpack, with extension
// id 0 used to represent the special "unknown" value indicating results
// that won't be known until after apply.
//
// In future other serialization formats may be used, possibly with a
// transitional period of including both as separate attributes of this type.
// Consumers must ignore attributes they don't support and fail if no supported
// attribute is present. The top-level format version will not be incremented
// for changes to the set of dynamic serialization formats.
message DynamicValue {
bytes msgpack = 1;
}
// Path represents a set of steps to traverse into a data structure. It is
// used to refer to a sub-structure within a dynamic data structure presented
// separately.
message Path {
message Step {
oneof selector {
// Set "attribute_name" to represent looking up an attribute
// in the current object value.
string attribute_name = 1;
// Set "element_key" to represent looking up an element in
// an indexable collection type.
DynamicValue element_key = 2;
}
}
repeated Step steps = 1;
}