|
@@ -11,6 +11,36 @@ import (
|
|
"github.com/gravitl/netmaker/servercfg"
|
|
"github.com/gravitl/netmaker/servercfg"
|
|
)
|
|
)
|
|
|
|
|
|
|
|
+// GetAllIngresses - gets all the hosts that are ingresses
|
|
|
|
+func GetAllIngresses() ([]models.Node, error) {
|
|
|
|
+ nodes, err := GetAllNodes()
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ ingresses := make([]models.Node, 0)
|
|
|
|
+ for _, node := range nodes {
|
|
|
|
+ if node.IsIngressGateway {
|
|
|
|
+ ingresses = append(ingresses, node)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return ingresses, nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// GetAllEgresses - gets all the hosts that are egresses
|
|
|
|
+func GetAllEgresses() ([]models.Node, error) {
|
|
|
|
+ nodes, err := GetAllNodes()
|
|
|
|
+ if err != nil {
|
|
|
|
+ return nil, err
|
|
|
|
+ }
|
|
|
|
+ egresses := make([]models.Node, 0)
|
|
|
|
+ for _, node := range nodes {
|
|
|
|
+ if node.IsEgressGateway {
|
|
|
|
+ egresses = append(egresses, node)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return egresses, nil
|
|
|
|
+}
|
|
|
|
+
|
|
// CreateEgressGateway - creates an egress gateway
|
|
// CreateEgressGateway - creates an egress gateway
|
|
func CreateEgressGateway(gateway models.EgressGatewayRequest) (models.Node, error) {
|
|
func CreateEgressGateway(gateway models.EgressGatewayRequest) (models.Node, error) {
|
|
node, err := GetNodeByID(gateway.NodeID)
|
|
node, err := GetNodeByID(gateway.NodeID)
|
|
@@ -28,10 +58,13 @@ func CreateEgressGateway(gateway models.EgressGatewayRequest) (models.Node, erro
|
|
return models.Node{}, errors.New("firewall is not supported for egress gateways")
|
|
return models.Node{}, errors.New("firewall is not supported for egress gateways")
|
|
}
|
|
}
|
|
for i := len(gateway.Ranges) - 1; i >= 0; i-- {
|
|
for i := len(gateway.Ranges) - 1; i >= 0; i-- {
|
|
|
|
+ // check if internet gateway IPv4
|
|
|
|
+ if gateway.Ranges[i] == "0.0.0.0/0" && FreeTier {
|
|
|
|
+ return models.Node{}, fmt.Errorf("currently IPv4 internet gateways are not supported on the free tier: %s", gateway.Ranges[i])
|
|
|
|
+ }
|
|
|
|
+ // check if internet gateway IPv6
|
|
if gateway.Ranges[i] == "::/0" {
|
|
if gateway.Ranges[i] == "::/0" {
|
|
- logger.Log(0, "currently IPv6 internet gateways are not supported", gateway.Ranges[i])
|
|
|
|
- gateway.Ranges = append(gateway.Ranges[:i], gateway.Ranges[i+1:]...)
|
|
|
|
- continue
|
|
|
|
|
|
+ return models.Node{}, fmt.Errorf("currently IPv6 internet gateways are not supported: %s", gateway.Ranges[i])
|
|
}
|
|
}
|
|
normalized, err := NormalizeCIDR(gateway.Ranges[i])
|
|
normalized, err := NormalizeCIDR(gateway.Ranges[i])
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -150,15 +183,6 @@ func DeleteIngressGateway(nodeid string) (models.Node, bool, []models.ExtClient,
|
|
node.IsIngressGateway = false
|
|
node.IsIngressGateway = false
|
|
node.IngressGatewayRange = ""
|
|
node.IngressGatewayRange = ""
|
|
node.Failover = false
|
|
node.Failover = false
|
|
-
|
|
|
|
- //logger.Log(3, "deleting ingress gateway firewall in use is '", host.FirewallInUse, "' and isEgressGateway is", node.IsEgressGateway)
|
|
|
|
- if node.EgressGatewayRequest.NodeID != "" {
|
|
|
|
- _, err := CreateEgressGateway(node.EgressGatewayRequest)
|
|
|
|
- if err != nil {
|
|
|
|
- logger.Log(0, fmt.Sprintf("failed to create egress gateway on node [%s] on network [%s]: %v",
|
|
|
|
- node.EgressGatewayRequest.NodeID, node.EgressGatewayRequest.NetID, err))
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
err = UpsertNode(&node)
|
|
err = UpsertNode(&node)
|
|
if err != nil {
|
|
if err != nil {
|
|
return models.Node{}, wasFailover, removedClients, err
|
|
return models.Node{}, wasFailover, removedClients, err
|