github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v6/remove_network_policy_command.go (about)

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