github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/command/v3/set_org_default_isolation_segment_command.go (about)

     1  package v3
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"code.cloudfoundry.org/cli/actor/sharedaction"
     7  	"code.cloudfoundry.org/cli/actor/v2action"
     8  	"code.cloudfoundry.org/cli/actor/v3action"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
    10  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccversion"
    11  	"code.cloudfoundry.org/cli/command"
    12  	"code.cloudfoundry.org/cli/command/flag"
    13  	"code.cloudfoundry.org/cli/command/translatableerror"
    14  	sharedV2 "code.cloudfoundry.org/cli/command/v2/shared"
    15  	"code.cloudfoundry.org/cli/command/v3/shared"
    16  )
    17  
    18  //go:generate counterfeiter . SetOrgDefaultIsolationSegmentActor
    19  
    20  type SetOrgDefaultIsolationSegmentActor interface {
    21  	CloudControllerAPIVersion() string
    22  	GetIsolationSegmentByName(isoSegName string) (v3action.IsolationSegment, v3action.Warnings, error)
    23  	SetOrganizationDefaultIsolationSegment(orgGUID string, isoSegGUID string) (v3action.Warnings, error)
    24  }
    25  
    26  //go:generate counterfeiter . SetOrgDefaultIsolationSegmentActorV2
    27  
    28  type SetOrgDefaultIsolationSegmentActorV2 interface {
    29  	GetOrganizationByName(orgName string) (v2action.Organization, v2action.Warnings, error)
    30  }
    31  
    32  type SetOrgDefaultIsolationSegmentCommand struct {
    33  	RequiredArgs    flag.OrgIsolationArgs `positional-args:"yes"`
    34  	usage           interface{}           `usage:"CF_NAME set-org-default-isolation-segment ORG_NAME SEGMENT_NAME"`
    35  	relatedCommands interface{}           `related_commands:"org, set-space-isolation-segment"`
    36  
    37  	UI          command.UI
    38  	Config      command.Config
    39  	SharedActor command.SharedActor
    40  	Actor       SetOrgDefaultIsolationSegmentActor
    41  	ActorV2     SetOrgDefaultIsolationSegmentActorV2
    42  }
    43  
    44  func (cmd *SetOrgDefaultIsolationSegmentCommand) Setup(config command.Config, ui command.UI) error {
    45  	cmd.UI = ui
    46  	cmd.Config = config
    47  	cmd.SharedActor = sharedaction.NewActor(config)
    48  
    49  	client, _, err := shared.NewClients(config, ui, true)
    50  	if err != nil {
    51  		if v3Err, ok := err.(ccerror.V3UnexpectedResponseError); ok && v3Err.ResponseCode == http.StatusNotFound {
    52  			return translatableerror.MinimumAPIVersionNotMetError{MinimumVersion: ccversion.MinVersionIsolationSegmentV3}
    53  		}
    54  
    55  		return err
    56  	}
    57  	cmd.Actor = v3action.NewActor(nil, client, config)
    58  
    59  	ccClientV2, uaaClientV2, err := sharedV2.NewClients(config, ui, true)
    60  	if err != nil {
    61  		return err
    62  	}
    63  	cmd.ActorV2 = v2action.NewActor(ccClientV2, uaaClientV2, config)
    64  
    65  	return nil
    66  }
    67  
    68  func (cmd SetOrgDefaultIsolationSegmentCommand) Execute(args []string) error {
    69  	err := command.MinimumAPIVersionCheck(cmd.Actor.CloudControllerAPIVersion(), ccversion.MinVersionIsolationSegmentV3)
    70  	if err != nil {
    71  		return err
    72  	}
    73  
    74  	err = cmd.SharedActor.CheckTarget(cmd.Config, false, false)
    75  	if err != nil {
    76  		return shared.HandleError(err)
    77  	}
    78  
    79  	user, err := cmd.Config.CurrentUser()
    80  	if err != nil {
    81  		return err
    82  	}
    83  
    84  	cmd.UI.DisplayTextWithFlavor("Setting isolation segment {{.IsolationSegmentName}} to default on org {{.OrgName}} as {{.CurrentUser}}...", map[string]interface{}{
    85  		"IsolationSegmentName": cmd.RequiredArgs.IsolationSegmentName,
    86  		"OrgName":              cmd.RequiredArgs.OrganizationName,
    87  		"CurrentUser":          user.Name,
    88  	})
    89  
    90  	org, v2Warnings, err := cmd.ActorV2.GetOrganizationByName(cmd.RequiredArgs.OrganizationName)
    91  	cmd.UI.DisplayWarnings(v2Warnings)
    92  	if err != nil {
    93  		return sharedV2.HandleError(err)
    94  	}
    95  
    96  	isoSeg, v3Warnings, err := cmd.Actor.GetIsolationSegmentByName(cmd.RequiredArgs.IsolationSegmentName)
    97  	cmd.UI.DisplayWarnings(v3Warnings)
    98  	if err != nil {
    99  		return shared.HandleError(err)
   100  	}
   101  
   102  	v3Warnings, err = cmd.Actor.SetOrganizationDefaultIsolationSegment(org.GUID, isoSeg.GUID)
   103  	cmd.UI.DisplayWarnings(v3Warnings)
   104  	if err != nil {
   105  		return shared.HandleError(err)
   106  	}
   107  
   108  	cmd.UI.DisplayOK()
   109  	cmd.UI.DisplayNewline()
   110  	cmd.UI.DisplayText("In order to move running applications to this isolation segment, they must be restarted.")
   111  
   112  	return nil
   113  }