Demo-dc-fabric
This repository demos key Infrahub features using an example data center running VxLAN / EVPN and firewalls. It demonstrates the capabilities to use Infrahub with Arista AVD and Containerlab. Infrahub generates configurations that AVD deploys to a Containerlab topology.
Running the demo
Clone the repository
Clone the GitHub repository to the server you will run this demo on:
git clone https://github.com/opsmill/infrahub-demo-dc-fabric.git
Requirements
Please ensure you have installed the Infrahub docker-compose requirements.
Set environmental variables
export INFRAHUB_ADDRESS="http://localhost:8000"
export INFRAHUB_API_TOKEN="06438eb2-8019-4776-878c-0941b1f1d1ec"
export CEOS_DOCKER_IMAGE="registry.opsmill.io/external/ceos-image:4.29.0.2F"
export LINUX_HOST_DOCKER_IMAGE="registry.opsmill.io/external/alpine-host:v3.1.1"
Install the Infrahub SDK
Our demos use poetry to manage the Python environment.
poetry install --no-interaction --no-ansi --no-root
Start Infrahub
poetry run invoke start
Load schema and data into Infrahub
The invoke
command will create:
- Basic data (Account, organization, ASN, Device Type, and Tags)
- Location data (Locations, VLANs, and Prefixes)
- Topology data (Topology, Topology Elements)
- Security data (Policies, rules, objects)
poetry run invoke load-schema load-data
Demo flow
1. Add the repository into Infrahub via GraphQL
[!NOTE] Reference the Infrahub documentation for the multiple ways this can be done.
mutation AddRepository{
CoreReadOnlyRepositoryCreate(
data: {
name: { value: "infrahub-demo-dc-fabric" }
location: { value: "https://github.com/opsmill/infrahub-demo-dc-fabric.git" }
}
) {
ok
object {
id
}
}
}
2. Generate a topology (devices, interfaces, cabling, BGP sessions, ...)
[!NOTE] The example below creates the topology fra05-pod1
poetry run infrahubctl run bootstrap/generate_topology.py topology=fra05-pod1
3. Generate a network service in a Topology
[!NOTE] The example below creates the Layer2 network service and a another Layer3 on topology fra05-pod1
poetry run infrahubctl run generators/generate_network-services.py topology=fra05-pod1 type=layer2
poetry run infrahubctl run generators/generate_network-services.py topology=fra05-pod1 type=layer3 vrf=production
4. Render artifacts
Artifact Generation is not currently present in the UI but it's possible to try it out locally :
[!NOTE] This command will render the artifact define with
device_arista
Transformation, forfra05-pod1-leaf1
device
poetry run infrahubctl render device_arista device=fra05-pod1-leaf1
5. Try out our pytest plugin
[!NOTE] The command will use our Infrahub pytest plugin. It will run the different test in the
tests
folder. Those tests included :
- Syntax checks for all the GraphQL Queries
- Syntax checks for the Checks
- Syntax checks for all the jinja files used in
templates
- will use the input/output file to try out the rendering and confirm there is no unexpected missing piece
pytest -v ./tests
6. Create a new Branch
Create directly a new branch test
in the UI, or if you prefer to use our SDK in CLI :
poetry run infrahubctl branch create test
7. Create new network services and regenerate artifacts in your branch
[!NOTE] You will be able to see the Diff in the Branch not only about the Data but about the Artifact as well You can go back in time to see the Diff on the branch before you create the new services (you can do it
main
after merging the proposed changes too)
8. Create a proposed change
Using your new branch test
you will be able to see the Diff in the Proposed Change and you will see the checks / tests in the CI pipeline
9. Try out the topology check
-
Modify an Elements in a Topology (example: increase or decrease the quantity of leaf switches in fra05-pod1)
-
The checks will run in the
Proposed Changes
->check_device_topology
will fail.
10. Deploy your environment to Containerlab
The Containerlab generator automatically generates a Containerlab topology artifact for every topology. Every device has its startup configuration as an artifact.
# Download all artifacts automatically to ./generated-configs/
poetry run python3 scripts/get_configs.py
# Start Containerlab
sudo -E containerlab deploy -t ./generated-configs/clab/fra05-pod1.yml --reconfigure