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