From 51aeba2cf2a2b9f99f296ac8bfcd30fc9229c7b8 Mon Sep 17 00:00:00 2001 From: Martin Atkins Date: Thu, 21 Jun 2018 15:26:37 -0700 Subject: [PATCH] plans: Record provider config address in each resource change This allows us to record the resource-to-provider associations we made during the plan phase and ensure that we use the same config during apply. This isn't technically necessary, since we can in principle just repeat the same matching algorithm against the config, but that algorithm is relatively complicated and so if we execute it just once during plan we remove the risk of bugs causing different decisions to be made during the apply phase. This also includes updates to the plan file format to include the provider addresses. Since we've not actually shipped any version of Terraform using our protobuf schema yet, we renumber here all of the fields after the new one to keep them incrementing consecutively. This example should not be followed after we have a released version of Terraform using this, as a courtesy to anyone trying to parse these files (even though we're not yet guaranteeing compatibility between releases). --- plans/changes.go | 5 + plans/internal/planproto/planfile.pb.go | 138 +++++++++++++----------- plans/internal/planproto/planfile.proto | 11 +- plans/planfile/tfplan.go | 7 ++ plans/planfile/tfplan_test.go | 6 ++ 5 files changed, 101 insertions(+), 66 deletions(-) diff --git a/plans/changes.go b/plans/changes.go index 8e850adf3..bb42383b0 100644 --- a/plans/changes.go +++ b/plans/changes.go @@ -32,6 +32,11 @@ type ResourceInstanceChange struct { // the current object is being replaced with the deposed. DeposedKey states.DeposedKey + // Provider is the address of the provider configuration that was used + // to plan this change, and thus the configuration that must also be + // used to apply it. + ProviderAddr addrs.AbsProviderConfig + // Change is an embedded description of the change. Change } diff --git a/plans/internal/planproto/planfile.pb.go b/plans/internal/planproto/planfile.pb.go index a5fd8f8f7..5d36553c3 100644 --- a/plans/internal/planproto/planfile.pb.go +++ b/plans/internal/planproto/planfile.pb.go @@ -52,7 +52,7 @@ func (x Action) String() string { return proto.EnumName(Action_name, int32(x)) } func (Action) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_planfile_78f69d66ae9e7fdf, []int{0} + return fileDescriptor_planfile_8d966014b6720da2, []int{0} } type ResourceInstanceChange_ResourceMode int32 @@ -75,7 +75,7 @@ func (x ResourceInstanceChange_ResourceMode) String() string { return proto.EnumName(ResourceInstanceChange_ResourceMode_name, int32(x)) } func (ResourceInstanceChange_ResourceMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_planfile_78f69d66ae9e7fdf, []int{2, 0} + return fileDescriptor_planfile_8d966014b6720da2, []int{2, 0} } // Plan is the root message type for the tfplan file @@ -115,7 +115,7 @@ func (m *Plan) Reset() { *m = Plan{} } func (m *Plan) String() string { return proto.CompactTextString(m) } func (*Plan) ProtoMessage() {} func (*Plan) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_78f69d66ae9e7fdf, []int{0} + return fileDescriptor_planfile_8d966014b6720da2, []int{0} } func (m *Plan) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Plan.Unmarshal(m, b) @@ -202,7 +202,7 @@ func (m *Change) Reset() { *m = Change{} } func (m *Change) String() string { return proto.CompactTextString(m) } func (*Change) ProtoMessage() {} func (*Change) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_78f69d66ae9e7fdf, []int{1} + return fileDescriptor_planfile_8d966014b6720da2, []int{1} } func (m *Change) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Change.Unmarshal(m, b) @@ -262,19 +262,23 @@ type ResourceInstanceChange struct { // object for the indicated instance with the given deposed key. If not // set, the change applies to the instance's current object. DeposedKey string `protobuf:"bytes,7,opt,name=deposed_key,json=deposedKey,proto3" json:"deposed_key,omitempty"` + // provider is the address of the provider configuration that this change + // was planned with, and thus the configuration that must be used to + // apply it. + Provider string `protobuf:"bytes,8,opt,name=provider,proto3" json:"provider,omitempty"` // Description of the proposed change. May use "create", "read", "update", // "replace" and "delete" actions. "no-op" changes are not currently used here // but consumers must accept and discard them to allow for future expansion. - Change *Change `protobuf:"bytes,8,opt,name=change,proto3" json:"change,omitempty"` + Change *Change `protobuf:"bytes,9,opt,name=change,proto3" json:"change,omitempty"` // msgpack representation of an arbitrary object value provided by // the resource provider as additional context for the change. Must // be considered an opaque value for any consumer other than the // provider that generated it. - Private *DynamicValue `protobuf:"bytes,9,opt,name=private,proto3" json:"private,omitempty"` + Private *DynamicValue `protobuf:"bytes,10,opt,name=private,proto3" json:"private,omitempty"` // An unordered set of paths that prompted the change action to be // "replace" rather than "update". Empty for any action other than // "replace". - RequiredReplace []*Path `protobuf:"bytes,10,rep,name=required_replace,json=requiredReplace,proto3" json:"required_replace,omitempty"` + RequiredReplace []*Path `protobuf:"bytes,11,rep,name=required_replace,json=requiredReplace,proto3" json:"required_replace,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -284,7 +288,7 @@ func (m *ResourceInstanceChange) Reset() { *m = ResourceInstanceChange{} func (m *ResourceInstanceChange) String() string { return proto.CompactTextString(m) } func (*ResourceInstanceChange) ProtoMessage() {} func (*ResourceInstanceChange) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_78f69d66ae9e7fdf, []int{2} + return fileDescriptor_planfile_8d966014b6720da2, []int{2} } func (m *ResourceInstanceChange) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_ResourceInstanceChange.Unmarshal(m, b) @@ -374,6 +378,13 @@ func (m *ResourceInstanceChange) GetDeposedKey() string { return "" } +func (m *ResourceInstanceChange) GetProvider() string { + if m != nil { + return m.Provider + } + return "" +} + func (m *ResourceInstanceChange) GetChange() *Change { if m != nil { return m.Change @@ -479,7 +490,7 @@ func (m *OutputChange) Reset() { *m = OutputChange{} } func (m *OutputChange) String() string { return proto.CompactTextString(m) } func (*OutputChange) ProtoMessage() {} func (*OutputChange) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_78f69d66ae9e7fdf, []int{3} + return fileDescriptor_planfile_8d966014b6720da2, []int{3} } func (m *OutputChange) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_OutputChange.Unmarshal(m, b) @@ -543,7 +554,7 @@ func (m *DynamicValue) Reset() { *m = DynamicValue{} } func (m *DynamicValue) String() string { return proto.CompactTextString(m) } func (*DynamicValue) ProtoMessage() {} func (*DynamicValue) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_78f69d66ae9e7fdf, []int{4} + return fileDescriptor_planfile_8d966014b6720da2, []int{4} } func (m *DynamicValue) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_DynamicValue.Unmarshal(m, b) @@ -589,7 +600,7 @@ func (m *Hash) Reset() { *m = Hash{} } func (m *Hash) String() string { return proto.CompactTextString(m) } func (*Hash) ProtoMessage() {} func (*Hash) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_78f69d66ae9e7fdf, []int{5} + return fileDescriptor_planfile_8d966014b6720da2, []int{5} } func (m *Hash) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Hash.Unmarshal(m, b) @@ -630,7 +641,7 @@ func (m *Path) Reset() { *m = Path{} } func (m *Path) String() string { return proto.CompactTextString(m) } func (*Path) ProtoMessage() {} func (*Path) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_78f69d66ae9e7fdf, []int{6} + return fileDescriptor_planfile_8d966014b6720da2, []int{6} } func (m *Path) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Path.Unmarshal(m, b) @@ -671,7 +682,7 @@ func (m *Path_Step) Reset() { *m = Path_Step{} } func (m *Path_Step) String() string { return proto.CompactTextString(m) } func (*Path_Step) ProtoMessage() {} func (*Path_Step) Descriptor() ([]byte, []int) { - return fileDescriptor_planfile_78f69d66ae9e7fdf, []int{6, 0} + return fileDescriptor_planfile_8d966014b6720da2, []int{6, 0} } func (m *Path_Step) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Path_Step.Unmarshal(m, b) @@ -811,58 +822,59 @@ func init() { proto.RegisterEnum("tfplan.ResourceInstanceChange_ResourceMode", ResourceInstanceChange_ResourceMode_name, ResourceInstanceChange_ResourceMode_value) } -func init() { proto.RegisterFile("planfile.proto", fileDescriptor_planfile_78f69d66ae9e7fdf) } +func init() { proto.RegisterFile("planfile.proto", fileDescriptor_planfile_8d966014b6720da2) } -var fileDescriptor_planfile_78f69d66ae9e7fdf = []byte{ - // 794 bytes of a gzipped FileDescriptorProto +var fileDescriptor_planfile_8d966014b6720da2 = []byte{ + // 804 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x55, 0xdb, 0x6e, 0xe3, 0x36, - 0x10, 0xb5, 0x6c, 0x45, 0x89, 0x27, 0x5e, 0x45, 0xcb, 0x16, 0x0b, 0x21, 0x2d, 0xb6, 0x86, 0x80, + 0x10, 0xb5, 0x6c, 0x45, 0xb1, 0xc7, 0x5e, 0x45, 0xcb, 0x16, 0x0b, 0x21, 0x2d, 0xb6, 0x86, 0x80, 0x76, 0x8d, 0xdd, 0xc2, 0x01, 0x52, 0xb4, 0xe9, 0xb6, 0x0f, 0x45, 0x2e, 0x02, 0x12, 0xec, 0x25, - 0x06, 0xbb, 0xcd, 0x43, 0x1f, 0x6a, 0x30, 0xd2, 0x24, 0x26, 0x56, 0xa2, 0x54, 0x92, 0x32, 0xe0, - 0xb7, 0xfe, 0x4c, 0xbf, 0xa0, 0x3f, 0x58, 0x90, 0xba, 0x44, 0x01, 0x02, 0x3f, 0x59, 0x73, 0xe6, + 0x06, 0xbb, 0xcd, 0x43, 0x1f, 0x6a, 0x30, 0xd2, 0x24, 0x26, 0x56, 0xa2, 0x54, 0x92, 0x36, 0xe0, + 0xb7, 0xfe, 0x4c, 0xbf, 0xa7, 0xbf, 0x54, 0x90, 0xba, 0x44, 0x01, 0x02, 0x3f, 0x59, 0x73, 0xe6, 0xcc, 0x88, 0xe7, 0xcc, 0x50, 0x06, 0xbf, 0xcc, 0x98, 0xb8, 0xe3, 0x19, 0xce, 0x4b, 0x59, 0xe8, - 0x82, 0x78, 0xfa, 0xce, 0x20, 0xd1, 0x3f, 0x2e, 0xb8, 0x8b, 0x8c, 0x09, 0x12, 0xc2, 0xee, 0x1a, - 0xa5, 0xe2, 0x85, 0x08, 0x9d, 0xa9, 0x33, 0x73, 0x69, 0x1b, 0x92, 0xb7, 0x30, 0x5e, 0x33, 0xc9, - 0xd9, 0x6d, 0x86, 0x2a, 0x1c, 0x4e, 0x47, 0xb3, 0xfd, 0xe3, 0xaf, 0xe6, 0x75, 0xf9, 0xdc, 0x94, - 0xce, 0x6f, 0xda, 0x6c, 0x2c, 0xb4, 0xdc, 0xd0, 0x07, 0x36, 0xb9, 0x82, 0x40, 0xa2, 0x2a, 0x2a, - 0x99, 0xe0, 0x32, 0x59, 0x31, 0x71, 0x8f, 0x2a, 0x1c, 0xd9, 0x0e, 0x2f, 0xdb, 0x0e, 0xb4, 0xc9, - 0x5f, 0x09, 0xa5, 0x99, 0x48, 0xf0, 0xdc, 0xd2, 0xe8, 0x41, 0x5b, 0x57, 0xc7, 0x8a, 0xfc, 0x0a, - 0x7e, 0x51, 0xe9, 0xb2, 0xd2, 0x5d, 0x23, 0xd7, 0x36, 0xfa, 0xb2, 0x6d, 0x74, 0x6d, 0xb3, 0x4d, - 0xf9, 0xb3, 0xa2, 0x17, 0x29, 0xf2, 0x06, 0x9e, 0x6b, 0x94, 0x92, 0xdd, 0x15, 0x32, 0x5f, 0xb6, - 0x32, 0xfd, 0xa9, 0x33, 0x1b, 0xd3, 0xa0, 0x4b, 0xdc, 0x34, 0x7a, 0xaf, 0xe0, 0xa0, 0x94, 0xc5, - 0x9a, 0xa7, 0x28, 0x97, 0x2b, 0xa6, 0x56, 0xa8, 0xc2, 0x03, 0xfb, 0xaa, 0xe9, 0x23, 0xd5, 0x8b, - 0x86, 0x73, 0x69, 0x29, 0xb5, 0x74, 0xbf, 0x7c, 0x04, 0x1e, 0x52, 0xf0, 0x1f, 0x9b, 0x43, 0x02, - 0x18, 0x7d, 0xc6, 0x8d, 0xb5, 0x78, 0x4c, 0xcd, 0x23, 0x79, 0x0d, 0x3b, 0x6b, 0x96, 0x55, 0x18, - 0x0e, 0xa7, 0x4e, 0x5f, 0xcf, 0xc5, 0x46, 0xb0, 0x9c, 0x27, 0x37, 0x26, 0x47, 0x6b, 0xca, 0x2f, - 0xc3, 0x9f, 0x9d, 0xc3, 0x6b, 0xf8, 0xe2, 0x89, 0x57, 0x3f, 0xd1, 0x38, 0x7a, 0xdc, 0x78, 0xd2, - 0x36, 0x36, 0x55, 0xbd, 0x86, 0xd1, 0x5f, 0xe0, 0xd5, 0x3e, 0x91, 0xef, 0xc0, 0x63, 0x89, 0x6e, - 0x57, 0xc0, 0x3f, 0xf6, 0xdb, 0x92, 0x53, 0x8b, 0xd2, 0x26, 0x4b, 0xbe, 0x07, 0xcf, 0x96, 0xb7, - 0xeb, 0xf0, 0xf4, 0x99, 0x1b, 0x4e, 0xf4, 0xdf, 0x08, 0x5e, 0x3c, 0x3d, 0x65, 0xf2, 0x0d, 0xec, - 0xe7, 0x45, 0x5a, 0x65, 0xb8, 0x2c, 0x99, 0x5e, 0x35, 0x87, 0x87, 0x1a, 0x5a, 0x30, 0xbd, 0x22, - 0xbf, 0x81, 0x9b, 0x17, 0x69, 0x2d, 0xc1, 0x3f, 0x7e, 0xb3, 0x7d, 0x69, 0x3a, 0xf8, 0x43, 0x91, - 0x22, 0xb5, 0x85, 0x84, 0x80, 0xab, 0x37, 0x25, 0x86, 0x23, 0xdb, 0xda, 0x3e, 0x1b, 0x4c, 0xb0, - 0x1c, 0x43, 0xb7, 0xc6, 0xcc, 0x33, 0x21, 0x30, 0x52, 0x5a, 0x86, 0x3b, 0x06, 0xba, 0x1c, 0x50, - 0x13, 0x18, 0x8c, 0x0b, 0x1d, 0x7a, 0x53, 0x67, 0x36, 0x32, 0x18, 0x17, 0xda, 0x9c, 0x38, 0xc5, - 0xb2, 0x50, 0x98, 0x2e, 0x8d, 0xdd, 0xbb, 0xf5, 0x89, 0x1b, 0xe8, 0x1d, 0x6e, 0x8c, 0x87, 0xf5, - 0x82, 0x86, 0x7b, 0xd6, 0xf6, 0xce, 0xc3, 0x66, 0x33, 0x9b, 0x2c, 0x99, 0xc3, 0x6e, 0x29, 0xf9, - 0x9a, 0x69, 0x0c, 0xc7, 0x5b, 0x06, 0xdf, 0x92, 0xc8, 0x89, 0xb9, 0x4a, 0x7f, 0x57, 0x5c, 0x62, - 0xba, 0x94, 0x58, 0x66, 0x2c, 0xc1, 0x10, 0xac, 0xfb, 0xdd, 0x60, 0x8d, 0x63, 0xe6, 0xe2, 0xd4, - 0x2c, 0x5a, 0x93, 0xa2, 0x6f, 0x61, 0xd2, 0xf7, 0x85, 0xec, 0xc3, 0x6e, 0xce, 0x04, 0xbb, 0xc7, - 0x34, 0x18, 0x90, 0x3d, 0x70, 0x53, 0xa6, 0x59, 0xe0, 0x9c, 0xf9, 0x30, 0xe1, 0x8d, 0x9b, 0x46, - 0x59, 0xb4, 0x82, 0x49, 0xff, 0x46, 0x75, 0xa6, 0x39, 0x3d, 0xd3, 0x1e, 0xb4, 0x0e, 0xb7, 0x6a, - 0xfd, 0x1a, 0xc6, 0x0a, 0x85, 0xe2, 0x9a, 0xaf, 0xeb, 0x49, 0xec, 0xd1, 0x07, 0x20, 0x9a, 0xc1, - 0xa4, 0x2f, 0xd9, 0x7c, 0x89, 0x72, 0x75, 0x5f, 0xb2, 0xe4, 0xb3, 0x7d, 0xd9, 0x84, 0xb6, 0x61, - 0xf4, 0x12, 0x5c, 0xb3, 0xbc, 0xe4, 0x05, 0x78, 0x6a, 0xc5, 0x8e, 0x7f, 0xfc, 0xa9, 0x21, 0x34, - 0x51, 0xf4, 0xaf, 0x03, 0xae, 0x5d, 0x9b, 0x57, 0xb0, 0xa3, 0x34, 0x96, 0x2a, 0x74, 0xac, 0x43, - 0xcf, 0xfb, 0x0e, 0xcd, 0x7f, 0xd7, 0x58, 0xd2, 0x3a, 0x7f, 0xa8, 0xc1, 0x35, 0x21, 0x79, 0x05, - 0x3e, 0xd3, 0x5a, 0xf2, 0xdb, 0x4a, 0xe3, 0xf2, 0x41, 0xe7, 0xe5, 0x80, 0x3e, 0xeb, 0xf0, 0x8f, - 0x46, 0xf2, 0x09, 0xec, 0x63, 0x86, 0x39, 0x0a, 0x6d, 0xe7, 0xbf, 0xe5, 0xce, 0x5e, 0x0e, 0x28, - 0x34, 0xd4, 0x77, 0xb8, 0x39, 0x03, 0xd8, 0x53, 0x98, 0x61, 0xa2, 0x0b, 0xf9, 0xfa, 0x03, 0x78, - 0xf5, 0x8d, 0x32, 0xfe, 0x7f, 0xbc, 0xbe, 0x5e, 0x04, 0x03, 0x02, 0xe0, 0x9d, 0xd3, 0xf8, 0xf4, - 0x53, 0x1c, 0x38, 0x06, 0xa5, 0xf1, 0xe9, 0x45, 0x30, 0x34, 0xe8, 0x1f, 0x8b, 0x0b, 0x83, 0x8e, - 0xcc, 0xe0, 0x68, 0xbc, 0x78, 0x7f, 0x7a, 0x1e, 0x07, 0xae, 0x49, 0x5c, 0xc4, 0xef, 0xe3, 0x4f, - 0x71, 0xb0, 0x73, 0xf6, 0xf6, 0xcf, 0x93, 0x7b, 0xae, 0x57, 0xd5, 0xed, 0x3c, 0x29, 0xf2, 0x23, - 0xf3, 0xc9, 0xe2, 0x49, 0x21, 0xcb, 0xa3, 0xee, 0xcb, 0x76, 0x64, 0x0e, 0xa7, 0x8e, 0xb8, 0xd0, - 0x28, 0x05, 0xcb, 0x6c, 0x68, 0xff, 0x06, 0x6e, 0x3d, 0xfb, 0xf3, 0xc3, 0xff, 0x01, 0x00, 0x00, - 0xff, 0xff, 0x19, 0x9b, 0x98, 0x0d, 0x1f, 0x06, 0x00, 0x00, + 0x82, 0x78, 0xfa, 0xce, 0x20, 0xd1, 0x3f, 0x2e, 0xb8, 0x8b, 0x8c, 0x09, 0x12, 0xc2, 0xfe, 0x06, + 0xa5, 0xe2, 0x85, 0x08, 0x9d, 0xa9, 0x33, 0x73, 0x69, 0x13, 0x92, 0xb7, 0x30, 0xda, 0x30, 0xc9, + 0xd9, 0x6d, 0x86, 0x2a, 0xec, 0x4f, 0x07, 0xb3, 0xf1, 0xf1, 0x57, 0xf3, 0xaa, 0x7c, 0x6e, 0x4a, + 0xe7, 0x37, 0x4d, 0x36, 0x16, 0x5a, 0x6e, 0xe9, 0x03, 0x9b, 0x5c, 0x41, 0x20, 0x51, 0x15, 0x6b, + 0x99, 0xe0, 0x32, 0x59, 0x31, 0x71, 0x8f, 0x2a, 0x1c, 0xd8, 0x0e, 0x2f, 0x9b, 0x0e, 0xb4, 0xce, + 0x5f, 0x09, 0xa5, 0x99, 0x48, 0xf0, 0xdc, 0xd2, 0xe8, 0x41, 0x53, 0x57, 0xc5, 0x8a, 0xfc, 0x0a, + 0x7e, 0xb1, 0xd6, 0xe5, 0x5a, 0xb7, 0x8d, 0x5c, 0xdb, 0xe8, 0xcb, 0xa6, 0xd1, 0xb5, 0xcd, 0xd6, + 0xe5, 0xcf, 0x8a, 0x4e, 0xa4, 0xc8, 0x1b, 0x78, 0xae, 0x51, 0x4a, 0x76, 0x57, 0xc8, 0x7c, 0xd9, + 0xc8, 0xf4, 0xa7, 0xce, 0x6c, 0x44, 0x83, 0x36, 0x71, 0x53, 0xeb, 0xbd, 0x82, 0x83, 0x52, 0x16, + 0x1b, 0x9e, 0xa2, 0x5c, 0xae, 0x98, 0x5a, 0xa1, 0x0a, 0x0f, 0xec, 0xab, 0xa6, 0x8f, 0x54, 0x2f, + 0x6a, 0xce, 0xa5, 0xa5, 0x54, 0xd2, 0xfd, 0xf2, 0x11, 0x78, 0x48, 0xc1, 0x7f, 0x6c, 0x0e, 0x09, + 0x60, 0xf0, 0x19, 0xb7, 0xd6, 0xe2, 0x11, 0x35, 0x8f, 0xe4, 0x35, 0xec, 0x6d, 0x58, 0xb6, 0xc6, + 0xb0, 0x3f, 0x75, 0xba, 0x7a, 0x2e, 0xb6, 0x82, 0xe5, 0x3c, 0xb9, 0x31, 0x39, 0x5a, 0x51, 0x7e, + 0xe9, 0xff, 0xec, 0x1c, 0x5e, 0xc3, 0x17, 0x4f, 0xbc, 0xfa, 0x89, 0xc6, 0xd1, 0xe3, 0xc6, 0x93, + 0xa6, 0xb1, 0xa9, 0xea, 0x34, 0x8c, 0xfe, 0x02, 0xaf, 0xf2, 0x89, 0x7c, 0x07, 0x1e, 0x4b, 0x74, + 0xb3, 0x02, 0xfe, 0xb1, 0xdf, 0x94, 0x9c, 0x5a, 0x94, 0xd6, 0x59, 0xf2, 0x3d, 0x78, 0xb6, 0xbc, + 0x59, 0x87, 0xa7, 0xcf, 0x5c, 0x73, 0xa2, 0xff, 0x06, 0xf0, 0xe2, 0xe9, 0x29, 0x93, 0x6f, 0x60, + 0x9c, 0x17, 0xe9, 0x3a, 0xc3, 0x65, 0xc9, 0xf4, 0xaa, 0x3e, 0x3c, 0x54, 0xd0, 0x82, 0xe9, 0x15, + 0xf9, 0x0d, 0xdc, 0xbc, 0x48, 0x2b, 0x09, 0xfe, 0xf1, 0x9b, 0xdd, 0x4b, 0xd3, 0xc2, 0x1f, 0x8a, + 0x14, 0xa9, 0x2d, 0x24, 0x04, 0x5c, 0xbd, 0x2d, 0x31, 0x1c, 0xd8, 0xd6, 0xf6, 0xd9, 0x60, 0x82, + 0xe5, 0x18, 0xba, 0x15, 0x66, 0x9e, 0x09, 0x81, 0x81, 0xd2, 0x32, 0xdc, 0x33, 0xd0, 0x65, 0x8f, + 0x9a, 0xc0, 0x60, 0x5c, 0xe8, 0xd0, 0x9b, 0x3a, 0xb3, 0x81, 0xc1, 0xb8, 0xd0, 0xe6, 0xc4, 0x29, + 0x96, 0x85, 0xc2, 0x74, 0x69, 0xec, 0xde, 0xaf, 0x4e, 0x5c, 0x43, 0xef, 0x70, 0x4b, 0x0e, 0x61, + 0xd8, 0x2c, 0x41, 0x38, 0xb4, 0xd9, 0x36, 0x36, 0xfe, 0x56, 0xcb, 0x1b, 0x8e, 0xec, 0x48, 0x5a, + 0x7f, 0xeb, 0xad, 0xad, 0xb3, 0x64, 0x0e, 0xfb, 0xa5, 0xe4, 0x1b, 0xa6, 0x31, 0x84, 0x1d, 0x4b, + 0xd1, 0x90, 0xc8, 0x89, 0xb9, 0x66, 0x7f, 0xaf, 0xb9, 0xc4, 0x74, 0x29, 0xb1, 0xcc, 0x58, 0x82, + 0xe1, 0xd8, 0x4e, 0xa6, 0x1d, 0xba, 0x71, 0xd3, 0x5c, 0xaa, 0x8a, 0x45, 0x2b, 0x52, 0xf4, 0x2d, + 0x4c, 0xba, 0x9e, 0x91, 0x31, 0xec, 0xe7, 0x4c, 0xb0, 0x7b, 0x4c, 0x83, 0x1e, 0x19, 0x82, 0x9b, + 0x32, 0xcd, 0x02, 0xe7, 0xcc, 0x87, 0x09, 0xaf, 0x9d, 0x36, 0xaa, 0xa3, 0x15, 0x4c, 0xba, 0xb7, + 0xad, 0x35, 0xd4, 0xe9, 0x18, 0xfa, 0xa0, 0xb5, 0xbf, 0x53, 0xeb, 0xd7, 0x30, 0x52, 0x28, 0x14, + 0xd7, 0x7c, 0x53, 0x4d, 0x69, 0x48, 0x1f, 0x80, 0x68, 0x06, 0x93, 0xae, 0x64, 0xf3, 0x95, 0xca, + 0xd5, 0x7d, 0xc9, 0x92, 0xcf, 0xf6, 0x65, 0x13, 0xda, 0x84, 0xd1, 0x4b, 0x70, 0xcd, 0x62, 0x93, + 0x17, 0xe0, 0xa9, 0x15, 0x3b, 0xfe, 0xf1, 0xa7, 0x9a, 0x50, 0x47, 0xd1, 0xbf, 0x0e, 0xb8, 0x76, + 0xa5, 0x5e, 0xc1, 0x9e, 0xd2, 0x58, 0xaa, 0xd0, 0xb1, 0x0e, 0x3d, 0xef, 0x3a, 0x34, 0xff, 0x5d, + 0x63, 0x49, 0xab, 0xfc, 0xa1, 0x06, 0xd7, 0x84, 0xe4, 0x15, 0xf8, 0x4c, 0x6b, 0xc9, 0x6f, 0xd7, + 0x1a, 0x97, 0x0f, 0x3a, 0x2f, 0x7b, 0xf4, 0x59, 0x8b, 0x7f, 0x34, 0x92, 0x4f, 0x60, 0x8c, 0x19, + 0xe6, 0x28, 0xb4, 0xdd, 0x8d, 0x1d, 0xf7, 0xf9, 0xb2, 0x47, 0xa1, 0xa6, 0xbe, 0xc3, 0xed, 0x19, + 0xc0, 0x50, 0x61, 0x86, 0x89, 0x2e, 0xe4, 0xeb, 0x0f, 0xe0, 0x55, 0xb7, 0xcd, 0xf8, 0xff, 0xf1, + 0xfa, 0x7a, 0x11, 0xf4, 0x08, 0x80, 0x77, 0x4e, 0xe3, 0xd3, 0x4f, 0x71, 0xe0, 0x18, 0x94, 0xc6, + 0xa7, 0x17, 0x41, 0xdf, 0xa0, 0x7f, 0x2c, 0x2e, 0x0c, 0x3a, 0x30, 0x83, 0xa3, 0xf1, 0xe2, 0xfd, + 0xe9, 0x79, 0x1c, 0xb8, 0x26, 0x71, 0x11, 0xbf, 0x8f, 0x3f, 0xc5, 0xc1, 0xde, 0xd9, 0xdb, 0x3f, + 0x4f, 0xee, 0xb9, 0x5e, 0xad, 0x6f, 0xe7, 0x49, 0x91, 0x1f, 0x99, 0xcf, 0x19, 0x4f, 0x0a, 0x59, + 0x1e, 0xb5, 0x5f, 0xbd, 0x23, 0x73, 0x38, 0x75, 0xc4, 0x85, 0x46, 0x29, 0x58, 0x66, 0x43, 0xfb, + 0x17, 0x71, 0xeb, 0xd9, 0x9f, 0x1f, 0xfe, 0x0f, 0x00, 0x00, 0xff, 0xff, 0x57, 0x66, 0x84, 0xc3, + 0x3b, 0x06, 0x00, 0x00, } diff --git a/plans/internal/planproto/planfile.proto b/plans/internal/planproto/planfile.proto index 557b97916..5c233546b 100644 --- a/plans/internal/planproto/planfile.proto +++ b/plans/internal/planproto/planfile.proto @@ -105,21 +105,26 @@ message ResourceInstanceChange { // set, the change applies to the instance's current object. string deposed_key = 7; + // provider is the address of the provider configuration that this change + // was planned with, and thus the configuration that must be used to + // apply it. + string provider = 8; + // Description of the proposed change. May use "create", "read", "update", // "replace" and "delete" actions. "no-op" changes are not currently used here // but consumers must accept and discard them to allow for future expansion. - Change change = 8; + Change change = 9; // msgpack representation of an arbitrary object value provided by // the resource provider as additional context for the change. Must // be considered an opaque value for any consumer other than the // provider that generated it. - DynamicValue private = 9; + DynamicValue private = 10; // An unordered set of paths that prompted the change action to be // "replace" rather than "update". Empty for any action other than // "replace". - repeated Path required_replace = 10; + repeated Path required_replace = 11; } message OutputChange { diff --git a/plans/planfile/tfplan.go b/plans/planfile/tfplan.go index db93491d0..9b87ce684 100644 --- a/plans/planfile/tfplan.go +++ b/plans/planfile/tfplan.go @@ -119,6 +119,12 @@ func resourceChangeFromTfplan(rawChange *planproto.ResourceInstanceChange) (*pla } } + providerAddr, diags := addrs.ParseAbsProviderConfigStr(rawChange.Provider) + if diags.HasErrors() { + return nil, diags.Err() + } + ret.ProviderAddr = providerAddr + var mode addrs.ResourceMode switch rawChange.Mode { case planproto.ResourceInstanceChange_managed: @@ -336,6 +342,7 @@ func resourceChangeToTfplan(change *plans.ResourceInstanceChange) (*planproto.Re } ret.DeposedKey = string(change.DeposedKey) + ret.Provider = change.ProviderAddr.String() valChange, err := changeToTfplan(&change.Change) if err != nil { diff --git a/plans/planfile/tfplan_test.go b/plans/planfile/tfplan_test.go index 0489ff42f..785a69a0e 100644 --- a/plans/planfile/tfplan_test.go +++ b/plans/planfile/tfplan_test.go @@ -53,6 +53,9 @@ func TestTFPlanRoundTrip(t *testing.T) { Type: "test_thing", Name: "woot", }.Instance(addrs.IntKey(0)).Absolute(addrs.RootModuleInstance), + ProviderAddr: addrs.ProviderConfig{ + Type: "test", + }.Absolute(addrs.RootModuleInstance), Change: plans.Change{ Action: plans.Replace, Before: mustNewDynamicValue(cty.ObjectVal(map[string]cty.Value{ @@ -70,6 +73,9 @@ func TestTFPlanRoundTrip(t *testing.T) { Name: "woot", }.Instance(addrs.IntKey(0)).Absolute(addrs.RootModuleInstance), DeposedKey: "foodface", + ProviderAddr: addrs.ProviderConfig{ + Type: "test", + }.Absolute(addrs.RootModuleInstance), Change: plans.Change{ Action: plans.Delete, Before: mustNewDynamicValue(cty.ObjectVal(map[string]cty.Value{