pulumi/cmd/env_ls.go
Matt Ellis 93ab134bbb Have the CLI keep track of the current environment
Previously, the engine was concered with maintaing information about
the currently active environment. Now, the CLI is in charge of
this. As part of this change, the engine can now assume that every
environment has a non empty name (and I've added asserts on the
entrypoints of the engine API to ensure that any consumer of the
engine passes a non empty environment name)
2017-10-02 16:57:41 -07:00

54 lines
1.3 KiB
Go

// Copyright 2016-2017, Pulumi Corporation. All rights reserved.
package cmd
import (
"fmt"
"strconv"
"github.com/pulumi/pulumi/pkg/tokens"
"github.com/spf13/cobra"
"github.com/pulumi/pulumi/pkg/util/cmdutil"
)
func newEnvLsCmd() *cobra.Command {
return &cobra.Command{
Use: "ls",
Short: "List all known environments",
Run: cmdutil.RunFunc(func(cmd *cobra.Command, args []string) error {
currentEnv, err := getCurrentEnv()
if err != nil {
// If we couldn't figure out the current environment, just don't print the '*' later
// on instead of failing.
currentEnv = tokens.QName("")
}
envs, err := lumiEngine.GetEnvironments()
if err != nil {
return err
}
fmt.Printf("%-20s %-48s %-12s\n", "NAME", "LAST UPDATE", "RESOURCE COUNT")
for _, env := range envs {
// Now print out the name, last deployment time (if any), and resources (if any).
lastDeploy := "n/a"
resourceCount := "n/a"
if env.Checkpoint.Latest != nil {
lastDeploy = env.Checkpoint.Latest.Time.String()
}
if env.Snapshot != nil {
resourceCount = strconv.Itoa(len(env.Snapshot.Resources))
}
display := env.Name
if env.Name == currentEnv {
display += "*" // fancify the current environment.
}
fmt.Printf("%-20s %-48s %-12s\n", display, lastDeploy, resourceCount)
}
return nil
}),
}
}