github.com/loafoe/cli@v7.1.0+incompatible/command/v7/add_network_policy_command.go (about) 1 package v7 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/cfnetworkingaction" 5 "code.cloudfoundry.org/cli/actor/v7action" 6 "code.cloudfoundry.org/cli/command" 7 "code.cloudfoundry.org/cli/command/flag" 8 "code.cloudfoundry.org/cli/command/translatableerror" 9 "code.cloudfoundry.org/cli/command/v7/shared" 10 "code.cloudfoundry.org/cli/resources" 11 ) 12 13 //go:generate counterfeiter . NetworkingActor 14 15 type NetworkingActor interface { 16 AddNetworkPolicy(srcSpaceGUID string, srcAppName string, destSpaceGUID string, destAppName string, protocol string, startPort int, endPort int) (cfnetworkingaction.Warnings, error) 17 } 18 19 type AddNetworkPolicyCommand struct { 20 BaseCommand 21 22 RequiredArgs flag.AddNetworkPolicyArgsV7 `positional-args:"yes"` 23 Port flag.NetworkPort `long:"port" description:"Port or range of ports for connection to destination app (Default: 8080)"` 24 Protocol flag.NetworkProtocol `long:"protocol" description:"Protocol to connect apps with (Default: tcp)"` 25 26 DestinationOrg string `short:"o" description:"The org of the destination app (Default: targeted org)"` 27 DestinationSpace string `short:"s" description:"The space of the destination app (Default: targeted space)"` 28 29 usage interface{} `usage:"CF_NAME add-network-policy SOURCE_APP DESTINATION_APP [-s DESTINATION_SPACE_NAME [-o DESTINATION_ORG_NAME]] [--protocol (tcp | udp) --port RANGE]\n\nEXAMPLES:\n CF_NAME add-network-policy frontend backend --protocol tcp --port 8081\n CF_NAME add-network-policy frontend backend -s backend-space -o backend-org --protocol tcp --port 8080-8090"` 30 relatedCommands interface{} `related_commands:"apps, network-policies, remove-network-policy"` 31 32 NetworkingActor NetworkingActor 33 } 34 35 func (cmd *AddNetworkPolicyCommand) Setup(config command.Config, ui command.UI) error { 36 err := cmd.BaseCommand.Setup(config, ui) 37 if err != nil { 38 return err 39 } 40 41 ccClient, uaaClient := cmd.BaseCommand.GetClients() 42 43 networkingClient, err := shared.NewNetworkingClient(ccClient.NetworkPolicyV1(), config, uaaClient, ui) 44 if err != nil { 45 return err 46 } 47 cmd.NetworkingActor = cfnetworkingaction.NewActor(networkingClient, ccClient) 48 49 return nil 50 } 51 52 func (cmd AddNetworkPolicyCommand) Execute(args []string) error { 53 switch { 54 case cmd.Protocol.Protocol != "" && cmd.Port.StartPort == 0 && cmd.Port.EndPort == 0: 55 return translatableerror.NetworkPolicyProtocolOrPortNotProvidedError{} 56 case cmd.Protocol.Protocol == "" && (cmd.Port.StartPort != 0 || cmd.Port.EndPort != 0): 57 return translatableerror.NetworkPolicyProtocolOrPortNotProvidedError{} 58 case cmd.DestinationOrg != "" && cmd.DestinationSpace == "": 59 return translatableerror.NetworkPolicyDestinationOrgWithoutSpaceError{} 60 case cmd.Protocol.Protocol == "" && cmd.Port.StartPort == 0 && cmd.Port.EndPort == 0: 61 cmd.Protocol.Protocol = "tcp" 62 cmd.Port.StartPort = 8080 63 cmd.Port.EndPort = 8080 64 } 65 66 err := cmd.SharedActor.CheckTarget(true, true) 67 if err != nil { 68 return err 69 } 70 71 destOrgGUID := cmd.Config.TargetedOrganization().GUID 72 73 displayDestinationOrg := cmd.Config.TargetedOrganization().Name 74 if cmd.DestinationOrg != "" { 75 var destOrg resources.Organization 76 var warnings v7action.Warnings 77 destOrg, warnings, err = cmd.Actor.GetOrganizationByName(cmd.DestinationOrg) 78 cmd.UI.DisplayWarnings(warnings) 79 if err != nil { 80 return err 81 } 82 83 destOrgGUID = destOrg.GUID 84 displayDestinationOrg = cmd.DestinationOrg 85 } 86 87 destSpaceGUID := cmd.Config.TargetedSpace().GUID 88 89 if cmd.DestinationSpace != "" { 90 var destSpace resources.Space 91 var warnings v7action.Warnings 92 destSpace, warnings, err = cmd.Actor.GetSpaceByNameAndOrganization(cmd.DestinationSpace, destOrgGUID) 93 cmd.UI.DisplayWarnings(warnings) 94 if err != nil { 95 return err 96 } 97 98 destSpaceGUID = destSpace.GUID 99 } 100 101 user, err := cmd.Config.CurrentUser() 102 if err != nil { 103 return err 104 } 105 106 if cmd.DestinationSpace != "" { 107 cmd.UI.DisplayTextWithFlavor("Adding network policy from app {{.SrcAppName}} in org {{.Org}} / space {{.Space}} to app {{.DstAppName}} in org {{.DstOrg}} / space {{.DstSpace}} as {{.User}}...", map[string]interface{}{ 108 "SrcAppName": cmd.RequiredArgs.SourceApp, 109 "Org": cmd.Config.TargetedOrganization().Name, 110 "Space": cmd.Config.TargetedSpace().Name, 111 "DstAppName": cmd.RequiredArgs.DestApp, 112 "DstOrg": displayDestinationOrg, 113 "DstSpace": cmd.DestinationSpace, 114 "User": user.Name, 115 }) 116 } else { 117 cmd.UI.DisplayTextWithFlavor("Adding network policy from app {{.SrcAppName}} to app {{.DstAppName}} in org {{.Org}} / space {{.Space}} as {{.User}}...", map[string]interface{}{ 118 "SrcAppName": cmd.RequiredArgs.SourceApp, 119 "Org": cmd.Config.TargetedOrganization().Name, 120 "Space": cmd.Config.TargetedSpace().Name, 121 "DstAppName": cmd.RequiredArgs.DestApp, 122 "User": user.Name, 123 }) 124 } 125 126 warnings, err := cmd.NetworkingActor.AddNetworkPolicy(cmd.Config.TargetedSpace().GUID, cmd.RequiredArgs.SourceApp, destSpaceGUID, cmd.RequiredArgs.DestApp, cmd.Protocol.Protocol, cmd.Port.StartPort, cmd.Port.EndPort) 127 cmd.UI.DisplayWarnings(warnings) 128 if err != nil { 129 return err 130 } 131 cmd.UI.DisplayOK() 132 133 return nil 134 }