github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/command/v3/add_network_policy_command.go (about) 1 package v3 2 3 import ( 4 "net/http" 5 6 "code.cloudfoundry.org/cli/actor/cfnetworkingaction" 7 "code.cloudfoundry.org/cli/actor/sharedaction" 8 "code.cloudfoundry.org/cli/actor/v3action" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 10 "code.cloudfoundry.org/cli/command" 11 "code.cloudfoundry.org/cli/command/flag" 12 "code.cloudfoundry.org/cli/command/translatableerror" 13 "code.cloudfoundry.org/cli/command/v3/shared" 14 ) 15 16 //go:generate counterfeiter . AddNetworkPolicyActor 17 18 type AddNetworkPolicyActor interface { 19 AddNetworkPolicy(spaceGUID string, srcAppName string, destAppName string, protocol string, startPort int, endPort int) (cfnetworkingaction.Warnings, error) 20 } 21 22 type AddNetworkPolicyCommand struct { 23 RequiredArgs flag.AddNetworkPolicyArgs `positional-args:"yes"` 24 DestinationApp string `long:"destination-app" required:"true" description:"Name of app to connect to"` 25 Port flag.NetworkPort `long:"port" description:"Port or range of ports for connection to destination app (Default: 8080)"` 26 Protocol flag.NetworkProtocol `long:"protocol" description:"Protocol to connect apps with (Default: tcp)"` 27 28 usage interface{} `usage:"CF_NAME add-network-policy SOURCE_APP --destination-app DESTINATION_APP [(--protocol (tcp | udp) --port RANGE)]\n\nEXAMPLES:\n CF_NAME add-network-policy frontend --destination-app backend --protocol tcp --port 8081\n CF_NAME add-network-policy frontend --destination-app backend --protocol tcp --port 8080-8090"` 29 relatedCommands interface{} `related_commands:"apps, network-policies"` 30 31 UI command.UI 32 Config command.Config 33 SharedActor command.SharedActor 34 Actor AddNetworkPolicyActor 35 } 36 37 func (cmd *AddNetworkPolicyCommand) Setup(config command.Config, ui command.UI) error { 38 cmd.UI = ui 39 cmd.Config = config 40 cmd.SharedActor = sharedaction.NewActor(config) 41 42 client, uaa, err := shared.NewClients(config, ui, true) 43 if err != nil { 44 if v3Err, ok := err.(ccerror.V3UnexpectedResponseError); ok && v3Err.ResponseCode == http.StatusNotFound { 45 return translatableerror.CFNetworkingEndpointNotFoundError{} 46 } 47 48 return err 49 } 50 51 v3Actor := v3action.NewActor(nil, client, config) 52 networkingClient, err := shared.NewNetworkingClient(client.NetworkPolicyV1(), config, uaa, ui) 53 if err != nil { 54 return err 55 } 56 cmd.Actor = cfnetworkingaction.NewActor(networkingClient, v3Actor) 57 58 return nil 59 } 60 61 func (cmd AddNetworkPolicyCommand) Execute(args []string) error { 62 switch { 63 case cmd.Protocol.Protocol != "" && cmd.Port.StartPort == 0 && cmd.Port.EndPort == 0: 64 return translatableerror.NetworkPolicyProtocolOrPortNotProvidedError{} 65 case cmd.Protocol.Protocol == "" && (cmd.Port.StartPort != 0 || cmd.Port.EndPort != 0): 66 return translatableerror.NetworkPolicyProtocolOrPortNotProvidedError{} 67 case cmd.Protocol.Protocol == "" && cmd.Port.StartPort == 0 && cmd.Port.EndPort == 0: 68 cmd.Protocol.Protocol = "tcp" 69 cmd.Port.StartPort = 8080 70 cmd.Port.EndPort = 8080 71 } 72 73 err := cmd.SharedActor.CheckTarget(cmd.Config, true, true) 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 cmd.UI.DisplayTextWithFlavor("Adding network policy to app {{.SrcAppName}} in org {{.Org}} / space {{.Space}} as {{.User}}...", map[string]interface{}{ 83 "SrcAppName": cmd.RequiredArgs.SourceApp, 84 "Org": cmd.Config.TargetedOrganization().Name, 85 "Space": cmd.Config.TargetedSpace().Name, 86 "User": user.Name, 87 }) 88 89 warnings, err := cmd.Actor.AddNetworkPolicy(cmd.Config.TargetedSpace().GUID, cmd.RequiredArgs.SourceApp, cmd.DestinationApp, cmd.Protocol.Protocol, cmd.Port.StartPort, cmd.Port.EndPort) 90 cmd.UI.DisplayWarnings(warnings) 91 if err != nil { 92 return shared.HandleError(err) 93 } 94 cmd.UI.DisplayOK() 95 96 return nil 97 }