github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/command/v3/set_space_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 . SetSpaceIsolationSegmentActor
    19  
    20  type SetSpaceIsolationSegmentActor interface {
    21  	CloudControllerAPIVersion() string
    22  	AssignIsolationSegmentToSpaceByNameAndSpace(isolationSegmentName string, spaceGUID string) (v3action.Warnings, error)
    23  }
    24  
    25  //go:generate counterfeiter . SetSpaceIsolationSegmentActorV2
    26  
    27  type SetSpaceIsolationSegmentActorV2 interface {
    28  	GetSpaceByOrganizationAndName(orgGUID string, spaceName string) (v2action.Space, v2action.Warnings, error)
    29  }
    30  
    31  type SetSpaceIsolationSegmentCommand struct {
    32  	RequiredArgs    flag.SpaceIsolationArgs `positional-args:"yes"`
    33  	usage           interface{}             `usage:"CF_NAME set-space-isolation-segment SPACE_NAME SEGMENT_NAME"`
    34  	relatedCommands interface{}             `related_commands:"org, reset-space-isolation-segment, restart, set-org-default-isolation-segment, space"`
    35  
    36  	UI          command.UI
    37  	Config      command.Config
    38  	SharedActor command.SharedActor
    39  	Actor       SetSpaceIsolationSegmentActor
    40  	ActorV2     SetSpaceIsolationSegmentActorV2
    41  }
    42  
    43  func (cmd *SetSpaceIsolationSegmentCommand) Setup(config command.Config, ui command.UI) error {
    44  	cmd.UI = ui
    45  	cmd.Config = config
    46  	cmd.SharedActor = sharedaction.NewActor(config)
    47  
    48  	client, _, err := shared.NewClients(config, ui, true)
    49  	if err != nil {
    50  		if v3Err, ok := err.(ccerror.V3UnexpectedResponseError); ok && v3Err.ResponseCode == http.StatusNotFound {
    51  			return translatableerror.MinimumAPIVersionNotMetError{MinimumVersion: ccversion.MinVersionIsolationSegmentV3}
    52  		}
    53  
    54  		return err
    55  	}
    56  	cmd.Actor = v3action.NewActor(nil, client, config)
    57  
    58  	ccClientV2, uaaClientV2, err := sharedV2.NewClients(config, ui, true)
    59  	if err != nil {
    60  		return err
    61  	}
    62  	cmd.ActorV2 = v2action.NewActor(ccClientV2, uaaClientV2, config)
    63  
    64  	return nil
    65  }
    66  
    67  func (cmd SetSpaceIsolationSegmentCommand) Execute(args []string) error {
    68  	err := command.MinimumAPIVersionCheck(cmd.Actor.CloudControllerAPIVersion(), ccversion.MinVersionIsolationSegmentV3)
    69  	if err != nil {
    70  		return err
    71  	}
    72  
    73  	err = cmd.SharedActor.CheckTarget(cmd.Config, true, false)
    74  	if err != nil {
    75  		return shared.HandleError(err)
    76  	}
    77  
    78  	user, err := cmd.Config.CurrentUser()
    79  	if err != nil {
    80  		return err
    81  	}
    82  
    83  	cmd.UI.DisplayTextWithFlavor("Updating isolation segment of space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", map[string]interface{}{
    84  		"SegmentName": cmd.RequiredArgs.IsolationSegmentName,
    85  		"SpaceName":   cmd.RequiredArgs.SpaceName,
    86  		"OrgName":     cmd.Config.TargetedOrganization().Name,
    87  		"CurrentUser": user.Name,
    88  	})
    89  
    90  	space, v2Warnings, err := cmd.ActorV2.GetSpaceByOrganizationAndName(cmd.Config.TargetedOrganization().GUID, cmd.RequiredArgs.SpaceName)
    91  	cmd.UI.DisplayWarnings(v2Warnings)
    92  	if err != nil {
    93  		return sharedV2.HandleError(err)
    94  	}
    95  
    96  	warnings, err := cmd.Actor.AssignIsolationSegmentToSpaceByNameAndSpace(cmd.RequiredArgs.IsolationSegmentName, space.GUID)
    97  	cmd.UI.DisplayWarnings(warnings)
    98  	if err != nil {
    99  		return shared.HandleError(err)
   100  	}
   101  
   102  	cmd.UI.DisplayOK()
   103  	cmd.UI.DisplayNewline()
   104  	cmd.UI.DisplayText("In order to move running applications to this isolation segment, they must be restarted.")
   105  
   106  	return nil
   107  }