github.com/kanishk98/terraform@v1.3.0-dev.0.20220917174235-661ca8088a6a/docs/plugin-protocol/tfplugin5.3.proto (about)

     1  // Terraform Plugin RPC protocol version 5.3
     2  //
     3  // This file defines version 5.3 of the RPC protocol. To implement a plugin
     4  // against this protocol, copy this definition into your own codebase and
     5  // use protoc to generate stubs for your target language.
     6  //
     7  // This file will not be updated. Any minor versions of protocol 5 to follow
     8  // should copy this file and modify the copy while maintaing backwards
     9  // compatibility. Breaking changes, if any are required, will come
    10  // in a subsequent major version with its own separate proto definition.
    11  //
    12  // Note that only the proto files included in a release tag of Terraform are
    13  // official protocol releases. Proto files taken from other commits may include
    14  // incomplete changes or features that did not make it into a final release.
    15  // In all reasonable cases, plugin developers should take the proto file from
    16  // the tag of the most recent release of Terraform, and not from the main
    17  // branch or any other development branch.
    18  //
    19  syntax = "proto3";
    20  option go_package = "github.com/hashicorp/terraform/internal/tfplugin5";
    21  
    22  package tfplugin5;
    23  
    24  // DynamicValue is an opaque encoding of terraform data, with the field name
    25  // indicating the encoding scheme used.
    26  message DynamicValue {
    27      bytes msgpack = 1;
    28      bytes json = 2;
    29  }
    30  
    31  message Diagnostic {
    32      enum Severity {
    33          INVALID = 0;
    34          ERROR = 1;
    35          WARNING = 2;
    36      }
    37      Severity severity = 1;
    38      string summary = 2;
    39      string detail = 3;
    40      AttributePath attribute = 4;
    41  }
    42  
    43  message AttributePath {
    44      message Step {
    45          oneof selector {
    46              // Set "attribute_name" to represent looking up an attribute
    47              // in the current object value.
    48              string attribute_name = 1;
    49              // Set "element_key_*" to represent looking up an element in
    50              // an indexable collection type.
    51              string element_key_string = 2;
    52              int64 element_key_int = 3;
    53          }
    54      }
    55      repeated Step steps = 1;
    56  }
    57  
    58  message Stop {
    59      message Request {
    60      }
    61      message Response {
    62                  string Error = 1;
    63      }
    64  }
    65  
    66  // RawState holds the stored state for a resource to be upgraded by the
    67  // provider. It can be in one of two formats, the current json encoded format
    68  // in bytes, or the legacy flatmap format as a map of strings.
    69  message RawState {
    70      bytes json = 1;
    71      map<string, string> flatmap = 2;
    72  }
    73  
    74  enum StringKind {
    75      PLAIN = 0;
    76      MARKDOWN = 1;
    77  }
    78  
    79  // Schema is the configuration schema for a Resource, Provider, or Provisioner.
    80  message Schema {
    81      message Block {
    82          int64 version = 1;
    83          repeated Attribute attributes = 2;
    84          repeated NestedBlock block_types = 3;
    85          string description = 4;
    86          StringKind description_kind = 5;
    87          bool deprecated = 6;
    88      }
    89  
    90      message Attribute {
    91          string name = 1;
    92          bytes type = 2;
    93          string description = 3;
    94          bool required = 4;
    95          bool optional = 5;
    96          bool computed = 6;
    97          bool sensitive = 7;
    98          StringKind description_kind = 8;
    99          bool deprecated = 9;
   100      }
   101  
   102      message NestedBlock {
   103          enum NestingMode {
   104              INVALID = 0;
   105              SINGLE = 1;
   106              LIST = 2;
   107              SET = 3;
   108              MAP = 4;
   109              GROUP = 5;
   110          }
   111  
   112          string type_name = 1;
   113          Block block = 2;
   114          NestingMode nesting = 3;
   115          int64 min_items = 4;
   116          int64 max_items = 5;
   117      }
   118  
   119      // The version of the schema.
   120      // Schemas are versioned, so that providers can upgrade a saved resource
   121      // state when the schema is changed.
   122      int64 version = 1;
   123  
   124      // Block is the top level configuration block for this schema.
   125      Block block = 2;
   126  }
   127  
   128  service Provider {
   129      //////// Information about what a provider supports/expects
   130      rpc GetSchema(GetProviderSchema.Request) returns (GetProviderSchema.Response);
   131      rpc PrepareProviderConfig(PrepareProviderConfig.Request) returns (PrepareProviderConfig.Response);
   132      rpc ValidateResourceTypeConfig(ValidateResourceTypeConfig.Request) returns (ValidateResourceTypeConfig.Response);
   133      rpc ValidateDataSourceConfig(ValidateDataSourceConfig.Request) returns (ValidateDataSourceConfig.Response);
   134      rpc UpgradeResourceState(UpgradeResourceState.Request) returns (UpgradeResourceState.Response);
   135  
   136      //////// One-time initialization, called before other functions below
   137      rpc Configure(Configure.Request) returns (Configure.Response);
   138  
   139      //////// Managed Resource Lifecycle
   140      rpc ReadResource(ReadResource.Request) returns (ReadResource.Response);
   141      rpc PlanResourceChange(PlanResourceChange.Request) returns (PlanResourceChange.Response);
   142      rpc ApplyResourceChange(ApplyResourceChange.Request) returns (ApplyResourceChange.Response);
   143      rpc ImportResourceState(ImportResourceState.Request) returns (ImportResourceState.Response);
   144  
   145      rpc ReadDataSource(ReadDataSource.Request) returns (ReadDataSource.Response);
   146  
   147      //////// Graceful Shutdown
   148      rpc Stop(Stop.Request) returns (Stop.Response);
   149  }
   150  
   151  message GetProviderSchema {
   152      message Request {
   153      }
   154      message Response {
   155          Schema provider = 1;
   156          map<string, Schema> resource_schemas = 2;
   157          map<string, Schema> data_source_schemas = 3;
   158          repeated Diagnostic diagnostics = 4;
   159          Schema provider_meta = 5;
   160          ServerCapabilities server_capabilities = 6;
   161      }
   162  
   163  
   164      // ServerCapabilities allows providers to communicate extra information
   165      // regarding supported protocol features. This is used to indicate
   166      // availability of certain forward-compatible changes which may be optional
   167      // in a major protocol version, but cannot be tested for directly.
   168      message ServerCapabilities {
   169          // The plan_destroy capability signals that a provider expects a call
   170          // to PlanResourceChange when a resource is going to be destroyed.
   171          bool plan_destroy = 1;
   172      }
   173  }
   174  
   175  message PrepareProviderConfig {
   176      message Request {
   177          DynamicValue config = 1;
   178      }
   179      message Response {
   180          DynamicValue prepared_config = 1;
   181          repeated Diagnostic diagnostics = 2;
   182      }
   183  }
   184  
   185  message UpgradeResourceState {
   186      message Request {
   187          string type_name = 1;
   188  
   189          // version is the schema_version number recorded in the state file
   190          int64 version = 2;
   191  
   192          // raw_state is the raw states as stored for the resource.  Core does
   193          // not have access to the schema of prior_version, so it's the
   194          // provider's responsibility to interpret this value using the
   195          // appropriate older schema. The raw_state will be the json encoded
   196          // state, or a legacy flat-mapped format.
   197          RawState raw_state = 3;
   198      }
   199      message Response {
   200          // new_state is a msgpack-encoded data structure that, when interpreted with
   201          // the _current_ schema for this resource type, is functionally equivalent to
   202          // that which was given in prior_state_raw.
   203          DynamicValue upgraded_state = 1;
   204  
   205          // diagnostics describes any errors encountered during migration that could not
   206          // be safely resolved, and warnings about any possibly-risky assumptions made
   207          // in the upgrade process.
   208          repeated Diagnostic diagnostics = 2;
   209      }
   210  }
   211  
   212  message ValidateResourceTypeConfig {
   213      message Request {
   214          string type_name = 1;
   215          DynamicValue config = 2;
   216      }
   217      message Response {
   218          repeated Diagnostic diagnostics = 1;
   219      }
   220  }
   221  
   222  message ValidateDataSourceConfig {
   223      message Request {
   224          string type_name = 1;
   225          DynamicValue config = 2;
   226      }
   227      message Response {
   228          repeated Diagnostic diagnostics = 1;
   229      }
   230  }
   231  
   232  message Configure {
   233      message Request {
   234          string terraform_version = 1;
   235          DynamicValue config = 2;
   236      }
   237      message Response {
   238          repeated Diagnostic diagnostics = 1;
   239      }
   240  }
   241  
   242  message ReadResource {
   243      message Request {
   244          string type_name = 1;
   245          DynamicValue current_state = 2;
   246          bytes private = 3;
   247          DynamicValue provider_meta = 4;
   248      }
   249      message Response {
   250          DynamicValue new_state = 1;
   251          repeated Diagnostic diagnostics = 2;
   252          bytes private = 3;
   253      }
   254  }
   255  
   256  message PlanResourceChange {
   257      message Request {
   258          string type_name = 1;
   259          DynamicValue prior_state = 2;
   260          DynamicValue proposed_new_state = 3;
   261          DynamicValue config = 4;
   262          bytes prior_private = 5;
   263          DynamicValue provider_meta = 6;
   264      }
   265  
   266      message Response {
   267          DynamicValue planned_state = 1;
   268          repeated AttributePath requires_replace = 2;
   269          bytes planned_private = 3;
   270          repeated Diagnostic diagnostics = 4;
   271  
   272  
   273          // This may be set only by the helper/schema "SDK" in the main Terraform
   274          // repository, to request that Terraform Core >=0.12 permit additional
   275          // inconsistencies that can result from the legacy SDK type system
   276          // and its imprecise mapping to the >=0.12 type system.
   277          // The change in behavior implied by this flag makes sense only for the
   278          // specific details of the legacy SDK type system, and are not a general
   279          // mechanism to avoid proper type handling in providers.
   280          //
   281          //     ====              DO NOT USE THIS              ====
   282          //     ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ====
   283          //     ====              DO NOT USE THIS              ====
   284          bool legacy_type_system = 5;
   285      }
   286  }
   287  
   288  message ApplyResourceChange {
   289      message Request {
   290          string type_name = 1;
   291          DynamicValue prior_state = 2;
   292          DynamicValue planned_state = 3;
   293          DynamicValue config = 4;
   294          bytes planned_private = 5;
   295          DynamicValue provider_meta = 6;
   296      }
   297      message Response {
   298          DynamicValue new_state = 1;
   299          bytes private = 2;
   300          repeated Diagnostic diagnostics = 3;
   301  
   302          // This may be set only by the helper/schema "SDK" in the main Terraform
   303          // repository, to request that Terraform Core >=0.12 permit additional
   304          // inconsistencies that can result from the legacy SDK type system
   305          // and its imprecise mapping to the >=0.12 type system.
   306          // The change in behavior implied by this flag makes sense only for the
   307          // specific details of the legacy SDK type system, and are not a general
   308          // mechanism to avoid proper type handling in providers.
   309          //
   310          //     ====              DO NOT USE THIS              ====
   311          //     ==== THIS MUST BE LEFT UNSET IN ALL OTHER SDKS ====
   312          //     ====              DO NOT USE THIS              ====
   313          bool legacy_type_system = 4;
   314      }
   315  }
   316  
   317  message ImportResourceState {
   318      message Request {
   319          string type_name = 1;
   320          string id = 2;
   321      }
   322  
   323      message ImportedResource {
   324          string type_name = 1;
   325          DynamicValue state = 2;
   326          bytes private = 3;
   327      }
   328  
   329      message Response {
   330          repeated ImportedResource imported_resources = 1;
   331          repeated Diagnostic diagnostics = 2;
   332      }
   333  }
   334  
   335  message ReadDataSource {
   336      message Request {
   337          string type_name = 1;
   338          DynamicValue config = 2;
   339          DynamicValue provider_meta = 3;
   340      }
   341      message Response {
   342          DynamicValue state = 1;
   343          repeated Diagnostic diagnostics = 2;
   344      }
   345  }
   346  
   347  service Provisioner {
   348      rpc GetSchema(GetProvisionerSchema.Request) returns (GetProvisionerSchema.Response);
   349      rpc ValidateProvisionerConfig(ValidateProvisionerConfig.Request) returns (ValidateProvisionerConfig.Response);
   350      rpc ProvisionResource(ProvisionResource.Request) returns (stream ProvisionResource.Response);
   351      rpc Stop(Stop.Request) returns (Stop.Response);
   352  }
   353  
   354  message GetProvisionerSchema {
   355      message Request {
   356      }
   357      message Response {
   358          Schema provisioner = 1;
   359          repeated Diagnostic diagnostics = 2;
   360      }
   361  }
   362  
   363  message ValidateProvisionerConfig {
   364      message Request {
   365          DynamicValue config = 1;
   366      }
   367      message Response {
   368          repeated Diagnostic diagnostics = 1;
   369      }
   370  }
   371  
   372  message ProvisionResource {
   373      message Request {
   374          DynamicValue config = 1;
   375          DynamicValue connection = 2;
   376      }
   377      message Response {
   378          string output  = 1;
   379          repeated Diagnostic diagnostics = 2;
   380      }
   381  }