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