065f6f2b42
Previously, you could pass an explicit path to a Pulumi program when running preview or update and the tool would use that program when planning or deploying, but continue to write state in the cwd. While being able to operate on a specific package without having to cd'd all over over the place is nice, this specific implemntation was a little scary because it made it easier to run two different programs with the same local state (e.g config and checkpoints) which would lead to surprising results. Let's move to a model that some tools have where you can pass a working directory and the tool chdir's to that directory before running. This way any local state that is stored will be stored relative to the package we are operating on instead of whatever the current working directory is. Fixes #398
79 lines
2.8 KiB
Go
79 lines
2.8 KiB
Go
// Copyright 2016-2017, Pulumi Corporation. All rights reserved.
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/pulumi/pulumi/pkg/engine"
|
|
"github.com/pulumi/pulumi/pkg/util/cmdutil"
|
|
)
|
|
|
|
func newPreviewCmd() *cobra.Command {
|
|
var analyzers []string
|
|
var debug bool
|
|
var env string
|
|
var parallel int
|
|
var showConfig bool
|
|
var showReplacementSteps bool
|
|
var showSames bool
|
|
var summary bool
|
|
var cmd = &cobra.Command{
|
|
Use: "preview",
|
|
Short: "Show a preview of updates to an environment's resources",
|
|
Long: "Show a preview of updates an environment's resources\n" +
|
|
"\n" +
|
|
"This command displays a preview of the updates to an existing environment whose state is\n" +
|
|
"represented by an existing snapshot file. The new desired state is computed by compiling\n" +
|
|
"and evaluating an executable package, and extracting all resource allocations from its\n" +
|
|
"resulting object graph. These allocations are then compared against the existing state to\n" +
|
|
"determine what operations must take place to achieve the desired state. No changes to the\n" +
|
|
"environment will actually take place.\n" +
|
|
"\n" +
|
|
"The package to execute is loaded from the current directory. Use the `-C` or `--cwd` flag to\n" +
|
|
"use a different directory.",
|
|
Run: cmdutil.RunFunc(func(cmd *cobra.Command, args []string) error {
|
|
envName, err := explicitOrCurrent(env)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return lumiEngine.Preview(envName, engine.PreviewOptions{
|
|
Debug: debug,
|
|
Analyzers: analyzers,
|
|
Parallel: parallel,
|
|
ShowConfig: showConfig,
|
|
ShowReplacementSteps: showReplacementSteps,
|
|
ShowSames: showSames,
|
|
Summary: summary,
|
|
})
|
|
}),
|
|
}
|
|
|
|
cmd.PersistentFlags().StringSliceVar(
|
|
&analyzers, "analyzer", []string{},
|
|
"Run one or more analyzers as part of this preview")
|
|
cmd.PersistentFlags().BoolVarP(
|
|
&debug, "debug", "d", false,
|
|
"Print detailed debugging output during resource operations")
|
|
cmd.PersistentFlags().StringVarP(
|
|
&env, "env", "e", "",
|
|
"Choose an environment other than the currently selected one")
|
|
cmd.PersistentFlags().IntVarP(
|
|
¶llel, "parallel", "p", 0,
|
|
"Allow P resource operations to run in parallel at once (<=1 for no parallelism)")
|
|
cmd.PersistentFlags().BoolVar(
|
|
&showConfig, "show-config", false,
|
|
"Show configuration keys and variables")
|
|
cmd.PersistentFlags().BoolVar(
|
|
&showReplacementSteps, "show-replacement-steps", false,
|
|
"Show detailed resource replacement creates and deletes instead of a single step")
|
|
cmd.PersistentFlags().BoolVar(
|
|
&showSames, "show-sames", false,
|
|
"Show resources that needn't be updated because they haven't changed, alongside those that do")
|
|
cmd.PersistentFlags().BoolVarP(
|
|
&summary, "summary", "s", false,
|
|
"Only display summarization of resources and operations")
|
|
|
|
return cmd
|
|
}
|