github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/domains_command.go (about) 1 package v7 2 3 import ( 4 "sort" 5 6 "code.cloudfoundry.org/cli/actor/sharedaction" 7 "code.cloudfoundry.org/cli/actor/v7action" 8 "code.cloudfoundry.org/cli/command" 9 "code.cloudfoundry.org/cli/command/v7/shared" 10 "code.cloudfoundry.org/cli/util/sorting" 11 "code.cloudfoundry.org/cli/util/ui" 12 "code.cloudfoundry.org/clock" 13 ) 14 15 //go:generate counterfeiter . DomainsActor 16 17 type DomainsActor interface { 18 GetOrganizationDomains(string, string) ([]v7action.Domain, v7action.Warnings, error) 19 } 20 21 type DomainsCommand struct { 22 usage interface{} `usage:"CF_NAME domains\n\nEXAMPLES:\n CF_NAME domains\n CF_NAME domains --labels 'environment in (production,staging),tier in (backend)'\n CF_NAME domains --labels 'env=dev,!chargeback-code,tier in (backend,worker)'"` 23 relatedCommands interface{} `related_commands:"create-private-domain, create-route, create-shared-domain, routes, set-label"` 24 25 Labels string `long:"labels" description:"Selector to filter domains by labels"` 26 UI command.UI 27 Config command.Config 28 SharedActor command.SharedActor 29 Actor DomainsActor 30 } 31 32 func (cmd *DomainsCommand) 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.GetNewClientsAndConnectToCF(config, ui, "") 38 if err != nil { 39 return err 40 } 41 cmd.Actor = v7action.NewActor(ccClient, config, nil, nil, clock.NewClock()) 42 43 return nil 44 } 45 46 func (cmd DomainsCommand) Execute(args []string) error { 47 err := cmd.SharedActor.CheckTarget(true, false) 48 if err != nil { 49 return err 50 } 51 52 currentUser, err := cmd.Config.CurrentUser() 53 if err != nil { 54 return err 55 } 56 57 targetedOrg := cmd.Config.TargetedOrganization() 58 cmd.UI.DisplayTextWithFlavor("Getting domains in org {{.CurrentOrg}} as {{.CurrentUser}}...\n", map[string]interface{}{ 59 "CurrentOrg": targetedOrg.Name, 60 "CurrentUser": currentUser.Name, 61 }) 62 63 domains, warnings, err := cmd.Actor.GetOrganizationDomains(targetedOrg.GUID, cmd.Labels) 64 cmd.UI.DisplayWarnings(warnings) 65 if err != nil { 66 return err 67 } 68 69 sort.Slice(domains, func(i, j int) bool { return sorting.LessIgnoreCase(domains[i].Name, domains[j].Name) }) 70 71 if len(domains) > 0 { 72 cmd.displayDomainsTable(domains) 73 } else { 74 cmd.UI.DisplayText("No domains found.") 75 } 76 return nil 77 } 78 79 func (cmd DomainsCommand) displayDomainsTable(domains []v7action.Domain) { 80 var domainsTable = [][]string{ 81 { 82 cmd.UI.TranslateText("name"), 83 cmd.UI.TranslateText("availability"), 84 cmd.UI.TranslateText("internal"), 85 }, 86 } 87 88 for _, domain := range domains { 89 var availability string 90 var internal string 91 92 if domain.Shared() { 93 availability = cmd.UI.TranslateText("shared") 94 } else { 95 availability = cmd.UI.TranslateText("private") 96 } 97 98 if domain.Internal.IsSet && domain.Internal.Value { 99 internal = cmd.UI.TranslateText("true") 100 } 101 102 domainsTable = append(domainsTable, []string{ 103 domain.Name, 104 availability, 105 internal, 106 }) 107 } 108 109 cmd.UI.DisplayTableWithHeader("", domainsTable, ui.DefaultTableSpacePadding) 110 111 }