fix: Add direct device relationship to BGPAddressFamily for query filtering (#23)
InfraHub does not support multi-hop relationship traversal in GraphQL filters, so `bgp_config__device__name__value` fails at query time. Fix follows the same pattern used for InfraMlagPeerConfig (#22): add a denormalized direct device relationship to the schema node and use it in the query filter. Changes: - infrahub/schemas/bgp.yml: add `device` relationship (kind: Attribute, cardinality: one, optional: false) to BGPAddressFamily as the first relationship, before bgp_config - infrahub/objects/11-bgp-sessions.yml: add `device: ["<device>"]` to all 22 InfraBGPAddressFamily entries (spine1×2, spine2×2, leaf1–8×2 each, plus leaf7 and leaf8 VRF gold AF) - infrahub/transforms/queries/bgp_intent.gql: change filter from `bgp_config__device__name__value` to `device__name__value` Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -512,6 +512,7 @@ spec:
|
|||||||
# Spine1 address families
|
# Spine1 address families
|
||||||
# ============================================================
|
# ============================================================
|
||||||
- bgp_config: ["spine1"]
|
- bgp_config: ["spine1"]
|
||||||
|
device: ["spine1"]
|
||||||
local_identifier: "spine1__ipv4_unicast"
|
local_identifier: "spine1__ipv4_unicast"
|
||||||
afi: ipv4
|
afi: ipv4
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -527,6 +528,7 @@ spec:
|
|||||||
networks:
|
networks:
|
||||||
- ["10.0.250.1/32"]
|
- ["10.0.250.1/32"]
|
||||||
- bgp_config: ["spine1"]
|
- bgp_config: ["spine1"]
|
||||||
|
device: ["spine1"]
|
||||||
local_identifier: "spine1__evpn_unicast"
|
local_identifier: "spine1__evpn_unicast"
|
||||||
afi: evpn
|
afi: evpn
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -536,6 +538,7 @@ spec:
|
|||||||
# Spine2 address families
|
# Spine2 address families
|
||||||
# ============================================================
|
# ============================================================
|
||||||
- bgp_config: ["spine2"]
|
- bgp_config: ["spine2"]
|
||||||
|
device: ["spine2"]
|
||||||
local_identifier: "spine2__ipv4_unicast"
|
local_identifier: "spine2__ipv4_unicast"
|
||||||
afi: ipv4
|
afi: ipv4
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -551,6 +554,7 @@ spec:
|
|||||||
networks:
|
networks:
|
||||||
- ["10.0.250.2/32"]
|
- ["10.0.250.2/32"]
|
||||||
- bgp_config: ["spine2"]
|
- bgp_config: ["spine2"]
|
||||||
|
device: ["spine2"]
|
||||||
local_identifier: "spine2__evpn_unicast"
|
local_identifier: "spine2__evpn_unicast"
|
||||||
afi: evpn
|
afi: evpn
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -560,6 +564,7 @@ spec:
|
|||||||
# Leaf1 address families
|
# Leaf1 address families
|
||||||
# ============================================================
|
# ============================================================
|
||||||
- bgp_config: ["leaf1"]
|
- bgp_config: ["leaf1"]
|
||||||
|
device: ["leaf1"]
|
||||||
local_identifier: "leaf1__ipv4_unicast"
|
local_identifier: "leaf1__ipv4_unicast"
|
||||||
afi: ipv4
|
afi: ipv4
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -570,6 +575,7 @@ spec:
|
|||||||
- ["10.0.250.11/32"]
|
- ["10.0.250.11/32"]
|
||||||
- ["10.0.255.11/32"]
|
- ["10.0.255.11/32"]
|
||||||
- bgp_config: ["leaf1"]
|
- bgp_config: ["leaf1"]
|
||||||
|
device: ["leaf1"]
|
||||||
local_identifier: "leaf1__evpn_unicast"
|
local_identifier: "leaf1__evpn_unicast"
|
||||||
afi: evpn
|
afi: evpn
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -579,6 +585,7 @@ spec:
|
|||||||
# Leaf2 address families
|
# Leaf2 address families
|
||||||
# ============================================================
|
# ============================================================
|
||||||
- bgp_config: ["leaf2"]
|
- bgp_config: ["leaf2"]
|
||||||
|
device: ["leaf2"]
|
||||||
local_identifier: "leaf2__ipv4_unicast"
|
local_identifier: "leaf2__ipv4_unicast"
|
||||||
afi: ipv4
|
afi: ipv4
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -589,6 +596,7 @@ spec:
|
|||||||
- ["10.0.250.12/32"]
|
- ["10.0.250.12/32"]
|
||||||
- ["10.0.255.11/32"]
|
- ["10.0.255.11/32"]
|
||||||
- bgp_config: ["leaf2"]
|
- bgp_config: ["leaf2"]
|
||||||
|
device: ["leaf2"]
|
||||||
local_identifier: "leaf2__evpn_unicast"
|
local_identifier: "leaf2__evpn_unicast"
|
||||||
afi: evpn
|
afi: evpn
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -598,6 +606,7 @@ spec:
|
|||||||
# Leaf3 address families
|
# Leaf3 address families
|
||||||
# ============================================================
|
# ============================================================
|
||||||
- bgp_config: ["leaf3"]
|
- bgp_config: ["leaf3"]
|
||||||
|
device: ["leaf3"]
|
||||||
local_identifier: "leaf3__ipv4_unicast"
|
local_identifier: "leaf3__ipv4_unicast"
|
||||||
afi: ipv4
|
afi: ipv4
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -608,6 +617,7 @@ spec:
|
|||||||
- ["10.0.250.13/32"]
|
- ["10.0.250.13/32"]
|
||||||
- ["10.0.255.12/32"]
|
- ["10.0.255.12/32"]
|
||||||
- bgp_config: ["leaf3"]
|
- bgp_config: ["leaf3"]
|
||||||
|
device: ["leaf3"]
|
||||||
local_identifier: "leaf3__evpn_unicast"
|
local_identifier: "leaf3__evpn_unicast"
|
||||||
afi: evpn
|
afi: evpn
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -617,6 +627,7 @@ spec:
|
|||||||
# Leaf4 address families
|
# Leaf4 address families
|
||||||
# ============================================================
|
# ============================================================
|
||||||
- bgp_config: ["leaf4"]
|
- bgp_config: ["leaf4"]
|
||||||
|
device: ["leaf4"]
|
||||||
local_identifier: "leaf4__ipv4_unicast"
|
local_identifier: "leaf4__ipv4_unicast"
|
||||||
afi: ipv4
|
afi: ipv4
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -627,6 +638,7 @@ spec:
|
|||||||
- ["10.0.250.14/32"]
|
- ["10.0.250.14/32"]
|
||||||
- ["10.0.255.12/32"]
|
- ["10.0.255.12/32"]
|
||||||
- bgp_config: ["leaf4"]
|
- bgp_config: ["leaf4"]
|
||||||
|
device: ["leaf4"]
|
||||||
local_identifier: "leaf4__evpn_unicast"
|
local_identifier: "leaf4__evpn_unicast"
|
||||||
afi: evpn
|
afi: evpn
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -636,6 +648,7 @@ spec:
|
|||||||
# Leaf5 address families
|
# Leaf5 address families
|
||||||
# ============================================================
|
# ============================================================
|
||||||
- bgp_config: ["leaf5"]
|
- bgp_config: ["leaf5"]
|
||||||
|
device: ["leaf5"]
|
||||||
local_identifier: "leaf5__ipv4_unicast"
|
local_identifier: "leaf5__ipv4_unicast"
|
||||||
afi: ipv4
|
afi: ipv4
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -646,6 +659,7 @@ spec:
|
|||||||
- ["10.0.250.15/32"]
|
- ["10.0.250.15/32"]
|
||||||
- ["10.0.255.13/32"]
|
- ["10.0.255.13/32"]
|
||||||
- bgp_config: ["leaf5"]
|
- bgp_config: ["leaf5"]
|
||||||
|
device: ["leaf5"]
|
||||||
local_identifier: "leaf5__evpn_unicast"
|
local_identifier: "leaf5__evpn_unicast"
|
||||||
afi: evpn
|
afi: evpn
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -655,6 +669,7 @@ spec:
|
|||||||
# Leaf6 address families
|
# Leaf6 address families
|
||||||
# ============================================================
|
# ============================================================
|
||||||
- bgp_config: ["leaf6"]
|
- bgp_config: ["leaf6"]
|
||||||
|
device: ["leaf6"]
|
||||||
local_identifier: "leaf6__ipv4_unicast"
|
local_identifier: "leaf6__ipv4_unicast"
|
||||||
afi: ipv4
|
afi: ipv4
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -665,6 +680,7 @@ spec:
|
|||||||
- ["10.0.250.16/32"]
|
- ["10.0.250.16/32"]
|
||||||
- ["10.0.255.13/32"]
|
- ["10.0.255.13/32"]
|
||||||
- bgp_config: ["leaf6"]
|
- bgp_config: ["leaf6"]
|
||||||
|
device: ["leaf6"]
|
||||||
local_identifier: "leaf6__evpn_unicast"
|
local_identifier: "leaf6__evpn_unicast"
|
||||||
afi: evpn
|
afi: evpn
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -674,6 +690,7 @@ spec:
|
|||||||
# Leaf7 address families
|
# Leaf7 address families
|
||||||
# ============================================================
|
# ============================================================
|
||||||
- bgp_config: ["leaf7"]
|
- bgp_config: ["leaf7"]
|
||||||
|
device: ["leaf7"]
|
||||||
local_identifier: "leaf7__ipv4_unicast"
|
local_identifier: "leaf7__ipv4_unicast"
|
||||||
afi: ipv4
|
afi: ipv4
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -684,6 +701,7 @@ spec:
|
|||||||
- ["10.0.250.17/32"]
|
- ["10.0.250.17/32"]
|
||||||
- ["10.0.255.14/32"]
|
- ["10.0.255.14/32"]
|
||||||
- bgp_config: ["leaf7"]
|
- bgp_config: ["leaf7"]
|
||||||
|
device: ["leaf7"]
|
||||||
local_identifier: "leaf7__evpn_unicast"
|
local_identifier: "leaf7__evpn_unicast"
|
||||||
afi: evpn
|
afi: evpn
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -691,6 +709,7 @@ spec:
|
|||||||
- ["leaf7__evpn"]
|
- ["leaf7__evpn"]
|
||||||
# Leaf7 IPv4 unicast in VRF gold (border peering)
|
# Leaf7 IPv4 unicast in VRF gold (border peering)
|
||||||
- bgp_config: ["leaf7"]
|
- bgp_config: ["leaf7"]
|
||||||
|
device: ["leaf7"]
|
||||||
local_identifier: "leaf7__vrf_gold__ipv4_unicast"
|
local_identifier: "leaf7__vrf_gold__ipv4_unicast"
|
||||||
afi: ipv4
|
afi: ipv4
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -701,6 +720,7 @@ spec:
|
|||||||
# Leaf8 address families
|
# Leaf8 address families
|
||||||
# ============================================================
|
# ============================================================
|
||||||
- bgp_config: ["leaf8"]
|
- bgp_config: ["leaf8"]
|
||||||
|
device: ["leaf8"]
|
||||||
local_identifier: "leaf8__ipv4_unicast"
|
local_identifier: "leaf8__ipv4_unicast"
|
||||||
afi: ipv4
|
afi: ipv4
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -711,6 +731,7 @@ spec:
|
|||||||
- ["10.0.250.18/32"]
|
- ["10.0.250.18/32"]
|
||||||
- ["10.0.255.14/32"]
|
- ["10.0.255.14/32"]
|
||||||
- bgp_config: ["leaf8"]
|
- bgp_config: ["leaf8"]
|
||||||
|
device: ["leaf8"]
|
||||||
local_identifier: "leaf8__evpn_unicast"
|
local_identifier: "leaf8__evpn_unicast"
|
||||||
afi: evpn
|
afi: evpn
|
||||||
safi: unicast
|
safi: unicast
|
||||||
@@ -718,6 +739,7 @@ spec:
|
|||||||
- ["leaf8__evpn"]
|
- ["leaf8__evpn"]
|
||||||
# Leaf8 IPv4 unicast in VRF gold (border peering)
|
# Leaf8 IPv4 unicast in VRF gold (border peering)
|
||||||
- bgp_config: ["leaf8"]
|
- bgp_config: ["leaf8"]
|
||||||
|
device: ["leaf8"]
|
||||||
local_identifier: "leaf8__vrf_gold__ipv4_unicast"
|
local_identifier: "leaf8__vrf_gold__ipv4_unicast"
|
||||||
afi: ipv4
|
afi: ipv4
|
||||||
safi: unicast
|
safi: unicast
|
||||||
|
|||||||
@@ -264,6 +264,12 @@ nodes:
|
|||||||
label: Multicast
|
label: Multicast
|
||||||
description: Sub Address Family Identifier
|
description: Sub Address Family Identifier
|
||||||
relationships:
|
relationships:
|
||||||
|
- name: device
|
||||||
|
peer: InfraDevice
|
||||||
|
cardinality: one
|
||||||
|
kind: Attribute
|
||||||
|
optional: false
|
||||||
|
description: Device this address family belongs to (denormalized for query filtering)
|
||||||
- name: bgp_config
|
- name: bgp_config
|
||||||
peer: InfraBGPRouterConfig
|
peer: InfraBGPRouterConfig
|
||||||
cardinality: one
|
cardinality: one
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ query BgpIntent($device_name: String!) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
InfraBGPAddressFamily(bgp_config__device__name__value: $device_name) {
|
InfraBGPAddressFamily(device__name__value: $device_name) {
|
||||||
edges {
|
edges {
|
||||||
node {
|
node {
|
||||||
afi { value }
|
afi { value }
|
||||||
|
|||||||
Reference in New Issue
Block a user