From a0657323a9de295187f1e41b01948ec17c31140a Mon Sep 17 00:00:00 2001 From: Ian Wahbe Date: Tue, 10 Dec 2024 13:43:06 +0100 Subject: [PATCH] Revert "Pass state back to the engine if Apply encountered an error (#2695)" This reverts commit 0c46ff573f44f3247a4d3e657cccac035010d682. --- pkg/tests/schema_pulumi_test.go | 51 --------------------------------- pkg/tfshim/sdk-v2/provider2.go | 37 +++++++++++++----------- 2 files changed, 21 insertions(+), 67 deletions(-) diff --git a/pkg/tests/schema_pulumi_test.go b/pkg/tests/schema_pulumi_test.go index 37113570a..903d48476 100644 --- a/pkg/tests/schema_pulumi_test.go +++ b/pkg/tests/schema_pulumi_test.go @@ -189,54 +189,3 @@ func TestMakeTerraformResultNilVsEmptyMap(t *testing.T) { assert.True(t, props["test"].DeepEquals(emptyMap)) }) } - -func TestResourceInitFailure(t *testing.T) { - t.Parallel() - - resMap := map[string]*schema.Resource{ - "prov_test": { - Schema: map[string]*schema.Schema{ - "test": { - Type: schema.TypeString, - Required: true, - }, - }, - CreateContext: func(ctx context.Context, rd *schema.ResourceData, i interface{}) diag.Diagnostics { - rd.SetId("1") - return diag.Errorf("INIT TEST ERROR") - }, - }, - } - prov := &schema.Provider{ResourcesMap: resMap} - bridgedProvider := pulcheck.BridgedProvider(t, "prov", prov) - - pt := pulcheck.PulCheck(t, bridgedProvider, ` -name: test -runtime: yaml -resources: - mainRes: - type: prov:index:Test - properties: - test: "hello" -`) - - _, err := pt.CurrentStack().Up(pt.Context()) - require.Error(t, err) - require.ErrorContains(t, err, "INIT TEST ERROR") - - stack := pt.ExportStack(t) - - data, err := stack.Deployment.MarshalJSON() - require.NoError(t, err) - - var stateMap map[string]interface{} - err = json.Unmarshal(data, &stateMap) - require.NoError(t, err) - - resourcesList := stateMap["resources"].([]interface{}) - require.Len(t, resourcesList, 3) - mainResState := resourcesList[2].(map[string]interface{}) // stack, provider, resource - initErrors := mainResState["initErrors"].([]interface{}) - require.Len(t, initErrors, 1) - require.Contains(t, initErrors[0], "INIT TEST ERROR") -} diff --git a/pkg/tfshim/sdk-v2/provider2.go b/pkg/tfshim/sdk-v2/provider2.go index 347496e15..ef6e33438 100644 --- a/pkg/tfshim/sdk-v2/provider2.go +++ b/pkg/tfshim/sdk-v2/provider2.go @@ -347,7 +347,15 @@ func (p *planResourceChangeImpl) Apply( maps.Copy(priv, diff.v2InstanceDiff.tf.Meta) } - return p.server.ApplyResourceChange(ctx, t, ty, cfg, st, pl, priv, meta) + resp, err := p.server.ApplyResourceChange(ctx, t, ty, cfg, st, pl, priv, meta) + if err != nil { + return nil, err + } + return &v2InstanceState2{ + resourceType: t, + stateValue: resp.stateValue, + meta: resp.meta, + }, nil } // This method is called to service `pulumi refresh` requests and maps naturally to the TF @@ -654,28 +662,25 @@ func (s *grpcServer) ApplyResourceChange( } req.ProviderMeta = &tfprotov5.DynamicValue{MsgPack: providerMetaVal} } - resp, applyErr := s.gserver.ApplyResourceChange(ctx, req) - newState := cty.Value{} + resp, err := s.gserver.ApplyResourceChange(ctx, req) + if err := handleDiagnostics(ctx, resp.Diagnostics, err); err != nil { + return nil, err + } + newState, err := msgpack.Unmarshal(resp.NewState.MsgPack, ty) + if err != nil { + return nil, err + } var meta map[string]interface{} - if resp != nil { - if resp.NewState != nil { - newState, err = msgpack.Unmarshal(resp.NewState.MsgPack, ty) - if err != nil { - return nil, err - } - } - if resp.Private != nil { - if err := json.Unmarshal(resp.Private, &meta); err != nil { - return nil, err - } + if resp.Private != nil { + if err := json.Unmarshal(resp.Private, &meta); err != nil { + return nil, err } } - returnErr := handleDiagnostics(ctx, resp.Diagnostics, applyErr) return &v2InstanceState2{ resourceType: typeName, stateValue: newState, meta: meta, - }, returnErr + }, nil } func (s *grpcServer) ReadResource(