mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-06 01:07:41 +08:00
NET-1962: add gateway subcommand. (#3339)
* feat(go): add deprecation warning. * feat(go): add support for gateway commands. * feat(go): mention the server version in which the commands were deprecated.
This commit is contained in:
55
cli/cmd/gateway/create.go
Normal file
55
cli/cmd/gateway/create.go
Normal file
@@ -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
cli/cmd/gateway/delete.go
Normal file
27
cli/cmd/gateway/delete.go
Normal file
@@ -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
cli/cmd/gateway/root.go
Normal file
18
cli/cmd/gateway/root.go
Normal file
@@ -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
|
||||||
|
}
|
@@ -6,11 +6,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var nodeCreateIngressCmd = &cobra.Command{
|
var nodeCreateIngressCmd = &cobra.Command{
|
||||||
Use: "create_remote_access_gateway [NETWORK NAME] [NODE ID]",
|
Use: "create_remote_access_gateway [NETWORK NAME] [NODE ID]",
|
||||||
Args: cobra.ExactArgs(2),
|
Args: cobra.ExactArgs(2),
|
||||||
Short: "Turn a Node into a Remote Access Gateway (Ingress)",
|
Short: "Turn a Node into a Remote Access Gateway (Ingress)",
|
||||||
Long: `Turn a Node into a Remote Access Gateway (Ingress) for a Network.`,
|
Long: `Turn a Node into a Remote Access Gateway (Ingress) for a Network.`,
|
||||||
Aliases: []string{"create_rag"},
|
Deprecated: "in favour of the `gateway` subcommand, in Netmaker v0.90.0.",
|
||||||
|
Aliases: []string{"create_rag"},
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
functions.PrettyPrint(functions.CreateIngress(args[0], args[1], failover))
|
functions.PrettyPrint(functions.CreateIngress(args[0], args[1], failover))
|
||||||
},
|
},
|
||||||
|
@@ -8,10 +8,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var hostCreateRelayCmd = &cobra.Command{
|
var hostCreateRelayCmd = &cobra.Command{
|
||||||
Use: "create_relay [NETWORK][NODE ID] [RELAYED NODE IDS (comma separated)]",
|
Use: "create_relay [NETWORK][NODE ID] [RELAYED NODE IDS (comma separated)]",
|
||||||
Args: cobra.ExactArgs(3),
|
Args: cobra.ExactArgs(3),
|
||||||
Short: "Turn a Node into a Relay",
|
Short: "Turn a Node into a Relay",
|
||||||
Long: `Turn a Node into a Relay`,
|
Long: `Turn a Node into a Relay`,
|
||||||
|
Deprecated: "in favour of the `gateway` subcommand, in Netmaker v0.90.0.",
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
functions.PrettyPrint(functions.CreateRelay(args[0], args[1], strings.Split(args[2], ",")))
|
functions.PrettyPrint(functions.CreateRelay(args[0], args[1], strings.Split(args[2], ",")))
|
||||||
},
|
},
|
||||||
|
@@ -6,11 +6,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var nodeDeleteIngressCmd = &cobra.Command{
|
var nodeDeleteIngressCmd = &cobra.Command{
|
||||||
Use: "delete_remote_access_gateway [NETWORK NAME] [NODE ID]",
|
Use: "delete_remote_access_gateway [NETWORK NAME] [NODE ID]",
|
||||||
Args: cobra.ExactArgs(2),
|
Args: cobra.ExactArgs(2),
|
||||||
Short: "Delete Remote Access Gateway role from a Node",
|
Short: "Delete Remote Access Gateway role from a Node",
|
||||||
Long: `Delete Remote Access Gateway role from a Node`,
|
Long: `Delete Remote Access Gateway role from a Node`,
|
||||||
Aliases: []string{"delete_rag"},
|
Deprecated: "in favour of the `gateway` subcommand, in Netmaker v0.90.0.",
|
||||||
|
Aliases: []string{"delete_rag"},
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
functions.PrettyPrint(functions.DeleteIngress(args[0], args[1]))
|
functions.PrettyPrint(functions.DeleteIngress(args[0], args[1]))
|
||||||
},
|
},
|
||||||
|
@@ -6,10 +6,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var hostDeleteRelayCmd = &cobra.Command{
|
var hostDeleteRelayCmd = &cobra.Command{
|
||||||
Use: "delete_relay [NETWORK] [NODE ID]",
|
Use: "delete_relay [NETWORK] [NODE ID]",
|
||||||
Args: cobra.ExactArgs(2),
|
Args: cobra.ExactArgs(2),
|
||||||
Short: "Delete Relay from a node",
|
Short: "Delete Relay from a node",
|
||||||
Long: `Delete Relay from a node`,
|
Long: `Delete Relay from a node`,
|
||||||
|
Deprecated: "in favour of the `gateway` subcommand, in Netmaker v0.90.0.",
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
functions.PrettyPrint(functions.DeleteRelay(args[0], args[1]))
|
functions.PrettyPrint(functions.DeleteRelay(args[0], args[1]))
|
||||||
},
|
},
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/gravitl/netmaker/cli/cmd/gateway"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/gravitl/netmaker/cli/cmd/acl"
|
"github.com/gravitl/netmaker/cli/cmd/acl"
|
||||||
@@ -55,4 +56,5 @@ func init() {
|
|||||||
rootCmd.AddCommand(host.GetRoot())
|
rootCmd.AddCommand(host.GetRoot())
|
||||||
rootCmd.AddCommand(enrollment_key.GetRoot())
|
rootCmd.AddCommand(enrollment_key.GetRoot())
|
||||||
rootCmd.AddCommand(failover.GetRoot())
|
rootCmd.AddCommand(failover.GetRoot())
|
||||||
|
rootCmd.AddCommand(gateway.GetRoot())
|
||||||
}
|
}
|
||||||
|
18
cli/functions/gateway.go
Normal file
18
cli/functions/gateway.go
Normal file
@@ -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)
|
||||||
|
}
|
Reference in New Issue
Block a user