mirror of
https://github.com/softwaredevelop/mql5.git
synced 2026-08-17 06:18:06 +00:00
iac: pulumi-infra
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
//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)
|
||||
}
|
||||
Reference in New Issue
Block a user