From 063784cbcf3219019516fb9ea86ec48e2f2ce184 Mon Sep 17 00:00:00 2001 From: bcmmbaga Date: Mon, 6 Jan 2025 21:30:21 +0300 Subject: [PATCH] add option to disable network router(s) Signed-off-by: bcmmbaga --- management/server/http/api/openapi.yml | 5 +++++ management/server/http/api/types.gen.go | 6 ++++++ management/server/networks/routers/types/router.go | 7 ++++++- management/server/types/account.go | 4 ++++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/management/server/http/api/openapi.yml b/management/server/http/api/openapi.yml index 55faf7735fd..f53092415bf 100644 --- a/management/server/http/api/openapi.yml +++ b/management/server/http/api/openapi.yml @@ -1398,12 +1398,17 @@ components: description: Indicate if peer should masquerade traffic to this route's prefix type: boolean example: true + enabled: + description: Network router status + type: boolean + example: true required: # Only one property has to be set #- peer #- peer_groups - metric - masquerade + - enabled NetworkRouter: allOf: - type: object diff --git a/management/server/http/api/types.gen.go b/management/server/http/api/types.gen.go index fb051cc1663..943d1b3277a 100644 --- a/management/server/http/api/types.gen.go +++ b/management/server/http/api/types.gen.go @@ -614,6 +614,9 @@ type NetworkResourceType string // NetworkRouter defines model for NetworkRouter. type NetworkRouter struct { + // Enabled Network router status + Enabled bool `json:"enabled"` + // Id Network Router Id Id string `json:"id"` @@ -632,6 +635,9 @@ type NetworkRouter struct { // NetworkRouterRequest defines model for NetworkRouterRequest. type NetworkRouterRequest struct { + // Enabled Network router status + Enabled bool `json:"enabled"` + // Masquerade Indicate if peer should masquerade traffic to this route's prefix Masquerade bool `json:"masquerade"` diff --git a/management/server/networks/routers/types/router.go b/management/server/networks/routers/types/router.go index f37ae0861a0..5158ebb1204 100644 --- a/management/server/networks/routers/types/router.go +++ b/management/server/networks/routers/types/router.go @@ -17,9 +17,10 @@ type NetworkRouter struct { PeerGroups []string `gorm:"serializer:json"` Masquerade bool Metric int + Enabled bool } -func NewNetworkRouter(accountID string, networkID string, peer string, peerGroups []string, masquerade bool, metric int) (*NetworkRouter, error) { +func NewNetworkRouter(accountID string, networkID string, peer string, peerGroups []string, masquerade bool, metric int, enabled bool) (*NetworkRouter, error) { if peer != "" && len(peerGroups) > 0 { return nil, errors.New("peer and peerGroups cannot be set at the same time") } @@ -32,6 +33,7 @@ func NewNetworkRouter(accountID string, networkID string, peer string, peerGroup PeerGroups: peerGroups, Masquerade: masquerade, Metric: metric, + Enabled: enabled, }, nil } @@ -42,6 +44,7 @@ func (n *NetworkRouter) ToAPIResponse() *api.NetworkRouter { PeerGroups: &n.PeerGroups, Masquerade: n.Masquerade, Metric: n.Metric, + Enabled: n.Enabled, } } @@ -56,6 +59,7 @@ func (n *NetworkRouter) FromAPIRequest(req *api.NetworkRouterRequest) { n.Masquerade = req.Masquerade n.Metric = req.Metric + n.Enabled = req.Enabled } func (n *NetworkRouter) Copy() *NetworkRouter { @@ -67,6 +71,7 @@ func (n *NetworkRouter) Copy() *NetworkRouter { PeerGroups: n.PeerGroups, Masquerade: n.Masquerade, Metric: n.Metric, + Enabled: n.Enabled, } } diff --git a/management/server/types/account.go b/management/server/types/account.go index 5bc807162fb..f74d38cb6d4 100644 --- a/management/server/types/account.go +++ b/management/server/types/account.go @@ -1463,6 +1463,10 @@ func (a *Account) GetResourceRoutersMap() map[string]map[string]*routerTypes.Net routers := make(map[string]map[string]*routerTypes.NetworkRouter) for _, router := range a.NetworkRouters { + if !router.Enabled { + continue + } + if routers[router.NetworkID] == nil { routers[router.NetworkID] = make(map[string]*routerTypes.NetworkRouter) }