github.com/randomtask1155/cli@v6.41.1-0.20181227003417-a98eed78cbde+incompatible/command/v7/env_command.go (about) 1 package v7 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "sort" 7 8 "code.cloudfoundry.org/cli/actor/sharedaction" 9 "code.cloudfoundry.org/cli/actor/v7action" 10 "code.cloudfoundry.org/cli/command" 11 "code.cloudfoundry.org/cli/command/flag" 12 "code.cloudfoundry.org/cli/command/v7/shared" 13 ) 14 15 //go:generate counterfeiter . EnvActor 16 17 type EnvActor interface { 18 GetEnvironmentVariablesByApplicationNameAndSpace(appName string, spaceGUID string) (v7action.EnvironmentVariableGroups, v7action.Warnings, error) 19 } 20 21 type EnvCommand struct { 22 RequiredArgs flag.EnvironmentArgs `positional-args:"yes"` 23 usage interface{} `usage:"CF_NAME env APP_NAME"` 24 relatedCommands interface{} `related_commands:"app, v3-apps, set-env, unset-env, running-environment-variable-group, staging-environment-variable-group"` 25 26 UI command.UI 27 Config command.Config 28 SharedActor command.SharedActor 29 Actor EnvActor 30 } 31 32 func (cmd *EnvCommand) Setup(config command.Config, ui command.UI) error { 33 cmd.UI = ui 34 cmd.Config = config 35 cmd.SharedActor = sharedaction.NewActor(config) 36 37 ccClient, _, err := shared.NewClients(config, ui, true, "") 38 if err != nil { 39 return err 40 } 41 cmd.Actor = v7action.NewActor(ccClient, config, nil, nil) 42 43 return nil 44 } 45 46 func (cmd EnvCommand) Execute(_ []string) error { 47 err := cmd.SharedActor.CheckTarget(true, true) 48 if err != nil { 49 return err 50 } 51 52 user, err := cmd.Config.CurrentUser() 53 if err != nil { 54 return err 55 } 56 57 appName := cmd.RequiredArgs.AppName 58 cmd.UI.DisplayTextWithFlavor("Getting env variables for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ 59 "AppName": appName, 60 "OrgName": cmd.Config.TargetedOrganization().Name, 61 "SpaceName": cmd.Config.TargetedSpace().Name, 62 "Username": user.Name, 63 }) 64 cmd.UI.DisplayOK() 65 cmd.UI.DisplayNewline() 66 67 envGroups, warnings, err := cmd.Actor.GetEnvironmentVariablesByApplicationNameAndSpace( 68 appName, 69 cmd.Config.TargetedSpace().GUID, 70 ) 71 cmd.UI.DisplayWarnings(warnings) 72 if err != nil { 73 return err 74 } 75 76 if len(envGroups.System) > 0 || len(envGroups.Application) > 0 { 77 cmd.UI.DisplayHeader("System-Provided:") 78 cmd.displaySystem(envGroups.System) 79 if len(envGroups.Application) > 0 { 80 cmd.UI.DisplayNewline() 81 cmd.displaySystem(envGroups.Application) 82 } 83 } else { 84 cmd.UI.DisplayText("No system-provided env variables have been set") 85 } 86 cmd.UI.DisplayNewline() 87 88 if len(envGroups.EnvironmentVariables) > 0 { 89 cmd.UI.DisplayHeader("User-Provided:") 90 cmd.displayEnvGroup(envGroups.EnvironmentVariables) 91 } else { 92 cmd.UI.DisplayText("No user-provided env variables have been set") 93 } 94 cmd.UI.DisplayNewline() 95 96 if len(envGroups.Running) > 0 { 97 cmd.UI.DisplayHeader("Running Environment Variable Groups:") 98 cmd.displayEnvGroup(envGroups.Running) 99 } else { 100 cmd.UI.DisplayText("No running env variables have been set") 101 } 102 cmd.UI.DisplayNewline() 103 104 if len(envGroups.Staging) > 0 { 105 cmd.UI.DisplayHeader("Staging Environment Variable Groups:") 106 cmd.displayEnvGroup(envGroups.Staging) 107 } else { 108 cmd.UI.DisplayText("No staging env variables have been set") 109 } 110 cmd.UI.DisplayNewline() 111 112 return nil 113 } 114 115 func (cmd EnvCommand) displayEnvGroup(group map[string]interface{}) error { 116 keys := sortKeys(group) 117 118 for _, key := range keys { 119 cmd.UI.DisplayText(fmt.Sprintf("%s: %v", key, group[key])) 120 } 121 return nil 122 } 123 124 func sortKeys(group map[string]interface{}) []string { 125 keys := make([]string, 0, len(group)) 126 for key := range group { 127 keys = append(keys, key) 128 } 129 sort.Strings(keys) 130 return keys 131 } 132 133 func (cmd EnvCommand) displaySystem(group map[string]interface{}) error { 134 for key, val := range group { 135 jsonVal, err := json.MarshalIndent(val, "", " ") 136 if err != nil { 137 return err 138 } 139 cmd.UI.DisplayText(fmt.Sprintf("%s: %s", key, jsonVal)) 140 } 141 return nil 142 }