github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v6/rename_buildpack_command.go (about) 1 package v6 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/sharedaction" 6 "code.cloudfoundry.org/cli/actor/v2action" 7 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 8 "code.cloudfoundry.org/cli/command" 9 "code.cloudfoundry.org/cli/command/flag" 10 "code.cloudfoundry.org/cli/command/v6/shared" 11 "fmt" 12 "strings" 13 ) 14 15 //go:generate counterfeiter . RenameBuildpackActor 16 17 type RenameBuildpackActor interface { 18 CloudControllerAPIVersion() string 19 RenameBuildpack(oldName string, newName string, stackName string) (v2action.Warnings, error) 20 } 21 22 type RenameBuildpackCommand struct { 23 RequiredArgs flag.RenameBuildpackArgs `positional-args:"yes"` 24 Stack string `short:"s" description:"Specify which buildpack to rename by stack"` 25 usage interface{} `usage:"CF_NAME rename-buildpack BUILDPACK_NAME NEW_BUILDPACK_NAME [-s STACK]"` 26 relatedCommands interface{} `related_commands:"update-buildpack"` 27 28 UI command.UI 29 Config command.Config 30 SharedActor command.SharedActor 31 Actor RenameBuildpackActor 32 } 33 34 func (cmd *RenameBuildpackCommand) Setup(config command.Config, ui command.UI) error { 35 cmd.UI = ui 36 cmd.Config = config 37 cmd.SharedActor = sharedaction.NewActor(config) 38 39 ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui) 40 if err != nil { 41 return err 42 } 43 cmd.Actor = v2action.NewActor(ccClient, uaaClient, config) 44 45 return nil 46 } 47 48 func (cmd RenameBuildpackCommand) Execute(args []string) error { 49 if err := cmd.SharedActor.CheckTarget(false, false); err != nil { 50 return err 51 } 52 53 user, err := cmd.Config.CurrentUser() 54 if err != nil { 55 return err 56 } 57 58 if cmd.stackSpecified() { 59 err = command.MinimumCCAPIVersionCheck(cmd.Actor.CloudControllerAPIVersion(), ccversion.MinVersionBuildpackStackAssociationV2, "Option '-s'") 60 if err != nil { 61 return err 62 } 63 cmd.UI.DisplayTextWithFlavor("Renaming buildpack {{.OldName}} to {{.NewName}} with stack {{.Stack}} as {{.CurrentUser}}...", map[string]interface{}{ 64 "OldName": cmd.RequiredArgs.OldBuildpackName, 65 "NewName": cmd.RequiredArgs.NewBuildpackName, 66 "Stack": cmd.Stack, 67 "CurrentUser": user.Name, 68 }) 69 } else { 70 cmd.UI.DisplayTextWithFlavor("Renaming buildpack {{.OldName}} to {{.NewName}} as {{.CurrentUser}}...", map[string]interface{}{ 71 "OldName": cmd.RequiredArgs.OldBuildpackName, 72 "NewName": cmd.RequiredArgs.NewBuildpackName, 73 "CurrentUser": user.Name, 74 }) 75 } 76 77 warnings, err := cmd.Actor.RenameBuildpack(cmd.RequiredArgs.OldBuildpackName, cmd.RequiredArgs.NewBuildpackName, cmd.Stack) 78 cmd.UI.DisplayWarnings(warnings) 79 if err != nil { 80 return filterError(cmd.RequiredArgs.NewBuildpackName, err) 81 } 82 83 cmd.UI.DisplayOK() 84 85 return nil 86 } 87 88 func filterError(newBuildpackName string, err error) error { 89 if _, ok := err.(actionerror.BuildpackInvalidError); !ok { 90 return err 91 } 92 if strings.Index(err.Error(), "stack unique") == -1 { 93 return err 94 } 95 return fmt.Errorf("Buildpack %s already exists without a stack", newBuildpackName) 96 } 97 98 func (cmd RenameBuildpackCommand) stackSpecified() bool { 99 return len(cmd.Stack) > 0 100 }