pulumi/sdk/proto/provider.proto
joeduffy 0b6e262b46 Rename resource provider methods
This change renames two provider methods:

    * Read becomes Get.

    * UpdateImpact becomes PreviewUpdate.

These just read a whole lot nicer than the old names.
2017-04-20 14:09:00 -07:00

91 lines
3.9 KiB
Protocol Buffer

// Copyright 2017 Pulumi, Inc. All rights reserved.
syntax = "proto3";
import "google/protobuf/empty.proto";
import "google/protobuf/struct.proto";
package cocorpc;
// TODO: figure out "transactionality" and possibly "tainting".
// ResourceProvider is a service that understands how to create, read, update, or delete resources for types defined
// within a single MuPackage. It is driven by the overall Mu toolchain in response to blueprints and graphs.
service ResourceProvider {
// Check validates that the given property bag is valid for a resource of the given type.
rpc Check(CheckRequest) returns (CheckResponse) {}
// Name names a given resource. Sometimes this will be assigned by a developer, and so the provider
// simply fetches it from the property bag; other times, the provider will assign this based on its own algorithm.
// In any case, resources with the same name must be safe to use interchangeably with one another.
rpc Name(NameRequest) returns (NameResponse) {}
// Create allocates a new instance of the provided resource and returns its unique ID afterwards. (The input ID
// must be blank.) If this call fails, the resource must not have been created (i.e., it is "transacational").
rpc Create(CreateRequest) returns (CreateResponse) {}
// Get reads the instance state identified by ID, returning a populated resource object, or an error if not found.
rpc Get(GetRequest) returns (GetResponse) {}
// PreviewUpdate checks what impacts a hypothetical update will have on the resource's properties.
rpc PreviewUpdate(UpdateRequest) returns (PreviewUpdateResponse) {}
// Update updates an existing resource with new values.
rpc Update(UpdateRequest) returns (google.protobuf.Empty) {}
// Delete tears down an existing resource with the given ID. If it fails, the resource is assumed to still exist.
rpc Delete(DeleteRequest) returns (google.protobuf.Empty) {}
}
message CheckRequest {
string type = 1; // the type token of the resource.
google.protobuf.Struct properties = 2; // the full properties to use for validation.
}
message CheckResponse {
repeated CheckFailure failures = 1; // the name of the resource.
}
message CheckFailure {
string property = 1; // the property that failed validation.
string reason = 2; // the reason that the property failed validation.
}
message NameRequest {
string type = 1; // the type token of the resource.
google.protobuf.Struct properties = 2; // the full properties to use for name creation.
}
message NameResponse {
string name = 1; // the name of the resource.
}
message CreateRequest {
string type = 1; // the type token of the resource.
google.protobuf.Struct properties = 2; // the properties to set during creation.
}
message CreateResponse {
string id = 1; // the ID of the resource created.
}
message GetRequest {
string id = 1; // the ID of the resource to read.
string type = 2; // the type token of the resource.
}
message GetResponse {
google.protobuf.Struct properties = 1; // the properties read from the resource.
}
message UpdateRequest {
string id = 1; // the ID of the resource to update.
string type = 2; // the type token of the resource to update.
google.protobuf.Struct olds = 3; // the old values of properties to update.
google.protobuf.Struct news = 4; // the new values of properties to update.
}
message PreviewUpdateResponse {
repeated string replaces = 1; // if this update requires a replacement, the set of properties triggering it.
google.protobuf.Struct changes = 2; // the set of properties that will be changed (but don't require a replacement).
}
message DeleteRequest {
string id = 1; // the ID of the resource to delete.
string type = 2; // the type token of the resource to update.
}