github.com/graywolf-at-work-2/terraform-vendor@v1.4.5/docs/plugin-protocol/tfplugin6.1.proto (about) 1 // Terraform Plugin RPC protocol version 6.1 2 // 3 // This file defines version 6.1 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 6 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/tfplugin6"; 21 22 package tfplugin6; 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 StopProvider { 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 or Provider. 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 Object nested_type = 10; 94 string description = 3; 95 bool required = 4; 96 bool optional = 5; 97 bool computed = 6; 98 bool sensitive = 7; 99 StringKind description_kind = 8; 100 bool deprecated = 9; 101 } 102 103 message NestedBlock { 104 enum NestingMode { 105 INVALID = 0; 106 SINGLE = 1; 107 LIST = 2; 108 SET = 3; 109 MAP = 4; 110 GROUP = 5; 111 } 112 113 string type_name = 1; 114 Block block = 2; 115 NestingMode nesting = 3; 116 int64 min_items = 4; 117 int64 max_items = 5; 118 } 119 120 message Object { 121 enum NestingMode { 122 INVALID = 0; 123 SINGLE = 1; 124 LIST = 2; 125 SET = 3; 126 MAP = 4; 127 } 128 129 repeated Attribute attributes = 1; 130 NestingMode nesting = 3; 131 132 // MinItems and MaxItems were never used in the protocol, and have no 133 // effect on validation. 134 int64 min_items = 4 [deprecated = true]; 135 int64 max_items = 5 [deprecated = true]; 136 } 137 138 // The version of the schema. 139 // Schemas are versioned, so that providers can upgrade a saved resource 140 // state when the schema is changed. 141 int64 version = 1; 142 143 // Block is the top level configuration block for this schema. 144 Block block = 2; 145 } 146 147 service Provider { 148 //////// Information about what a provider supports/expects 149 rpc GetProviderSchema(GetProviderSchema.Request) returns (GetProviderSchema.Response); 150 rpc ValidateProviderConfig(ValidateProviderConfig.Request) returns (ValidateProviderConfig.Response); 151 rpc ValidateResourceConfig(ValidateResourceConfig.Request) returns (ValidateResourceConfig.Response); 152 rpc ValidateDataResourceConfig(ValidateDataResourceConfig.Request) returns (ValidateDataResourceConfig.Response); 153 rpc UpgradeResourceState(UpgradeResourceState.Request) returns (UpgradeResourceState.Response); 154 155 //////// One-time initialization, called before other functions below 156 rpc ConfigureProvider(ConfigureProvider.Request) returns (ConfigureProvider.Response); 157 158 //////// Managed Resource Lifecycle 159 rpc ReadResource(ReadResource.Request) returns (ReadResource.Response); 160 rpc PlanResourceChange(PlanResourceChange.Request) returns (PlanResourceChange.Response); 161 rpc ApplyResourceChange(ApplyResourceChange.Request) returns (ApplyResourceChange.Response); 162 rpc ImportResourceState(ImportResourceState.Request) returns (ImportResourceState.Response); 163 164 rpc ReadDataSource(ReadDataSource.Request) returns (ReadDataSource.Response); 165 166 //////// Graceful Shutdown 167 rpc StopProvider(StopProvider.Request) returns (StopProvider.Response); 168 } 169 170 message GetProviderSchema { 171 message Request { 172 } 173 message Response { 174 Schema provider = 1; 175 map<string, Schema> resource_schemas = 2; 176 map<string, Schema> data_source_schemas = 3; 177 repeated Diagnostic diagnostics = 4; 178 Schema provider_meta = 5; 179 } 180 } 181 182 message ValidateProviderConfig { 183 message Request { 184 DynamicValue config = 1; 185 } 186 message Response { 187 repeated Diagnostic diagnostics = 2; 188 } 189 } 190 191 message UpgradeResourceState { 192 message Request { 193 string type_name = 1; 194 195 // version is the schema_version number recorded in the state file 196 int64 version = 2; 197 198 // raw_state is the raw states as stored for the resource. Core does 199 // not have access to the schema of prior_version, so it's the 200 // provider's responsibility to interpret this value using the 201 // appropriate older schema. The raw_state will be the json encoded 202 // state, or a legacy flat-mapped format. 203 RawState raw_state = 3; 204 } 205 message Response { 206 // new_state is a msgpack-encoded data structure that, when interpreted with 207 // the _current_ schema for this resource type, is functionally equivalent to 208 // that which was given in prior_state_raw. 209 DynamicValue upgraded_state = 1; 210 211 // diagnostics describes any errors encountered during migration that could not 212 // be safely resolved, and warnings about any possibly-risky assumptions made 213 // in the upgrade process. 214 repeated Diagnostic diagnostics = 2; 215 } 216 } 217 218 message ValidateResourceConfig { 219 message Request { 220 string type_name = 1; 221 DynamicValue config = 2; 222 } 223 message Response { 224 repeated Diagnostic diagnostics = 1; 225 } 226 } 227 228 message ValidateDataResourceConfig { 229 message Request { 230 string type_name = 1; 231 DynamicValue config = 2; 232 } 233 message Response { 234 repeated Diagnostic diagnostics = 1; 235 } 236 } 237 238 message ConfigureProvider { 239 message Request { 240 string terraform_version = 1; 241 DynamicValue config = 2; 242 } 243 message Response { 244 repeated Diagnostic diagnostics = 1; 245 } 246 } 247 248 message ReadResource { 249 message Request { 250 string type_name = 1; 251 DynamicValue current_state = 2; 252 bytes private = 3; 253 DynamicValue provider_meta = 4; 254 } 255 message Response { 256 DynamicValue new_state = 1; 257 repeated Diagnostic diagnostics = 2; 258 bytes private = 3; 259 } 260 } 261 262 message PlanResourceChange { 263 message Request { 264 string type_name = 1; 265 DynamicValue prior_state = 2; 266 DynamicValue proposed_new_state = 3; 267 DynamicValue config = 4; 268 bytes prior_private = 5; 269 DynamicValue provider_meta = 6; 270 } 271 272 message Response { 273 DynamicValue planned_state = 1; 274 repeated AttributePath requires_replace = 2; 275 bytes planned_private = 3; 276 repeated Diagnostic diagnostics = 4; 277 } 278 } 279 280 message ApplyResourceChange { 281 message Request { 282 string type_name = 1; 283 DynamicValue prior_state = 2; 284 DynamicValue planned_state = 3; 285 DynamicValue config = 4; 286 bytes planned_private = 5; 287 DynamicValue provider_meta = 6; 288 } 289 message Response { 290 DynamicValue new_state = 1; 291 bytes private = 2; 292 repeated Diagnostic diagnostics = 3; 293 } 294 } 295 296 message ImportResourceState { 297 message Request { 298 string type_name = 1; 299 string id = 2; 300 } 301 302 message ImportedResource { 303 string type_name = 1; 304 DynamicValue state = 2; 305 bytes private = 3; 306 } 307 308 message Response { 309 repeated ImportedResource imported_resources = 1; 310 repeated Diagnostic diagnostics = 2; 311 } 312 } 313 314 message ReadDataSource { 315 message Request { 316 string type_name = 1; 317 DynamicValue config = 2; 318 DynamicValue provider_meta = 3; 319 } 320 message Response { 321 DynamicValue state = 1; 322 repeated Diagnostic diagnostics = 2; 323 } 324 }