github.com/loafoe/cli@v7.1.0+incompatible/command/v7/network_policies_command.go (about) 1 package v7 2 3 import ( 4 "fmt" 5 "strconv" 6 7 "code.cloudfoundry.org/cli/actor/cfnetworkingaction" 8 "code.cloudfoundry.org/cli/command" 9 "code.cloudfoundry.org/cli/command/v7/shared" 10 "code.cloudfoundry.org/cli/util/ui" 11 ) 12 13 //go:generate counterfeiter . NetworkPoliciesActor 14 15 type NetworkPoliciesActor interface { 16 NetworkPoliciesBySpaceAndAppName(spaceGUID string, srcAppName string) ([]cfnetworkingaction.Policy, cfnetworkingaction.Warnings, error) 17 NetworkPoliciesBySpace(spaceGUID string) ([]cfnetworkingaction.Policy, cfnetworkingaction.Warnings, error) 18 } 19 20 type NetworkPoliciesCommand struct { 21 BaseCommand 22 23 SourceApp string `long:"source" required:"false" description:"Source app to filter results by"` 24 25 usage interface{} `usage:"CF_NAME network-policies [--source SOURCE_APP]"` 26 relatedCommands interface{} `related_commands:"add-network-policy, apps, remove-network-policy"` 27 28 NetworkingActor NetworkPoliciesActor 29 } 30 31 func (cmd *NetworkPoliciesCommand) Setup(config command.Config, ui command.UI) error { 32 err := cmd.BaseCommand.Setup(config, ui) 33 if err != nil { 34 return err 35 } 36 37 ccClient, uaaClient := cmd.BaseCommand.GetClients() 38 39 networkingClient, err := shared.NewNetworkingClient(ccClient.NetworkPolicyV1(), config, uaaClient, ui) 40 if err != nil { 41 return err 42 } 43 cmd.NetworkingActor = cfnetworkingaction.NewActor(networkingClient, ccClient) 44 45 return nil 46 } 47 48 func (cmd NetworkPoliciesCommand) Execute(args []string) error { 49 err := cmd.SharedActor.CheckTarget(true, true) 50 if err != nil { 51 return err 52 } 53 54 user, err := cmd.Config.CurrentUser() 55 if err != nil { 56 return err 57 } 58 59 var policies []cfnetworkingaction.Policy 60 var warnings cfnetworkingaction.Warnings 61 62 if cmd.SourceApp != "" { 63 cmd.UI.DisplayTextWithFlavor("Listing network policies of app {{.SrcAppName}} in org {{.Org}} / space {{.Space}} as {{.User}}...", map[string]interface{}{ 64 "SrcAppName": cmd.SourceApp, 65 "Org": cmd.Config.TargetedOrganization().Name, 66 "Space": cmd.Config.TargetedSpace().Name, 67 "User": user.Name, 68 }) 69 policies, warnings, err = cmd.NetworkingActor.NetworkPoliciesBySpaceAndAppName(cmd.Config.TargetedSpace().GUID, cmd.SourceApp) 70 } else { 71 cmd.UI.DisplayTextWithFlavor("Listing network policies in org {{.Org}} / space {{.Space}} as {{.User}}...", map[string]interface{}{ 72 "Org": cmd.Config.TargetedOrganization().Name, 73 "Space": cmd.Config.TargetedSpace().Name, 74 "User": user.Name, 75 }) 76 policies, warnings, err = cmd.NetworkingActor.NetworkPoliciesBySpace(cmd.Config.TargetedSpace().GUID) 77 } 78 79 cmd.UI.DisplayWarnings(warnings) 80 if err != nil { 81 return err 82 } 83 84 cmd.UI.DisplayNewline() 85 86 table := [][]string{ 87 { 88 cmd.UI.TranslateText("source"), 89 cmd.UI.TranslateText("destination"), 90 cmd.UI.TranslateText("protocol"), 91 cmd.UI.TranslateText("ports"), 92 cmd.UI.TranslateText("destination space"), 93 cmd.UI.TranslateText("destination org"), 94 }, 95 } 96 97 for _, policy := range policies { 98 var portEntry string 99 if policy.StartPort == policy.EndPort { 100 portEntry = strconv.Itoa(policy.StartPort) 101 } else { 102 portEntry = fmt.Sprintf("%d-%d", policy.StartPort, policy.EndPort) 103 } 104 table = append(table, []string{ 105 policy.SourceName, 106 policy.DestinationName, 107 policy.Protocol, 108 portEntry, 109 policy.DestinationSpaceName, 110 policy.DestinationOrgName, 111 }) 112 } 113 114 cmd.UI.DisplayTableWithHeader("", table, ui.DefaultTableSpacePadding) 115 116 return nil 117 }