pulumi/pkg/backend/backend.go
Chris Smith 3a3d0698ae
Surface update options to the service (#806)
This PR surfaces the configuration options available to updates, previews, and destroys to the Pulumi Service. As part of this I refactored the options to unify them into a single `engine.UpdateOptions`, since they were all overlapping to various degrees.

With this PR we are adding several new flags to commands, e.g. `--summary` was not available on `pulumi destroy`.

There are also a few minor breaking changes.

- `pulumi destroy --preview` is now `pulumi destroy --dry-run` (to match the actual name of the field).
- The default behavior for "--color" is now `Always`. Previously it was `Always` or `Never` based on the value of a `--debug` flag. (You can specify `--color always` or `--color never` to get the exact behavior.)

Fixes #515, and cleans up the code making some other features slightly easier to add.
2018-01-18 11:10:15 -08:00

50 lines
2.7 KiB
Go

// Copyright 2016-2017, Pulumi Corporation. All rights reserved.
// Package backend encapsulates all extensibility points required to fully implement a new cloud provider.
package backend
import (
"encoding/json"
"github.com/pulumi/pulumi/pkg/engine"
"github.com/pulumi/pulumi/pkg/operations"
"github.com/pulumi/pulumi/pkg/pack"
"github.com/pulumi/pulumi/pkg/resource/config"
"github.com/pulumi/pulumi/pkg/tokens"
)
// Backend is an interface that represents actions the engine will interact with to manage stacks of cloud resources.
// It can be implemented any number of ways to provide pluggable backend implementations of the Pulumi Cloud.
type Backend interface {
// Name returns a friendly name for this backend.
Name() string
// GetStack returns a stack object tied to this backend with the given name, or nil if it cannot be found.
GetStack(name tokens.QName) (Stack, error)
// CreateStack creates a new stack with the given name and options that are specific to the backend provider.
CreateStack(name tokens.QName, opts interface{}) error
// RemoveStack removes a stack with the given name. If force is true, the stack will be removed even if it
// still contains resources. Otherwise, if the stack contains resources, a non-nil error is returned, and the
// first boolean return value will be set to true.
RemoveStack(name tokens.QName, force bool) (bool, error)
// ListStacks returns a list of stack summaries for all known stacks in the target backend.
ListStacks() ([]Stack, error)
// GetStackCrypter returns an encrypter/decrypter for the given stack's secret config values.
GetStackCrypter(stack tokens.QName) (config.Crypter, error)
// Preview initiates a preview of the current workspace's contents.
Preview(stackName tokens.QName, pkg *pack.Package, root string, debug bool, opts engine.UpdateOptions) error
// Update updates the target stack with the current workspace's contents (config and code).
Update(stackName tokens.QName, pkg *pack.Package, root string, debug bool, opts engine.UpdateOptions) error
// Destroy destroys all of this stack's resources.
Destroy(stackName tokens.QName, pkg *pack.Package, root string, debug bool, opts engine.UpdateOptions) error
// GetLogs fetches a list of log entries for the given stack, with optional filtering/querying.
GetLogs(stackName tokens.QName, query operations.LogQuery) ([]operations.LogEntry, error)
// ExportDeployment exports the deployment for the given stack as an opaque JSON message.
ExportDeployment(stackName tokens.QName) (json.RawMessage, error)
// ImportDeployment imports the given deployment into the indicated stack.
ImportDeployment(stackName tokens.QName, deployment json.RawMessage) error
}