github.com/nimakaviani/cli@v6.37.1-0.20180619223813-e734901a73fa+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(client, config, nil, nil) 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(false, false) 75 if err != nil { 76 return 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 err 94 } 95 96 isoSeg, v3Warnings, err := cmd.Actor.GetIsolationSegmentByName(cmd.RequiredArgs.IsolationSegmentName) 97 cmd.UI.DisplayWarnings(v3Warnings) 98 if err != nil { 99 return err 100 } 101 102 v3Warnings, err = cmd.Actor.SetOrganizationDefaultIsolationSegment(org.GUID, isoSeg.GUID) 103 cmd.UI.DisplayWarnings(v3Warnings) 104 if err != nil { 105 return 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 }