feat: Add Infrahub Jinja2 transform for MLAG configuration (#22)
- Add GraphQL query mlag_intent.gql: queries InfraMlagPeerConfig by device name, returning local IP, peer address, heartbeat peer IP, MLAG domain (domain-id, virtual-mac, heartbeat VRF, dual-primary detection settings, peer/iBGP VLANs, peer devices), local interface SVI name, and peer-link LAG name - Add Jinja2 template mlag_yang.j2: renders a JSON object targeting Arista-native YANG path /arista-mlag-augments:mlag/config; returns empty array [] for devices with no MLAG config (spines); all optional relationship accesses guarded with 'is defined and is not none' checks - Update .infrahub.yml: register mlag_intent query and mlag_yang_transform - Add unit test fixtures for leaf1 (full MLAG config) and spine1 (empty response → []) following jinja2-transform-unit-render format Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
96
infrahub/transforms/tests/mlag_yang/leaf1/input.json
Normal file
96
infrahub/transforms/tests/mlag_yang/leaf1/input.json
Normal file
@@ -0,0 +1,96 @@
|
||||
{
|
||||
"data": {
|
||||
"InfraMlagPeerConfig": {
|
||||
"edges": [
|
||||
{
|
||||
"node": {
|
||||
"local_interface_ip": {
|
||||
"value": "10.0.199.254/31"
|
||||
},
|
||||
"peer_address": {
|
||||
"value": "10.0.199.255"
|
||||
},
|
||||
"heartbeat_peer_ip": {
|
||||
"value": "172.16.0.50"
|
||||
},
|
||||
"device": {
|
||||
"node": {
|
||||
"name": {
|
||||
"value": "leaf1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"mlag_domain": {
|
||||
"node": {
|
||||
"domain_id": {
|
||||
"value": "leafs-1-2"
|
||||
},
|
||||
"virtual_mac": {
|
||||
"value": "c001.cafe.babe"
|
||||
},
|
||||
"heartbeat_vrf": {
|
||||
"value": "mgmt"
|
||||
},
|
||||
"dual_primary_detection": {
|
||||
"value": true
|
||||
},
|
||||
"dual_primary_delay": {
|
||||
"value": 10
|
||||
},
|
||||
"dual_primary_action": {
|
||||
"value": "errdisable"
|
||||
},
|
||||
"devices": {
|
||||
"edges": [
|
||||
{
|
||||
"node": {
|
||||
"name": {
|
||||
"value": "leaf1"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"node": {
|
||||
"name": {
|
||||
"value": "leaf2"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"peer_vlan": {
|
||||
"node": {
|
||||
"vlan_id": {
|
||||
"value": 4090
|
||||
}
|
||||
}
|
||||
},
|
||||
"ibgp_vlan": {
|
||||
"node": {
|
||||
"vlan_id": {
|
||||
"value": 4091
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"local_interface": {
|
||||
"node": {
|
||||
"name": {
|
||||
"value": "Vlan4090"
|
||||
}
|
||||
}
|
||||
},
|
||||
"peer_link": {
|
||||
"node": {
|
||||
"name": {
|
||||
"value": "Port-Channel999"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
22
infrahub/transforms/tests/mlag_yang/leaf1/output.json
Normal file
22
infrahub/transforms/tests/mlag_yang/leaf1/output.json
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"mlag": {
|
||||
"config": {
|
||||
"domain-id": "leafs-1-2",
|
||||
"peer-link": "Port-Channel999",
|
||||
"local-interface": "Vlan4090",
|
||||
"peer-address": "10.0.199.255",
|
||||
"shutdown": false
|
||||
},
|
||||
"dual_primary_detection": {
|
||||
"enabled": true,
|
||||
"delay": 10,
|
||||
"action": "errdisable",
|
||||
"heartbeat_peer_ip": "172.16.0.50",
|
||||
"heartbeat_vrf": "mgmt"
|
||||
},
|
||||
"virtual_mac": "c001.cafe.babe",
|
||||
"peer_vlan_id": 4090,
|
||||
"ibgp_vlan_id": 4091,
|
||||
"local_interface_ip": "10.0.199.254/31"
|
||||
}
|
||||
}
|
||||
7
infrahub/transforms/tests/mlag_yang/spine1/input.json
Normal file
7
infrahub/transforms/tests/mlag_yang/spine1/input.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"data": {
|
||||
"InfraMlagPeerConfig": {
|
||||
"edges": []
|
||||
}
|
||||
}
|
||||
}
|
||||
1
infrahub/transforms/tests/mlag_yang/spine1/output.json
Normal file
1
infrahub/transforms/tests/mlag_yang/spine1/output.json
Normal file
@@ -0,0 +1 @@
|
||||
[]
|
||||
21
infrahub/transforms/tests/mlag_yang/test.yml
Normal file
21
infrahub/transforms/tests/mlag_yang/test.yml
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
version: "1.0"
|
||||
infrahub_tests:
|
||||
- resource: Jinja2Transform
|
||||
resource_name: mlag_yang_transform
|
||||
tests:
|
||||
- name: smoke_check
|
||||
spec:
|
||||
kind: jinja2-transform-smoke
|
||||
- name: render_leaf1
|
||||
spec:
|
||||
kind: jinja2-transform-unit-render
|
||||
directory: infrahub/transforms/tests/mlag_yang/leaf1
|
||||
input: input.json
|
||||
output: output.json
|
||||
- name: render_spine1
|
||||
spec:
|
||||
kind: jinja2-transform-unit-render
|
||||
directory: infrahub/transforms/tests/mlag_yang/spine1
|
||||
input: input.json
|
||||
output: output.json
|
||||
Reference in New Issue
Block a user