env_list.go 1.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
// Copyright 2018 The ksonnet authors
//
//
//    Licensed under the Apache License, Version 2.0 (the "License");
//    you may not use this file except in compliance with the License.
//    You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
//    Unless required by applicable law or agreed to in writing, software
//    distributed under the License is distributed on an "AS IS" BASIS,
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//    See the License for the specific language governing permissions and
//    limitations under the License.

package actions

import (
	"io"
	"os"
	"sort"

	"github.com/ksonnet/ksonnet/metadata/app"
	"github.com/ksonnet/ksonnet/pkg/util/table"
)

// RunEnvList runs `env list`
bryanl's avatar
bryanl committed
28 29
func RunEnvList(m map[string]interface{}) error {
	nl, err := NewEnvList(m)
30 31 32 33 34 35 36 37 38 39 40 41 42 43
	if err != nil {
		return err
	}

	return nl.Run()
}

// EnvList lists available namespaces
type EnvList struct {
	app app.App
	out io.Writer
}

// NewEnvList creates an instance of EnvList
bryanl's avatar
bryanl committed
44 45 46
func NewEnvList(m map[string]interface{}) (*EnvList, error) {
	ol := newOptionLoader(m)

47
	nl := &EnvList{
bryanl's avatar
bryanl committed
48 49
		app: ol.loadApp(),

50 51 52
		out: os.Stdout,
	}

bryanl's avatar
bryanl committed
53 54 55 56
	if ol.err != nil {
		return nil, ol.err
	}

57 58 59 60 61 62 63 64 65 66 67
	return nl, nil
}

// Run runs the env list action.
func (nl *EnvList) Run() error {
	environments, err := nl.app.Environments()
	if err != nil {
		return err
	}

	table := table.New(nl.out)
bryanl's avatar
bryanl committed
68
	table.SetHeader([]string{"name", "override", "kubernetes-version", "namespace", "server"})
69 70 71 72

	var rows [][]string

	for name, env := range environments {
bryanl's avatar
bryanl committed
73 74 75 76 77
		override := ""
		if env.IsOverride() {
			override = "*"
		}

78 79
		rows = append(rows, []string{
			name,
bryanl's avatar
bryanl committed
80
			override,
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
			env.KubernetesVersion,
			env.Destination.Namespace,
			env.Destination.Server,
		})
	}

	sort.Slice(rows, func(i, j int) bool {
		return rows[i][0] < rows[j][0]
	})

	table.AppendBulk(rows)

	table.Render()
	return nil
}