Allow users to explicitly disable delete-before-replace. (#3118)

With these changes, a user may explicitly set `deleteBeforeReplace` to
`false` in order to disable DBR behavior for a particular resource. This
is the SDK + CLI escape hatch for cases where the changes in
https://github.com/pulumi/pulumi-terraform/pull/465 cause undesirable
behavior.
This commit is contained in:
Pat Gavlin 2019-08-20 15:51:02 -07:00 committed by GitHub
parent 2c0510a23e
commit 8745440c1b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 258 additions and 138 deletions

View file

@ -13,6 +13,9 @@ CHANGELOG
- Fix intermittet "NoSuchKey" issues when using the S3 based backend. (fixes [#2714](https://github.com/pulumi/pulumi/issues/2714)).
- Explicitly setting `deleteBeforeReplace` to `false` now overrides the provider's decision.
[#3118](https://github.com/pulumi/pulumi/pull/3118)
## 1.0.0-beta.2 (2019-08-13)
- Fix the package version compatibility checks in the NodeJS language host.

View file

@ -2764,6 +2764,7 @@ func TestPropertyDependenciesAdapter(t *testing.T) {
func TestExplicitDeleteBeforeReplace(t *testing.T) {
p := &TestPlan{}
dbrDiff := false
loaders := []*deploytest.ProviderLoader{
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
return &deploytest.Provider{
@ -2771,7 +2772,10 @@ func TestExplicitDeleteBeforeReplace(t *testing.T) {
olds, news resource.PropertyMap, ignoreChanges []string) (plugin.DiffResult, error) {
if !olds["A"].DeepEquals(news["A"]) {
return plugin.DiffResult{ReplaceKeys: []resource.PropertyKey{"A"}}, nil
return plugin.DiffResult{
ReplaceKeys: []resource.PropertyKey{"A"},
DeleteBeforeReplace: dbrDiff,
}, nil
}
return plugin.DiffResult{}, nil
},
@ -2782,7 +2786,7 @@ func TestExplicitDeleteBeforeReplace(t *testing.T) {
const resType = "pkgA:index:typ"
inputsA := resource.NewPropertyMapFromMap(map[string]interface{}{"A": "foo"})
dbrA := false
dbrValue, dbrA := true, (*bool)(nil)
inputsB := resource.NewPropertyMapFromMap(map[string]interface{}{"A": "foo"})
var provURN, urnA, urnB resource.URN
@ -2847,7 +2851,7 @@ func TestExplicitDeleteBeforeReplace(t *testing.T) {
// Change the registration of resA such that it requires delete-before-replace and change the value of resA.A. Both
// resA and resB should be replaced, and the replacements should be delete-before-replace.
dbrA, inputsA["A"] = true, resource.NewStringProperty("baz")
dbrA, inputsA["A"] = &dbrValue, resource.NewStringProperty("baz")
p.Steps = []TestStep{{
Op: Update,
@ -2895,8 +2899,58 @@ func TestExplicitDeleteBeforeReplace(t *testing.T) {
snap = p.Run(t, snap)
// Change the registration of resA such that it no longer requires delete-before-replace and change the value of
// resA.A. Only resA should be replaced, and the replacement should be delete-before-replace.
dbrA, inputsA["A"] = false, resource.NewStringProperty("zam")
// resA.A. Only resA should be replaced, and the replacement should be create-before-delete.
dbrA, inputsA["A"] = nil, resource.NewStringProperty("zam")
p.Steps = []TestStep{{
Op: Update,
Validate: func(project workspace.Project, target deploy.Target, j *Journal,
evts []Event, res result.Result) result.Result {
assert.Nil(t, res)
AssertSameSteps(t, []StepSummary{
{Op: deploy.OpSame, URN: provURN},
{Op: deploy.OpCreateReplacement, URN: urnA},
{Op: deploy.OpReplace, URN: urnA},
{Op: deploy.OpSame, URN: urnB},
{Op: deploy.OpDeleteReplaced, URN: urnA},
}, j.SuccessfulSteps())
return res
},
}}
snap = p.Run(t, snap)
// Change the diff of resA such that it requires delete-before-replace and change the value of resA.A. Both
// resA and resB should be replaced, and the replacements should be delete-before-replace.
dbrDiff, inputsA["A"] = true, resource.NewStringProperty("foo")
p.Steps = []TestStep{{
Op: Update,
Validate: func(project workspace.Project, target deploy.Target, j *Journal,
evts []Event, res result.Result) result.Result {
assert.Nil(t, res)
AssertSameSteps(t, []StepSummary{
{Op: deploy.OpSame, URN: provURN},
{Op: deploy.OpDeleteReplaced, URN: urnB},
{Op: deploy.OpDeleteReplaced, URN: urnA},
{Op: deploy.OpReplace, URN: urnA},
{Op: deploy.OpCreateReplacement, URN: urnA},
{Op: deploy.OpReplace, URN: urnB},
{Op: deploy.OpCreateReplacement, URN: urnB},
}, j.SuccessfulSteps())
return res
},
}}
snap = p.Run(t, snap)
// Change the registration of resA such that it disables delete-before-replace and change the value of
// resA.A. Only resA should be replaced, and the replacement should be create-before-delete.
dbrA, dbrValue, inputsA["A"] = &dbrValue, false, resource.NewStringProperty("bar")
p.Steps = []TestStep{{
Op: Update,
@ -3247,7 +3301,7 @@ func registerResources(t *testing.T, monitor *deploytest.ResourceMonitor, resour
Parent: r.parent,
Dependencies: r.dependencies,
Inputs: r.props,
DeleteBeforeReplace: r.deleteBeforeReplace,
DeleteBeforeReplace: &r.deleteBeforeReplace,
Aliases: r.aliases,
})
if err != nil {

View file

@ -35,7 +35,7 @@ type ResourceOptions struct {
Provider string
Inputs resource.PropertyMap
PropertyDeps map[resource.PropertyKey][]resource.URN
DeleteBeforeReplace bool
DeleteBeforeReplace *bool
Version string
IgnoreChanges []string
Aliases []resource.URN
@ -90,22 +90,27 @@ func (rm *ResourceMonitor) RegisterResource(t tokens.Type, name string, custom b
timeouts.Delete = prepareTestTimeout(opts.CustomTimeouts.Delete)
}
deleteBeforeReplace := false
if opts.DeleteBeforeReplace != nil {
deleteBeforeReplace = *opts.DeleteBeforeReplace
}
requestInput := &pulumirpc.RegisterResourceRequest{
Type: string(t),
Name: name,
Custom: custom,
Parent: string(opts.Parent),
Protect: opts.Protect,
Dependencies: deps,
Provider: opts.Provider,
Object: ins,
PropertyDependencies: inputDeps,
DeleteBeforeReplace: opts.DeleteBeforeReplace,
IgnoreChanges: opts.IgnoreChanges,
Version: opts.Version,
Aliases: aliasStrings,
ImportId: string(opts.ImportID),
CustomTimeouts: &timeouts,
Type: string(t),
Name: name,
Custom: custom,
Parent: string(opts.Parent),
Protect: opts.Protect,
Dependencies: deps,
Provider: opts.Provider,
Object: ins,
PropertyDependencies: inputDeps,
DeleteBeforeReplace: deleteBeforeReplace,
DeleteBeforeReplaceDefined: opts.DeleteBeforeReplace != nil,
IgnoreChanges: opts.IgnoreChanges,
Version: opts.Version,
Aliases: aliasStrings,
ImportId: string(opts.ImportID),
CustomTimeouts: &timeouts,
}
// submit request

View file

@ -298,7 +298,7 @@ func (d *defaultProviders) newRegisterDefaultProviderEvent(
event := &registerResourceEvent{
goal: resource.NewGoal(
providers.MakeProviderType(req.Package()),
req.Name(), true, inputs, "", false, nil, "", nil, nil, false, nil, nil, nil, "", nil),
req.Name(), true, inputs, "", false, nil, "", nil, nil, nil, nil, nil, nil, "", nil),
done: done,
}
return event, done, nil
@ -671,7 +671,7 @@ func (rm *resmon) RegisterResource(ctx context.Context,
custom := req.GetCustom()
parent := resource.URN(req.GetParent())
protect := req.GetProtect()
deleteBeforeReplace := req.GetDeleteBeforeReplace()
deleteBeforeReplaceValue := req.GetDeleteBeforeReplace()
ignoreChanges := req.GetIgnoreChanges()
id := resource.ID(req.GetImportId())
customTimeouts := req.GetCustomTimeouts()
@ -773,6 +773,11 @@ func (rm *resmon) RegisterResource(ctx context.Context,
}
}
var deleteBeforeReplace *bool
if deleteBeforeReplaceValue || req.GetDeleteBeforeReplaceDefined() {
deleteBeforeReplace = &deleteBeforeReplaceValue
}
logging.V(5).Infof(
"ResourceMonitor.RegisterResource received: t=%v, name=%v, custom=%v, #props=%v, parent=%v, protect=%v, "+
"provider=%v, deps=%v, deleteBeforeReplace=%v, ignoreChanges=%v, aliases=%v, customTimeouts=%v",

View file

@ -149,16 +149,16 @@ func TestRegisterNoDefaultProviders(t *testing.T) {
// Register a component resource.
&testRegEvent{
goal: resource.NewGoal(componentURN.Type(), componentURN.Name(), false, resource.PropertyMap{}, "", false,
nil, "", []string{}, nil, false, nil, nil, nil, "", nil),
nil, "", []string{}, nil, nil, nil, nil, nil, "", nil),
},
// Register a couple resources using provider A.
&testRegEvent{
goal: resource.NewGoal("pkgA:index:typA", "res1", true, resource.PropertyMap{}, componentURN, false, nil,
providerARef.String(), []string{}, nil, false, nil, nil, nil, "", nil),
providerARef.String(), []string{}, nil, nil, nil, nil, nil, "", nil),
},
&testRegEvent{
goal: resource.NewGoal("pkgA:index:typA", "res2", true, resource.PropertyMap{}, componentURN, false, nil,
providerARef.String(), []string{}, nil, false, nil, nil, nil, "", nil),
providerARef.String(), []string{}, nil, nil, nil, nil, nil, "", nil),
},
// Register two more providers.
newProviderEvent("pkgA", "providerB", nil, ""),
@ -166,11 +166,11 @@ func TestRegisterNoDefaultProviders(t *testing.T) {
// Register a few resources that use the new providers.
&testRegEvent{
goal: resource.NewGoal("pkgB:index:typB", "res3", true, resource.PropertyMap{}, "", false, nil,
providerBRef.String(), []string{}, nil, false, nil, nil, nil, "", nil),
providerBRef.String(), []string{}, nil, nil, nil, nil, nil, "", nil),
},
&testRegEvent{
goal: resource.NewGoal("pkgB:index:typC", "res4", true, resource.PropertyMap{}, "", false, nil,
providerCRef.String(), []string{}, nil, false, nil, nil, nil, "", nil),
providerCRef.String(), []string{}, nil, nil, nil, nil, nil, "", nil),
},
}
@ -233,25 +233,25 @@ func TestRegisterDefaultProviders(t *testing.T) {
// Register a component resource.
&testRegEvent{
goal: resource.NewGoal(componentURN.Type(), componentURN.Name(), false, resource.PropertyMap{}, "", false,
nil, "", []string{}, nil, false, nil, nil, nil, "", nil),
nil, "", []string{}, nil, nil, nil, nil, nil, "", nil),
},
// Register a couple resources from package A.
&testRegEvent{
goal: resource.NewGoal("pkgA:m:typA", "res1", true, resource.PropertyMap{},
componentURN, false, nil, "", []string{}, nil, false, nil, nil, nil, "", nil),
componentURN, false, nil, "", []string{}, nil, nil, nil, nil, nil, "", nil),
},
&testRegEvent{
goal: resource.NewGoal("pkgA:m:typA", "res2", true, resource.PropertyMap{},
componentURN, false, nil, "", []string{}, nil, false, nil, nil, nil, "", nil),
componentURN, false, nil, "", []string{}, nil, nil, nil, nil, nil, "", nil),
},
// Register a few resources from other packages.
&testRegEvent{
goal: resource.NewGoal("pkgB:m:typB", "res3", true, resource.PropertyMap{}, "", false,
nil, "", []string{}, nil, false, nil, nil, nil, "", nil),
nil, "", []string{}, nil, nil, nil, nil, nil, "", nil),
},
&testRegEvent{
goal: resource.NewGoal("pkgB:m:typC", "res4", true, resource.PropertyMap{}, "", false,
nil, "", []string{}, nil, false, nil, nil, nil, "", nil),
nil, "", []string{}, nil, nil, nil, nil, nil, "", nil),
},
}

View file

@ -405,9 +405,14 @@ func (sg *stepGenerator) GenerateSteps(event RegisterResourceEvent) ([]Step, res
// until pulumi/pulumi#624 is resolved, we cannot safely perform this operation on resources
// that have dependent resources (we try to delete the resource while they refer to it).
//
// The provider is responsible for requesting which of these two modes to use.
if diff.DeleteBeforeReplace || goal.DeleteBeforeReplace {
// The provider is responsible for requesting which of these two modes to use. The user can override
// the provider's decision by setting the `deleteBeforeReplace` field of `ResourceOptions` to either
// `true` or `false`.
deleteBeforeReplace := diff.DeleteBeforeReplace
if goal.DeleteBeforeReplace != nil {
deleteBeforeReplace = *goal.DeleteBeforeReplace
}
if deleteBeforeReplace {
logging.V(7).Infof("Planner decided to delete-before-replacement for resource '%v'", urn)
contract.Assert(sg.plan.depGraph != nil)

View file

@ -31,7 +31,7 @@ type Goal struct {
Provider string // the provider to use for this resource.
InitErrors []string // errors encountered as we attempted to initialize the resource.
PropertyDependencies map[PropertyKey][]URN // the set of dependencies that affect each property.
DeleteBeforeReplace bool // true if this resource should be deleted prior to replacement.
DeleteBeforeReplace *bool // true if this resource should be deleted prior to replacement.
IgnoreChanges []string // a list of property names to ignore during changes.
AdditionalSecretOutputs []PropertyKey // outputs that should always be treated as secrets.
Aliases []URN // additional URNs that should be aliased to this resource.
@ -42,7 +42,7 @@ type Goal struct {
// NewGoal allocates a new resource goal state.
func NewGoal(t tokens.Type, name tokens.QName, custom bool, props PropertyMap,
parent URN, protect bool, dependencies []URN, provider string, initErrors []string,
propertyDependencies map[PropertyKey][]URN, deleteBeforeReplace bool, ignoreChanges []string,
propertyDependencies map[PropertyKey][]URN, deleteBeforeReplace *bool, ignoreChanges []string,
additionalSecretOutputs []PropertyKey, aliases []URN, id ID, customTimeouts *CustomTimeouts) *Goal {
g := &Goal{

View file

@ -1045,7 +1045,8 @@ proto.pulumirpc.RegisterResourceRequest.toObject = function(includeInstance, msg
additionalsecretoutputsList: jspb.Message.getRepeatedField(msg, 14),
aliasesList: jspb.Message.getRepeatedField(msg, 15),
importid: jspb.Message.getFieldWithDefault(msg, 16, ""),
customtimeouts: (f = msg.getCustomtimeouts()) && proto.pulumirpc.RegisterResourceRequest.CustomTimeouts.toObject(includeInstance, f)
customtimeouts: (f = msg.getCustomtimeouts()) && proto.pulumirpc.RegisterResourceRequest.CustomTimeouts.toObject(includeInstance, f),
deletebeforereplacedefined: jspb.Message.getFieldWithDefault(msg, 18, false)
};
if (includeInstance) {
@ -1154,6 +1155,10 @@ proto.pulumirpc.RegisterResourceRequest.deserializeBinaryFromReader = function(m
reader.readMessage(value,proto.pulumirpc.RegisterResourceRequest.CustomTimeouts.deserializeBinaryFromReader);
msg.setCustomtimeouts(value);
break;
case 18:
var value = /** @type {boolean} */ (reader.readBool());
msg.setDeletebeforereplacedefined(value);
break;
default:
reader.skipField();
break;
@ -1301,6 +1306,13 @@ proto.pulumirpc.RegisterResourceRequest.serializeBinaryToWriter = function(messa
proto.pulumirpc.RegisterResourceRequest.CustomTimeouts.serializeBinaryToWriter
);
}
f = message.getDeletebeforereplacedefined();
if (f) {
writer.writeBool(
18,
f
);
}
};
@ -2015,6 +2027,23 @@ proto.pulumirpc.RegisterResourceRequest.prototype.hasCustomtimeouts = function()
};
/**
* optional bool deleteBeforeReplaceDefined = 18;
* Note that Boolean fields may be set to 0/1 when serialized from a Java server.
* You should avoid comparisons like {@code val === true/false} in those cases.
* @return {boolean}
*/
proto.pulumirpc.RegisterResourceRequest.prototype.getDeletebeforereplacedefined = function() {
return /** @type {boolean} */ (jspb.Message.getFieldWithDefault(this, 18, false));
};
/** @param {boolean} value */
proto.pulumirpc.RegisterResourceRequest.prototype.setDeletebeforereplacedefined = function(value) {
jspb.Message.setProto3BooleanField(this, 18, value);
};
/**
* Generated by JsPbCodeGenerator.

View file

@ -185,6 +185,7 @@ export function registerResource(res: Resource, t: string, name: string, custom:
req.setProvider(resop.providerRef);
req.setDependenciesList(Array.from(resop.allDirectDependencyURNs));
req.setDeletebeforereplace((<any>opts).deleteBeforeReplace || false);
req.setDeletebeforereplacedefined((<any>opts).deleteBeforeReplace !== undefined);
req.setIgnorechangesList(opts.ignoreChanges || []);
req.setVersion(opts.version || "");
req.setAcceptsecrets(true);

View file

@ -38,7 +38,7 @@ func (m *SupportsFeatureRequest) Reset() { *m = SupportsFeatureRequest{}
func (m *SupportsFeatureRequest) String() string { return proto.CompactTextString(m) }
func (*SupportsFeatureRequest) ProtoMessage() {}
func (*SupportsFeatureRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_resource_9e442c1601c8b0e8, []int{0}
return fileDescriptor_resource_0e7314448ddfd7ea, []int{0}
}
func (m *SupportsFeatureRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SupportsFeatureRequest.Unmarshal(m, b)
@ -76,7 +76,7 @@ func (m *SupportsFeatureResponse) Reset() { *m = SupportsFeatureResponse
func (m *SupportsFeatureResponse) String() string { return proto.CompactTextString(m) }
func (*SupportsFeatureResponse) ProtoMessage() {}
func (*SupportsFeatureResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_resource_9e442c1601c8b0e8, []int{1}
return fileDescriptor_resource_0e7314448ddfd7ea, []int{1}
}
func (m *SupportsFeatureResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SupportsFeatureResponse.Unmarshal(m, b)
@ -125,7 +125,7 @@ func (m *ReadResourceRequest) Reset() { *m = ReadResourceRequest{} }
func (m *ReadResourceRequest) String() string { return proto.CompactTextString(m) }
func (*ReadResourceRequest) ProtoMessage() {}
func (*ReadResourceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_resource_9e442c1601c8b0e8, []int{2}
return fileDescriptor_resource_0e7314448ddfd7ea, []int{2}
}
func (m *ReadResourceRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadResourceRequest.Unmarshal(m, b)
@ -235,7 +235,7 @@ func (m *ReadResourceResponse) Reset() { *m = ReadResourceResponse{} }
func (m *ReadResourceResponse) String() string { return proto.CompactTextString(m) }
func (*ReadResourceResponse) ProtoMessage() {}
func (*ReadResourceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_resource_9e442c1601c8b0e8, []int{3}
return fileDescriptor_resource_0e7314448ddfd7ea, []int{3}
}
func (m *ReadResourceResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReadResourceResponse.Unmarshal(m, b)
@ -271,33 +271,34 @@ func (m *ReadResourceResponse) GetProperties() *_struct.Struct {
// RegisterResourceRequest contains information about a resource object that was newly allocated.
type RegisterResourceRequest struct {
Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
Parent string `protobuf:"bytes,3,opt,name=parent" json:"parent,omitempty"`
Custom bool `protobuf:"varint,4,opt,name=custom" json:"custom,omitempty"`
Object *_struct.Struct `protobuf:"bytes,5,opt,name=object" json:"object,omitempty"`
Protect bool `protobuf:"varint,6,opt,name=protect" json:"protect,omitempty"`
Dependencies []string `protobuf:"bytes,7,rep,name=dependencies" json:"dependencies,omitempty"`
Provider string `protobuf:"bytes,8,opt,name=provider" json:"provider,omitempty"`
PropertyDependencies map[string]*RegisterResourceRequest_PropertyDependencies `protobuf:"bytes,9,rep,name=propertyDependencies" json:"propertyDependencies,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
DeleteBeforeReplace bool `protobuf:"varint,10,opt,name=deleteBeforeReplace" json:"deleteBeforeReplace,omitempty"`
Version string `protobuf:"bytes,11,opt,name=version" json:"version,omitempty"`
IgnoreChanges []string `protobuf:"bytes,12,rep,name=ignoreChanges" json:"ignoreChanges,omitempty"`
AcceptSecrets bool `protobuf:"varint,13,opt,name=acceptSecrets" json:"acceptSecrets,omitempty"`
AdditionalSecretOutputs []string `protobuf:"bytes,14,rep,name=additionalSecretOutputs" json:"additionalSecretOutputs,omitempty"`
Aliases []string `protobuf:"bytes,15,rep,name=aliases" json:"aliases,omitempty"`
ImportId string `protobuf:"bytes,16,opt,name=importId" json:"importId,omitempty"`
CustomTimeouts *RegisterResourceRequest_CustomTimeouts `protobuf:"bytes,17,opt,name=customTimeouts" json:"customTimeouts,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
Type string `protobuf:"bytes,1,opt,name=type" json:"type,omitempty"`
Name string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"`
Parent string `protobuf:"bytes,3,opt,name=parent" json:"parent,omitempty"`
Custom bool `protobuf:"varint,4,opt,name=custom" json:"custom,omitempty"`
Object *_struct.Struct `protobuf:"bytes,5,opt,name=object" json:"object,omitempty"`
Protect bool `protobuf:"varint,6,opt,name=protect" json:"protect,omitempty"`
Dependencies []string `protobuf:"bytes,7,rep,name=dependencies" json:"dependencies,omitempty"`
Provider string `protobuf:"bytes,8,opt,name=provider" json:"provider,omitempty"`
PropertyDependencies map[string]*RegisterResourceRequest_PropertyDependencies `protobuf:"bytes,9,rep,name=propertyDependencies" json:"propertyDependencies,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
DeleteBeforeReplace bool `protobuf:"varint,10,opt,name=deleteBeforeReplace" json:"deleteBeforeReplace,omitempty"`
Version string `protobuf:"bytes,11,opt,name=version" json:"version,omitempty"`
IgnoreChanges []string `protobuf:"bytes,12,rep,name=ignoreChanges" json:"ignoreChanges,omitempty"`
AcceptSecrets bool `protobuf:"varint,13,opt,name=acceptSecrets" json:"acceptSecrets,omitempty"`
AdditionalSecretOutputs []string `protobuf:"bytes,14,rep,name=additionalSecretOutputs" json:"additionalSecretOutputs,omitempty"`
Aliases []string `protobuf:"bytes,15,rep,name=aliases" json:"aliases,omitempty"`
ImportId string `protobuf:"bytes,16,opt,name=importId" json:"importId,omitempty"`
CustomTimeouts *RegisterResourceRequest_CustomTimeouts `protobuf:"bytes,17,opt,name=customTimeouts" json:"customTimeouts,omitempty"`
DeleteBeforeReplaceDefined bool `protobuf:"varint,18,opt,name=deleteBeforeReplaceDefined" json:"deleteBeforeReplaceDefined,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *RegisterResourceRequest) Reset() { *m = RegisterResourceRequest{} }
func (m *RegisterResourceRequest) String() string { return proto.CompactTextString(m) }
func (*RegisterResourceRequest) ProtoMessage() {}
func (*RegisterResourceRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_resource_9e442c1601c8b0e8, []int{4}
return fileDescriptor_resource_0e7314448ddfd7ea, []int{4}
}
func (m *RegisterResourceRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RegisterResourceRequest.Unmarshal(m, b)
@ -436,6 +437,13 @@ func (m *RegisterResourceRequest) GetCustomTimeouts() *RegisterResourceRequest_C
return nil
}
func (m *RegisterResourceRequest) GetDeleteBeforeReplaceDefined() bool {
if m != nil {
return m.DeleteBeforeReplaceDefined
}
return false
}
// PropertyDependencies describes the resources that a particular property depends on.
type RegisterResourceRequest_PropertyDependencies struct {
Urns []string `protobuf:"bytes,1,rep,name=urns" json:"urns,omitempty"`
@ -452,7 +460,7 @@ func (m *RegisterResourceRequest_PropertyDependencies) String() string {
}
func (*RegisterResourceRequest_PropertyDependencies) ProtoMessage() {}
func (*RegisterResourceRequest_PropertyDependencies) Descriptor() ([]byte, []int) {
return fileDescriptor_resource_9e442c1601c8b0e8, []int{4, 0}
return fileDescriptor_resource_0e7314448ddfd7ea, []int{4, 0}
}
func (m *RegisterResourceRequest_PropertyDependencies) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RegisterResourceRequest_PropertyDependencies.Unmarshal(m, b)
@ -495,7 +503,7 @@ func (m *RegisterResourceRequest_CustomTimeouts) Reset() {
func (m *RegisterResourceRequest_CustomTimeouts) String() string { return proto.CompactTextString(m) }
func (*RegisterResourceRequest_CustomTimeouts) ProtoMessage() {}
func (*RegisterResourceRequest_CustomTimeouts) Descriptor() ([]byte, []int) {
return fileDescriptor_resource_9e442c1601c8b0e8, []int{4, 1}
return fileDescriptor_resource_0e7314448ddfd7ea, []int{4, 1}
}
func (m *RegisterResourceRequest_CustomTimeouts) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RegisterResourceRequest_CustomTimeouts.Unmarshal(m, b)
@ -553,7 +561,7 @@ func (m *RegisterResourceResponse) Reset() { *m = RegisterResourceRespon
func (m *RegisterResourceResponse) String() string { return proto.CompactTextString(m) }
func (*RegisterResourceResponse) ProtoMessage() {}
func (*RegisterResourceResponse) Descriptor() ([]byte, []int) {
return fileDescriptor_resource_9e442c1601c8b0e8, []int{5}
return fileDescriptor_resource_0e7314448ddfd7ea, []int{5}
}
func (m *RegisterResourceResponse) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RegisterResourceResponse.Unmarshal(m, b)
@ -621,7 +629,7 @@ func (m *RegisterResourceOutputsRequest) Reset() { *m = RegisterResource
func (m *RegisterResourceOutputsRequest) String() string { return proto.CompactTextString(m) }
func (*RegisterResourceOutputsRequest) ProtoMessage() {}
func (*RegisterResourceOutputsRequest) Descriptor() ([]byte, []int) {
return fileDescriptor_resource_9e442c1601c8b0e8, []int{6}
return fileDescriptor_resource_0e7314448ddfd7ea, []int{6}
}
func (m *RegisterResourceOutputsRequest) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_RegisterResourceOutputsRequest.Unmarshal(m, b)
@ -872,60 +880,61 @@ var _ResourceMonitor_serviceDesc = grpc.ServiceDesc{
Metadata: "resource.proto",
}
func init() { proto.RegisterFile("resource.proto", fileDescriptor_resource_9e442c1601c8b0e8) }
func init() { proto.RegisterFile("resource.proto", fileDescriptor_resource_0e7314448ddfd7ea) }
var fileDescriptor_resource_9e442c1601c8b0e8 = []byte{
// 826 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x56, 0xcd, 0x6e, 0xeb, 0x44,
0x14, 0xbe, 0x49, 0xee, 0xcd, 0xcf, 0x49, 0x6f, 0x5a, 0xe6, 0x56, 0x8d, 0xaf, 0x41, 0xe5, 0x62,
0x58, 0x14, 0x16, 0x29, 0x2d, 0x8b, 0x16, 0x84, 0x84, 0x44, 0x29, 0x52, 0x17, 0x15, 0xe0, 0xb2,
0x00, 0x24, 0x90, 0x1c, 0xfb, 0x34, 0x35, 0x75, 0x3c, 0xc3, 0x78, 0x1c, 0x29, 0x3b, 0xde, 0x84,
0x57, 0xe1, 0x39, 0x78, 0x0c, 0x9e, 0x80, 0xf9, 0xf1, 0x84, 0xf8, 0x27, 0x4d, 0x60, 0x95, 0x39,
0x3f, 0x73, 0x3c, 0xf3, 0x7d, 0xdf, 0x39, 0x13, 0x18, 0x71, 0xcc, 0x68, 0xce, 0x43, 0x9c, 0x30,
0x4e, 0x05, 0x25, 0x03, 0x96, 0x27, 0xf9, 0x3c, 0xe6, 0x2c, 0x74, 0xdf, 0x9e, 0x51, 0x3a, 0x4b,
0xf0, 0x54, 0x07, 0xa6, 0xf9, 0xfd, 0x29, 0xce, 0x99, 0x58, 0x9a, 0x3c, 0xf7, 0x9d, 0x6a, 0x30,
0x13, 0x3c, 0x0f, 0x45, 0x11, 0x1d, 0xc9, 0x9f, 0x45, 0x1c, 0x21, 0x37, 0xb6, 0x77, 0x02, 0x47,
0x77, 0x39, 0x63, 0x94, 0x8b, 0xec, 0x6b, 0x0c, 0x44, 0xce, 0xd1, 0xc7, 0xdf, 0x72, 0xcc, 0x04,
0x19, 0x41, 0x3b, 0x8e, 0x9c, 0xd6, 0x9b, 0xd6, 0xc9, 0xc0, 0x97, 0x2b, 0xef, 0x53, 0x18, 0xd7,
0x32, 0x33, 0x46, 0xd3, 0x0c, 0xc9, 0x31, 0xc0, 0x43, 0x90, 0x15, 0x51, 0xbd, 0xa5, 0xef, 0xaf,
0x79, 0xbc, 0xbf, 0xdb, 0xf0, 0xca, 0xc7, 0x20, 0xf2, 0x8b, 0x1b, 0x6d, 0xf8, 0x04, 0x21, 0xf0,
0x5c, 0x2c, 0x19, 0x3a, 0x6d, 0xed, 0xd1, 0x6b, 0xe5, 0x4b, 0x83, 0x39, 0x3a, 0x1d, 0xe3, 0x53,
0x6b, 0x72, 0x04, 0x5d, 0x16, 0x70, 0x4c, 0x85, 0xf3, 0x5c, 0x7b, 0x0b, 0x8b, 0x5c, 0x00, 0xc8,
0x5b, 0x31, 0xe4, 0x22, 0xc6, 0xcc, 0x79, 0x21, 0x63, 0xc3, 0xf3, 0xf1, 0xc4, 0xe0, 0x31, 0xb1,
0x78, 0x4c, 0xee, 0x34, 0x1e, 0xfe, 0x5a, 0x2a, 0xf1, 0x60, 0x2f, 0x42, 0x86, 0x69, 0x84, 0x69,
0xa8, 0xb6, 0x76, 0xdf, 0x74, 0x64, 0xd9, 0x92, 0x8f, 0xb8, 0xd0, 0xb7, 0xd8, 0x39, 0x3d, 0xfd,
0xd9, 0x95, 0x4d, 0x1c, 0xe8, 0x2d, 0x90, 0x67, 0x31, 0x4d, 0x9d, 0xbe, 0x0e, 0x59, 0x93, 0x7c,
0x00, 0x2f, 0x83, 0x30, 0x44, 0x26, 0xee, 0x30, 0xe4, 0x28, 0x32, 0x67, 0xa0, 0xd1, 0x29, 0x3b,
0xc9, 0x25, 0x8c, 0x83, 0x28, 0x8a, 0x85, 0xdc, 0x11, 0x24, 0xc6, 0xf9, 0x4d, 0x2e, 0x58, 0x2e,
0xf3, 0x41, 0x1f, 0x65, 0x53, 0x58, 0x7d, 0x39, 0x48, 0xe2, 0x20, 0x93, 0x87, 0x1e, 0xea, 0x4c,
0x6b, 0x7a, 0x01, 0x1c, 0x96, 0x31, 0x2f, 0xc8, 0x3a, 0x80, 0x4e, 0xce, 0xd3, 0x02, 0x75, 0xb5,
0xac, 0xc0, 0xd6, 0xde, 0x19, 0x36, 0xef, 0xaf, 0x1e, 0x8c, 0x7d, 0x9c, 0xc5, 0x99, 0x40, 0x5e,
0xe5, 0xd6, 0x72, 0xd9, 0x6a, 0xe0, 0xb2, 0xdd, 0xc8, 0x65, 0xa7, 0xc4, 0xa5, 0xf4, 0x87, 0x79,
0x26, 0xe8, 0x5c, 0x73, 0xdc, 0xf7, 0x0b, 0x8b, 0x9c, 0x42, 0x97, 0x4e, 0x7f, 0xc5, 0x50, 0x6c,
0xe3, 0xb7, 0x48, 0x53, 0x08, 0xa9, 0x90, 0xda, 0xd1, 0xd5, 0x95, 0xac, 0x59, 0x63, 0xbd, 0xb7,
0x85, 0xf5, 0x7e, 0x85, 0x75, 0x06, 0x87, 0x05, 0x18, 0xcb, 0xaf, 0xd6, 0xeb, 0x0c, 0x64, 0x9d,
0xe1, 0xf9, 0xe7, 0x93, 0x55, 0xc3, 0x4e, 0x36, 0x80, 0x34, 0xf9, 0xb6, 0x61, 0xfb, 0x75, 0x2a,
0xf8, 0xd2, 0x6f, 0xac, 0x4c, 0x3e, 0x86, 0x57, 0x11, 0x26, 0x28, 0xf0, 0x4b, 0xbc, 0xa7, 0xaa,
0x01, 0x59, 0x12, 0x84, 0x28, 0x35, 0xa2, 0xee, 0xd5, 0x14, 0x5a, 0x57, 0xe6, 0xb0, 0xa6, 0xcc,
0x78, 0x96, 0xca, 0xd4, 0xab, 0x87, 0x20, 0x9d, 0xc9, 0x63, 0xef, 0xe9, 0xeb, 0x97, 0x9d, 0x75,
0xfd, 0xbe, 0xfc, 0x8f, 0xfa, 0x1d, 0xed, 0xac, 0xdf, 0xfd, 0x92, 0x7e, 0x15, 0xf2, 0xf1, 0x5c,
0x8d, 0x8f, 0x9b, 0xc8, 0x39, 0x30, 0xc8, 0x5b, 0x9b, 0xfc, 0x08, 0x23, 0x23, 0x87, 0xef, 0xe3,
0x39, 0x52, 0xf5, 0x99, 0xb7, 0xb4, 0x18, 0xce, 0x76, 0xc0, 0xfc, 0xaa, 0xb4, 0xd1, 0xaf, 0x14,
0x72, 0x3f, 0x82, 0xc3, 0x26, 0x56, 0x94, 0x76, 0x65, 0xaf, 0x64, 0x52, 0xcf, 0xea, 0x94, 0x7a,
0xed, 0xfe, 0x00, 0xa3, 0x72, 0x35, 0xad, 0x5a, 0x2e, 0xa7, 0xa3, 0xd5, 0x7d, 0x61, 0x29, 0x7f,
0xce, 0x22, 0xe5, 0x37, 0xda, 0x2f, 0x2c, 0xe5, 0x37, 0xac, 0x59, 0xf5, 0x1b, 0xcb, 0xfd, 0xbd,
0x05, 0xaf, 0x37, 0x8a, 0x43, 0xb5, 0xf0, 0x23, 0x2e, 0x6d, 0x0b, 0xcb, 0x25, 0xb9, 0x85, 0x17,
0x8b, 0x20, 0xc9, 0xb1, 0xe8, 0xde, 0x8b, 0xff, 0xa9, 0x3d, 0xdf, 0x54, 0xf9, 0xac, 0x7d, 0xd9,
0xf2, 0xfe, 0x68, 0x81, 0x53, 0xdf, 0xbb, 0x71, 0x88, 0x98, 0x59, 0xde, 0x5e, 0xcd, 0xf2, 0x7f,
0xfb, 0xb4, 0xb3, 0x5b, 0x9f, 0x4a, 0x28, 0x32, 0x11, 0x4c, 0x13, 0xb4, 0x0d, 0x6f, 0x2c, 0xa5,
0x10, 0xb3, 0x52, 0x13, 0x5d, 0x2b, 0xa4, 0x30, 0x3d, 0x84, 0xe3, 0xea, 0x01, 0x0b, 0x59, 0xd9,
0x21, 0x54, 0x3f, 0xe6, 0x19, 0xf4, 0x68, 0xa1, 0xcc, 0x2d, 0x83, 0xce, 0xe6, 0x9d, 0xff, 0xd9,
0x81, 0x7d, 0x5b, 0xff, 0x96, 0xa6, 0xb1, 0xa0, 0x9c, 0xfc, 0x04, 0xfb, 0x95, 0xc7, 0x90, 0xbc,
0xb7, 0x86, 0x79, 0xf3, 0x93, 0xea, 0x7a, 0x4f, 0xa5, 0x18, 0x64, 0xbd, 0x67, 0xe4, 0x0b, 0xe8,
0xde, 0xa4, 0x0b, 0xfa, 0x28, 0xaf, 0xbe, 0x96, 0x6f, 0x5c, 0xb6, 0xd2, 0xeb, 0x86, 0xc8, 0xaa,
0xc0, 0x77, 0xb0, 0xb7, 0x3e, 0xf9, 0xc9, 0x71, 0x49, 0x0d, 0xb5, 0x67, 0xd8, 0x7d, 0x77, 0x63,
0x7c, 0x55, 0xf2, 0x67, 0x38, 0xa8, 0x42, 0x4d, 0xbc, 0xed, 0x22, 0x73, 0xdf, 0x7f, 0x32, 0x67,
0x55, 0xfe, 0x97, 0xfa, 0x3b, 0x62, 0x07, 0xc4, 0x87, 0x4f, 0x54, 0x28, 0xb3, 0xed, 0x1e, 0xd5,
0xa8, 0xbc, 0x56, 0xff, 0x8b, 0xbc, 0x67, 0xd3, 0xae, 0xf6, 0x7c, 0xf2, 0x4f, 0x00, 0x00, 0x00,
0xff, 0xff, 0x37, 0xd0, 0x44, 0x0d, 0x54, 0x09, 0x00, 0x00,
var fileDescriptor_resource_0e7314448ddfd7ea = []byte{
// 844 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x9c, 0x56, 0xcd, 0x72, 0xe3, 0x44,
0x10, 0x5e, 0xdb, 0xbb, 0xfe, 0x69, 0x67, 0x9d, 0x30, 0x9b, 0x8a, 0xb5, 0x82, 0x0a, 0x8b, 0xe0,
0xb0, 0x70, 0x70, 0xd8, 0x70, 0xd8, 0x85, 0xa2, 0xa0, 0x8a, 0x24, 0x54, 0xe5, 0x90, 0x02, 0x14,
0x0e, 0x40, 0x15, 0x54, 0xc9, 0x52, 0xc7, 0x11, 0x91, 0x35, 0xc3, 0x68, 0xe4, 0x2a, 0xdf, 0x78,
0x0e, 0x2e, 0xbc, 0x0a, 0xcf, 0xc4, 0x13, 0x30, 0x3f, 0x1a, 0x63, 0xfd, 0xf8, 0x07, 0x4e, 0x9e,
0xfe, 0xba, 0xa7, 0x35, 0xf3, 0xf5, 0xd7, 0x3d, 0x86, 0x11, 0xc7, 0x8c, 0xe6, 0x3c, 0xc4, 0x09,
0xe3, 0x54, 0x50, 0x32, 0x60, 0x79, 0x92, 0xcf, 0x63, 0xce, 0x42, 0xf7, 0xed, 0x19, 0xa5, 0xb3,
0x04, 0xcf, 0xb4, 0x63, 0x9a, 0xdf, 0x9d, 0xe1, 0x9c, 0x89, 0xa5, 0x89, 0x73, 0xdf, 0xa9, 0x3a,
0x33, 0xc1, 0xf3, 0x50, 0x14, 0xde, 0x91, 0xfc, 0x59, 0xc4, 0x11, 0x72, 0x63, 0x7b, 0x2f, 0xe1,
0xe4, 0x36, 0x67, 0x8c, 0x72, 0x91, 0x7d, 0x8d, 0x81, 0xc8, 0x39, 0xfa, 0xf8, 0x5b, 0x8e, 0x99,
0x20, 0x23, 0x68, 0xc7, 0x91, 0xd3, 0x7a, 0xd1, 0x7a, 0x39, 0xf0, 0xe5, 0xca, 0xfb, 0x14, 0xc6,
0xb5, 0xc8, 0x8c, 0xd1, 0x34, 0x43, 0x72, 0x0a, 0x70, 0x1f, 0x64, 0x85, 0x57, 0x6f, 0xe9, 0xfb,
0x6b, 0x88, 0xf7, 0x77, 0x1b, 0x9e, 0xf9, 0x18, 0x44, 0x7e, 0x71, 0xa3, 0x0d, 0x9f, 0x20, 0x04,
0x1e, 0x8b, 0x25, 0x43, 0xa7, 0xad, 0x11, 0xbd, 0x56, 0x58, 0x1a, 0xcc, 0xd1, 0xe9, 0x18, 0x4c,
0xad, 0xc9, 0x09, 0x74, 0x59, 0xc0, 0x31, 0x15, 0xce, 0x63, 0x8d, 0x16, 0x16, 0x79, 0x0d, 0x20,
0x6f, 0xc5, 0x90, 0x8b, 0x18, 0x33, 0xe7, 0x89, 0xf4, 0x0d, 0xcf, 0xc7, 0x13, 0xc3, 0xc7, 0xc4,
0xf2, 0x31, 0xb9, 0xd5, 0x7c, 0xf8, 0x6b, 0xa1, 0xc4, 0x83, 0x83, 0x08, 0x19, 0xa6, 0x11, 0xa6,
0xa1, 0xda, 0xda, 0x7d, 0xd1, 0x91, 0x69, 0x4b, 0x18, 0x71, 0xa1, 0x6f, 0xb9, 0x73, 0x7a, 0xfa,
0xb3, 0x2b, 0x9b, 0x38, 0xd0, 0x5b, 0x20, 0xcf, 0x62, 0x9a, 0x3a, 0x7d, 0xed, 0xb2, 0x26, 0xf9,
0x00, 0x9e, 0x06, 0x61, 0x88, 0x4c, 0xdc, 0x62, 0xc8, 0x51, 0x64, 0xce, 0x40, 0xb3, 0x53, 0x06,
0xc9, 0x1b, 0x18, 0x07, 0x51, 0x14, 0x0b, 0xb9, 0x23, 0x48, 0x0c, 0xf8, 0x4d, 0x2e, 0x58, 0x2e,
0xe3, 0x41, 0x1f, 0x65, 0x93, 0x5b, 0x7d, 0x39, 0x48, 0xe2, 0x20, 0x93, 0x87, 0x1e, 0xea, 0x48,
0x6b, 0x7a, 0x01, 0x1c, 0x97, 0x39, 0x2f, 0x8a, 0x75, 0x04, 0x9d, 0x9c, 0xa7, 0x05, 0xeb, 0x6a,
0x59, 0xa1, 0xad, 0xbd, 0x37, 0x6d, 0xde, 0x1f, 0x7d, 0x18, 0xfb, 0x38, 0x8b, 0x33, 0x81, 0xbc,
0x5a, 0x5b, 0x5b, 0xcb, 0x56, 0x43, 0x2d, 0xdb, 0x8d, 0xb5, 0xec, 0x94, 0x6a, 0x29, 0xf1, 0x30,
0xcf, 0x04, 0x9d, 0xeb, 0x1a, 0xf7, 0xfd, 0xc2, 0x22, 0x67, 0xd0, 0xa5, 0xd3, 0x5f, 0x31, 0x14,
0xbb, 0xea, 0x5b, 0x84, 0x29, 0x86, 0x94, 0x4b, 0xed, 0xe8, 0xea, 0x4c, 0xd6, 0xac, 0x55, 0xbd,
0xb7, 0xa3, 0xea, 0xfd, 0x4a, 0xd5, 0x19, 0x1c, 0x17, 0x64, 0x2c, 0x2f, 0xd7, 0xf3, 0x0c, 0x64,
0x9e, 0xe1, 0xf9, 0xe7, 0x93, 0x55, 0xc3, 0x4e, 0x36, 0x90, 0x34, 0xf9, 0xb6, 0x61, 0xfb, 0x55,
0x2a, 0xf8, 0xd2, 0x6f, 0xcc, 0x4c, 0x3e, 0x86, 0x67, 0x11, 0x26, 0x28, 0xf0, 0x2b, 0xbc, 0xa3,
0xaa, 0x01, 0x59, 0x12, 0x84, 0x28, 0x35, 0xa2, 0xee, 0xd5, 0xe4, 0x5a, 0x57, 0xe6, 0xb0, 0xa6,
0xcc, 0x78, 0x96, 0xca, 0xd0, 0x8b, 0xfb, 0x20, 0x9d, 0xc9, 0x63, 0x1f, 0xe8, 0xeb, 0x97, 0xc1,
0xba, 0x7e, 0x9f, 0xfe, 0x47, 0xfd, 0x8e, 0xf6, 0xd6, 0xef, 0x61, 0x49, 0xbf, 0x8a, 0xf9, 0x78,
0xae, 0xc6, 0xc7, 0x75, 0xe4, 0x1c, 0x19, 0xe6, 0xad, 0x4d, 0x7e, 0x84, 0x91, 0x91, 0xc3, 0xf7,
0xf1, 0x1c, 0xa9, 0xfa, 0xcc, 0x5b, 0x5a, 0x0c, 0xaf, 0xf6, 0xe0, 0xfc, 0xa2, 0xb4, 0xd1, 0xaf,
0x24, 0x22, 0x5f, 0x80, 0xdb, 0xc0, 0xe3, 0x25, 0xde, 0xc5, 0x29, 0x46, 0x0e, 0xd1, 0xb7, 0xdf,
0x12, 0xe1, 0x7e, 0x04, 0xc7, 0x4d, 0x55, 0x55, 0xda, 0x97, 0xbd, 0x96, 0xc9, 0x7e, 0x50, 0xb7,
0xd4, 0x6b, 0xf7, 0x07, 0x18, 0x95, 0x4f, 0xa3, 0x55, 0xcf, 0xe5, 0x74, 0xb5, 0x7d, 0x53, 0x58,
0x0a, 0xcf, 0x59, 0xa4, 0x70, 0xd3, 0x3b, 0x85, 0xa5, 0x70, 0x73, 0x16, 0xdb, 0x3d, 0xc6, 0x72,
0x7f, 0x6f, 0xc1, 0xf3, 0x8d, 0xe2, 0x52, 0x23, 0xe0, 0x01, 0x97, 0x76, 0x04, 0xc8, 0x25, 0xb9,
0x81, 0x27, 0x8b, 0x20, 0xc9, 0xb1, 0xe8, 0xfe, 0xd7, 0xff, 0x53, 0xbb, 0xbe, 0xc9, 0xf2, 0x59,
0xfb, 0x4d, 0xcb, 0xfb, 0xb3, 0x05, 0x4e, 0x7d, 0xef, 0xc6, 0x21, 0x64, 0xde, 0x82, 0xf6, 0xea,
0x2d, 0xf8, 0xb7, 0xcf, 0x3b, 0xfb, 0xf5, 0xb9, 0xa4, 0x22, 0x13, 0xc1, 0x34, 0x41, 0x3b, 0x30,
0x8c, 0xa5, 0x14, 0x66, 0x56, 0xea, 0x45, 0xd0, 0x0a, 0x2b, 0x4c, 0x0f, 0xe1, 0xb4, 0x7a, 0xc0,
0x42, 0x96, 0x76, 0x88, 0xd5, 0x8f, 0xf9, 0x0a, 0x7a, 0xb4, 0x50, 0xf6, 0x8e, 0x41, 0x69, 0xe3,
0xce, 0xff, 0xea, 0xc0, 0xa1, 0xcd, 0x7f, 0x43, 0xd3, 0x58, 0x50, 0x4e, 0x7e, 0x82, 0xc3, 0xca,
0x63, 0x4a, 0xde, 0x5b, 0xe3, 0xbc, 0xf9, 0x49, 0x76, 0xbd, 0x6d, 0x21, 0x86, 0x59, 0xef, 0x11,
0xf9, 0x12, 0xba, 0xd7, 0xe9, 0x82, 0x3e, 0xc8, 0xab, 0xaf, 0xc5, 0x1b, 0xc8, 0x66, 0x7a, 0xde,
0xe0, 0x59, 0x25, 0xf8, 0x0e, 0x0e, 0xd6, 0x5f, 0x0e, 0x72, 0x5a, 0x52, 0x43, 0xed, 0x19, 0x77,
0xdf, 0xdd, 0xe8, 0x5f, 0xa5, 0xfc, 0x19, 0x8e, 0xaa, 0x54, 0x13, 0x6f, 0xb7, 0xc8, 0xdc, 0xf7,
0xb7, 0xc6, 0xac, 0xd2, 0xff, 0x52, 0x7f, 0x87, 0xec, 0x80, 0xf9, 0x70, 0x4b, 0x86, 0x72, 0xb5,
0xdd, 0x93, 0x5a, 0x29, 0xaf, 0xd4, 0xff, 0x2a, 0xef, 0xd1, 0xb4, 0xab, 0x91, 0x4f, 0xfe, 0x09,
0x00, 0x00, 0xff, 0xff, 0xee, 0xb7, 0xd0, 0x4b, 0x94, 0x09, 0x00, 0x00,
}

View file

@ -96,6 +96,7 @@ message RegisterResourceRequest {
repeated string aliases = 15; // a list of additional URNs that shoud be considered the same.
string importId = 16; // if set, this resource's state should be imported from the given ID.
CustomTimeouts customTimeouts = 17; // ability to pass a custom Timeout block.
bool deleteBeforeReplaceDefined = 18; // true if the deleteBeforeReplace property should be treated as defined even if it is false.
}
// RegisterResourceResponse is returned by the engine after a resource has finished being initialized. It includes the

View file

@ -22,7 +22,7 @@ DESCRIPTOR = _descriptor.FileDescriptor(
package='pulumirpc',
syntax='proto3',
serialized_options=None,
serialized_pb=_b('\n\x0eresource.proto\x12\tpulumirpc\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x0eprovider.proto\"$\n\x16SupportsFeatureRequest\x12\n\n\x02id\x18\x01 \x01(\t\"-\n\x17SupportsFeatureResponse\x12\x12\n\nhasSupport\x18\x01 \x01(\x08\"\xfc\x01\n\x13ReadResourceRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0e\n\x06parent\x18\x04 \x01(\t\x12+\n\nproperties\x18\x05 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x14\n\x0c\x64\x65pendencies\x18\x06 \x03(\t\x12\x10\n\x08provider\x18\x07 \x01(\t\x12\x0f\n\x07version\x18\x08 \x01(\t\x12\x15\n\racceptSecrets\x18\t \x01(\x08\x12\x1f\n\x17\x61\x64\x64itionalSecretOutputs\x18\n \x03(\t\x12\x0f\n\x07\x61liases\x18\x0b \x03(\t\"P\n\x14ReadResourceResponse\x12\x0b\n\x03urn\x18\x01 \x01(\t\x12+\n\nproperties\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\xdc\x05\n\x17RegisterResourceRequest\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06parent\x18\x03 \x01(\t\x12\x0e\n\x06\x63ustom\x18\x04 \x01(\x08\x12\'\n\x06object\x18\x05 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0f\n\x07protect\x18\x06 \x01(\x08\x12\x14\n\x0c\x64\x65pendencies\x18\x07 \x03(\t\x12\x10\n\x08provider\x18\x08 \x01(\t\x12Z\n\x14propertyDependencies\x18\t \x03(\x0b\x32<.pulumirpc.RegisterResourceRequest.PropertyDependenciesEntry\x12\x1b\n\x13\x64\x65leteBeforeReplace\x18\n \x01(\x08\x12\x0f\n\x07version\x18\x0b \x01(\t\x12\x15\n\rignoreChanges\x18\x0c \x03(\t\x12\x15\n\racceptSecrets\x18\r \x01(\x08\x12\x1f\n\x17\x61\x64\x64itionalSecretOutputs\x18\x0e \x03(\t\x12\x0f\n\x07\x61liases\x18\x0f \x03(\t\x12\x10\n\x08importId\x18\x10 \x01(\t\x12I\n\x0e\x63ustomTimeouts\x18\x11 \x01(\x0b\x32\x31.pulumirpc.RegisterResourceRequest.CustomTimeouts\x1a$\n\x14PropertyDependencies\x12\x0c\n\x04urns\x18\x01 \x03(\t\x1a@\n\x0e\x43ustomTimeouts\x12\x0e\n\x06\x63reate\x18\x01 \x01(\t\x12\x0e\n\x06update\x18\x02 \x01(\t\x12\x0e\n\x06\x64\x65lete\x18\x03 \x01(\t\x1at\n\x19PropertyDependenciesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.pulumirpc.RegisterResourceRequest.PropertyDependencies:\x02\x38\x01\"}\n\x18RegisterResourceResponse\x12\x0b\n\x03urn\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\'\n\x06object\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0e\n\x06stable\x18\x04 \x01(\x08\x12\x0f\n\x07stables\x18\x05 \x03(\t\"W\n\x1eRegisterResourceOutputsRequest\x12\x0b\n\x03urn\x18\x01 \x01(\t\x12(\n\x07outputs\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct2\xc0\x03\n\x0fResourceMonitor\x12Z\n\x0fSupportsFeature\x12!.pulumirpc.SupportsFeatureRequest\x1a\".pulumirpc.SupportsFeatureResponse\"\x00\x12?\n\x06Invoke\x12\x18.pulumirpc.InvokeRequest\x1a\x19.pulumirpc.InvokeResponse\"\x00\x12Q\n\x0cReadResource\x12\x1e.pulumirpc.ReadResourceRequest\x1a\x1f.pulumirpc.ReadResourceResponse\"\x00\x12]\n\x10RegisterResource\x12\".pulumirpc.RegisterResourceRequest\x1a#.pulumirpc.RegisterResourceResponse\"\x00\x12^\n\x17RegisterResourceOutputs\x12).pulumirpc.RegisterResourceOutputsRequest\x1a\x16.google.protobuf.Empty\"\x00\x62\x06proto3')
serialized_pb=_b('\n\x0eresource.proto\x12\tpulumirpc\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x0eprovider.proto\"$\n\x16SupportsFeatureRequest\x12\n\n\x02id\x18\x01 \x01(\t\"-\n\x17SupportsFeatureResponse\x12\x12\n\nhasSupport\x18\x01 \x01(\x08\"\xfc\x01\n\x13ReadResourceRequest\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04type\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x0e\n\x06parent\x18\x04 \x01(\t\x12+\n\nproperties\x18\x05 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x14\n\x0c\x64\x65pendencies\x18\x06 \x03(\t\x12\x10\n\x08provider\x18\x07 \x01(\t\x12\x0f\n\x07version\x18\x08 \x01(\t\x12\x15\n\racceptSecrets\x18\t \x01(\x08\x12\x1f\n\x17\x61\x64\x64itionalSecretOutputs\x18\n \x03(\t\x12\x0f\n\x07\x61liases\x18\x0b \x03(\t\"P\n\x14ReadResourceResponse\x12\x0b\n\x03urn\x18\x01 \x01(\t\x12+\n\nproperties\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\"\x80\x06\n\x17RegisterResourceRequest\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06parent\x18\x03 \x01(\t\x12\x0e\n\x06\x63ustom\x18\x04 \x01(\x08\x12\'\n\x06object\x18\x05 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0f\n\x07protect\x18\x06 \x01(\x08\x12\x14\n\x0c\x64\x65pendencies\x18\x07 \x03(\t\x12\x10\n\x08provider\x18\x08 \x01(\t\x12Z\n\x14propertyDependencies\x18\t \x03(\x0b\x32<.pulumirpc.RegisterResourceRequest.PropertyDependenciesEntry\x12\x1b\n\x13\x64\x65leteBeforeReplace\x18\n \x01(\x08\x12\x0f\n\x07version\x18\x0b \x01(\t\x12\x15\n\rignoreChanges\x18\x0c \x03(\t\x12\x15\n\racceptSecrets\x18\r \x01(\x08\x12\x1f\n\x17\x61\x64\x64itionalSecretOutputs\x18\x0e \x03(\t\x12\x0f\n\x07\x61liases\x18\x0f \x03(\t\x12\x10\n\x08importId\x18\x10 \x01(\t\x12I\n\x0e\x63ustomTimeouts\x18\x11 \x01(\x0b\x32\x31.pulumirpc.RegisterResourceRequest.CustomTimeouts\x12\"\n\x1a\x64\x65leteBeforeReplaceDefined\x18\x12 \x01(\x08\x1a$\n\x14PropertyDependencies\x12\x0c\n\x04urns\x18\x01 \x03(\t\x1a@\n\x0e\x43ustomTimeouts\x12\x0e\n\x06\x63reate\x18\x01 \x01(\t\x12\x0e\n\x06update\x18\x02 \x01(\t\x12\x0e\n\x06\x64\x65lete\x18\x03 \x01(\t\x1at\n\x19PropertyDependenciesEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x46\n\x05value\x18\x02 \x01(\x0b\x32\x37.pulumirpc.RegisterResourceRequest.PropertyDependencies:\x02\x38\x01\"}\n\x18RegisterResourceResponse\x12\x0b\n\x03urn\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\t\x12\'\n\x06object\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0e\n\x06stable\x18\x04 \x01(\x08\x12\x0f\n\x07stables\x18\x05 \x03(\t\"W\n\x1eRegisterResourceOutputsRequest\x12\x0b\n\x03urn\x18\x01 \x01(\t\x12(\n\x07outputs\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct2\xc0\x03\n\x0fResourceMonitor\x12Z\n\x0fSupportsFeature\x12!.pulumirpc.SupportsFeatureRequest\x1a\".pulumirpc.SupportsFeatureResponse\"\x00\x12?\n\x06Invoke\x12\x18.pulumirpc.InvokeRequest\x1a\x19.pulumirpc.InvokeResponse\"\x00\x12Q\n\x0cReadResource\x12\x1e.pulumirpc.ReadResourceRequest\x1a\x1f.pulumirpc.ReadResourceResponse\"\x00\x12]\n\x10RegisterResource\x12\".pulumirpc.RegisterResourceRequest\x1a#.pulumirpc.RegisterResourceResponse\"\x00\x12^\n\x17RegisterResourceOutputs\x12).pulumirpc.RegisterResourceOutputsRequest\x1a\x16.google.protobuf.Empty\"\x00\x62\x06proto3')
,
dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,google_dot_protobuf_dot_struct__pb2.DESCRIPTOR,provider__pb2.DESCRIPTOR,])
@ -256,8 +256,8 @@ _REGISTERRESOURCEREQUEST_PROPERTYDEPENDENCIES = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=1039,
serialized_end=1075,
serialized_start=1075,
serialized_end=1111,
)
_REGISTERRESOURCEREQUEST_CUSTOMTIMEOUTS = _descriptor.Descriptor(
@ -300,8 +300,8 @@ _REGISTERRESOURCEREQUEST_CUSTOMTIMEOUTS = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=1077,
serialized_end=1141,
serialized_start=1113,
serialized_end=1177,
)
_REGISTERRESOURCEREQUEST_PROPERTYDEPENDENCIESENTRY = _descriptor.Descriptor(
@ -337,8 +337,8 @@ _REGISTERRESOURCEREQUEST_PROPERTYDEPENDENCIESENTRY = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=1143,
serialized_end=1259,
serialized_start=1179,
serialized_end=1295,
)
_REGISTERRESOURCEREQUEST = _descriptor.Descriptor(
@ -467,6 +467,13 @@ _REGISTERRESOURCEREQUEST = _descriptor.Descriptor(
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
_descriptor.FieldDescriptor(
name='deleteBeforeReplaceDefined', full_name='pulumirpc.RegisterResourceRequest.deleteBeforeReplaceDefined', index=17,
number=18, type=8, cpp_type=7, label=1,
has_default_value=False, default_value=False,
message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None,
serialized_options=None, file=DESCRIPTOR),
],
extensions=[
],
@ -480,7 +487,7 @@ _REGISTERRESOURCEREQUEST = _descriptor.Descriptor(
oneofs=[
],
serialized_start=527,
serialized_end=1259,
serialized_end=1295,
)
@ -538,8 +545,8 @@ _REGISTERRESOURCERESPONSE = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=1261,
serialized_end=1386,
serialized_start=1297,
serialized_end=1422,
)
@ -576,8 +583,8 @@ _REGISTERRESOURCEOUTPUTSREQUEST = _descriptor.Descriptor(
extension_ranges=[],
oneofs=[
],
serialized_start=1388,
serialized_end=1475,
serialized_start=1424,
serialized_end=1511,
)
_READRESOURCEREQUEST.fields_by_name['properties'].message_type = google_dot_protobuf_dot_struct__pb2._STRUCT
@ -682,8 +689,8 @@ _RESOURCEMONITOR = _descriptor.ServiceDescriptor(
file=DESCRIPTOR,
index=0,
serialized_options=None,
serialized_start=1478,
serialized_end=1926,
serialized_start=1514,
serialized_end=1962,
methods=[
_descriptor.MethodDescriptor(
name='SupportsFeature',

View file

@ -352,6 +352,7 @@ def register_resource(res: 'Resource', ty: str, name: str, custom: bool, props:
dependencies=resolver.dependencies,
propertyDependencies=property_dependencies,
deleteBeforeReplace=opts.delete_before_replace,
deleteBeforeReplaceDefined=opts.delete_before_replace is not None,
ignoreChanges=ignore_changes,
version=opts.version or "",
acceptSecrets=True,