github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/org_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"fmt"
     5  	"sort"
     6  	"strings"
     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  	"code.cloudfoundry.org/clock"
    15  )
    16  
    17  //go:generate counterfeiter . OrgActor
    18  
    19  type OrgActor interface {
    20  	GetOrganizationByName(orgName string) (v7action.Organization, v7action.Warnings, error)
    21  	GetOrganizationSummaryByName(orgName string) (v7action.OrganizationSummary, v7action.Warnings, error)
    22  	GetIsolationSegmentsByOrganization(orgName string) ([]v7action.IsolationSegment, v7action.Warnings, error)
    23  }
    24  
    25  type OrgCommand struct {
    26  	RequiredArgs    flag.Organization `positional-args:"yes"`
    27  	GUID            bool              `long:"guid" description:"Retrieve and display the given org's guid.  All other output for the org is suppressed."`
    28  	usage           interface{}       `usage:"CF_NAME org ORG [--guid]"`
    29  	relatedCommands interface{}       `related_commands:"org-users, orgs"`
    30  
    31  	UI          command.UI
    32  	Config      command.Config
    33  	SharedActor command.SharedActor
    34  	Actor       OrgActor
    35  }
    36  
    37  func (cmd *OrgCommand) Setup(config command.Config, ui command.UI) error {
    38  	cmd.Config = config
    39  	cmd.UI = ui
    40  	sharedActor := sharedaction.NewActor(config)
    41  	cmd.SharedActor = sharedActor
    42  
    43  	ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui, "")
    44  	if err != nil {
    45  		return err
    46  	}
    47  	cmd.Actor = v7action.NewActor(ccClient, config, sharedActor, uaaClient, clock.NewClock())
    48  
    49  	return nil
    50  }
    51  
    52  func (cmd OrgCommand) Execute(args []string) error {
    53  	err := cmd.SharedActor.CheckTarget(false, false)
    54  	if err != nil {
    55  		return err
    56  	}
    57  
    58  	if cmd.GUID {
    59  		return cmd.displayOrgGUID()
    60  	}
    61  
    62  	return cmd.displayOrgSummary()
    63  }
    64  
    65  func (cmd OrgCommand) displayOrgGUID() error {
    66  	org, warnings, err := cmd.Actor.GetOrganizationByName(cmd.RequiredArgs.Organization)
    67  	cmd.UI.DisplayWarnings(warnings)
    68  	if err != nil {
    69  		return err
    70  	}
    71  
    72  	cmd.UI.DisplayText(org.GUID)
    73  
    74  	return nil
    75  }
    76  
    77  func (cmd OrgCommand) displayOrgSummary() error {
    78  	user, err := cmd.Config.CurrentUser()
    79  	if err != nil {
    80  		return err
    81  	}
    82  
    83  	cmd.UI.DisplayTextWithFlavor(
    84  		"Getting info for org {{.OrgName}} as {{.Username}}...",
    85  		map[string]interface{}{
    86  			"OrgName":  cmd.RequiredArgs.Organization,
    87  			"Username": user.Name,
    88  		})
    89  	cmd.UI.DisplayNewline()
    90  
    91  	orgSummary, warnings, err := cmd.Actor.GetOrganizationSummaryByName(cmd.RequiredArgs.Organization)
    92  	cmd.UI.DisplayWarnings(warnings)
    93  	if err != nil {
    94  		return err
    95  	}
    96  
    97  	table := [][]string{
    98  		{cmd.UI.TranslateText("name:"), orgSummary.Name},
    99  		{cmd.UI.TranslateText("domains:"), strings.Join(orgSummary.DomainNames, ", ")},
   100  		{cmd.UI.TranslateText("spaces:"), strings.Join(orgSummary.SpaceNames, ", ")},
   101  	}
   102  
   103  	isolationSegments, v7Warnings, err := cmd.Actor.GetIsolationSegmentsByOrganization(orgSummary.GUID)
   104  	cmd.UI.DisplayWarnings(v7Warnings)
   105  	if err != nil {
   106  		return err
   107  	}
   108  
   109  	isolationSegmentNames := []string{}
   110  	for _, iso := range isolationSegments {
   111  		if iso.GUID == orgSummary.DefaultIsolationSegmentGUID {
   112  			isolationSegmentNames = append(isolationSegmentNames, fmt.Sprintf("%s (%s)", iso.Name, cmd.UI.TranslateText("default")))
   113  		} else {
   114  			isolationSegmentNames = append(isolationSegmentNames, iso.Name)
   115  		}
   116  	}
   117  
   118  	sort.Strings(isolationSegmentNames)
   119  	table = append(table, []string{cmd.UI.TranslateText("isolation segments:"), strings.Join(isolationSegmentNames, ", ")})
   120  
   121  	cmd.UI.DisplayKeyValueTable("", table, 3)
   122  
   123  	return nil
   124  }