Move environment printing back into the CLI
Previously the engine was concerned with displaying information about the environment. Now the engine returns an environment info object which the CLI uses to display environment information.
This commit is contained in:
parent
c022db9285
commit
7900e2edb1
2 changed files with 45 additions and 21 deletions
|
@ -3,6 +3,9 @@
|
||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"github.com/pulumi/pulumi/pkg/util/cmdutil"
|
"github.com/pulumi/pulumi/pkg/util/cmdutil"
|
||||||
|
@ -13,7 +16,30 @@ func newEnvLsCmd() *cobra.Command {
|
||||||
Use: "ls",
|
Use: "ls",
|
||||||
Short: "List all known environments",
|
Short: "List all known environments",
|
||||||
Run: cmdutil.RunFunc(func(cmd *cobra.Command, args []string) error {
|
Run: cmdutil.RunFunc(func(cmd *cobra.Command, args []string) error {
|
||||||
return lumiEngine.ListEnvs()
|
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.IsCurrent {
|
||||||
|
display += "*" // fancify the current environment.
|
||||||
|
}
|
||||||
|
fmt.Printf("%-20s %-48s %-12s\n", display, lastDeploy, resourceCount)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,27 +3,35 @@
|
||||||
package engine
|
package engine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strconv"
|
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/pulumi/pulumi/pkg/encoding"
|
"github.com/pulumi/pulumi/pkg/encoding"
|
||||||
|
"github.com/pulumi/pulumi/pkg/resource/deploy"
|
||||||
|
"github.com/pulumi/pulumi/pkg/resource/environment"
|
||||||
"github.com/pulumi/pulumi/pkg/tokens"
|
"github.com/pulumi/pulumi/pkg/tokens"
|
||||||
"github.com/pulumi/pulumi/pkg/workspace"
|
"github.com/pulumi/pulumi/pkg/workspace"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (eng *Engine) ListEnvs() error {
|
type EnvironmentInfo struct {
|
||||||
|
Name string
|
||||||
|
Snapshot *deploy.Snapshot
|
||||||
|
Checkpoint *environment.Checkpoint
|
||||||
|
IsCurrent bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (eng *Engine) GetEnvironments() ([]EnvironmentInfo, error) {
|
||||||
|
var envs []EnvironmentInfo
|
||||||
|
|
||||||
// Read the environment directory.
|
// Read the environment directory.
|
||||||
path := workspace.EnvPath("")
|
path := workspace.EnvPath("")
|
||||||
files, err := ioutil.ReadDir(path)
|
files, err := ioutil.ReadDir(path)
|
||||||
if err != nil && !os.IsNotExist(err) {
|
if err != nil && !os.IsNotExist(err) {
|
||||||
return errors.Errorf("could not read environments: %v", err)
|
return nil, errors.Errorf("could not read environments: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Fprintf(eng.Stdout, "%-20s %-48s %-12s\n", "NAME", "LAST UPDATE", "RESOURCE COUNT")
|
|
||||||
curr := eng.getCurrentEnv()
|
curr := eng.getCurrentEnv()
|
||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
// Ignore directories.
|
// Ignore directories.
|
||||||
|
@ -45,21 +53,11 @@ func (eng *Engine) ListEnvs() error {
|
||||||
continue // failure reading the environment information.
|
continue // failure reading the environment information.
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now print out the name, last deployment time (if any), and resources (if any).
|
envs = append(envs, EnvironmentInfo{Name: target.Name.String(),
|
||||||
lastDeploy := "n/a"
|
Snapshot: snapshot,
|
||||||
resourceCount := "n/a"
|
Checkpoint: checkpoint,
|
||||||
if checkpoint.Latest != nil {
|
IsCurrent: (curr == target.Name)})
|
||||||
lastDeploy = checkpoint.Latest.Time.String()
|
|
||||||
}
|
|
||||||
if snapshot != nil {
|
|
||||||
resourceCount = strconv.Itoa(len(snapshot.Resources))
|
|
||||||
}
|
|
||||||
display := target.Name
|
|
||||||
if display == curr {
|
|
||||||
display += "*" // fancify the current environment.
|
|
||||||
}
|
|
||||||
fmt.Fprintf(eng.Stdout, "%-20s %-48s %-12s\n", display, lastDeploy, resourceCount)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return envs, nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue