github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/command/v3/set_space_isolation_segment_command.go (about)

     1  package v3
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/sharedaction"
     5  	"code.cloudfoundry.org/cli/actor/v2action"
     6  	"code.cloudfoundry.org/cli/actor/v3action"
     7  	"code.cloudfoundry.org/cli/command"
     8  	"code.cloudfoundry.org/cli/command/flag"
     9  	sharedV2 "code.cloudfoundry.org/cli/command/v2/shared"
    10  	"code.cloudfoundry.org/cli/command/v3/shared"
    11  )
    12  
    13  //go:generate counterfeiter . SetSpaceIsolationSegmentActor
    14  
    15  type SetSpaceIsolationSegmentActor interface {
    16  	CloudControllerAPIVersion() string
    17  	AssignIsolationSegmentToSpaceByNameAndSpace(isolationSegmentName string, spaceGUID string) (v3action.Warnings, error)
    18  }
    19  
    20  //go:generate counterfeiter . SetSpaceIsolationSegmentActorV2
    21  
    22  type SetSpaceIsolationSegmentActorV2 interface {
    23  	GetSpaceByOrganizationAndName(orgGUID string, spaceName string) (v2action.Space, v2action.Warnings, error)
    24  }
    25  
    26  type SetSpaceIsolationSegmentCommand struct {
    27  	RequiredArgs    flag.SpaceIsolationArgs `positional-args:"yes"`
    28  	usage           interface{}             `usage:"CF_NAME set-space-isolation-segment SPACE_NAME SEGMENT_NAME"`
    29  	relatedCommands interface{}             `related_commands:"org, reset-space-isolation-segment, restart, space"`
    30  
    31  	UI          command.UI
    32  	Config      command.Config
    33  	SharedActor command.SharedActor
    34  	Actor       SetSpaceIsolationSegmentActor
    35  	ActorV2     SetSpaceIsolationSegmentActorV2
    36  }
    37  
    38  func (cmd *SetSpaceIsolationSegmentCommand) Setup(config command.Config, ui command.UI) error {
    39  	cmd.UI = ui
    40  	cmd.Config = config
    41  	cmd.SharedActor = sharedaction.NewActor()
    42  
    43  	client, _, err := shared.NewClients(config, ui, true)
    44  	if err != nil {
    45  		return err
    46  	}
    47  	cmd.Actor = v3action.NewActor(client, config)
    48  
    49  	ccClientV2, uaaClientV2, err := sharedV2.NewClients(config, ui, true)
    50  	if err != nil {
    51  		return err
    52  	}
    53  	cmd.ActorV2 = v2action.NewActor(ccClientV2, uaaClientV2)
    54  
    55  	return nil
    56  }
    57  
    58  func (cmd SetSpaceIsolationSegmentCommand) Execute(args []string) error {
    59  	err := command.MinimumAPIVersionCheck(cmd.Actor.CloudControllerAPIVersion(), command.MinVersionIsolationSegmentV3)
    60  	if err != nil {
    61  		return err
    62  	}
    63  
    64  	err = cmd.SharedActor.CheckTarget(cmd.Config, true, false)
    65  	if err != nil {
    66  		return shared.HandleError(err)
    67  	}
    68  
    69  	user, err := cmd.Config.CurrentUser()
    70  	if err != nil {
    71  		return err
    72  	}
    73  
    74  	cmd.UI.DisplayTextWithFlavor("Updating isolation segment of space {{.SpaceName}} in org {{.OrgName}} as {{.CurrentUser}}...", map[string]interface{}{
    75  		"SegmentName": cmd.RequiredArgs.IsolationSegmentName,
    76  		"SpaceName":   cmd.RequiredArgs.SpaceName,
    77  		"OrgName":     cmd.Config.TargetedOrganization().Name,
    78  		"CurrentUser": user.Name,
    79  	})
    80  
    81  	space, v2Warnings, err := cmd.ActorV2.GetSpaceByOrganizationAndName(cmd.Config.TargetedOrganization().GUID, cmd.RequiredArgs.SpaceName)
    82  	cmd.UI.DisplayWarnings(v2Warnings)
    83  	if err != nil {
    84  		return sharedV2.HandleError(err)
    85  	}
    86  
    87  	warnings, err := cmd.Actor.AssignIsolationSegmentToSpaceByNameAndSpace(cmd.RequiredArgs.IsolationSegmentName, space.GUID)
    88  	cmd.UI.DisplayWarnings(warnings)
    89  	if err != nil {
    90  		return shared.HandleError(err)
    91  	}
    92  
    93  	cmd.UI.DisplayOK()
    94  	cmd.UI.DisplayNewline()
    95  	cmd.UI.DisplayText("In order to move running applications to this isolation segment, they must be restarted.")
    96  
    97  	return nil
    98  }