github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+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  }