github.com/nimakaviani/cli@v6.37.1-0.20180619223813-e734901a73fa+incompatible/command/v3/network_policies_command.go (about) 1 package v3 2 3 import ( 4 "fmt" 5 "net/http" 6 "strconv" 7 8 "code.cloudfoundry.org/cli/actor/cfnetworkingaction" 9 "code.cloudfoundry.org/cli/actor/sharedaction" 10 "code.cloudfoundry.org/cli/actor/v3action" 11 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 12 "code.cloudfoundry.org/cli/command" 13 "code.cloudfoundry.org/cli/command/translatableerror" 14 "code.cloudfoundry.org/cli/command/v3/shared" 15 "code.cloudfoundry.org/cli/util/ui" 16 ) 17 18 //go:generate counterfeiter . NetworkPoliciesActor 19 20 type NetworkPoliciesActor interface { 21 NetworkPoliciesBySpaceAndAppName(spaceGUID string, srcAppName string) ([]cfnetworkingaction.Policy, cfnetworkingaction.Warnings, error) 22 NetworkPoliciesBySpace(spaceGUID string) ([]cfnetworkingaction.Policy, cfnetworkingaction.Warnings, error) 23 } 24 25 type NetworkPoliciesCommand struct { 26 SourceApp string `long:"source" required:"false" description:"Source app to filter results by"` 27 28 usage interface{} `usage:"CF_NAME network-policies [--source SOURCE_APP]"` 29 relatedCommands interface{} `related_commands:"add-network-policy, apps, remove-network-policy"` 30 31 UI command.UI 32 Config command.Config 33 SharedActor command.SharedActor 34 Actor NetworkPoliciesActor 35 } 36 37 func (cmd *NetworkPoliciesCommand) 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(client, config, nil, nil) 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 NetworkPoliciesCommand) Execute(args []string) error { 62 err := cmd.SharedActor.CheckTarget(true, true) 63 if err != nil { 64 return err 65 } 66 67 user, err := cmd.Config.CurrentUser() 68 if err != nil { 69 return err 70 } 71 72 var policies []cfnetworkingaction.Policy 73 var warnings cfnetworkingaction.Warnings 74 75 if cmd.SourceApp != "" { 76 cmd.UI.DisplayTextWithFlavor("Listing network policies of app {{.SrcAppName}} in org {{.Org}} / space {{.Space}} as {{.User}}...", map[string]interface{}{ 77 "SrcAppName": cmd.SourceApp, 78 "Org": cmd.Config.TargetedOrganization().Name, 79 "Space": cmd.Config.TargetedSpace().Name, 80 "User": user.Name, 81 }) 82 policies, warnings, err = cmd.Actor.NetworkPoliciesBySpaceAndAppName(cmd.Config.TargetedSpace().GUID, cmd.SourceApp) 83 } else { 84 cmd.UI.DisplayTextWithFlavor("Listing network policies in org {{.Org}} / space {{.Space}} as {{.User}}...", map[string]interface{}{ 85 "Org": cmd.Config.TargetedOrganization().Name, 86 "Space": cmd.Config.TargetedSpace().Name, 87 "User": user.Name, 88 }) 89 policies, warnings, err = cmd.Actor.NetworkPoliciesBySpace(cmd.Config.TargetedSpace().GUID) 90 } 91 92 cmd.UI.DisplayWarnings(warnings) 93 if err != nil { 94 return err 95 } 96 97 cmd.UI.DisplayNewline() 98 99 table := [][]string{ 100 { 101 cmd.UI.TranslateText("source"), 102 cmd.UI.TranslateText("destination"), 103 cmd.UI.TranslateText("protocol"), 104 cmd.UI.TranslateText("ports"), 105 }, 106 } 107 108 for _, policy := range policies { 109 var portEntry string 110 if policy.StartPort == policy.EndPort { 111 portEntry = strconv.Itoa(policy.StartPort) 112 } else { 113 portEntry = fmt.Sprintf("%d-%d", policy.StartPort, policy.EndPort) 114 } 115 table = append(table, []string{ 116 policy.SourceName, 117 policy.DestinationName, 118 policy.Protocol, 119 portEntry, 120 }) 121 } 122 123 cmd.UI.DisplayTableWithHeader("", table, ui.DefaultTableSpacePadding) 124 125 return nil 126 }