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

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