## Summary Implements Infrahub Jinja2 Transform for VRF/L3VNI configuration, generating structured JSON payloads from Infrahub intent data. Closes #21. ## What's included - **GraphQL query** (`transforms/queries/vrf_intent.gql`): Queries `InfraVRFDeviceAssignment` by device name, fetching VRF details, L3VNI, route targets, and device-specific route distinguisher - **Jinja2 transform** (`transforms/templates/vrf_yang.j2`): Renders VRF config payloads with defensive null handling (lessons learned from #20) - **`.infrahub.yml`** updated with the new query and transform definitions - **Tests** (`transforms/tests/vrf_yang/`) using correct Infrahub pytest format (`jinja2-transform-smoke` + `jinja2-transform-unit-render`) ## Validation All transforms render correctly: | Device | Expected | Result | |--------|----------|--------| | `leaf3` | VRF gold, RD `10.0.250.13:1`, L3VNI 100001 | ✅ | | `leaf7` | VRF gold, RD `10.0.250.17:1`, L3VNI 100001 | ✅ | | `leaf1` | Empty array (no VRF assignment) | ✅ | | `spine1` | Empty array (no VRF assignment) | ✅ | ## Usage ```bash # Local debugging infrahubctl render vrf_yang_transform device_name=leaf3 # API endpoint GET /api/transform/jinja2/vrf_yang_transform?device_name=leaf3 ``` ## Related - Depends on: #20 (base transforms infrastructure, already merged) - Reference: Arista EVPN Type-5 / L3VXLAN configuration from lab topology
This commit was merged in pull request #25.
This commit is contained in:
82
infrahub/transforms/tests/vrf_yang/input.json
Normal file
82
infrahub/transforms/tests/vrf_yang/input.json
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"data": {
|
||||
"InfraVRFDeviceAssignment": {
|
||||
"edges": [
|
||||
{
|
||||
"node": {
|
||||
"route_distinguisher": {
|
||||
"value": "10.0.250.13:1"
|
||||
},
|
||||
"vrf": {
|
||||
"node": {
|
||||
"name": {
|
||||
"value": "gold"
|
||||
},
|
||||
"description": {
|
||||
"value": "VRF gold - L3 VXLAN with symmetric IRB"
|
||||
},
|
||||
"route_distinguisher": {
|
||||
"value": null
|
||||
},
|
||||
"l3vni": {
|
||||
"node": {
|
||||
"vni": {
|
||||
"value": 100001
|
||||
},
|
||||
"vni_type": {
|
||||
"value": "l3vni"
|
||||
}
|
||||
}
|
||||
},
|
||||
"import_targets": {
|
||||
"edges": [
|
||||
{
|
||||
"node": {
|
||||
"target": {
|
||||
"value": "1:100001"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"export_targets": {
|
||||
"edges": [
|
||||
{
|
||||
"node": {
|
||||
"target": {
|
||||
"value": "1:100001"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"import_targets": {
|
||||
"edges": [
|
||||
{
|
||||
"node": {
|
||||
"target": {
|
||||
"value": "1:100001"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"export_targets": {
|
||||
"edges": [
|
||||
{
|
||||
"node": {
|
||||
"target": {
|
||||
"value": "1:100001"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
15
infrahub/transforms/tests/vrf_yang/output.json
Normal file
15
infrahub/transforms/tests/vrf_yang/output.json
Normal file
@@ -0,0 +1,15 @@
|
||||
[
|
||||
{
|
||||
"description": "VRF gold - L3 VXLAN with symmetric IRB",
|
||||
"export_targets": [
|
||||
"1:100001"
|
||||
],
|
||||
"import_targets": [
|
||||
"1:100001"
|
||||
],
|
||||
"l3vni": 100001,
|
||||
"redistribute_connected": true,
|
||||
"route_distinguisher": "10.0.250.13:1",
|
||||
"vrf_name": "gold"
|
||||
}
|
||||
]
|
||||
15
infrahub/transforms/tests/vrf_yang/test.yml
Normal file
15
infrahub/transforms/tests/vrf_yang/test.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
version: "1.0"
|
||||
infrahub_tests:
|
||||
- resource: Jinja2Transform
|
||||
resource_name: vrf_yang_transform
|
||||
tests:
|
||||
- name: smoke_check
|
||||
spec:
|
||||
kind: jinja2-transform-smoke
|
||||
- name: render_leaf3
|
||||
spec:
|
||||
kind: jinja2-transform-unit-render
|
||||
directory: infrahub/transforms/tests/vrf_yang
|
||||
input: input.json
|
||||
output: output.json
|
||||
Reference in New Issue
Block a user