| 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; |
| |
| // Errored is true for any plan whose creation was interrupted by an |
| // error. A plan with this flag set cannot be applied, and the changes |
| // it proposes are likely to be incomplete. |
| bool errored = 20; |
| |
| // 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 check results for the entire configuration. |
| // |
| // Each element represents a single static configuration object that has |
| // checks, and each of those may have zero or more dynamic objects that |
| // the checks were applied to nested within. |
| repeated CheckResults check_results = 19; |
| |
| // 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; |
| |
| message resource_attr { |
| string resource = 1; |
| Path attr= 2; |
| }; |
| |
| // RelevantAttributes lists individual resource attributes from |
| // ResourceDrift which may have contributed to the plan changes. |
| repeated resource_attr relevant_attributes = 15; |
| } |
| |
| // 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; |
| REPLACE_BY_TRIGGERS = 9; |
| READ_BECAUSE_CONFIG_UNKNOWN = 10; |
| READ_BECAUSE_DEPENDENCY_PENDING = 11; |
| DELETE_BECAUSE_NO_MOVE_TARGET = 12; |
| } |
| |
| 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; |
| } |
| |
| message CheckResults { |
| // Status describes the status of a particular checkable object at the |
| // completion of the plan. |
| enum Status { |
| UNKNOWN = 0; |
| PASS = 1; |
| FAIL = 2; |
| ERROR = 3; |
| } |
| |
| enum ObjectKind { |
| UNSPECIFIED = 0; |
| RESOURCE = 1; |
| OUTPUT_VALUE = 2; |
| } |
| |
| message ObjectResult { |
| string object_addr = 1; |
| Status status = 2; |
| repeated string failure_messages = 3; |
| } |
| |
| ObjectKind kind = 1; |
| |
| // Address of the configuration object that declared the checks. |
| string config_addr = 2; |
| |
| // The aggregate status of the entire configuration object, based on |
| // the statuses of its zero or more checkable objects. |
| Status status = 3; |
| |
| // The results for individual objects that were declared by the |
| // configuration object named in config_addr. |
| repeated ObjectResult objects = 4; |
| } |
| |
| // 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; |
| } |