The checkpoint is an implementation detail of the storage of an environment. Instead of interacting with it, make sure that all the data we need from it either hangs off the Snapshot or Target objects (which you can get from a Checkpoint) and then start consuming that data.
91 lines
2.7 KiB
Go
91 lines
2.7 KiB
Go
// Copyright 2016-2017, Pulumi Corporation. All rights reserved.
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/pulumi/pulumi/pkg/util/cmdutil"
|
|
)
|
|
|
|
func newEnvCmd() *cobra.Command {
|
|
var showIDs bool
|
|
var showURNs bool
|
|
cmd := &cobra.Command{
|
|
Use: "env",
|
|
Short: "Manage target environments",
|
|
Long: "Manage target environments\n" +
|
|
"\n" +
|
|
"An environment is a named update target, and a single project may have many of them.\n" +
|
|
"Each environment has a configuration and update history associated with it, stored in\n" +
|
|
"the workspace, in addition to a full checkpoint of the last known good update.\n",
|
|
Run: cmdutil.RunFunc(func(cmd *cobra.Command, args []string) error {
|
|
envName, err := getCurrentEnv()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
target, snapshot, _, err := lumiEngine.Environment.GetEnvironment(envName)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
config := target.Config
|
|
|
|
fmt.Printf("Current environment is %v\n", envName)
|
|
fmt.Printf(" (use `pulumi env select` to change environments; `pulumi env ls` lists known ones)\n")
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if snapshot != nil {
|
|
fmt.Printf("Last update at %v\n", snapshot.Time)
|
|
if snapshot.Info != nil {
|
|
info, err := json.MarshalIndent(snapshot.Info, " ", " ")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Printf("Additional update info:\n %s\n", string(info))
|
|
}
|
|
}
|
|
if len(config) > 0 {
|
|
fmt.Printf("%v configuration variables set (see `pulumi config` for details)\n", len(config))
|
|
}
|
|
if snapshot == nil || len(snapshot.Resources) == 0 {
|
|
fmt.Printf("No resources currently in this environment\n")
|
|
} else {
|
|
fmt.Printf("%v resources currently in this environment:\n", len(snapshot.Resources))
|
|
fmt.Printf("\n")
|
|
fmt.Printf("%-48s %s\n", "TYPE", "NAME")
|
|
for _, res := range snapshot.Resources {
|
|
fmt.Printf("%-48s %s\n", res.Type, res.URN.Name())
|
|
|
|
// If the ID and/or URN is requested, show it on the following line. It would be nice to do this
|
|
// on a single line, but they can get quite lengthy and so this formatting makes more sense.
|
|
if showIDs {
|
|
fmt.Printf("\tID: %s\n", res.ID)
|
|
}
|
|
if showURNs {
|
|
fmt.Printf("\tURN: %s\n", res.URN)
|
|
}
|
|
}
|
|
}
|
|
return nil
|
|
}),
|
|
}
|
|
|
|
cmd.PersistentFlags().BoolVarP(
|
|
&showIDs, "show-ids", "i", false, "Display each resource's provider-assigned unique ID")
|
|
cmd.PersistentFlags().BoolVarP(
|
|
&showURNs, "show-urns", "u", false, "Display each resource's Pulumi-assigned globally unique URN")
|
|
|
|
cmd.AddCommand(newEnvInitCmd())
|
|
cmd.AddCommand(newEnvLsCmd())
|
|
cmd.AddCommand(newEnvRmCmd())
|
|
cmd.AddCommand(newEnvSelectCmd())
|
|
|
|
return cmd
|
|
}
|