github.com/sleungcy/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  }