Feature/add additional fields to resource proto (#34364)

Add additional fields to the AppliedChange#ResourceInstance

We're adding Resource Mode, Resource Type and Provider Address to the AppliedChange's ResourceInstance
pull/34376/head
Matej Risek 2 years ago committed by GitHub
parent 17f420102f
commit 8ac8f18636
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

File diff suppressed because it is too large Load Diff

@ -877,6 +877,9 @@ message AppliedChange {
message ResourceInstance {
ResourceInstanceObjectInStackAddr addr = 1;
DynamicValue new_value = 2;
ResourceMode resource_mode = 4;
string resource_type = 5;
string provider_addr = 6;
// Sometimes Terraform needs to make changes to a resource in
// multiple steps during the apply phase, with each step

@ -7,7 +7,8 @@ import (
"fmt"
"time"
version "github.com/hashicorp/go-version"
"github.com/hashicorp/go-version"
"github.com/hashicorp/terraform/internal/stacks/stackutils"
"github.com/zclconf/go-cty/cty"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/anypb"
@ -261,7 +262,7 @@ func (pc *PlannedChangeResourceInstancePlanned) PlannedChangeProto() (*terraform
Description: &terraform1.PlannedChange_ChangeDescription_ResourceInstancePlanned{
ResourceInstancePlanned: &terraform1.PlannedChange_ResourceInstance{
Addr: terraform1.NewResourceInstanceObjectInStackAddr(rioAddr),
ResourceMode: resourceModeForProto(pc.ChangeSrc.Addr.Resource.Resource.Mode),
ResourceMode: stackutils.ResourceModeForProto(pc.ChangeSrc.Addr.Resource.Resource.Mode),
ResourceType: pc.ChangeSrc.Addr.Resource.Resource.Type,
ProviderAddr: pc.ChangeSrc.ProviderAddr.Provider.String(),
@ -389,16 +390,3 @@ func (pc *PlannedChangeApplyable) PlannedChangeProto() (*terraform1.PlannedChang
},
}, nil
}
func resourceModeForProto(mode addrs.ResourceMode) terraform1.ResourceMode {
switch mode {
case addrs.ManagedResourceMode:
return terraform1.ResourceMode_MANAGED
case addrs.DataResourceMode:
return terraform1.ResourceMode_DATA
default:
// Should not get here, because the above should be exhaustive for
// all addrs.ResourceMode variants.
return terraform1.ResourceMode_UNKNOWN
}
}

@ -13,6 +13,7 @@ import (
"github.com/hashicorp/terraform/internal/rpcapi/terraform1"
"github.com/hashicorp/terraform/internal/stacks/stackaddrs"
"github.com/hashicorp/terraform/internal/stacks/stackstate/statekeys"
"github.com/hashicorp/terraform/internal/stacks/stackutils"
"github.com/hashicorp/terraform/internal/stacks/tfstackdata1"
"github.com/hashicorp/terraform/internal/states"
"google.golang.org/protobuf/proto"
@ -50,7 +51,7 @@ var _ AppliedChange = (*AppliedChangeResourceInstanceObject)(nil)
// AppliedChangeProto implements AppliedChange.
func (ac *AppliedChangeResourceInstanceObject) AppliedChangeProto() (*terraform1.AppliedChange, error) {
descs, raws, err := ac.protosForObject(ac.ResourceInstanceObjectAddr, ac.NewStateSrc)
descs, raws, err := ac.protosForObject()
if err != nil {
return nil, fmt.Errorf("encoding %s: %w", ac.ResourceInstanceObjectAddr, err)
}
@ -60,10 +61,14 @@ func (ac *AppliedChangeResourceInstanceObject) AppliedChangeProto() (*terraform1
}, nil
}
func (ac *AppliedChangeResourceInstanceObject) protosForObject(addr stackaddrs.AbsResourceInstanceObject, objSrc *states.ResourceInstanceObjectSrc) ([]*terraform1.AppliedChange_ChangeDescription, []*terraform1.AppliedChange_RawChange, error) {
func (ac *AppliedChangeResourceInstanceObject) protosForObject() ([]*terraform1.AppliedChange_ChangeDescription, []*terraform1.AppliedChange_RawChange, error) {
var descs []*terraform1.AppliedChange_ChangeDescription
var raws []*terraform1.AppliedChange_RawChange
var addr = ac.ResourceInstanceObjectAddr
var provider = ac.ProviderConfigAddr
var objSrc = ac.NewStateSrc
// For resource instance objects we use the same key format for both the
// raw and description representations, but callers MUST NOT rely on this.
objKey := statekeys.ResourceInstanceObject{
@ -120,8 +125,11 @@ func (ac *AppliedChangeResourceInstanceObject) protosForObject(addr stackaddrs.A
Key: objKeyRaw,
Description: &terraform1.AppliedChange_ChangeDescription_ResourceInstance{
ResourceInstance: &terraform1.AppliedChange_ResourceInstance{
Addr: terraform1.NewResourceInstanceObjectInStackAddr(addr),
NewValue: protoValue,
Addr: terraform1.NewResourceInstanceObjectInStackAddr(addr),
NewValue: protoValue,
ResourceMode: stackutils.ResourceModeForProto(addr.Item.ResourceInstance.Resource.Resource.Mode),
ResourceType: addr.Item.ResourceInstance.Resource.Resource.Type,
ProviderAddr: provider.Provider.String(),
},
},
})

@ -114,6 +114,9 @@ func TestAppliedChangeAsProto(t *testing.T) {
}}},
},
},
ResourceMode: terraform1.ResourceMode_MANAGED,
ResourceType: "thingy",
ProviderAddr: "example.com/thingers/thingy",
},
},
},

@ -0,0 +1,22 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: BUSL-1.1
package stackutils
import (
"github.com/hashicorp/terraform/internal/addrs"
"github.com/hashicorp/terraform/internal/rpcapi/terraform1"
)
func ResourceModeForProto(mode addrs.ResourceMode) terraform1.ResourceMode {
switch mode {
case addrs.ManagedResourceMode:
return terraform1.ResourceMode_MANAGED
case addrs.DataResourceMode:
return terraform1.ResourceMode_DATA
default:
// Should not get here, because the above should be exhaustive for
// all addrs.ResourceMode variants.
return terraform1.ResourceMode_UNKNOWN
}
}
Loading…
Cancel
Save