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 }