Skip to content

Commit 20d27b6

Browse files
abstract out pulumi stack initialization
1 parent 1d1406f commit 20d27b6

File tree

1 file changed

+33
-74
lines changed

1 file changed

+33
-74
lines changed

cloud/common/deploy/provider/pulumi.go

Lines changed: 33 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -207,49 +207,61 @@ func parsePulumiError(err error) error {
207207
return pe
208208
}
209209

210-
// Up - automatically called by the Nitric CLI via the `up` command
211-
func (s *PulumiProviderServer) Up(req *deploymentspb.DeploymentUpRequest, stream deploymentspb.Deployment_UpServer) error {
210+
func (s *PulumiProviderServer) initializePulumiStack(spec *deploymentspb.Spec, attributesMap map[string]any) (*auto.Stack, error) {
212211
// Verify if dependencies are available
213212
if err := checkDependencies(checkPulumiAvailable, checkDockerAvailable); err != nil {
214-
return status.Error(codes.FailedPrecondition, err.Error())
213+
return nil, status.Error(codes.FailedPrecondition, err.Error())
215214
}
216215

217-
projectName, stackName, err := stackAndProjectFromAttributes(req.Attributes.AsMap())
216+
projectName, stackName, err := stackAndProjectFromAttributes(attributesMap)
218217
if err != nil {
219-
return err
218+
return nil, err
220219
}
221220

222-
attributesMap := req.Attributes.AsMap()
223-
224221
err = s.provider.Init(attributesMap)
225222
if err != nil {
226-
return err
223+
return nil, err
227224
}
228225

229-
pulumiProgram := createPulumiProgramForNitricProvider(req.Spec, s.provider, s.runtime)
226+
var pulumiProgram func(*pulumi.Context) error
227+
if spec != nil {
228+
pulumiProgram = createPulumiProgramForNitricProvider(spec, s.provider, s.runtime)
229+
}
230230

231231
autoStack, err := auto.UpsertStackInlineSource(context.TODO(), fmt.Sprintf("%s-%s", projectName, stackName), projectName, pulumiProgram)
232232
if err != nil {
233-
return err
233+
return nil, err
234234
}
235235

236-
pulumiEventsChan := make(chan events.EngineEvent)
237-
238-
go func() {
239-
// output the stream
240-
_ = pulumix.StreamPulumiUpEngineEvents(stream, pulumiEventsChan)
241-
}()
242-
243236
config, err := s.provider.Config()
244237
if err != nil {
245-
return err
238+
return nil, err
246239
}
247240

248241
err = autoStack.SetAllConfig(context.TODO(), config)
242+
if err != nil {
243+
return nil, err
244+
}
245+
246+
return &autoStack, err
247+
}
248+
249+
// Up - automatically called by the Nitric CLI via the `up` command
250+
func (s *PulumiProviderServer) Up(req *deploymentspb.DeploymentUpRequest, stream deploymentspb.Deployment_UpServer) error {
251+
attributesMap := req.Attributes.AsMap()
252+
253+
autoStack, err := s.initializePulumiStack(req.Spec, attributesMap)
249254
if err != nil {
250255
return err
251256
}
252257

258+
pulumiEventsChan := make(chan events.EngineEvent)
259+
260+
go func() {
261+
// output the stream
262+
_ = pulumix.StreamPulumiUpEngineEvents(stream, pulumiEventsChan)
263+
}()
264+
253265
refresh, ok := attributesMap["refresh"].(bool)
254266

255267
options := []optup.Option{optup.EventStreams(pulumiEventsChan)}
@@ -289,25 +301,9 @@ func (s *PulumiProviderServer) Up(req *deploymentspb.DeploymentUpRequest, stream
289301

290302
// Down - automatically called by the Nitric CLI via the `down` command
291303
func (s *PulumiProviderServer) Down(req *deploymentspb.DeploymentDownRequest, stream deploymentspb.Deployment_DownServer) error {
292-
// Verify if dependencies are available
293-
if err := checkDependencies(checkPulumiAvailable, checkDockerAvailable); err != nil {
294-
return status.Error(codes.FailedPrecondition, err.Error())
295-
}
296-
297-
projectName, stackName, err := stackAndProjectFromAttributes(req.Attributes.AsMap())
298-
299304
attributesMap := req.Attributes.AsMap()
300-
if err != nil {
301-
return err
302-
}
303305

304-
// run down on the stack
305-
err = s.provider.Init(attributesMap)
306-
if err != nil {
307-
return err
308-
}
309-
310-
stack, err := auto.UpsertStackInlineSource(context.TODO(), fmt.Sprintf("%s-%s", projectName, stackName), projectName, nil)
306+
autoStack, err := s.initializePulumiStack(nil, attributesMap)
311307
if err != nil {
312308
return err
313309
}
@@ -318,16 +314,6 @@ func (s *PulumiProviderServer) Down(req *deploymentspb.DeploymentDownRequest, st
318314
_ = pulumix.StreamPulumiDownEngineEvents(stream, pulumiEventsChan)
319315
}()
320316

321-
config, err := s.provider.Config()
322-
if err != nil {
323-
return err
324-
}
325-
326-
err = stack.SetAllConfig(context.TODO(), config)
327-
if err != nil {
328-
return err
329-
}
330-
331317
refresh, ok := attributesMap["refresh"].(bool)
332318

333319
options := []optdestroy.Option{optdestroy.EventStreams(pulumiEventsChan)}
@@ -336,7 +322,7 @@ func (s *PulumiProviderServer) Down(req *deploymentspb.DeploymentDownRequest, st
336322
options = append(options, optdestroy.Refresh())
337323
}
338324

339-
_, err = stack.Destroy(context.TODO(), options...)
325+
_, err = autoStack.Destroy(context.TODO(), options...)
340326
if err != nil {
341327
logger.Error(err.Error())
342328
return err
@@ -347,26 +333,9 @@ func (s *PulumiProviderServer) Down(req *deploymentspb.DeploymentDownRequest, st
347333

348334
// Preview - automatically called by the Nitric CLI via the `preview` command
349335
func (s *PulumiProviderServer) Preview(req *deploymentspb.DeploymentPreviewRequest, stream deploymentspb.Deployment_PreviewServer) error {
350-
// Verify if dependencies are available
351-
if err := checkDependencies(checkPulumiAvailable, checkDockerAvailable); err != nil {
352-
return status.Error(codes.FailedPrecondition, err.Error())
353-
}
354-
355-
projectName, stackName, err := stackAndProjectFromAttributes(req.Attributes.AsMap())
356-
if err != nil {
357-
return err
358-
}
359-
360336
attributesMap := req.Attributes.AsMap()
361337

362-
err = s.provider.Init(attributesMap)
363-
if err != nil {
364-
return err
365-
}
366-
367-
pulumiProgram := createPulumiProgramForNitricProvider(req.Spec, s.provider, s.runtime)
368-
369-
autoStack, err := auto.UpsertStackInlineSource(context.TODO(), fmt.Sprintf("%s-%s", projectName, stackName), projectName, pulumiProgram)
338+
autoStack, err := s.initializePulumiStack(req.Spec, attributesMap)
370339
if err != nil {
371340
return err
372341
}
@@ -378,16 +347,6 @@ func (s *PulumiProviderServer) Preview(req *deploymentspb.DeploymentPreviewReque
378347
_ = pulumix.StreamPulumiPreviewEngineEvents(stream, pulumiEventsChan)
379348
}()
380349

381-
config, err := s.provider.Config()
382-
if err != nil {
383-
return err
384-
}
385-
386-
err = autoStack.SetAllConfig(context.TODO(), config)
387-
if err != nil {
388-
return err
389-
}
390-
391350
refresh, ok := attributesMap["refresh"].(bool)
392351

393352
options := []optpreview.Option{optpreview.EventStreams(pulumiEventsChan)}

0 commit comments

Comments
 (0)