mirror of
https://github.com/softwaredevelop/mql5.git
synced 2026-07-27 20:47:44 +00:00
76 lines
2.3 KiB
Go
76 lines
2.3 KiB
Go
//revive:disable:package-comments,exported
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/pulumi/pulumi/sdk/v3/go/auto"
|
|
"github.com/pulumi/pulumi/sdk/v3/go/auto/debug"
|
|
"github.com/pulumi/pulumi/sdk/v3/go/auto/optpreview"
|
|
"github.com/pulumi/pulumi/sdk/v3/go/auto/optup"
|
|
)
|
|
|
|
// Stack defines the interface for Pulumi stack operations.
|
|
// This abstraction allows for mocking in unit tests.
|
|
type Stack interface {
|
|
SetAllConfig(ctx context.Context, config auto.ConfigMap) error
|
|
Refresh(ctx context.Context) (string, error)
|
|
Preview(ctx context.Context) (string, error)
|
|
Up(ctx context.Context) (auto.UpResult, error)
|
|
Destroy(ctx context.Context) error
|
|
SetEnvVars(envVars map[string]string) error
|
|
}
|
|
|
|
// pulumiStack is a real implementation of the Stack interface, wrapping the Pulumi Automation API.
|
|
type pulumiStack struct {
|
|
stack *auto.Stack
|
|
}
|
|
|
|
// NewPulumiStack creates or selects a Pulumi stack and returns it wrapped in the Stack interface.
|
|
func NewPulumiStack(ctx context.Context, stackName, workDir string) (Stack, error) {
|
|
s, err := auto.UpsertStackLocalSource(ctx, stackName, workDir)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &pulumiStack{stack: &s}, nil
|
|
}
|
|
|
|
// SetAllConfig sets all configuration values for the stack.
|
|
func (ps *pulumiStack) SetAllConfig(ctx context.Context, config auto.ConfigMap) error {
|
|
return ps.stack.SetAllConfig(ctx, config)
|
|
}
|
|
|
|
// Refresh refreshes the stack's state.
|
|
func (ps *pulumiStack) Refresh(ctx context.Context) (string, error) {
|
|
res, err := ps.stack.Refresh(ctx)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return res.StdOut, nil
|
|
}
|
|
|
|
// Preview previews the changes for a stack update.
|
|
func (ps *pulumiStack) Preview(ctx context.Context) (string, error) {
|
|
res, err := ps.stack.Preview(ctx, optpreview.DebugLogging(debug.LoggingOptions{Debug: true}))
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
return res.StdOut, nil
|
|
}
|
|
|
|
// Up performs a stack update.
|
|
func (ps *pulumiStack) Up(ctx context.Context) (auto.UpResult, error) {
|
|
return ps.stack.Up(ctx, optup.DebugLogging(debug.LoggingOptions{Debug: true}))
|
|
}
|
|
|
|
// Destroy destroys all resources in the stack.
|
|
func (ps *pulumiStack) Destroy(ctx context.Context) error {
|
|
_, err := ps.stack.Destroy(ctx)
|
|
return err
|
|
}
|
|
|
|
// SetEnvVars sets environment variables for the workspace.
|
|
func (ps *pulumiStack) SetEnvVars(envVars map[string]string) error {
|
|
return ps.stack.Workspace().SetEnvVars(envVars)
|
|
}
|