Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NET-1962: add gateway subcommand. #3339

Open
wants to merge 2 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions cli/cmd/gateway/create.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package gateway

import (
"github.com/gravitl/netmaker/cli/functions"
"github.com/gravitl/netmaker/models"
"github.com/spf13/cobra"
"strings"
)

var externalClientDNS string
var isInternetGateway bool
var metadata string
var persistentKeepAlive uint
var mtu uint

var gatewayCreateCmd = &cobra.Command{
Use: "create [NETWORK NAME] [NODE ID] [RELAYED NODES ID (comma separated)]",
Args: cobra.ExactArgs(3),
Short: "Create a new Gateway on a Netmaker network.",
Long: `
Configures a node as a gateway in a specified network, allowing it to relay traffic for other nodes. The gateway can also function as an internet gateway if specified.

Arguments:
NETWORK NAME: The name of the network where the gateway will be created.
NODE ID: The ID of the node to be configured as a gateway.
RELAYED NODES ID: A comma-separated list of node IDs that will be relayed through this gateway.
`,
Run: func(cmd *cobra.Command, args []string) {
functions.PrettyPrint(
functions.CreateGateway(
models.IngressRequest{
ExtclientDNS: externalClientDNS,
IsInternetGateway: isInternetGateway,
Metadata: metadata,
PersistentKeepalive: int32(persistentKeepAlive),
MTU: int32(mtu),
},
models.RelayRequest{
NodeID: args[0],
NetID: args[1],
RelayedNodes: strings.Split(args[2], ","),
},
),
)
},
}

func init() {
gatewayCreateCmd.Flags().StringVarP(&externalClientDNS, "dns", "d", "", "the IP address of the DNS server to be used by external clients")
gatewayCreateCmd.Flags().BoolVarP(&isInternetGateway, "internet", "i", false, "if set, the gateway will route traffic to the internet")
gatewayCreateCmd.Flags().StringVarP(&metadata, "note", "n", "", "description or metadata to be associated with the gateway")
gatewayCreateCmd.Flags().UintVarP(&persistentKeepAlive, "keep-alive", "k", 20, "the keep-alive interval (in seconds) for maintaining persistent connections")
gatewayCreateCmd.Flags().UintVarP(&mtu, "mtu", "m", 1420, "the maximum transmission unit (MTU) size in bytes")
rootCmd.AddCommand(gatewayCreateCmd)
}
27 changes: 27 additions & 0 deletions cli/cmd/gateway/delete.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package gateway

import (
"github.com/gravitl/netmaker/cli/functions"
"github.com/spf13/cobra"
)

var gatewayDeleteCmd = &cobra.Command{
Use: "delete [NETWORK NAME] [NODE ID]",
Args: cobra.ExactArgs(2),
Short: "Delete a Gateway.",
Long: `
Removes the gateway configuration from a node in a specified network. The node itself remains, but it will no longer function as a gateway.

Arguments:
NETWORK NAME: The name of the network from which the gateway configuration should be removed.
NODE ID: The ID of the node that is currently acting as a gateway.
`,
Aliases: []string{"rm"},
Run: func(cmd *cobra.Command, args []string) {
functions.PrettyPrint(functions.DeleteGateway(args[0], args[1]))
},
}

func init() {
rootCmd.AddCommand(gatewayDeleteCmd)
}
18 changes: 18 additions & 0 deletions cli/cmd/gateway/root.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package gateway

import (
"github.com/spf13/cobra"
)

// rootCmd represents the base command when called without any subcommands.
var rootCmd = &cobra.Command{
Use: "gateway",
Short: "Manage Gateways.",
Long: `Manage Gateways.`,
Aliases: []string{"gw"},
}

// GetRoot returns the root subcommand.
func GetRoot() *cobra.Command {
return rootCmd
}
11 changes: 6 additions & 5 deletions cli/cmd/node/create_ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import (
)

var nodeCreateIngressCmd = &cobra.Command{
Use: "create_remote_access_gateway [NETWORK NAME] [NODE ID]",
Args: cobra.ExactArgs(2),
Short: "Turn a Node into a Remote Access Gateway (Ingress)",
Long: `Turn a Node into a Remote Access Gateway (Ingress) for a Network.`,
Aliases: []string{"create_rag"},
Use: "create_remote_access_gateway [NETWORK NAME] [NODE ID]",
Args: cobra.ExactArgs(2),
Short: "Turn a Node into a Remote Access Gateway (Ingress)",
Long: `Turn a Node into a Remote Access Gateway (Ingress) for a Network.`,
Deprecated: "in favour of the `gateway` subcommand.",
Aliases: []string{"create_rag"},
Run: func(cmd *cobra.Command, args []string) {
functions.PrettyPrint(functions.CreateIngress(args[0], args[1], failover))
},
Expand Down
9 changes: 5 additions & 4 deletions cli/cmd/node/create_relay.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ import (
)

var hostCreateRelayCmd = &cobra.Command{
Use: "create_relay [NETWORK][NODE ID] [RELAYED NODE IDS (comma separated)]",
Args: cobra.ExactArgs(3),
Short: "Turn a Node into a Relay",
Long: `Turn a Node into a Relay`,
Use: "create_relay [NETWORK][NODE ID] [RELAYED NODE IDS (comma separated)]",
Args: cobra.ExactArgs(3),
Short: "Turn a Node into a Relay",
Long: `Turn a Node into a Relay`,
Deprecated: "in favour of the `gateway` subcommand.",
Run: func(cmd *cobra.Command, args []string) {
functions.PrettyPrint(functions.CreateRelay(args[0], args[1], strings.Split(args[2], ",")))
},
Expand Down
11 changes: 6 additions & 5 deletions cli/cmd/node/delete_ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import (
)

var nodeDeleteIngressCmd = &cobra.Command{
Use: "delete_remote_access_gateway [NETWORK NAME] [NODE ID]",
Args: cobra.ExactArgs(2),
Short: "Delete Remote Access Gateway role from a Node",
Long: `Delete Remote Access Gateway role from a Node`,
Aliases: []string{"delete_rag"},
Use: "delete_remote_access_gateway [NETWORK NAME] [NODE ID]",
Args: cobra.ExactArgs(2),
Short: "Delete Remote Access Gateway role from a Node",
Long: `Delete Remote Access Gateway role from a Node`,
Deprecated: "in favour of the `gateway` subcommand.",
Aliases: []string{"delete_rag"},
Run: func(cmd *cobra.Command, args []string) {
functions.PrettyPrint(functions.DeleteIngress(args[0], args[1]))
},
Expand Down
9 changes: 5 additions & 4 deletions cli/cmd/node/delete_relay.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@ import (
)

var hostDeleteRelayCmd = &cobra.Command{
Use: "delete_relay [NETWORK] [NODE ID]",
Args: cobra.ExactArgs(2),
Short: "Delete Relay from a node",
Long: `Delete Relay from a node`,
Use: "delete_relay [NETWORK] [NODE ID]",
Args: cobra.ExactArgs(2),
Short: "Delete Relay from a node",
Long: `Delete Relay from a node`,
Deprecated: "in favour of the `gateway` subcommand.",
Run: func(cmd *cobra.Command, args []string) {
functions.PrettyPrint(functions.DeleteRelay(args[0], args[1]))
},
Expand Down
2 changes: 2 additions & 0 deletions cli/cmd/root.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package cmd

import (
"github.com/gravitl/netmaker/cli/cmd/gateway"
"os"

"github.com/gravitl/netmaker/cli/cmd/acl"
Expand Down Expand Up @@ -55,4 +56,5 @@ func init() {
rootCmd.AddCommand(host.GetRoot())
rootCmd.AddCommand(enrollment_key.GetRoot())
rootCmd.AddCommand(failover.GetRoot())
rootCmd.AddCommand(gateway.GetRoot())
}
18 changes: 18 additions & 0 deletions cli/functions/gateway.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package functions

import (
"fmt"
"github.com/gravitl/netmaker/models"
"net/http"
)

func CreateGateway(ingressRequest models.IngressRequest, relayRequest models.RelayRequest) *models.ApiNode {
return request[models.ApiNode](http.MethodPost, fmt.Sprintf("/api/nodes/%s/%s/gateway", relayRequest.NetID, relayRequest.NodeID), &models.CreateGwReq{
IngressRequest: ingressRequest,
RelayRequest: relayRequest,
})
}

func DeleteGateway(networkID, nodeID string) *models.ApiNode {
return request[models.ApiNode](http.MethodDelete, fmt.Sprintf("/api/nodes/%s/%s/gateway", networkID, nodeID), nil)
}
Loading