@@ -26,7 +26,7 @@ import (
26
26
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
27
27
"github.com/pulumi/pulumi/sdk/v3/go/pulumi/internals"
28
28
29
- "github.com/pulumi/pulumi-terraform-module/pkg/property "
29
+ "github.com/pulumi/pulumi-terraform-module/pkg/pulumix "
30
30
"github.com/pulumi/pulumi-terraform-module/pkg/tfsandbox"
31
31
)
32
32
@@ -52,7 +52,7 @@ func componentTypeToken(packageName packageName, compTypeName componentTypeName)
52
52
return tokens .Type (fmt .Sprintf ("%s:index:%s" , packageName , compTypeName ))
53
53
}
54
54
55
- func NewModuleComponentResource (
55
+ func newModuleComponentResource (
56
56
ctx * pulumi.Context ,
57
57
stateStore moduleStateStore ,
58
58
planStore * planStore ,
@@ -67,12 +67,12 @@ func NewModuleComponentResource(
67
67
providerSelfURN pulumi.URN ,
68
68
providersConfig map [string ]resource.PropertyMap ,
69
69
opts ... pulumi.ResourceOption ,
70
- ) (componentUrn * urn.URN , outputs pulumi.Input , finalError error ) {
70
+ ) (componentUrn * urn.URN , moduleStateResource * moduleStateResource , outputs pulumi.Map , finalError error ) {
71
71
component := ModuleComponentResource {}
72
72
tok := componentTypeToken (pkgName , compTypeName )
73
73
err := ctx .RegisterComponentResource (string (tok ), name , & component , opts ... )
74
74
if err != nil {
75
- return nil , nil , fmt .Errorf ("RegisterComponentResource failed: %w" , err )
75
+ return nil , nil , nil , fmt .Errorf ("RegisterComponentResource failed: %w" , err )
76
76
}
77
77
78
78
urn := component .MustURN (ctx .Context ())
@@ -91,27 +91,25 @@ func NewModuleComponentResource(
91
91
providerSelfRef = newProviderSelfReference (ctx , providerSelfURN )
92
92
}
93
93
94
- go func () {
95
- resourceOptions := []pulumi.ResourceOption {
96
- pulumi .Parent (& component ),
97
- }
94
+ resourceOptions := []pulumi.ResourceOption {
95
+ pulumi .Parent (& component ),
96
+ }
98
97
99
- if providerSelfRef != nil {
100
- resourceOptions = append (resourceOptions , pulumi .Provider (providerSelfRef ))
101
- }
98
+ if providerSelfRef != nil {
99
+ resourceOptions = append (resourceOptions , pulumi .Provider (providerSelfRef ))
100
+ }
102
101
103
- _ , err := newModuleStateResource (ctx ,
104
- // Needs to be prefixed by parent to avoid "duplicate URN".
105
- fmt .Sprintf ("%s-state" , name ),
106
- pkgName ,
107
- urn ,
108
- packageRef ,
109
- moduleInputs ,
110
- resourceOptions ... ,
111
- )
112
-
113
- contract .AssertNoErrorf (err , "newModuleStateResource failed" )
114
- }()
102
+ modStateResource , err := newModuleStateResource (ctx ,
103
+ // Needs to be prefixed by parent to avoid "duplicate URN".
104
+ fmt .Sprintf ("%s-state" , name ),
105
+ pkgName ,
106
+ urn ,
107
+ packageRef ,
108
+ moduleInputs ,
109
+ resourceOptions ... ,
110
+ )
111
+
112
+ contract .AssertNoErrorf (err , "newModuleStateResource failed" )
115
113
116
114
state := stateStore .AwaitOldState (urn )
117
115
defer func () {
@@ -126,7 +124,7 @@ func NewModuleComponentResource(
126
124
wd := tfsandbox .ModuleInstanceWorkdir (urn )
127
125
tf , err := tfsandbox .NewTofu (ctx .Context (), wd )
128
126
if err != nil {
129
- return nil , nil , fmt .Errorf ("Sandbox construction failed: %w" , err )
127
+ return nil , nil , nil , fmt .Errorf ("Sandbox construction failed: %w" , err )
130
128
}
131
129
132
130
// Important: the name of the module instance in TF must be at least unique enough to
@@ -147,20 +145,20 @@ func NewModuleComponentResource(
147
145
moduleInputs , outputSpecs , providersConfig )
148
146
149
147
if err != nil {
150
- return nil , nil , fmt .Errorf ("Seed file generation failed: %w" , err )
148
+ return nil , nil , nil , fmt .Errorf ("Seed file generation failed: %w" , err )
151
149
}
152
150
153
151
var moduleOutputs resource.PropertyMap
154
152
err = tf .PushStateAndLockFile (ctx .Context (), state .rawState , state .rawLockFile )
155
153
if err != nil {
156
- return nil , nil , fmt .Errorf ("PushStateAndLockFile failed: %w" , err )
154
+ return nil , nil , nil , fmt .Errorf ("PushStateAndLockFile failed: %w" , err )
157
155
}
158
156
159
157
logger := newComponentLogger (ctx .Log , & component )
160
158
161
159
err = tf .Init (ctx .Context (), logger )
162
160
if err != nil {
163
- return nil , nil , fmt .Errorf ("Init failed: %w" , err )
161
+ return nil , nil , nil , fmt .Errorf ("Init failed: %w" , err )
164
162
}
165
163
166
164
var childResources []* childResource
@@ -169,7 +167,7 @@ func NewModuleComponentResource(
169
167
// may be able to reuse the plan from DryRun for the subsequent application.
170
168
plan , err := tf .Plan (ctx .Context (), logger )
171
169
if err != nil {
172
- return nil , nil , fmt .Errorf ("Plan failed: %w" , err )
170
+ return nil , nil , nil , fmt .Errorf ("Plan failed: %w" , err )
173
171
}
174
172
175
173
planStore .SetPlan (urn , plan )
@@ -203,21 +201,21 @@ func NewModuleComponentResource(
203
201
}
204
202
})
205
203
if err := errors .Join (errs ... ); err != nil {
206
- return nil , nil , fmt .Errorf ("Child resource init failed: %w" , err )
204
+ return nil , nil , nil , fmt .Errorf ("Child resource init failed: %w" , err )
207
205
}
208
206
moduleOutputs = plan .Outputs ()
209
207
} else {
210
208
// DryRun() = false corresponds to running pulumi up
211
209
tfState , err := tf .Apply (ctx .Context (), logger )
212
210
if err != nil {
213
- return nil , nil , fmt .Errorf ("Apply failed: %w" , err )
211
+ return nil , nil , nil , fmt .Errorf ("Apply failed: %w" , err )
214
212
}
215
213
216
214
planStore .SetState (urn , tfState )
217
215
218
216
rawState , rawLockFile , err := tf .PullStateAndLockFile (ctx .Context ())
219
217
if err != nil {
220
- return nil , nil , fmt .Errorf ("PullStateAndLockFile failed: %w" , err )
218
+ return nil , nil , nil , fmt .Errorf ("PullStateAndLockFile failed: %w" , err )
221
219
}
222
220
state .rawState = rawState
223
221
state .rawLockFile = rawLockFile
@@ -246,7 +244,7 @@ func NewModuleComponentResource(
246
244
}
247
245
})
248
246
if err := errors .Join (errs ... ); err != nil {
249
- return nil , nil , fmt .Errorf ("Child resource init failed: %w" , err )
247
+ return nil , nil , nil , fmt .Errorf ("Child resource init failed: %w" , err )
250
248
}
251
249
252
250
moduleOutputs = tfState .Outputs ()
@@ -259,12 +257,12 @@ func NewModuleComponentResource(
259
257
cr .Await (ctx .Context ())
260
258
}
261
259
262
- marshalledOutputs := property .MustUnmarshalPropertyMap (ctx , moduleOutputs )
260
+ marshalledOutputs := pulumix .MustUnmarshalPropertyMap (ctx , moduleOutputs )
263
261
if err := ctx .RegisterResourceOutputs (& component , marshalledOutputs ); err != nil {
264
- return nil , nil , fmt .Errorf ("RegisterResourceOutputs failed: %w" , err )
262
+ return nil , nil , nil , fmt .Errorf ("RegisterResourceOutputs failed: %w" , err )
265
263
}
266
264
267
- return & urn , marshalledOutputs , nil
265
+ return & urn , modStateResource , marshalledOutputs , nil
268
266
}
269
267
270
268
func newProviderSelfReference (ctx * pulumi.Context , urn1 pulumi.URN ) pulumi.ProviderResource {
0 commit comments