properly handle actions without config

pull/37389/head
Daniel Schmidt 7 months ago
parent 51fa45f618
commit 27e58b32ca

@ -34,25 +34,31 @@ type ActionInvocationInstance struct {
// serialized so it can be written to a plan file. Pass the implied type of the
// corresponding resource type schema for correct operation.
func (ai *ActionInvocationInstance) Encode(schema *providers.ActionSchema) (*ActionInvocationInstanceSrc, error) {
ty := cty.DynamicPseudoType
if schema != nil {
ty = schema.ConfigSchema.ImpliedType()
}
configValue, err := NewDynamicValue(ai.ConfigValue, ty)
if err != nil {
return nil, err
}
return &ActionInvocationInstanceSrc{
ret := &ActionInvocationInstanceSrc{
Addr: ai.Addr,
TriggeringResourceAddr: ai.TriggeringResourceAddr,
TriggerEvent: ai.TriggerEvent,
ActionTriggerBlockIndex: ai.ActionTriggerBlockIndex,
ActionsListIndex: ai.ActionsListIndex,
ProviderAddr: ai.ProviderAddr,
ConfigValue: configValue,
}, nil
}
if ai.ConfigValue != cty.NilVal {
ty := cty.DynamicPseudoType
if schema != nil {
ty = schema.ConfigSchema.ImpliedType()
}
var err error
ret.ConfigValue, err = NewDynamicValue(ai.ConfigValue, ty)
if err != nil {
return nil, err
}
}
return ret, nil
}
type ActionInvocationInstances []*ActionInvocationInstance

@ -1291,11 +1291,13 @@ func actionInvocationFromTfplan(rawAction *planproto.ActionInvocationInstance) (
}
ret.ProviderAddr = providerAddr
configVal, err := valueFromTfplan(rawAction.ConfigValue)
if err != nil {
return nil, fmt.Errorf("invalid config value: %s", err)
if rawAction.ConfigValue != nil {
configVal, err := valueFromTfplan(rawAction.ConfigValue)
if err != nil {
return nil, fmt.Errorf("invalid config value: %s", err)
}
ret.ConfigValue = configVal
}
ret.ConfigValue = configVal
return ret, nil
}
@ -1320,7 +1322,6 @@ func actionInvocationToTfPlan(action *plans.ActionInvocationInstanceSrc) (*planp
case configs.AfterDestroy:
triggerEvent = planproto.ActionTriggerEvent_AFTER_DESTROY
}
configValue := valueToTfplan(action.ConfigValue)
ret := &planproto.ActionInvocationInstance{
Addr: action.Addr.String(),
@ -1329,7 +1330,11 @@ func actionInvocationToTfPlan(action *plans.ActionInvocationInstanceSrc) (*planp
ActionsListIndex: int64(action.ActionsListIndex),
ActionTriggerBlockIndex: int64(action.ActionTriggerBlockIndex),
TriggerEvent: triggerEvent,
ConfigValue: configValue,
}
if action.ConfigValue != nil {
ret.ConfigValue = valueToTfplan(action.ConfigValue)
}
return ret, nil
}

@ -316,6 +316,21 @@ func examplePlanForTest(t *testing.T) *plans.Plan {
Name: "woot",
}.Instance(addrs.IntKey(0)).Absolute(addrs.RootModuleInstance),
},
{
Addr: addrs.Action{Type: "example", Name: "bar"}.Instance(addrs.NoKey).Absolute(addrs.RootModuleInstance),
ProviderAddr: provider,
TriggerEvent: configs.BeforeCreate,
ActionTriggerBlockIndex: 2,
ActionsListIndex: 1,
TriggeringResourceAddr: addrs.Resource{
Mode: addrs.ManagedResourceMode,
Type: "test_thing",
Name: "woot",
}.Instance(addrs.IntKey(0)).Absolute(addrs.RootModuleInstance),
ConfigValue: mustNewDynamicValue(cty.ObjectVal(map[string]cty.Value{
"id": cty.StringVal("testing"),
}), objTy),
},
},
},
DriftedResources: []*plans.ResourceInstanceChangeSrc{

Loading…
Cancel
Save