added support for networkrouters

Signed-off-by: Dmitri Dolguikh <dmitri.external@netbird.io>
This commit is contained in:
Dmitri Dolguikh
2026-07-29 18:32:51 +02:00
parent 9dee2d60b9
commit e620c86cd4
3 changed files with 77 additions and 0 deletions

View File

@@ -22,6 +22,9 @@ type NetworkMapDBStore interface {
GetPeers(ctx context.Context, accountId string) ([]nmdata.Peer, error)
GetPolicies(ctx context.Context, accountId string) ([]nmdata.Policy, error)
GetRoutes(ctx context.Context, accountId string) ([]nmdata.Route, error)
GetNameServerGroups(ctx context.Context, accountId string) ([]nmdata.NameServerGroup, error)
GetNetworkResources(ctx context.Context, accountId string) ([]nmdata.NetworkResource, error)
GetNetworkRouters(ctx context.Context, accountId string) ([]nmdata.NetworkRouter, error)
}
type NetworkMapDBStoreImpl struct {

View File

@@ -149,6 +149,28 @@ func TestGetNetworkResources(t *testing.T) {
// )
}
func TestGetNetworkRouters(t *testing.T) {
ctx := context.TODO()
s, err := NewPostgresqlStore(ctx, "postgresql://root:netbird@localhost:5432/netbird")
assert.NoError(t, err)
// err = loadSQL(ctx, s.pool, initDb)
//assert.NoError(t, err)
res, err := s.GetNetworkRouters(ctx, "d29f99jl0ubs73cm8ce0") //"ckd7ee2fic3c73dtendg")
assert.NoError(t, err)
fmt.Print(res)
// assert.Contains(t,
// groups,
// nmdata.Group{Name: "test-group-1", PublicID: "public-id-1", Resources: []nmdata.Resource{{ID: "cui7q2jl0ubs73d8qpi0", Type: "host"}}},
// )
// assert.Contains(t,
// groups,
// nmdata.Group{Name: "All", PublicID: "d9aejspvcsu517nkh4a0", Resources: []nmdata.Resource{{ID: "cui7olrl0ubs73d8qpe0", Type: "subnet"}, {ID: "cui7q2jl0ubs73d8qpi0", Type: "host"}}},
// )
}
func loadSQL(ctx context.Context, pool *pgxpool.Pool, initdb string) error {
queries := strings.Split(string(initdb), ";")

View File

@@ -0,0 +1,52 @@
package networkmap_pgsql
import (
"context"
"database/sql"
"encoding/json"
"reflect"
"github.com/jackc/pgx/v5"
networkmapdb "github.com/netbirdio/netbird/management/internals/network_map_db"
"github.com/netbirdio/netbird/shared/management/networkmap/nmdata"
)
const (
GetNetworkRouterQuery = `
select public_id, peer_groups, masquerade, metric, enabled
from network_routers
where account_id=$1
`
)
func (pg *PgStore) GetNetworkRouters(ctx context.Context, accountId string) ([]nmdata.NetworkRouter, error) {
rows, err := pg.pool.Query(ctx, GetNetworkRouterQuery, accountId)
if err != nil {
return nil, err
}
netrouters, err := pgx.CollectRows(rows, pgx.RowToStructByName[networkrouter])
if err != nil {
return nil, err
}
toret := make([]nmdata.NetworkRouter, 0, len(netrouters))
for _, nrt := range netrouters {
router := nmdata.NetworkRouter{}
err := networkmapdb.FromSqlTypesToSharedTypes(
reflect.ValueOf(&nrt).Elem(), reflect.ValueOf(&router).Elem())
if err != nil {
return nil, err
}
toret = append(toret, router)
}
return toret, nil
}
type networkrouter struct {
PublicID sql.NullString
PeerGroups json.RawMessage
Masquerade sql.NullBool
Metric sql.NullInt64
Enabled sql.NullBool
}