# Infrahub by OpsMill - Documentation > Infrahub by OpsMill - the modern infrastructure data management platform. Infrahub is the open-source product built by OpsMill (https://opsmill.com). - [Infrahub by OpsMill - Documentation](/index.md) ## search - [Search the documentation](/search.md) ## ansible Collection version 1.8.1 - [opsmill.infrahub Ansible collection](/ansible.md): Collection version 1.8.1 ### guides - [Manage branches in Infrahub](/ansible/guides/branch.md): Infrahub lets you manage branches directly via the opsmill.infrahub.branch module. With this module you can create, confirm, and delete branches—using the state parameter to control the desired operation. - [Use Infrahub for Ansible dynamic inventory](/ansible/guides/dynamic-inventory.md): Overview - [Install opsmill.infrahub Ansible collection](/ansible/guides/installation.md): This guide assumes you have basic knowledge of Ansible and its ecosystem. For more information on using Ansible, please refer to the official Ansible documentation. - [Create nodes in Infrahub](/ansible/guides/node.md): Overview - [Retrieve data from Infrahub](/ansible/guides/query-and-lookup.md): Overview ### references - [Modules modules](/ansible/references/plugins/artifact_fetch_module.md): Fetch the content of an artifact from Infrahub - [Modules modules](/ansible/references/plugins/artifact_generate_module.md): Trigger artifact regeneration in Infrahub - [Modules modules](/ansible/references/plugins/branch_module.md): Creates, Updates or Deletes a branch in Infrahub - [Inventory inventory](/ansible/references/plugins/inventory_inventory.md): Infrahub inventory source (using GraphQL) - [Lookup lookup](/ansible/references/plugins/lookup_lookup.md): Queries and returns elements from Infrahub (using GraphQL) - [Modules modules](/ansible/references/plugins/node_module.md): Creates, Updates or Deletes a node in Infrahub - [Modules modules](/ansible/references/plugins/object_file_fetch_module.md): Fetch file content from a CoreFileObject node in Infrahub - [Modules modules](/ansible/references/plugins/query_graphql_module.md): Queries and returns elements from Infrahub GraphQL API - [Modules modules](/ansible/references/plugins/schema_module.md): Load, check, or export schemas in Infrahub - [Overview](/ansible/references/roles/install.md): The Infrahub Installation Role in the OpsMill Infrahub Ansible Collection allows you to install and configure Infrahub using Docker and systemd. ## backup Overview - [Infrahub Backup](/backup.md): Overview ### guides - [How to backup your Infrahub instance](/backup/guides/backup-instance.md): This guide walks you through creating a comprehensive backup of your Infrahub instance. If you need to protect your data, prepare for upgrades, or establish disaster recovery procedures, follow these steps to create reliable backups. - [How to install Infrahub Backup](/backup/guides/install.md): This guide shows you how to install Infrahub Backup on your system. - [How to backup Infrahub on Kubernetes](/backup/guides/kubernetes-backup.md): This guide walks you through backing up your Infrahub instance running on Kubernetes using the infrahub-backup Helm chart. If you deploy Infrahub through GitOps tools like ArgoCD or Flux and don't have direct kubectl access, this approach lets you manage backups declaratively through Helm values. - [How to restore Infrahub on Kubernetes](/backup/guides/kubernetes-restore.md): This guide walks you through restoring your Infrahub instance on Kubernetes from a backup stored in S3-compatible storage. The restore process uses the same infrahub-backup Helm chart and runs as a Kubernetes Job. - [How to restore from backup](/backup/guides/restore-backup.md): This guide shows you how to restore your Infrahub instance from a backup file. If you need to recover from data loss, roll back changes, or migrate to new infrastructure, follow these steps to safely restore your system. ### reference - [CLI command reference](/backup/reference/commands.md): Complete reference for Infrahub Backup commands, flags, and options. - [Configuration reference](/backup/reference/configuration.md): Complete reference for configuring Infrahub Backup through environment variables and runtime flags. ### tutorials - [Getting Started with Infrahub Backup](/backup/tutorials/getting-started.md): This tutorial walks you through your first experience with Infrahub Backup, teaching you the fundamentals by creating a backup of your Infrahub instance and then restoring it. By the end of this tutorial, you'll understand the basic workflow and be confident in using infrahub-backup for essential maintenance tasks. ## demo-dc Welcome to the Infrahub demo-dc example. This repository showcases how Infrahub serves as an infrastructure data management platform for managing modern network infrastructure with design-driven automation. It demonstrates Infrahub's core capabilities including: - [Infrahub demo-dc example](/demo-dc.md): Welcome to the Infrahub demo-dc example. This repository showcases how Infrahub serves as an infrastructure data management platform for managing modern network infrastructure with design-driven automation. It demonstrates Infrahub's core capabilities including: ### cloud-management This tutorial shows an example of cloud resource management schema, which provides a vendor-agnostic way to model cloud infrastructure across AWS, GCP, and Azure. You'll load sample cloud data and explore how Infrahub can serve as a unified inventory for multi-cloud environments. - [Cloud resource management](/demo-dc/cloud-management.md): This tutorial shows an example of cloud resource management schema, which provides a vendor-agnostic way to model cloud infrastructure across AWS, GCP, and Azure. You'll load sample cloud data and explore how Infrahub can serve as a unified inventory for multi-cloud environments. ### concepts This document explains the architectural patterns, design decisions, and core Infrahub concepts demonstrated in this demo. Read this to understand the "why" behind design-driven automation, composable topologies, generators, and the overall approach to infrastructure management. - [Understanding the concepts](/demo-dc/concepts.md): This document explains the architectural patterns, design decisions, and core Infrahub concepts demonstrated in this demo. Read this to understand the "why" behind design-driven automation, composable topologies, generators, and the overall approach to infrastructure management. ### containerlab-deployment This tutorial walks you through deploying a virtual data center topology using Containerlab. You'll take the configurations generated by Infrahub and spin up a fully functional network lab with Arista cEOS virtual switches. - [Deploy a virtual lab with Containerlab](/demo-dc/containerlab-deployment.md): This tutorial walks you through deploying a virtual data center topology using Containerlab. You'll take the configurations generated by Infrahub and spin up a fully functional network lab with Arista cEOS virtual switches. ### developer-guide This guide provides a technical deep-dive into how the Infrahub demo works under the hood. Use this when you want to extend functionality, troubleshoot issues, customize the demo, or understand implementation details. - [Developer guide](/demo-dc/developer-guide.md): This guide provides a technical deep-dive into how the Infrahub demo works under the hood. Use this when you want to extend functionality, troubleshoot issues, customize the demo, or understand implementation details. ### enterprise This guide explains how to configure the demo environment to use Infrahub Enterprise edition instead of the Community edition. Enterprise edition provides additional features including increased performance, enhanced security, and enterprise support. - [Using Infrahub Enterprise](/demo-dc/enterprise.md): This guide explains how to configure the demo environment to use Infrahub Enterprise edition instead of the Community edition. Enterprise edition provides additional features including increased performance, enhanced security, and enterprise support. ### install This guide walks you through setting up the Infrahub demo environment on your local system. By the end, you'll have a fully functional Infrahub instance with pre-loaded schemas, data, and generators ready to explore. - [Installation guide](/demo-dc/install.md): This guide walks you through setting up the Infrahub demo environment on your local system. By the end, you'll have a fully functional Infrahub instance with pre-loaded schemas, data, and generators ready to explore. ### security-management This tutorial walks you through Infrahub's security management capabilities. You'll explore how security policies are modeled as structured data, how they relate to firewalls, and how Infrahub transforms security policy objects into vendor-specific firewall configurations. - [Working with security management](/demo-dc/security-management.md): This tutorial walks you through Infrahub's security management capabilities. You'll explore how security policies are modeled as structured data, how they relate to firewalls, and how Infrahub transforms security policy objects into vendor-specific firewall configurations. ### service-catalog This tutorial walks you through using Infrahub's Service Catalog web interface to manage data center and colocation center deployments. The Service Catalog provides a user-friendly web application built with Streamlit that simplifies infrastructure provisioning by automating branch creation, data loading, and generator execution. - [Using the service catalog](/demo-dc/service-catalog.md): This tutorial walks you through using Infrahub's Service Catalog web interface to manage data center and colocation center deployments. The Service Catalog provides a user-friendly web application built with Streamlit that simplifies infrastructure provisioning by automating branch creation, data loading, and generator execution. ### user-walkthrough This tutorial guides you through the complete workflow of creating a data center topology using Infrahub's design-driven automation. You'll create a new branch, load a topology design, run a generator to create infrastructure, review the changes, and merge them to the main branch. - [User walkthrough](/demo-dc/user-walkthrough.md): This tutorial guides you through the complete workflow of creating a data center topology using Infrahub's design-driven automation. You'll create a new branch, load a topology design, run a generator to create infrastructure, review the changes, and merge them to the main branch. ## demo-service-catalog A proof of concept for a service catalog using Infrahub and Streamlit. - [Home](/demo-service-catalog.md): A proof of concept for a service catalog using Infrahub and Streamlit. ### getting-started - [Developer Walkthrough](/demo-service-catalog/getting-started/developer-walkthrough.md): A step-by-step guide to running the demo from a developer perspective. - [How to Install the Service Catalog Demo](/demo-service-catalog/getting-started/installation.md): Set up the Service Catalog demo environment with Infrahub and Streamlit to enable self-service network provisioning. - [How to Use the Service Catalog Demo](/demo-service-catalog/getting-started/user-walkthrough.md): Experience the complete service delivery workflow from request to provisioning using both the Service Catalog portal and Infrahub interface. ## emma Emma is an experimental AI-powered assistant designed to help you interact with Infrahub, OpsMill's next-generation infrastructure management platform. Emma helps you manage infrastructure schemas and data through an intuitive web interface. - [Welcome to Emma](/emma.md): Emma is an experimental AI-powered assistant designed to help you interact with Infrahub, OpsMill's next-generation infrastructure management platform. Emma helps you manage infrastructure schemas and data through an intuitive web interface. ### features - [Data Import and Export](/emma/features/data-import-export.md): Emma provides powerful tools for importing data into Infrahub from CSV files and exporting Infrahub data back to CSV format. This enables efficient migration from existing systems and data sharing between tools. - [AI Schema Builder](/emma/features/schema-builder.md): Emma's Schema Builder is an AI-powered tool that helps you create Infrahub schemas using natural language descriptions. Instead of manually writing YAML schema definitions, you can describe what you need and let Emma's AI assistant generate the appropriate schema structure. - [Schema Management](/emma/features/schema-management.md): Emma provides comprehensive tools for managing Infrahub schemas throughout their lifecycle. From loading and visualizing schemas to organizing them in libraries, Emma makes schema management accessible and efficient. ### getting-started - [Configuration](/emma/getting-started/configuration.md): Emma connects to Infrahub using standard environment variables and configuration options. This guide covers all the ways to configure Emma for your environment. - [First Steps](/emma/getting-started/first-steps.md): Welcome to Emma! This guide will walk you through your first experience using Emma to interact with Infrahub. - [Installation](/emma/getting-started/installation.md): Emma is an experimental AI-powered assistant for Infrahub that helps you manage infrastructure schemas and data through an intuitive web interface. ### guides - [Building Your First Schema](/emma/guides/building-your-first-schema.md): This guide walks you through creating your first Infrahub schema using Emma's AI Schema Builder. We'll create a practical schema for modeling network devices. ### reference - [Configuration Reference](/emma/reference/configuration.md): This reference covers all configuration options available in Emma, including environment variables, feature flags, and runtime settings. - [Feature Flags](/emma/reference/feature-flags.md): Emma uses feature flags to enable experimental and beta functionality. This allows you to try new features while maintaining stability in production environments. - [Troubleshooting](/emma/reference/troubleshooting.md): This guide covers common issues you might encounter while using Emma and how to resolve them. ## exporter Infrahub Exporter is a service that exports metrics and service discovery information from Infrahub to monitoring systems like Prometheus and OpenTelemetry. - [Infrahub Exporter](/exporter.md): Infrahub Exporter is a service that exports metrics and service discovery information from Infrahub to monitoring systems like Prometheus and OpenTelemetry. ### guides - [Configure Infrahub Exporter](/exporter/guides/configuration.md): Configuration - [Install and run Infrahub Exporter](/exporter/guides/installation.md): This guide walks you through installing and running the Infrahub Exporter on your system. ## infrahub-solution-ai-dc ### solution-ai-dc - [Demo guide](/infrahub-solution-ai-dc/solution-ai-dc/demo-guide.md): Run the AI/DC solution end to end — from loading design data to generating a complete data center fabric. - [Design-driven automation](/infrahub-solution-ai-dc/solution-ai-dc/design-driven-automation.md): How the AI/DC solution separates design intent from infrastructure implementation using Infrahub Generators. - [Generator patterns](/infrahub-solution-ai-dc/solution-ai-dc/generator-patterns.md): Implementation patterns used in the AI/DC solution Generators — queries, device creation, IP allocation, cabling, and checksum propagation. - [Installation & Setup](/infrahub-solution-ai-dc/solution-ai-dc/installation-setup.md): Prerequisites, environment setup, and repository structure for the AI/DC solution. - [Modular Generator architecture](/infrahub-solution-ai-dc/solution-ai-dc/modular-generator-architecture.md): How the AI/DC solution chains Generators through checksum triggers, validates parent completion, and allocates interfaces deterministically. - [AI/DC solution](/infrahub-solution-ai-dc/solution-ai-dc/overview.md): Design-driven automation for large-scale AI data center fabrics using Infrahub Generators. ## infrahubctl ### infrahubctl infrahubctl is a command line utility designed to help with the day to day management of an Infrahub installation. - [infrahubctl](/infrahubctl/infrahubctl.md): infrahubctl is a command line utility designed to help with the day to day management of an Infrahub installation. ### infrahubctl-branch Manage the branches in a remote Infrahub instance. - [infrahubctl branch](/infrahubctl/infrahubctl-branch.md): Manage the branches in a remote Infrahub instance. ### infrahubctl-check Execute user-defined checks. - [infrahubctl check](/infrahubctl/infrahubctl-check.md): Execute user-defined checks. ### infrahubctl-dump Export nodes and their relationships out of the database. - [infrahubctl dump](/infrahubctl/infrahubctl-dump.md): Export nodes and their relationships out of the database. ### infrahubctl-generator Run a generator script. - [infrahubctl generator](/infrahubctl/infrahubctl-generator.md): Run a generator script. ### infrahubctl-graphql Various GraphQL related commands. - [infrahubctl graphql](/infrahubctl/infrahubctl-graphql.md): Various GraphQL related commands. ### infrahubctl-info Display the status of the Python SDK. - [infrahubctl info](/infrahubctl/infrahubctl-info.md): Display the status of the Python SDK. ### infrahubctl-load Import nodes and their relationships into the database. - [infrahubctl load](/infrahubctl/infrahubctl-load.md): Import nodes and their relationships into the database. ### infrahubctl-marketplace Browse and download schemas from the Infrahub Marketplace. - [infrahubctl marketplace](/infrahubctl/infrahubctl-marketplace.md): Browse and download schemas from the Infrahub Marketplace. ### infrahubctl-menu Manage the menu in a remote Infrahub instance. - [infrahubctl menu](/infrahubctl/infrahubctl-menu.md): Manage the menu in a remote Infrahub instance. ### infrahubctl-object Manage objects in a remote Infrahub instance. - [infrahubctl object](/infrahubctl/infrahubctl-object.md): Manage objects in a remote Infrahub instance. ### infrahubctl-protocols Export Python protocols corresponding to a schema. - [infrahubctl protocols](/infrahubctl/infrahubctl-protocols.md): Export Python protocols corresponding to a schema. ### infrahubctl-render Render a local Jinja2 Transform for debugging purpose. - [infrahubctl render](/infrahubctl/infrahubctl-render.md): Render a local Jinja2 Transform for debugging purpose. ### infrahubctl-repository Manage the repositories in a remote Infrahub instance. - [infrahubctl repository](/infrahubctl/infrahubctl-repository.md): Manage the repositories in a remote Infrahub instance. ### infrahubctl-run Execute a script. - [infrahubctl run](/infrahubctl/infrahubctl-run.md): Execute a script. ### infrahubctl-schema Manage the schema in a remote Infrahub instance. - [infrahubctl schema](/infrahubctl/infrahubctl-schema.md): Manage the schema in a remote Infrahub instance. ### infrahubctl-task Manage Infrahub tasks. - [infrahubctl task](/infrahubctl/infrahubctl-task.md): Manage Infrahub tasks. ### infrahubctl-telemetry Usage: - [infrahubctl telemetry](/infrahubctl/infrahubctl-telemetry.md): Usage: ### infrahubctl-transform Render a local transform (TransformPython) for debugging purpose. - [infrahubctl transform](/infrahubctl/infrahubctl-transform.md): Render a local transform (TransformPython) for debugging purpose. ### infrahubctl-validate Helper to validate the format of various files. - [infrahubctl validate](/infrahubctl/infrahubctl-validate.md): Helper to validate the format of various files. ### infrahubctl-version Display the version of Python and the version of the Python SDK in use. - [infrahubctl version](/infrahubctl/infrahubctl-version.md): Display the version of Python and the version of the Python SDK in use. ## integrations Infrahub integrates with a wide range of infrastructure management and automation tools to help you synchronize data, automate workflows, and manage your infrastructure. This page provides an overview of all available integrations and their capabilities. - [Infrahub Integrations](/integrations.md): Infrahub integrates with a wide range of infrastructure management and automation tools to help you synchronize data, automate workflows, and manage your infrastructure. This page provides an overview of all available integrations and their capabilities. ## mcp Infrahub MCP Server connects AI assistants and IDE agents to Infrahub using the open Model Context Protocol standard — so agents can query, create, update, and propose changes to your infrastructure data through a consistent, audited interface. It works with any MCP-compatible client (Claude Desktop, VS Code, Cursor, CLI agents, and more) with no custom glue code required. - [Infrahub MCP Server](/mcp.md): Infrahub MCP Server connects AI assistants and IDE agents to Infrahub using the open Model Context Protocol standard — so agents can query, create, update, and propose changes to your infrastructure data through a consistent, audited interface. It works with any MCP-compatible client (Claude Desktop, VS Code, Cursor, CLI agents, and more) with no custom glue code required. ### getting-started - [Set up authentication](/mcp/getting-started/authentication.md): This guide walks through configuring each authentication mode. For a deeper explanation of how the auth architecture works — sequence diagrams, the two-layer model, audit logs, and branch-placeholder resolution — see Authentication architecture. - [Your first agent run](/mcp/getting-started/first-agent-run.md): This walkthrough connects an LLM client to your running Infrahub MCP server and asks it a read-only question. By the end you'll have confirmed the server is reachable, the agent can discover your schema, and the built-in infrahub_agent system prompt is guiding the conversation correctly. - [Install the Infrahub MCP server](/mcp/getting-started/installation.md): This guide gets you from a fresh checkout to a running Infrahub MCP server in a few minutes. Once it's running, continue with Authentication to pick a credential model, then Your first agent run to connect an LLM. - [Make a change through an agent](/mcp/getting-started/make-a-change.md): This walkthrough takes you through the full write path: ask an agent to update something in Infrahub, watch it auto-create an isolated session branch, and open a Proposed Change for human review. No data on your default branch is modified until a human approves the merge. ### guides - [Running with Docker](/mcp/guides/docker.md): This guide covers deploying the Infrahub MCP server as a container, including running it alongside Infrahub in the same Docker Compose stack. - [Docker Compose deployment](/mcp/guides/docker-compose.md): This guide covers running the Infrahub MCP server as a container — standalone for development, or as a sidecar alongside Infrahub in the same Docker Compose stack for production. - [Installing Infrahub MCP](/mcp/guides/installation.md): This guide provides step-by-step instructions for installing and configuring different MCP clients to connect to the Infrahub MCP server. ### integrations - [Claude Agent SDK](/mcp/integrations/claude-agent-sdk.md): The Claude Agent SDK is Anthropic's framework for building custom agents on top of the Claude API. It has native MCP support, so connecting to the Infrahub MCP server is a short wiring exercise. - [Claude Code](/mcp/integrations/claude-code.md): Claude Code is Anthropic's CLI/IDE agent. It auto-detects .mcp.json files at project roots and loads the servers on startup — a perfect fit for the Infrahub MCP server when you're working inside a specific Infrahub consumer repository (IaC, Ansible, Python clients, etc.). - [Claude Desktop](/mcp/integrations/claude-desktop.md): Claude Desktop is the default starting point for most users — it speaks MCP over stdio and can spawn the Infrahub MCP server locally without any infrastructure. - [Cursor](/mcp/integrations/cursor.md): Cursor supports MCP servers via its Tools & Integrations panel. This page shows the Infrahub MCP server configuration and notes specific to Cursor's tool-approval UX. - [OpenAI Agents SDK](/mcp/integrations/openai-agents-sdk.md): The OpenAI Agents SDK has first-class support for MCP servers. This page shows how to build a custom infrastructure-automation agent that talks to the Infrahub MCP server over Streamable HTTP. - [VS Code](/mcp/integrations/vscode.md): VS Code supports MCP through its extension API — the Infrahub MCP server shows up as a tool provider alongside Copilot. This page covers the code --add-mcp setup and the VS Code Copilot compatibility flag. ### references - [Authentication architecture](/mcp/references/authentication.md): For the step-by-step configuration recipes, see Set up authentication. This page explains how each mode works end-to-end. - [Configuration reference](/mcp/references/configuration.md): The Infrahub MCP server is configured entirely through environment variables. All middleware features are opt-in — the server works out of the box with only the required connection variables set. - [Infrahub MCP methods](/mcp/references/methods.md): Response formats ### use-cases - [Brownfield network onboarding](/mcp/use-cases/brownfield-onboarding.md): Onboarding an existing ("brownfield") network into Infrahub is a long tail of small writes: one device per rack, one interface per device, one cable per interface. Agents shine here — they can read source-of-truth data from CSV exports, SNMP, LLDP neighbours, or NetBox, and turn it into idempotent Infrahub upserts on a session branch you can review all at once. - [Compliance analysis](/mcp/use-cases/compliance-analysis.md): Agents are a natural fit for ad-hoc compliance questions: "do all edge routers have dual uplinks to different spines?", "are all production VLANs documented?", "which devices are missing an owner?". This recipe shows how to run those checks as read-only agent workflows against Infrahub. - [Cross-system correlation](/mcp/use-cases/cross-system-correlation.md): Infrastructure data doesn't live in one place. A ticket in Jira mentions a device, a Git commit touches a configuration file, an Ansible run fails against a hostname. Connecting those dots — "which device is this about, what depends on it, what changed recently?" — is a natural fit for an agent that can read Infrahub through MCP and your other systems through their own tools. - [Natural language to GraphQL](/mcp/use-cases/natural-language-graphql.md): getnodes and searchnodes handle most everyday queries, but some questions need the full expressive power of GraphQL: aggregates, deep joins, multi-kind filters, and computed fields. This recipe shows how an agent goes from a free-form English question to a working query_graphql call, using the server's own schema as the grounding. - [Safe changes via branch isolation](/mcp/use-cases/safe-changes-branch-isolation.md): Branch isolation is the single most important safety property of the Infrahub MCP server: an agent can never write directly to your default branch. Every mutation lives on an ephemeral session branch that only becomes part of the default branch once a human reviews and merges a Proposed Change. This page explains the model end-to-end and shows how to tune it. - [Troubleshooting data queries](/mcp/use-cases/troubleshooting-queries.md): When an agent answers "I couldn't find that device" — it's almost always a data-query problem, not a data problem. This recipe walks through the diagnostic flow for "why is my query returning nothing?" ## nornir This integration bridges Nornir's powerful automation framework with Infrahub's next-generation infrastructure data management platform. - [Nornir Integration with Infrahub](/nornir.md): This integration bridges Nornir's powerful automation framework with Infrahub's next-generation infrastructure data management platform. ### getting-started This guide helps you set up your first integration between Nornir and Infrahub. By the end, you'll have a working automation setup that demonstrates the power of dynamic inventory management. - [Getting Started](/nornir/getting-started.md): This guide helps you set up your first integration between Nornir and Infrahub. By the end, you'll have a working automation setup that demonstrates the power of dynamic inventory management. ### guides - [How to Configure Schema Mappings](/nornir/guides/configuring-schema-mappings.md): This guide shows you how to configure schema mappings to control how Infrahub data translates into Nornir inventory properties. Schema mappings are the bridge between your Infrahub data model and Nornir's expected host attributes. - [How to Create Your First Automation Workflow](/nornir/guides/your-first-automation-workflow.md): This guide walks you through building a complete network automation workflow using Infrahub as your inventory source and artifact management system. You'll retrieve device configurations managed by Infrahub. ### references - [Artifact management plugin](/nornir/references/plugins/artifact_tasks.md): regeneratehostartifact - [Inventory plugin](/nornir/references/plugins/infrahub_inventory.md): InfrahubInventory ### topics - [Understanding Artifact Lifecycle Management](/nornir/topics/artifact-lifecycle-management.md): This topic explores how Infrahub's artifact system works with Nornir to enable sophisticated configuration management workflows. Understanding artifact lifecycle management is crucial for implementing robust, auditable network automation. - [Infrahub Inventory Concepts](/nornir/topics/infrahub-inventory-concepts.md): This topic provides a deep understanding of how Infrahub's graph database model maps to Nornir's inventory concepts. Understanding these mappings is essential for designing effective automation workflows. - [Understanding the Nornir-Infrahub Integration](/nornir/topics/understanding-nornir-infrahub-integration.md): This topic explains the core concepts behind the Nornir-Infrahub integration, how it works, and why it represents a paradigm shift in network automation. ## python-sdk ### guides - [Executing queries in a batch](/python-sdk/guides/batch.md): The Python SDK client allows you to group the execution of multiple queries in a batch. - [Branch management](/python-sdk/guides/branches.md): The Python SDK provides multiple methods to manage the branches in an Infrahub instance. - [How to create and configure an Infrahub client](/python-sdk/guides/client.md): This guide shows you how to create and configure an Infrahub client using the Python SDK. You'll learn how to set up authentication, configure proxy settings, and customize client behavior for your infrastructure automation workflows. - [Create, update and deleting nodes](/python-sdk/guides/create_update_delete.md): We will be using the following schema in this guide: - [Installing infrahub-sdk](/python-sdk/guides/installation.md): The Infrahub SDK for Python is available on PyPI and can be installed using the pip package installer. It is recommended to install the SDK into a virtual environment. - [Using the object-storage](/python-sdk/guides/object-storage.md): The Python SDK can be used to interface with Infrahub's object-storageartifact-file-storage/overview). - [Overview](/python-sdk/guides/python-typing.md): This guide explains how to use Python's type system effectively with the Infrahub SDK, focusing on the use of Protocols for type-safe development. - [Querying data in Infrahub](/python-sdk/guides/query_data.md): We can query data in 3 ways using the SDK: - [Using Resource Managers](/python-sdk/guides/resource-manager.md): The goal of this guide is to show you how to create a resource pool using the Python SDK, and how you can allocated resources with them. - [Using the client store](/python-sdk/guides/store.md): The client in the SDK contains a store that is used to store objects in a local cache. - [Using the client tracking mode](/python-sdk/guides/tracking.md): The Python SDK provides a feature known as Tracking Mode. This mode allows for the aggregation and tracking of operations performed during a session, enhancing efficiency and data management. ### introduction The Infrahub Python SDK is a client library for interacting with Infrahub programmatically. It handles authentication, query construction, and data serialization so you can work with infrastructure data using native Python objects instead of raw API calls. - [Infrahub Python SDK](/python-sdk/introduction.md): The Infrahub Python SDK is a client library for interacting with Infrahub programmatically. It handles authentication, query construction, and data serialization so you can work with infrastructure data using native Python objects instead of raw API calls. ### reference - [Compatibility matrix](/python-sdk/reference/compatibility.md): This page documents which versions of the Infrahub Python SDK are compatible with each version of Infrahub. - [Python SDK Configuration](/python-sdk/reference/config.md): The Python SDK (Async or Sync) client can be configured using an instance of the Config class. - [Python SDK Templating](/python-sdk/reference/templating.md): Filters can be used when defining computed attributes or Jinja2 Transforms within Infrahub. ### sdk_ref - [infrahub_sdk.client](/python-sdk/sdk_ref/infrahub_sdk/client.md): Classes - [infrahub_sdk.node.node](/python-sdk/sdk_ref/infrahub_sdk/node.md): Classes - [infrahub_sdk.node.attribute](/python-sdk/sdk_ref/infrahub_sdk/node/attribute.md): Classes - [infrahub_sdk.node.constants](/python-sdk/sdk_ref/infrahub_sdk/node/constants.md): This module is empty or contains only private/internal implementations. - [infrahub_sdk.node.metadata](/python-sdk/sdk_ref/infrahub_sdk/node/metadata.md): Classes - [infrahub_sdk.node.parsers](/python-sdk/sdk_ref/infrahub_sdk/node/parsers.md): Functions - [infrahub_sdk.node.property](/python-sdk/sdk_ref/infrahub_sdk/node/property.md): Classes - [infrahub_sdk.node.related_node](/python-sdk/sdk_ref/infrahub_sdk/node/related_node.md): Classes - [infrahub_sdk.node.relationship](/python-sdk/sdk_ref/infrahub_sdk/node/relationship.md): Classes ### topics - [Manage data with Object files](/python-sdk/topics/object_file.md): Introduction - [Understanding tracking in the Python SDK](/python-sdk/topics/tracking.md): Introduction ## schema-library Welcome to the Schema Library for Infrahub! This repository offers a collection of schemas designed to streamline and standardize infrastructure-related data structures. - [Schema library for Infrahub](/schema-library.md): Welcome to the Schema Library for Infrahub! This repository offers a collection of schemas designed to streamline and standardize infrastructure-related data structures. ### contributing We welcome contributions and feedback! Please open an issue or submit a pull request to suggest additions, improvements, or to report bugs. - [Contributing](/schema-library/contributing.md): We welcome contributions and feedback! Please open an issue or submit a pull request to suggest additions, improvements, or to report bugs. ### reference - [Azure](/schema-library/reference/azure.md): This schema extension introduces cloud support for Microsoft Azure. - [Cable](/schema-library/reference/cable.md): This schema extension contains a basic Cable model allowing you to connect two endpoints. - [Circuit](/schema-library/reference/circuit.md): This schema extension contains Circuits and ways to connect them with your infrastructure! The circuit could be a fiber connecting two sites, you would then have two endpoints, one on each site. - [Circuit Contract](/schema-library/reference/circuit_contract.md): This schema extension provides models for managing Circuit Contracts, enabling structured representation of service agreements with network providers. Compatible with Infrahub 1.8. - [Circuit Service](/schema-library/reference/circuit_service.md): This schema extension contains model coming on top of circuit to capture a single service shared across multiple circuits. - [Cluster](/schema-library/reference/cluster.md): This schema extension contains the foundations to capture clusters. With this one in place you can unlock various clusters flavors (hosting cluster able to host VMs, firewall clusters built with specific appliances ...) - [Compute](/schema-library/reference/compute.md): With this schema extension in place you will be able to capture all your physical servers. It also gives you the baseline to build virtualization. You might consider HostingCluster extension to go with! - [Cross Connect](/schema-library/reference/cross_connect.md): This extension contains schema to capture Cross Connect. You can see it as "a cable operated by a provider". You will be able to attach it to a location and then connect endpoints to it (e.g. rear interface of a patch panel, circuit endpoint ...) - [DCIM](/schema-library/reference/dcim.md): Basic DCIM schema to capture devices, racks, interfaces, and related information. - [DWDM](/schema-library/reference/dwdm.md): This schema extension contains models for OADM (Optical Add Drop Multiplexer) supporting various WDM (Wavelength Division Multiplexing) technologies such as DWDM (Dense Wavelength Division Multiplexing) or CWDM (Coarse Wavelength Division Multiplexing). With some vendors, the tunable optics are not configured via the channel number but via the wavelength and/or the frequency. This model provides a unique entry in Infrahub for those. - [Firewall Policer](/schema-library/reference/firewall_policer.md): This schema extension contains models for VMs. You might consider Cluster or/and Hypervisor extension to go with! - [Hosting Cluster](/schema-library/reference/hosting_cluster.md): A rather generic cluster built with compute units (e.g. servers) and able to host VMs. - [Infiniband](/schema-library/reference/infiniband.md): This schema extension adds support for InfiniBand switches. - [Interface Breakout](/schema-library/reference/interface_breakout.md): This schema extension introduces relationships to support breakout interfaces, enabling you to document the breakout of a physical interface into smaller physical interfaces. - [IPAM](/schema-library/reference/ipam.md): Basic IPAM schema to capture IP addresses, subnets, and related information. - [Lag](/schema-library/reference/lag.md): This schema extension includes models for Link Aggregation Groups (LAGs), enabling you to link physical interfaces as building blocs of your LAG interface. It can be used in standard networking environments as well as in compute scenarios, such as capturing bond interfaces. - [Locations](/schema-library/reference/location.md): Basic Location schema to capture locations, sites, and related information. - [Location Extended](/schema-library/reference/location_extended.md): This schema extension is the most detailed when it comes to location, you'll find all the layers you can think of. - [Location Minimal](/schema-library/reference/location_minimal.md): This schema extension is minimal but will provide you with basic items to store location related data. - [MLAG](/schema-library/reference/mlag.md): This schema extension contains the foundations to capture Multi-Chassis Link Aggregation Group (MLAG). It comes on top of the LAG extension. - [Modules](/schema-library/reference/modules.md): This schema extension allows you to capture Device Modules related information like the serial number or the status. You can insert the Module into a Dcim Physical Device. - [Modules Linecards](/schema-library/reference/modules_linecards.md): This schema extension allows you to capture Linecard related information like the version. You can insert the Linecard into a Dcim Physical Device and leverage the Linecard type model. The Linecard can accept PIC to help configure PORT information like breakout-capabilities and configurations. - [Modules Routing Engine](/schema-library/reference/modules_routing_engine.md): This schema extension allows you to capture Routing Engine related information like the version. You can insert the Routing Engine into a Dcim Physical Device and leverage the Routing Engine type model. - [Optical Transport](/schema-library/reference/optical_transport.md): Comprehensive optical transport network schemas for DWDM/WDM systems (ADVA FSP 3000 and similar platforms). Covers four layers: wavelength (ITU-T G.694.1 grid, optical bands, DWDM channels), topology (logical optical nodes, passive multiplexers, fiber links), equipment (transponder/amplifier/ROADM modules, ROADM degrees, WSS cross-connects), and service (end-to-end optical services, optical paths, path segments). Not designed to be loaded together with extensions/dwdm. - [Organization](/schema-library/reference/organization.md): Basic Organization schema to capture organizations, vendors, and related information. - [Patch Panel](/schema-library/reference/patch_panel.md): This schema extension allows you to capture patch panel related information like rear/front interfaces and mapping between them. You can insert the patch panel into a rack and leverage the device type model. Finally you can also capture information about potential modules you would insert into your patch panel. - [Peering IXP](/schema-library/reference/peering_ixp.md): This schema extension contains all you need to model anything revolving around internet peering (Exchange points ...)! - [Physical Disk](/schema-library/reference/physical_disk.md): Simple schema allowing you to capture physical disks information for the sake of inventory and lifecycle management. - [QinQ](/schema-library/reference/qinq.md): This schema extension brings extensions to VLAN model in order to support QinQ. - [QoS](/schema-library/reference/qos.md): This schema extension contains models for Quality of Service (QoS) - [Routing](/schema-library/reference/routing.md): This schema extension contains generics to create Routing Protocol "Instance". The idea is to create one Routing Protocol instance per IpamVRF + DcimDevice pair. - [Routing Aggregate](/schema-library/reference/routing_aggregate.md): This schema extension contains all you need to model the Aggregate Routing Protocol. - [Routing BGP](/schema-library/reference/routing_bgp.md): This schema extension contains all you need to model your BGP platform. - [Routing BGP Community](/schema-library/reference/routing_bgp_community.md): This schema extension adds the BGP Communities models. - [Routing BGP RR](/schema-library/reference/routing_bgp_rr.md): This schema extension extend the BGP extension to add BGP Route Reflector Clustering. - [Routing OSPF](/schema-library/reference/routing_ospf.md): This schema extension contains all you need to model the OSPF Routing Protocol. - [Routing PIM](/schema-library/reference/routing_pim.md): This schema extension contains all you need to model the PIM Protocol. - [Routing Policies](/schema-library/reference/routing_policies.md): This schema extension contains a generic to create Routing Policies. This Generic can be extend for each Routing Protocols you may want to use. - [Routing Policies Aggregate](/schema-library/reference/routing_policies_aggregate.md): This extension is using the Routing Policies extensions and the Routing Aggregate one together. - [Routing Policies BGP](/schema-library/reference/routing_policies_bgp.md): This extension is using the Routing Policies extensions and the Routing BGP one together. - [Routing Policies OSPF](/schema-library/reference/routing_policies_ospf.md): This extension is using the Routing Policies extensions and the Routing OSPF one together. - [Routing Policies (PIM)](/schema-library/reference/routing_policies_pim.md): This schema inherits the RoutingPolicy schema and removes importpolicies and exportpolicies attributes. However it adds a number of relationships to RoutingPIM. - [Security](/schema-library/reference/security.md): This schema extension contains models for implementing detailed security. - [SFP](/schema-library/reference/sfp.md): This schema extension gives you all the models you need to document Small Form-factor Pluggable (SFP). - [SNMP](/schema-library/reference/snmp.md): This schema extension contains models for SNMP Communities and SNMP Clients. As you can see this extension is not linked to Tenancy or Device, as you could decide to link the Community to different models based on your use case. - [Tenancy](/schema-library/reference/tenancy.md): This schema extension introduces tenancy for some of the schema nodes (circuits...) - [Topology](/schema-library/reference/topology.md): This schema extension introduces abstract network pods and services running in the pods, such as MPLS and EVPN. - [Users](/schema-library/reference/users.md): This schema extension contains models for account management. - [VLAN](/schema-library/reference/vlan.md): This schema extension contains models to support VLANs in you network. - [VLAN Translation](/schema-library/reference/vlan-translation.md): This schema extension is based on Juniper VLAN MAP, and not yet test out for other vendors. - [VRF](/schema-library/reference/vrf.md): This schema extension contains models to support VRF in your network. - [VRRP](/schema-library/reference/vrrp.md): This schema extension contains models for VRRP. ## skills Infrahub Skills is an open-source AI skills package that gives your AI coding assistant built-in knowledge of Infrahub's data model, conventions, and workflow patterns. Instead of learning the platform from documentation alone, describe what you want to build in plain language and the skills produce valid, best-practice Infrahub resources — schemas, object data, generators, transforms, checks, and menus — ready to load into a running instance. - [Infrahub Skills](/skills.md): Infrahub Skills is an open-source AI skills package that gives your AI coding assistant built-in knowledge of Infrahub's data model, conventions, and workflow patterns. Instead of learning the platform from documentation alone, describe what you want to build in plain language and the skills produce valid, best-practice Infrahub resources — schemas, object data, generators, transforms, checks, and menus — ready to load into a running instance. ### how-it-works Infrahub Skills gives an AI assistant domain-specific knowledge about the Infrahub platform. Each skill is a structured set of Markdown files — rules, examples, and references — that the AI reads at the point it's needed. The assistant matches each user request to the relevant skill automatically, loads only the context required for that task, and applies the rules embedded in the skill. - [How It Works](/skills/how-it-works.md): Infrahub Skills gives an AI assistant domain-specific knowledge about the Infrahub platform. Each skill is a structured set of Markdown files — rules, examples, and references — that the AI reads at the point it's needed. The assistant matches each user request to the relevant skill automatically, loads only the context required for that task, and applies the rules embedded in the skill. ### installation-setup Infrahub Skills can be installed into any AI tool that supports skills or custom context files. Installation takes one command for most setups — install into a specific Infrahub repository to work in that project, or install globally to use the skills across all your projects. - [Installation & Setup](/skills/installation-setup.md): Infrahub Skills can be installed into any AI tool that supports skills or custom context files. Installation takes one command for most setups — install into a specific Infrahub repository to work in that project, or install globally to use the skills across all your projects. ### skills-reference - [Data Analyzer](/skills/skills-reference/analyzing-data.md): The Data Analyzer skill queries and analyzes data from a live Infrahub instance using the Infrahub MCP server. It answers operational questions that span multiple node types — correlating data, detecting drift, tracing service impact, auditing data quality — without requiring the user to write GraphQL queries manually. - [Repo Auditor](/skills/skills-reference/auditing-repo.md): The Repo Auditor performs a comprehensive audit of an Infrahub repository against all Infrahub best practices. It checks schema files, object files, Python components (checks, generators, transforms), .infrahub.yml registration, and project structure — then generates a report identifying issues and explaining what to fix and why. - [Check Manager](/skills/skills-reference/managing-checks.md): The Check Manager produces Python validation checks that run in Infrahub's proposed change pipeline. Each check consists of three components: a GraphQL query file, a Python class inheriting from InfrahubCheck, and a .infrahub.yml registration entry. The skill generates all three and ensures they are correctly wired together. - [Generator Manager](/skills/skills-reference/managing-generators.md): The Generator Manager produces Python generators that query Infrahub for design objects and automatically create or update the infrastructure objects derived from them. Generators are idempotent: re-running them updates existing objects rather than creating duplicates. The skill generates the Python class, GraphQL query, and .infrahub.yml registration. - [Menu Manager](/skills/skills-reference/managing-menus.md): The Menu Manager produces YAML menu definition files that customize the Infrahub web UI sidebar. Menus can be flat or deeply nested, with group headers, icons, and ordering. The skill generates syntactically correct menu YAML and handles the nesting structure that is easy to get wrong by hand. - [Object Manager](/skills/skills-reference/managing-objects.md): The Object Manager produces YAML data files for Infrahub infrastructure objects — devices, locations, organizations, interfaces, modules, and any custom node type. It applies the correct file structure, value mappings, and load order so files are ready to load into a running Infrahub instance. - [Schema Manager](/skills/skills-reference/managing-schemas.md): The Schema Manager produces valid Infrahub schema YAML from natural language descriptions. It applies Infrahub's naming conventions, relationship rules, attribute type requirements, and display property patterns automatically — without requiring manual study of the schema format. - [Transform Manager](/skills/skills-reference/managing-transforms.md): The Transform Manager produces data transforms that convert Infrahub data into other formats — device configurations, JSON exports, CSV reports, and more. Transforms can be implemented as Python classes, Jinja2 templates, or a hybrid of both. The skill generates the transform code, GraphQL query, optional Jinja2 templates, and .infrahub.yml registration. ### spec-driven-development Spec-Driven Development (SDD) is a structured planning mode for complex or multi-part Infrahub builds. Instead of generating files immediately, the AI reasons through requirements with you first — capturing what needs to be built, validating the approach against Infrahub conventions, breaking the work into discrete tasks, and only generating once the plan is approved. - [Spec-Driven Development](/skills/spec-driven-development.md): Spec-Driven Development (SDD) is a structured planning mode for complex or multi-part Infrahub builds. Instead of generating files immediately, the AI reasons through requirements with you first — capturing what needs to be built, validating the approach against Infrahub conventions, breaking the work into discrete tasks, and only generating once the plan is approved. ## sync Infrahub Sync synchronizes infrastructure data between Infrahub and external systems — NetBox, Nautobot, IP Fabric, Slurp’it, Cisco ACI, Peering Manager, ServiceNow-style CMDBs, and any system with a REST/JSON API. Use it to migrate from a legacy system of record, run two systems side-by-side, or keep Infrahub in sync with another source of truth. Define a sync project declaratively in YAML, and the CLI generates the adapter code, calculates the diff, and applies only the deltas on each run. - [Infrahub Sync](/sync.md): Infrahub Sync synchronizes infrastructure data between Infrahub and external systems — NetBox, Nautobot, IP Fabric, Slurp’it, Cisco ACI, Peering Manager, ServiceNow-style CMDBs, and any system with a REST/JSON API. Use it to migrate from a legacy system of record, run two systems side-by-side, or keep Infrahub in sync with another source of truth. Define a sync project declaratively in YAML, and the CLI generates the adapter code, calculates the diff, and applies only the deltas on each run. ### adapters - [Cisco ACI adapter](/sync/adapters/aci.md): What is Cisco ACI? - [Choose an adapter](/sync/adapters/choosing-an-adapter.md): Infrahub Sync includes adapters for the most common infrastructure systems and a Generic REST API adapter for everything else. For systems with non-standard APIs, build a custom adapter. - [Device42 adapter](/sync/adapters/device42.md): What is Device42? - [GenericRestAPI adapter](/sync/adapters/genericrestapi.md): The GenericRestAPI adapter is a flexible, configurable adapter that can connect to any REST API following common patterns. It's designed to reduce code duplication and provide a foundation for creating adapters for new systems without having to build them from scratch. - [Infrahub adapter](/sync/adapters/infrahub.md): What is Infrahub? - [IP Fabric adapter](/sync/adapters/ipfabric.md): What is IP Fabric? - [LibreNMS adapter](/sync/adapters/librenms.md): What is LibreNMS? - [Local Adapters](/sync/adapters/local-adapters.md): Using local adapters - [Nautobot adapter](/sync/adapters/nautobot.md): What is Nautobot? - [NetBox adapter](/sync/adapters/netbox.md): What is NetBox? - [Observium adapter](/sync/adapters/observium.md): What is Observium? - [Peering Manager adapter](/sync/adapters/peering-manager.md): What is Peering Manager? - [PeeringDB adapter](/sync/adapters/peeringdb.md): What is PeeringDB? - [Prometheus adapter](/sync/adapters/prometheus.md): What is Prometheus? - [Slurp’it adapter](/sync/adapters/slurpit.md): What is Slurp’it? ### contributing This guide covers how to set up a development environment for infrahub-sync and contribute to the project. For the release runbook, see RELEASING.md at the repository root — that's maintainer-only. - [Contributing](/sync/contributing.md): This guide covers how to set up a development environment for infrahub-sync and contribute to the project. For the release runbook, see RELEASING.md at the repository root — that's maintainer-only. ### creating-a-sync-project A sync project is a directory containing a config.yml file that defines one synchronization between two systems. Configure four parts: source and destination, sync order, schema mapping, and sync behavior. A Nautobot → Infrahub example runs through each. - [Create a sync project](/sync/creating-a-sync-project.md): A sync project is a directory containing a config.yml file that defines one synchronization between two systems. Configure four parts: source and destination, sync order, schema mapping, and sync behavior. A Nautobot → Infrahub example runs through each. ### custom-certificates For sync sources or destinations that use TLS certificates signed by an internal CA — common in enterprise networks — install the CA in the system trust store, then point Python's HTTP client at that store. - [Use custom CA certificates](/sync/custom-certificates.md): For sync sources or destinations that use TLS certificates signed by an internal CA — common in enterprise networks — install the CA in the system trust store, then point Python's HTTP client at that store. ### installation Infrahub Sync is available on PyPI and can be installed using the pip package installer. It is recommended to install the Sync into a virtual environment. - [Install Infrahub Sync](/sync/installation.md): Infrahub Sync is available on PyPI and can be installed using the pip package installer. It is recommended to install the Sync into a virtual environment. ### migrating-from-netbox-or-nautobot Migrate data from NetBox or Nautobot into Infrahub one model at a time. The existing system keeps running throughout, and you decide when — or whether — to retire it. - [Migrate from NetBox or Nautobot](/sync/migrating-from-netbox-or-nautobot.md): Migrate data from NetBox or Nautobot into Infrahub one model at a time. The existing system keeps running throughout, and you decide when — or whether — to retire it. ### orchestration Infrahub Sync runs as a single CLI command. Schedule it with whatever tooling already runs scheduled jobs in your environment — cron, CI, Prefect, Dagster, or a homegrown runner. - [Schedule sync runs](/sync/orchestration.md): Infrahub Sync runs as a single CLI command. Schedule it with whatever tooling already runs scheduled jobs in your environment — cron, CI, Prefect, Dagster, or a homegrown runner. ### reference - [Cache layout](/sync/reference/cache-layout.md): infrahub-sync diff and infrahub-sync apply persist run state under: - [infrahub-sync](/sync/reference/cli.md): Infrahub-sync: synchronize data between infrastructure sources and destinations. - [Sync instance configuration](/sync/reference/config.md): The configuration file allows you to define the resources needs for the sync. - [Incremental Extraction](/sync/reference/incremental-extraction.md): infrahub-sync can skip re-extracting unchanged data on warm runs by - [Schema mapping reference](/sync/reference/schema-mapping.md): The schema mapping section of a sync project's config.yml defines how data translates between the source system and the destination system. Worked examples for NetBox → Infrahub and Nautobot → Infrahub appear at the end. ### running-a-sync Learn how to use Infrahub Sync's commands to calculate differences, synchronize data, and apply previously cached plans against your destination. - [Run a sync](/sync/running-a-sync.md): Learn how to use Infrahub Sync's commands to calculate differences, synchronize data, and apply previously cached plans against your destination. ### using-netbox-or-nautobot-with-infrahub If you're adopting Infrahub but already have an established system of record in NetBox or Nautobot — with accumulated data, custom fields, and automation built around it — run Infrahub side-by-side with the existing tool and use Infrahub Sync to keep both systems holding the same data. - [Use NetBox or Nautobot with Infrahub](/sync/using-netbox-or-nautobot-with-infrahub.md): If you're adopting Infrahub but already have an established system of record in NetBox or Nautobot — with accumulated data, custom fields, and automation built around it — run Infrahub side-by-side with the existing tool and use Infrahub Sync to keep both systems holding the same data. ## vscode Infrahub VSCode extension - your development companion for infrastructure automation - [VSCode Extension](/vscode.md): Infrahub VSCode extension - your development companion for infrastructure automation ### guides - [How to Configure Multiple Infrahub Servers](/vscode/guides/configure-multiple-servers.md): Set up connections to development, staging, and production Infrahub servers for seamless environment switching - [How to Execute GraphQL Queries](/vscode/guides/execute-graphql-queries.md): Run GraphQL queries against Infrahub servers with variable support and branch selection - [How to Manage Branches](/vscode/guides/manage-branches.md): Create, delete, and work with Infrahub branches directly from VSCode - [How to Run Transforms and Artifacts](/vscode/guides/running-transforms.md): Execute Jinja2 and Python transforms directly from VSCode with automatic command selection and variable support - [How to use Infrahub snippets in VSCode](/vscode/guides/snippets.md): Step-by-step guide to inserting and customizing Infrahub YAML and automation snippets in Visual Studio Code - [How to Visualize Your Schema](/vscode/guides/visualize-schema.md): Explore and understand your Infrahub schema structure using the interactive graph visualizer ### reference - [Extension Commands and Settings Reference](/vscode/reference/commands-settings.md): Complete reference for all commands, settings, and configuration options in the Infrahub VSCode extension ### topics - [Understanding the Extension Architecture](/vscode/topics/extension-architecture.md): Deep dive into how the Infrahub VSCode extension is designed and how its components work together - [Schema Validation and YAML Intelligence](/vscode/topics/schema-validation.md): Understanding how the extension provides intelligent YAML editing and schema validation for Infrahub - [Security Configuration and Best Practices](/vscode/topics/security-configuration.md): Comprehensive guide to security settings, TLS configuration, and best practices for the Infrahub VSCode extension ### tutorials - [Getting Started with Infrahub VSCode Extension](/vscode/tutorials/getting-started.md): Learn how to install and configure the Infrahub VSCode extension for your first infrastructure automation project ## academy Infrahub Academy offers a collection of practical, hands-on tutorials designed to help you master Infrahub's powerful capabilities. These step-by-step guides will walk you through key features and workflows, providing real-world experience with the platform. - [Welcome to Infrahub academy](/academy.md): Infrahub Academy offers a collection of practical, hands-on tutorials designed to help you master Infrahub's powerful capabilities. These step-by-step guides will walk you through key features and workflows, providing real-world experience with the platform. ### getting-started - [Generate and deploy your first network configuration using Infrahub](/academy/getting-started/deploy-first-configuration.md): Learn how to design, build and deploy infrastructure configurations using Infrahub's artifact feature. - [Infrahub introduction](/academy/getting-started/infrahub-introduction.md): A comprehensive introduction to Infrahub, its core concepts, and how it revolutionizes infrastructure management. ### tutorials - [Build a check in Infrahub](/academy/tutorials/build-a-check.md): By the end of this tutorial you will have built, deployed, and validated a custom check that enforces a naming convention on tags. You will set up sample data, write a GraphQL query, implement the check logic in Python, configure it in .infrahub.yml, deploy it via a connected Git repository, and verify it runs against a proposed change. - [Build your first schema](/academy/tutorials/build-your-first-schema.md): By the end of this tutorial you will have a working schema for network devices and interfaces, covering nodes, attributes, relationships, and generic abstractions. You'll load each version into a branch and verify the results. - [Build chained generators](/academy/tutorials/generators/build-chained-generators.md): By the end of this tutorial you will have wired two layers of modular Generators together — fabric → pod → rack — using a checksum attribute and Infrahub's event framework. You will have added a GeneratorTarget generic with a checksum attribute to your downstream node kinds, implemented a GeneratorMixin that writes the checksum to downstream targets as the last step of generate(), built downstream Generators that validate upstream completeness before doing any work, and created CoreGeneratorAction and CoreNodeTriggerRule objects so the chain runs automatically when an upstream layer finishes. You will leave with a concrete model of how a checksum makes Generator chaining idempotent — re-runs that produce the same output do not re-trigger the next layer. - [Build your first generator](/academy/tutorials/generators/build-your-first-generator.md): By the end of this tutorial you will have built a working Generator end-to-end: modeled two object kinds, written a GraphQL query, implemented a Python Generator class, registered it in .infrahub.yml, run it locally with infrahubctl, and verified it runs automatically as part of a proposed change. You will leave with a Widget and Resource schema loaded into Infrahub and a Generator that creates Resource objects from each Widget's count attribute. - [Organize objects with groups](/academy/tutorials/groups.md): By the end of this tutorial you will have created a group, added two objects to it, and queried the result end-to-end. You'll leave with a concrete mental model of how groups work and where to go next. - [Build a Jinja2 Transformation](/academy/tutorials/transformations/build-a-jinja2-transformation.md): By the end of this tutorial you will have built a working Jinja2 Transformation end-to-end: loaded a small network-device schema, created a few sample devices, written a GraphQL query that filters by device name, written a Jinja template that renders a configuration snippet from the result, registered it in .infrahub.yml, tested it locally with infrahubctl render, added the repository to Infrahub, and called the render API. You'll leave with a deviceconfigtransform you can call against any device by name. - [Build a Python Transformation](/academy/tutorials/transformations/build-a-python-transformation.md): By the end of this tutorial you will have built a working Python Transformation end-to-end: loaded a small network-device schema, created a few sample devices, written a GraphQL query that filters by device name, implemented a DeviceConfigTransform Python class that returns a JSON object derived from the response, registered it in .infrahub.yml, tested it locally with infrahubctl transform, and called the Transformation via the REST API. You'll leave with both the raw-dictionary and SDK-converted patterns side by side so you can pick the one that fits the next Transformation you write. ## artifact-file-storage ### configure The storage API provides direct access to Infrahub's object storage layer for uploading and retrieving content by identifier. - [Configure storage](/artifact-file-storage/configure.md): The storage API provides direct access to Infrahub's object storage layer for uploading and retrieving content by identifier. ### overview Infrahub uses an object storage layer to persist binary and text content outside of the graph database. This layer stores the raw bytes of file objects and rendered artifacts. Separating file content from graph data allows Infrahub to keep the graph database focused on relationships, metadata, and version control while delegating bulk storage to a system optimized for that purpose. - [About storage](/artifact-file-storage/overview.md): Infrahub uses an object storage layer to persist binary and text content outside of the graph database. This layer stores the raw bytes of file objects and rendered artifacts. Separating file content from graph data allows Infrahub to keep the graph database focused on relationships, metadata, and version control while delegating bulk storage to a system optimized for that purpose. ## artifacts ### content-composition This guide shows you how to build a composite artifact whose Transformation pulls in content from other artifacts or file objects. This enables modular configuration pipelines where each artifact generates one section of a configuration, and a composite artifact assembles the final result. - [Composing artifact content](/artifacts/content-composition.md): This guide shows you how to build a composite artifact whose Transformation pulls in content from other artifacts or file objects. This enables modular configuration pipelines where each artifact generates one section of a configuration, and a composite artifact assembles the final result. ### overview An artifact is the result of a Transformation for a specific context and/or object. - [Artifacts](/artifacts/overview.md): An artifact is the result of a Transformation for a specific context and/or object. ### use Generate configuration files and other artifacts by combining Infrahub data with templates. This guide shows you how to create artifacts that automatically update when your infrastructure data changes. - [Use artifacts](/artifacts/use.md): Generate configuration files and other artifacts by combining Infrahub data with templates. This guide shows you how to create artifacts that automatically update when your infrastructure data changes. ## automation-and-outputs - [Design & Integrate](/automation-and-outputs.md) ## branches-and-change-control - [Branches & Change Control](/branches-and-change-control.md) ## branches ### create Start a new branch from the default branch (typically main or master). This creates a snapshot of the current state that can be modified independently. Creating a new branch is almost instantaneous because Infrahub uses copy-on-write semantics — no data is duplicated, only a pointer to the base timestamp and the delta of subsequent changes. - [Create a branch](/branches/create.md): Start a new branch from the default branch (typically main or master). This creates a snapshot of the current state that can be modified independently. Creating a new branch is almost instantaneous because Infrahub uses copy-on-write semantics — no data is duplicated, only a pointer to the base timestamp and the delta of subsequent changes. ### delete After a branch has served its purpose — whether it's been merged, abandoned, or superseded — it can be deleted. Deleting a branch that has not been merged will permanently discard all changes accumulated on it. - [Delete a branch](/branches/delete.md): After a branch has served its purpose — whether it's been merged, abandoned, or superseded — it can be deleted. Deleting a branch that has not been merged will permanently discard all changes accumulated on it. ### merge Once changes are complete, they merge back into the parent branch through a controlled process — almost always via a Proposed Change. This ensures that all modifications are validated and conflicts are resolved before integration. - [Merge a branch](/branches/merge.md): Once changes are complete, they merge back into the parent branch through a controlled process — almost always via a Proposed Change. This ensures that all modifications are validated and conflicts are resolved before integration. ### overview Infrahub's branching model allows teams to work on features, fixes, or experiments in isolated environments. Each branch represents a separate line of development, enabling parallel work streams without interference. Unlike traditional version control systems, Infrahub's approach combines the familiar Git branching concepts with the unique data management capabilities of its graph database foundation. - [Branches](/branches/overview.md): Infrahub's branching model allows teams to work on features, fixes, or experiments in isolated environments. Each branch represents a separate line of development, enabling parallel work streams without interference. Unlike traditional version control systems, Infrahub's approach combines the familiar Git branching concepts with the unique data management capabilities of its graph database foundation. ### rebase Rebasing is a powerful operation that updates a branch with the latest changes from its parent branch. This is essential for maintaining branch health and ensuring smooth integration of changes. - [Rebase a branch](/branches/rebase.md): Rebasing is a powerful operation that updates a branch with the latest changes from its parent branch. This is essential for maintaining branch health and ensuring smooth integration of changes. ### resolve-conflicts Conflicts occur when the same data changes in both a feature branch and the main branch. Infrahub's conflict management system is designed to identify these conflicts with precision and provide tools for effective resolution. - [Resolve conflicts](/branches/resolve-conflicts.md): Conflicts occur when the same data changes in both a feature branch and the main branch. Infrahub's conflict management system is designed to identify these conflicts with precision and provide tools for effective resolution. ## category ### advanced-schema-features - [Advanced schema features](/category/advanced-schema-features.md) ### authentication - [Authentication](/category/authentication.md) ### configuration-files - [Configuration Files](/category/configuration-files.md) ### display--presentation - [Display & presentation](/category/display--presentation.md) ### getting-started - [Getting Started](/category/getting-started.md) ### install--configure - [Install & configure](/category/install--configure.md) ### maintain--upgrade - [Maintain & upgrade](/category/maintain--upgrade.md) ### permissions - [Permissions](/category/permissions.md) ### run--observe - [Run & observe](/category/run--observe.md) ### schema-operations - [Schema operations](/category/schema-operations.md) ### tutorials - [Tutorials](/category/tutorials.md) ### user-management--security - [User Management & Security](/category/user-management--security.md) ## change-approval ### change-approval-workflow This guide walks you through implementing a change approval workflow in Infrahub. By the end, you'll have a structured process ensuring all infrastructure changes are properly reviewed and approved before being merged into production, enhancing your governance and safety practices. - [How to implement a change approval workflow](/change-approval/change-approval-workflow.md): This guide walks you through implementing a change approval workflow in Infrahub. By the end, you'll have a structured process ensuring all infrastructure changes are properly reviewed and approved before being merged into production, enhancing your governance and safety practices. ## checks ### overview Checks are user-defined logic, stored in an external repository linked to Infrahub, that run as part of a proposed change. They let users perform any kind of data validation logic during a proposed change. If a check does not complete successfully, the proposed change cannot be merged. - [Checks & Validation](/checks/overview.md): Checks are user-defined logic, stored in an external repository linked to Infrahub, that run as part of a proposed change. They let users perform any kind of data validation logic during a proposed change. If a check does not complete successfully, the proposed change cannot be merged. ## computed-attributes ### overview The computed attributes feature enables the dynamic calculation of attribute values based on user-defined logic. - [Computed attributes](/computed-attributes/overview.md): The computed attributes feature enables the dynamic calculation of attribute values based on user-defined logic. ## deploy-manage ### install-configure - [How to configure Infrahub](/deploy-manage/install-configure/configure-infrahub.md): This guide explains how to configure your Infrahub instance by setting environment variables that control various aspects of the system, including timeouts, security settings, and integration parameters. - [Hardware requirements](/deploy-manage/install-configure/hardware-requirements.md): This page outlines the hardware requirements for running Infrahub, including minimum and recommended specifications, enterprise sizing, cloud provider machine types, and a utility for benchmarking your system's performance. - [Install Infrahub Community](/deploy-manage/install-configure/install/community.md): Infrahub Community is deployed as a container-based architecture and can be installed using several methods. - [Install Infrahub Enterprise Enterprise Edition](/deploy-manage/install-configure/install/enterprise.md): Infrahub Enterprise is based on the Community version, with several enhancements for: - [Installation](/deploy-manage/install-configure/install/overview.md): Infrahub Community and Enterprise are deployed as container-based architectures. The installation methods below are for non-resilient deployments suitable for development, testing, and single-node production environments. - [High availability](/deploy-manage/install-configure/production-deployment/high-availability.md): This guide covers how to deploy Infrahub in a high availability configuration that eliminates single points of failure. - [Production deployment](/deploy-manage/install-configure/production-deployment/overview.md): This guide walks you through deploying Infrahub in a production environment with enhanced security, reliability, and maintainability. By following these steps, you'll set up a production-ready Infrahub instance that follows industry best practices. ### maintain-upgrade - [Backup and restore](/deploy-manage/maintain-upgrade/database-backup/backup-and-restore.md): This guide shows you how to create comprehensive backups of your Infrahub deployment and restore them when needed. You'll learn to backup the Neo4j graph database, object storage, and task management data to ensure complete data recovery capabilities. - [Cluster backup and restore Enterprise Edition](/deploy-manage/maintain-upgrade/database-backup/cluster-backup-and-restore.md): If you're running Infrahub with a Neo4j cluster, follow these steps to backup from one node and restore to another while maintaining cluster integrity. - [Understanding database backup and restore](/deploy-manage/maintain-upgrade/database-backup/overview.md): This topic explains how Infrahub's database backup and restore system works, the architectural decisions behind it, and the various approaches available for protecting your data. Understanding these concepts helps you make informed decisions about your backup strategy and troubleshoot issues when they arise. - [Upgrade Community](/deploy-manage/maintain-upgrade/upgrade/community.md): The process to migrate your instance of Infrahub to the latest version will vary depending on your deployment of Infrahub. However, at a high-level, it will involve getting the latest version and performing any needed Database Migrations and Schema updates. - [Upgrade Enterprise Enterprise Edition](/deploy-manage/maintain-upgrade/upgrade/enterprise.md): The process to migrate your instance of Infrahub Enterprise to the latest version will vary depending on your deployment of Infrahub Enterprise. However, at a high-level, it will involve getting the latest version and performing any needed Database Migrations and Schema updates. - [Upgrade the observability stack](/deploy-manage/maintain-upgrade/upgrade/observability-stack.md): When a new compose file changes the embedded observability configuration, services backed by Docker Compose configs do not pick up those changes on a regular up -d. Use --force-recreate on the affected services to reload the embedded configuration content: - [Upgrade](/deploy-manage/maintain-upgrade/upgrade/overview.md): Upgrading Infrahub involves pulling the latest container images, running database and schema migrations, and restarting services. The specific steps vary by edition (Community vs Enterprise) and deployment method (Docker Compose vs Helm). ### run-observe - [Activity log](/deploy-manage/run-observe/activity-log.md): Changes (events) in Infrahub are documented in the Activity log. It helps you see which objects were impacted, when a change was made, and who made it. It can be used to troubleshoot unforeseen changes, audit previous operations, and comprehend the order of updates across various branches. - [Configure log forwarding Enterprise Edition](/deploy-manage/run-observe/log-forwarding/configure-log-forwarding.md): This guide walks through configuring Infrahub to forward audit events and application logs to external SIEM or syslog systems. For conceptual background on how log forwarding works, see the log forwarding overview. - [Log forwarding Enterprise Edition](/deploy-manage/run-observe/log-forwarding/overview.md): Log forwarding enables Infrahub to stream audit events and application logs to external systems via the syslog protocol. This supports compliance, security monitoring, and operational visibility by integrating with SIEM platforms and centralized log management. - [Tasks](/deploy-manage/run-observe/tasks.md): The Tasks system in Infrahub is designed to manage and control various backend operations with robust error reporting, improved supervision, and enhanced logging capabilities. - [Local Telemetry Storage](/deploy-manage/run-observe/telemetry.md): Infrahub stores a daily telemetry snapshot locally in the Neo4j database, regardless of whether remote telemetry reporting is enabled. This ensures all deployments - including air-gapped and opted-out environments - retain usage data for support, auditing, and license compliance. ### user-management - [Authentication](/deploy-manage/user-management/authentication.md): Infrahub provides flexible authentication options to fit various organizational needs. - [Managing API tokens](/deploy-manage/user-management/managing-api-tokens.md): API tokens can be used as an authentication mechanism for Infrahub's REST- and GraphQL API, the Python SDK and infrahubctl. - [Manage accounts and permissions](/deploy-manage/user-management/permissions-roles/manage-accounts-and-permissions.md): In Infrahub, managing access and control starts with creating accounts, assigning them to groups, and managing their roles and permissions. - [Permissions and roles](/deploy-manage/user-management/permissions-roles/overview.md): Roles and permissions are essential for controlling user access and behavior in Infrahub. Within the platform, they provide precise control over what users can see, modify, or manage. - [Advanced SSO configuration](/deploy-manage/user-management/sso/advanced-sso.md): Multiple identity providers - [Configure SSO (Single sign-on)](/deploy-manage/user-management/sso/configure-sso.md): This guide walks you through configuring single sign-on (SSO) in Infrahub using OpenID Connect (OIDC) or OAuth2 authentication protocols. - [Single sign-on (SSO)](/deploy-manage/user-management/sso/overview.md): Single sign-on (SSO) allows users to authenticate once with an external identity provider and gain access to Infrahub without needing separate credentials. Infrahub integrates with popular identity providers — Microsoft Entra ID, Okta, Google Workspace, and others — through industry-standard protocols. ## deployment-and-management - [Deployment & Management](/deployment-and-management.md) ## development - [Contributing](/development.md) ### backend In order start developing on Infrahub backend, it is recommended to have a decent knowledge about topics such as Docker, Python and generally UNIX systems. Tools such as Docker and Python virtual environment help us in isolating the development work without interfering with the system itself. In this guide, we will use: - [Backend guide](/development/backend.md): In order start developing on Infrahub backend, it is recommended to have a decent knowledge about topics such as Docker, Python and generally UNIX systems. Tools such as Docker and Python virtual environment help us in isolating the development work without interfering with the system itself. In this guide, we will use: ### changelog Infrahub utilizes a tool called towncrier for Changelog management and generation. - [Changelog guide](/development/changelog.md): Infrahub utilizes a tool called towncrier for Changelog management and generation. ### docs Welcome to the Infrahub documentation guide. This document aims to answer any questions that may come up when creating or updating documentation. - [Documentation guide](/development/docs.md): Welcome to the Infrahub documentation guide. This document aims to answer any questions that may come up when creating or updating documentation. ### editor More details coming soon - [Visual Studio Code](/development/editor.md): More details coming soon ### frontend Welcome to the Infrahub frontend guide! This guide details the technologies and steps required to contribute effectively to the Infrahub frontend. - [Frontend guide](/development/frontend.md): Welcome to the Infrahub frontend guide! This guide details the technologies and steps required to contribute effectively to the Infrahub frontend. - [Getting set up with frontend](/development/frontend/getting-set-up.md): Make sure Infrahub Backend is up and running. If not, in your terminal execute: - [Running & writing tests for frontend](/development/frontend/testing-guidelines.md): If you have never run Infrahub tests before, we highly suggest following the frontend guide. ### git-best-practices This guide explains Git workflows and best practices when contributing to Infrahub, covering submodule management, branching strategies, and pull request workflows. - [How to work with Git when developing Infrahub](/development/git-best-practices.md): This guide explains Git workflows and best practices when contributing to Infrahub, covering submodule management, branching strategies, and pull request workflows. ### style-guide This guide defines writing style, capitalization, and grammar rules for Infrahub documentation. As a general rule, prefer consistency and simplicity when possible. For anything not answered below, reference the Microsoft Style Guide. - [Documentation style guide](/development/style-guide.md): This guide defines writing style, capitalization, and grammar rules for Infrahub documentation. As a general rule, prefer consistency and simplicity when possible. For anything not answered below, reference the Microsoft Style Guide. ## development-resources - [Development Resources](/development-resources.md) ### developer-guide Infrahub support various form of extensibility that rely on users providing their own code that then will be executed by Infrahub. - [Developer guide](/development-resources/developer-guide.md): Infrahub support various form of extensibility that rely on users providing their own code that then will be executed by Infrahub. ### graphql-fragments GraphQL fragments are reusable field selections that can be shared across multiple stored queries. Instead of duplicating the same nested field selections in every query, you define them once as a fragment and reference them using the standard GraphQL spread syntax (...fragmentName). - [Using GraphQL fragments](/development-resources/graphql-fragments.md): GraphQL fragments are reusable field selections that can be shared across multiple stored queries. Instead of duplicating the same nested field selections in every query, you define them once as a fragment and reference them using the standard GraphQL spread syntax (...fragmentName). ### graphql - [Working with groups](/development-resources/graphql/groups.md): Groups are first-class objects in Infrahub that can be queried and manipulated through GraphQL. Groups provide powerful ways to organize and operate on collections of infrastructure objects. - [GraphQL](/development-resources/graphql/overview.md): The GraphQL interface is the main interface to interact with Infrahub. The GraphQL schema is automatically generated based on the core models and the user-defined schema models. - [Queries & mutations](/development-resources/graphql/queries-and-mutations.md): In GraphQL, a query is used to fetch data and mutations are used to create/update or delete data. In Infrahub, a GraphQL query and 4 mutations will be generated for each model you define in the schema. The name of the query or mutation is based on the namespace and name of the model. - [Single-target queries](/development-resources/graphql/single-target-queries.md): When writing GraphQL queries for transformations, generators, artifacts, and computed attributes, it's critical to use a single-target query pattern to ensure proper tracking by the system. - [Stored queries](/development-resources/graphql/stored-queries.md): Infrahub can store GraphQL queries in the database to simplify execution and associate them with other internal objects such as Transformations. ### local-demo-environment A local environment based on Docker Compose is available for demo and testing. - [Local demo environment](/development-resources/local-demo-environment.md): A local environment based on Docker Compose is available for demo and testing. ## events ### event-actions An event action is a node you create in Infrahub that defines an outcome: add a device to a group, run a Generator definition. Actions on their own do nothing — they fire only when an event rule matches and points at them. - [Event actions](/events/event-actions.md): An event action is a node you create in Infrahub that defines an outcome: add a device to a group, run a Generator definition. Actions on their own do nothing — they fire only when an event rule matches and points at them. ### event-rules An event rule is a node you create in Infrahub that names a set of conditions and ties one or more actions to fire when those conditions match. Rules turn raw events into useful automation: instead of reacting to every infrahub.node.updated event, you describe the precise update you care about — "an InfraDevice whose status changed to active" — and Infrahub runs your action only when that pattern shows up. - [Event rules](/events/event-rules.md): An event rule is a node you create in Infrahub that names a set of conditions and ties one or more actions to fire when those conditions match. Rules turn raw events into useful automation: instead of reacting to every infrahub.node.updated event, you describe the precise update you care about — "an InfraDevice whose status changed to active" — and Infrahub runs your action only when that pattern shows up. ### event-system Infrahub emits a structured event every time a significant mutation happens in the system: a node is created, updated, or deleted; a branch is created, merged, rebased, or deleted; a group gains or loses a member; and many more. Events are the foundation of every event-driven feature — automation, webhook delivery, the activity log, and external SIEM forwarding all consume them. - [Event system](/events/event-system.md): Infrahub emits a structured event every time a significant mutation happens in the system: a node is created, updated, or deleted; a branch is created, merged, rebased, or deleted; a group gains or loses a member; and many more. Events are the foundation of every event-driven feature — automation, webhook delivery, the activity log, and external SIEM forwarding all consume them. ### overview Infrahub emits events on every significant mutation in the system — node creates, branch operations, group membership changes, and more. The event system lets you react to those events automatically: when a device is updated, when a circuit joins a provisioning group, when a branch merges. Common uses include keeping groups in sync as data changes, triggering Generators on attribute updates, and notifying external systems through webhooks. - [Events](/events/overview.md): Infrahub emits events on every significant mutation in the system — node creates, branch operations, group membership changes, and more. The event system lets you react to those events automatically: when a device is updated, when a circuit joins a provisioning group, when a branch merges. Common uses include keeping groups in sync as data changes, triggering Generators on attribute updates, and notifying external systems through webhooks. ## faq Here are the key details about Infrahub: - [Frequently asked questions](/faq.md): Here are the key details about Infrahub: ## generators ### build A Generator queries data and creates new nodes and relationships from the result. The steps below cover how to create one. - [Build a generator](/generators/build.md): A Generator queries data and creates new nodes and relationships from the result. The steps below cover how to create one. ### modular A Generator reads data from Infrahub and creates new objects based on the result. A single Generator works well when the scope is contained: one input kind, one set of outputs, no intermediate dependencies. - [Modular Generators](/generators/modular.md): A Generator reads data from Infrahub and creates new objects based on the result. A single Generator works well when the scope is contained: one input kind, one set of outputs, no intermediate dependencies. ### modular-best-practices The patterns below come from real-world experience building and operating modular Generator cascades in Infrahub. They address problems that are not obvious until you have built a multi-layer cascade and run it in production. - [Best practices for modular Generators](/generators/modular-best-practices.md): The patterns below come from real-world experience building and operating modular Generator cascades in Infrahub. They address problems that are not obvious until you have built a multi-layer cascade and run it in production. ### overview A Generator is a generic plugin that queries data and creates new nodes and relationships based on the result. - [Generators](/generators/overview.md): A Generator is a generic plugin that queries data and creates new nodes and relationships based on the result. ## git-integration ### branch-synchronization Infrahub automatically creates all branches from a connected Git repository by default. While this ensures full visibility, it can create unnecessary noise when many Git branches are unrelated to Infrahub data or workflows. Selective branch synchronization introduces an optional configuration that allows teams to control which Git branches are imported and synchronized into Infrahub based on custom naming patterns. - [Selective branch synchronization](/git-integration/branch-synchronization.md): Infrahub automatically creates all branches from a connected Git repository by default. While this ensures full visibility, it can create unnecessary noise when many Git branches are unrelated to Infrahub data or workflows. Selective branch synchronization introduces an optional configuration that allows teams to control which Git branches are imported and synchronized into Infrahub based on custom naming patterns. ### connect-repository Connecting an external Git repository will enable many features in Infrahub, such as Transformations, Generators, Checks ... that rely on the repository to store code files. - [How to connect external Git repositories](/git-integration/connect-repository.md): Connecting an external Git repository will enable many features in Infrahub, such as Transformations, Generators, Checks ... that rely on the repository to store code files. ### infrahub-yml The .infrahub.yml file serves as the central manifest that defines how Infrahub integrates with external Git repositories. This topic explains the role of this configuration file and the design philosophy behind its structure. - [Understanding the .infrahub.yml configuration file](/git-integration/infrahub-yml.md): The .infrahub.yml file serves as the central manifest that defines how Infrahub integrates with external Git repositories. This topic explains the role of this configuration file and the design philosophy behind its structure. ### overview Git Integration in Infrahub connects your data layer to external Git repositories, letting you store and version-control the code that drives Infrahub — transformations, generators, checks, and other automation resources — alongside your infrastructure data. This page covers the underlying concepts; specific tasks like connecting a repository, configuring .infrahub.yml, and filtering which branches sync live in the pages below. - [Git Integration](/git-integration/overview.md): Git Integration in Infrahub connects your data layer to external Git repositories, letting you store and version-control the code that drives Infrahub — transformations, generators, checks, and other automation resources — alongside your infrastructure data. This page covers the underlying concepts; specific tasks like connecting a repository, configuring .infrahub.yml, and filtering which branches sync live in the pages below. ## groups ### add-members Attach existing objects to a Standard group. - [Add members to a group](/groups/add-members.md): Attach existing objects to a Standard group. ### create Create a Standard group when you want to hand-pick the objects it contains. - [Create a group](/groups/create.md): Create a Standard group when you want to hand-pick the objects it contains. ### delete Remove a group without affecting its member objects. - [Delete a group](/groups/delete.md): Remove a group without affecting its member objects. ### overview Groups are containers that establish relationships between objects in your infrastructure. They let you create logical collections that span different object types — you might group together devices, locations, and configurations that share a common purpose or characteristic. - [Groups](/groups/overview.md): Groups are containers that establish relationships between objects in your infrastructure. They let you create logical collections that span different object types — you might group together devices, locations, and configurations that share a common purpose or characteristic. ### query-members Read what's in a group, or find what groups an object belongs to. Use these patterns for auditing, verification, or feeding automation. - [Query group membership](/groups/query-members.md): Read what's in a group, or find what groups an object belongs to. Use these patterns for auditing, verification, or feeding automation. ### remove-members Detach objects from a Standard group without deleting the objects themselves. - [Remove members from a group](/groups/remove-members.md): Detach objects from a Standard group without deleting the objects themselves. ### use-in-automation Target a group from an artifact definition, Transformation, or Check so that the automation applies to every member without hard-coding a list. - [Use groups in automation](/groups/use-in-automation.md): Target a group from an artifact definition, Transformation, or Check so that the automation applies to every member without hard-coding a list. ## immutable-history ### overview At its foundation, Infrahub implements data immutability—a principle where information in the database cannot be deleted or modified in place. Instead, every change creates a new version while preserving all previous states. This approach mirrors version control systems like Git, providing a robust history of all infrastructure changes. - [Understanding immutable history in Infrahub](/immutable-history/overview.md): At its foundation, Infrahub implements data immutability—a principle where information in the database cannot be deleted or modified in place. Instead, every change creates a new version while preserving all previous states. This approach mirrors version control systems like Git, providing a robust history of all infrastructure changes. ## integrations-overview - [Integrations](/integrations-overview.md) ## ipam ### automate-with-resource-manager IPAM and Resource Manager are complementary layers. IPAM defines the data model — your prefix and address objects live in the graph, organized into namespaces and hierarchies. Resource Manager is the allocation engine — it draws from those prefix objects as pool sources to assign addresses and subnets automatically, without manual tracking. - [Automate with Resource Manager](/ipam/automate-with-resource-manager.md): IPAM and Resource Manager are complementary layers. IPAM defines the data model — your prefix and address objects live in the graph, organized into namespaces and hierarchies. Resource Manager is the allocation engine — it draws from those prefix objects as pool sources to assign addresses and subnets automatically, without manual tracking. ### building-your-schema An IPAM namespace is already provided with Infrahub out of the box, so there is no need to redefine it unless you require additional attributes. The default IpamNamespace implementation is minimal — it exposes only a name and a description. - [Building your IPAM schema](/ipam/building-your-schema.md): An IPAM namespace is already provided with Infrahub out of the box, so there is no need to redefine it unless you require additional attributes. The default IpamNamespace implementation is minimal — it exposes only a name and a description. ### ip-namespaces IP Namespaces are logical containers that segment and isolate IPAM resources. They allow you to manage separate pools of IP prefixes and addresses within the same Infrahub instance, preventing conflicts and enabling organizational separation of IP resources. - [IP Namespaces](/ipam/ip-namespaces.md): IP Namespaces are logical containers that segment and isolate IPAM resources. They allow you to manage separate pools of IP prefixes and addresses within the same Infrahub instance, preventing conflicts and enabling organizational separation of IP resources. ### overview IP address management (IPAM) in Infrahub gives you a structured, version-controlled capability to manage your IP resources. IP Prefixes and IP Addresses are first-class objects in Infrahub — they form hierarchies, track utilization automatically, and integrate with the rest of your infrastructure data. Both IPv4 and IPv6 are supported. - [IP Address Management](/ipam/overview.md): IP address management (IPAM) in Infrahub gives you a structured, version-controlled capability to manage your IP resources. IP Prefixes and IP Addresses are first-class objects in Infrahub — they form hierarchies, track utilization automatically, and integrate with the rest of your infrastructure data. Both IPv4 and IPv6 are supported. ## menu ### overview Infrahub lets you control the menu on the left side of the web interface. - [Menu customization](/menu/overview.md): Infrahub lets you control the menu on the left side of the web interface. ## object-templates ### allocate-resources-from-pools Object templates support automatic resource allocation. This guide extends the device and interface example from Use object templates to show how to wire a CoreIPAddressPool to the interface template so that IP addresses are allocated automatically on object creation. - [Allocate resources from pools](/object-templates/allocate-resources-from-pools.md): Object templates support automatic resource allocation. This guide extends the device and interface example from Use object templates to show how to wire a CoreIPAddressPool to the interface template so that IP addresses are allocated automatically on object creation. ### overview In many infrastructures, multiple instances of objects share a common structure. Consider network devices: we know in advance the port setup for a given model. When documenting this in our source of truth, repeatedly entering the same port details is both inefficient and error-prone. The Object Template feature allows you to create a reusable blueprint for any object. This blueprint can be used to generate multiple instances that adhere to the predefined structure, ensuring uniformity while reducing manual effort. - [Object Templates](/object-templates/overview.md): In many infrastructures, multiple instances of objects share a common structure. Consider network devices: we know in advance the port setup for a given model. When documenting this in our source of truth, repeatedly entering the same port details is both inefficient and error-prone. The Object Template feature allows you to create a reusable blueprint for any object. This blueprint can be used to generate multiple instances that adhere to the predefined structure, ensuring uniformity while reducing manual effort. ### use This guide provides a structured approach to defining an object template and creating object instances based on that template. - [Use object templates](/object-templates/use.md): This guide provides a structured approach to defining an object template and creating object instances based on that template. ### with-profiles When both generatetemplate and generateprofile are configured on a schema node, you can assign Profiles to templates to enable bulk configuration updates. Objects created from templates automatically inherit the Profiles assigned to those templates, allowing you to update values in bulk by modifying the Profile. - [Assign Profiles to a template](/object-templates/with-profiles.md): When both generatetemplate and generateprofile are configured on a schema node, you can assign Profiles to templates to enable bulk configuration updates. Objects created from templates automatically inherit the Profiles assigned to those templates, allowing you to update values in bulk by modifying the Profile. ## objects ### convert-object-kind Object conversion in Infrahub provides a powerful mechanism to transform existing objects from one schema type to another without losing data or breaking relationships. This capability addresses the common infrastructure management challenge of evolving data models while preserving existing configurations and connections. - [Object conversion](/objects/convert-object-kind.md): Object conversion in Infrahub provides a powerful mechanism to transform existing objects from one schema type to another without losing data or breaking relationships. This capability addresses the common infrastructure management challenge of evolving data models while preserving existing configurations and connections. ### load-from-yaml An Object file is a YAML file that allows you to manage data to be loaded in Infrahub based on your own custom schema. It provides a declarative way to define and manage resources in your Infrahub instance. - [Object files](/objects/load-from-yaml.md): An Object file is a YAML file that allows you to manage data to be loaded in Infrahub based on your own custom schema. It provides a declarative way to define and manage resources in your Infrahub instance. ### metadata Data lineage - [Data lineage and metadata](/objects/metadata.md): Data lineage ### overview An object is a record stored in Infrahub that conforms to a schema node definition. If schema nodes are the blueprints, objects are the actual instances of data — a specific router, an interface, a BGP session, a rack. - [Objects](/objects/overview.md): An object is a record stored in Infrahub that conforms to a schema node definition. If schema nodes are the blueprints, objects are the actual instances of data — a specific router, an interface, a BGP session, a rack. ## overview A graph-based infrastructure data management platform with built-in version control, CI workflows, peer review, and API access. - [What is Infrahub](/overview.md): A graph-based infrastructure data management platform with built-in version control, CI workflows, peer review, and API access. ### architecture Infrahub's architecture combines graph database technology with Git-like version control to create a powerful platform for infrastructure management. This topic explains the core components, design principles, and how they work together to deliver a unified infrastructure management solution. - [Understanding Infrahub's architecture](/overview/architecture.md): Infrahub's architecture combines graph database technology with Git-like version control to create a powerful platform for infrastructure management. This topic explains the core components, design principles, and how they work together to deliver a unified infrastructure management solution. ### community-vs-enterprise Infrahub is available in two distinct editions designed to meet different organizational needs: Community Edition and Enterprise Edition. This topic explains the differences between these editions to help you choose the right version for your infrastructure management needs. - [Understanding Infrahub community vs enterprise](/overview/community-vs-enterprise.md): Infrahub is available in two distinct editions designed to meet different organizational needs: Community Edition and Enterprise Edition. This topic explains the differences between these editions to help you choose the right version for your infrastructure management needs. ### concepts Core principles behind Infrahub — flexible schemas, version control, Transformations, Generators, and design-driven automation. - [Key Concepts](/overview/concepts.md): Core principles behind Infrahub — flexible schemas, version control, Transformations, Generators, and design-driven automation. ### explore See Infrahub in action through the sandbox, interactive labs, videos, and demos. - [Explore Infrahub](/overview/explore.md): See Infrahub in action through the sandbox, interactive labs, videos, and demos. ### next-steps Turn your local Infrahub setup into a proof of concept for your organization. - [Next Steps](/overview/next-steps.md): Turn your local Infrahub setup into a proof of concept for your organization. ### quickstart Set up a local Infrahub instance, load a data model, create infrastructure data, and explore branching. - [Quick Start](/overview/quickstart.md): Set up a local Infrahub instance, load a data model, create infrastructure data, and explore branching. ## profiles ### assign When creating or updating an object, reference a Profile by HFID. The object inherits the Profile's values for any attributes you don't set explicitly. - [Assign a Profile to an object](/profiles/assign.md): When creating or updating an object, reference a Profile by HFID. The object inherits the Profile's values for any attributes you don't set explicitly. ### create Define a reusable set of attribute values for a Profile-enabled node type. - [Create a Profile](/profiles/create.md): Define a reusable set of attribute values for a Profile-enabled node type. ### override-values When a Profile-assigned object should differ for a specific field, set the value explicitly when creating or updating the object. Explicit values take precedence over Profile values; other attributes still inherit from the Profile. - [Override specific Profile values](/profiles/override-values.md): When a Profile-assigned object should differ for a specific field, set the value explicitly when creating or updating the object. Explicit values take precedence over Profile values; other attributes still inherit from the Profile. ### overview This topic explains the concept of Profiles in Infrahub, their purpose in the system architecture, and how they enable configuration consistency across your infrastructure. You'll gain a deeper understanding of Profile inheritance, priority mechanisms, and the design decisions behind this feature. - [Profiles](/profiles/overview.md): This topic explains the concept of Profiles in Infrahub, their purpose in the system architecture, and how they enable configuration consistency across your infrastructure. You'll gain a deeper understanding of Profile inheritance, priority mechanisms, and the design decisions behind this feature. ### priority-and-inheritance When an object has one or more Profiles assigned, Infrahub uses a deterministic process to decide which value applies to each attribute or relationship. This page explains both the inheritance flow and the priority system that resolves conflicts when multiple Profiles apply. - [Priority and inheritance](/profiles/priority-and-inheritance.md): When an object has one or more Profiles assigned, Infrahub uses a deterministic process to decide which value applies to each attribute or relationship. This page explains both the inheritance flow and the priority system that resolves conflicts when multiple Profiles apply. ### update Change Profile values; all objects assigned to the Profile inherit the change automatically. Objects that have explicitly overridden the attribute keep their override — only objects relying on the Profile value see the change. - [Update a Profile](/profiles/update.md): Change Profile values; all objects assigned to the Profile inherit the change automatically. Objects that have explicitly overridden the attribute keep their override — only objects relying on the Profile value see the change. ### use-multiple A single object can be assigned multiple Profiles. When multiple Profiles define the same attribute, the profile_priority value (lower number = higher priority) determines which Profile's value wins. - [Use multiple Profiles](/profiles/use-multiple.md): A single object can be assigned multiple Profiles. When multiple Profiles define the same attribute, the profile_priority value (lower number = higher priority) determines which Profile's value wins. ## proposed-changes ### lifecycle Proposed changes follow a workflow with specific states that track progression from initial creation to final resolution. - [Lifecycle and state transitions](/proposed-changes/lifecycle.md): Proposed changes follow a workflow with specific states that track progression from initial creation to final resolution. ### overview A proposed change in Infrahub is a structured workflow mechanism that enables teams to review, discuss, and merge changes in a controlled and collaborative manner. It serves as the primary method for implementing infrastructure changes safely while maintaining proper oversight and governance. - [Proposed Changes](/proposed-changes/overview.md): A proposed change in Infrahub is a structured workflow mechanism that enables teams to review, discuss, and merge changes in a controlled and collaborative manner. It serves as the primary method for implementing infrastructure changes safely while maintaining proper oversight and governance. ### resolve-conflict When a proposed change has data conflicts between its source and target branches, Infrahub blocks the merge to protect the integrity of your infrastructure data. Conflicts are resolved during the review process, before the change can be approved and merged. - [Resolve a proposed-change conflict](/proposed-changes/resolve-conflict.md): When a proposed change has data conflicts between its source and target branches, Infrahub blocks the merge to protect the integrity of your infrastructure data. Conflicts are resolved during the review process, before the change can be approved and merged. ### review-and-stamp The review process gives team members structured ways to evaluate a proposed change, comment on specific elements, and ultimately stamp it as approved or rejected. - [Review and stamp](/proposed-changes/review-and-stamp.md): The review process gives team members structured ways to evaluate a proposed change, comment on specific elements, and ultimately stamp it as approved or rejected. ## reference - [Reference](/reference.md) ### configuration Configuration options for Infrahub - [Infrahub configuration](/reference/configuration.md): Configuration options for Infrahub ### dotinfrahub The repository configuration file allows you to define multiple resources that need to be imported into Infrahub. - [Repository configuration file](/reference/dotinfrahub.md): The repository configuration file allows you to define multiple resources that need to be imported into Infrahub. ### infrahub-cli - [CLI](/reference/infrahub-cli.md) - [infrahub db](/reference/infrahub-cli/infrahub-db.md): Manage the graph in the database. - [infrahub dev](/reference/infrahub-cli/infrahub-dev.md): Usage: - [infrahub server](/reference/infrahub-cli/infrahub-server.md): Control the API Server. - [infrahub upgrade](/reference/infrahub-cli/infrahub-upgrade.md): Upgrade Infrahub to the latest version. ### infrahub-events - [Account events](/reference/infrahub-events/account.md): Account Logged In Event - [Artifact events](/reference/infrahub-events/artifact.md): Artifact Created Event - [Branch events](/reference/infrahub-events/branch.md): Branch Created Event - [Commit events](/reference/infrahub-events/commit.md): Commit Updated Event - [Group events](/reference/infrahub-events/group.md): Group Member Added Event - [Node events](/reference/infrahub-events/node.md): Node Created Event - [Event reference](/reference/infrahub-events/overview.md): Complete reference for all events emitted by Infrahub. Each page lists every event in that category with its type identifier, description, and payload fields. - [Proposed events](/reference/infrahub-events/proposed.md): Proposed Change Approval Revoked Event - [Schema events](/reference/infrahub-events/schema.md): Schema Updated Event - [Validator events](/reference/infrahub-events/validator.md): Validator Failed Event ### infrahub-tests The tests configuration file allows you to define multiple tests for Infrahub resources such as Jinja2 Transformations, Python Transformations, checks and GraphQL queries. - [Tests configuration file](/reference/infrahub-tests.md): The tests configuration file allows you to define multiple tests for Infrahub resources such as Jinja2 Transformations, Python Transformations, checks and GraphQL queries. ### menu A menu definition file allows you to control the layout and structure of the menu on the left side of the Infrahub web interface. More information can be found in the Controlling the menu guide. - [Menu definition file](/reference/menu.md): A menu definition file allows you to control the layout and structure of the menu on the left side of the Infrahub web interface. More information can be found in the Controlling the menu guide. ### message-bus-events This document provides detailed documentation for all events used in the Infrahub message bus system. - [Message bus events](/reference/message-bus-events.md): This document provides detailed documentation for all events used in the Infrahub message bus system. ### permissions Reference documentation for Infrahub's global and object permissions - [Permissions](/reference/permissions.md): Reference documentation for Infrahub's global and object permissions ### schema - [Schema Specification](/reference/schema.md) - [Attribute](/reference/schema/attribute.md): In a schema file, an attribute can be defined inside a node, a generic or a node extension. - [Generic](/reference/schema/generic.md): All options to define a Generic in the schema - [Groups](/reference/schema/groups.md): Groups schema reference - [Node](/reference/schema/node.md): Node schema reference - [Node Extension](/reference/schema/node-extension.md): All options to define a node extension in the schema - [Relationship](/reference/schema/relationship.md): In a schema file, a relationship can be defined inside a node, a generic or a node extension. - [Schema Update](/reference/schema/validator-migration.md): In this context, an element represent either a Node, a Generic, an Attribute or a Relationship ### schema-validation Infrahub requires the user to define multiple YAML files. One or more files defining the schema in Infrahub and the external repository configuration file. - [Schema validation](/reference/schema-validation.md): Infrahub requires the user to define multiple YAML files. One or more files defining the schema in Infrahub and the external repository configuration file. ### sso This reference document describes the available SSO protocols, configuration options, and parameters in Infrahub. - [SSO (Single sign-on)](/reference/sso.md): This reference document describes the available SSO protocols, configuration options, and parameters in Infrahub. ## release-notes - [Release Notes](/release-notes.md) ### deprecation-guides - [Deprecation Guides](/release-notes/deprecation-guides.md) - [How to migrate from display_labels to display_label](/release-notes/deprecation-guides/display_labels.md): With Infrahub version 1.5, the displaylabels configuration was deprecated in favor of a Jinja2-based displaylabel configuration that provides more flexibility and consistency. ### infrahub - [Infrahub](/release-notes/infrahub.md) - [Documentation restructure](/release-notes/infrahub/docs-restructure.md): Why we reorganized - [Release 0.10.0 - Alpha #4](/release-notes/infrahub/release-0_10.md): Release Number - [Release 0.11.0 - Alpha #5](/release-notes/infrahub/release-0_11.md): Release Number - [Release 0.12.0 - Beta #1](/release-notes/infrahub/release-0_12.md): Release Number - [Release 0.13.0](/release-notes/infrahub/release-0_13.md): Release Number - [Release 0.14.0](/release-notes/infrahub/release-0_14.md): Release Number - [Release 0.15.0](/release-notes/infrahub/release-0_15_0.md): Release Number - [Release 0.15.1](/release-notes/infrahub/release-0_15_1.md): Release Number - [Release 0.15.2](/release-notes/infrahub/release-0_15_2.md): Release Number - [Release 0.15.3](/release-notes/infrahub/release-0_15_3.md): Release Number - [Release 0.16](/release-notes/infrahub/release-0_16_0.md): Release Number - [Release 0.16.1](/release-notes/infrahub/release-0_16_1.md): Release Number - [Release 0.16.2](/release-notes/infrahub/release-0_16_2.md): Release Number - [Release 0.16.3](/release-notes/infrahub/release-0_16_3.md): Release Number - [Release 0.16.4](/release-notes/infrahub/release-0_16_4.md): Release Number - [Release 0.6.0](/release-notes/infrahub/release-0_6.md): Release Number - [Release 0.7.0](/release-notes/infrahub/release-0_7.md): Release Number - [Release 0.8.0 - Alpha #2](/release-notes/infrahub/release-0_8.md): Release Number - [Release 0.9.0 - Alpha #3](/release-notes/infrahub/release-0_9.md): Release Number - [Release 1.0](/release-notes/infrahub/release-1_0_0.md): Release Number - [Release 1.0.1](/release-notes/infrahub/release-1_0_1.md): Release Number - [Release 1.0.10](/release-notes/infrahub/release-1_0_10.md): Release Number - [Release 1.0.2](/release-notes/infrahub/release-1_0_2.md): Release Number - [Release 1.0.3](/release-notes/infrahub/release-1_0_3.md): Release Number - [Release 1.0.4](/release-notes/infrahub/release-1_0_4.md): Release Number - [Release 1.0.5](/release-notes/infrahub/release-1_0_5.md): Release Number - [Release 1.0.6](/release-notes/infrahub/release-1_0_6.md): Release Number - [Release 1.0.7](/release-notes/infrahub/release-1_0_7.md): Release Number - [Release 1.0.8](/release-notes/infrahub/release-1_0_8.md): Release Number - [Release 1.0.9](/release-notes/infrahub/release-1_0_9.md): Release Number - [Release 1.1.0](/release-notes/infrahub/release-1_1_0.md): Release Number - [Release 1.1.1](/release-notes/infrahub/release-1_1_1.md): Release Number - [Release 1.1.2](/release-notes/infrahub/release-1_1_2.md): Release Number - [Release 1.1.3](/release-notes/infrahub/release-1_1_3.md): Release Number - [Release 1.1.4](/release-notes/infrahub/release-1_1_4.md): Release Number - [Release 1.1.5](/release-notes/infrahub/release-1_1_5.md): Release Number - [Release 1.1.6](/release-notes/infrahub/release-1_1_6.md): Release Number - [Release 1.1.7](/release-notes/infrahub/release-1_1_7.md): Release Number - [Release 1.1.8](/release-notes/infrahub/release-1_1_8.md): Release Number - [Release 1.1.9](/release-notes/infrahub/release-1_1_9.md): Release Number - [Release 1.2.0](/release-notes/infrahub/release-1_2_0.md): Release Number - [Release 1.2.1](/release-notes/infrahub/release-1_2_1.md): Release Number - [Release 1.2.10](/release-notes/infrahub/release-1_2_10.md): Release Number - [Release 1.2.11](/release-notes/infrahub/release-1_2_11.md): Release Number - [Release 1.2.12](/release-notes/infrahub/release-1_2_12.md): Release Number - [Release 1.2.2](/release-notes/infrahub/release-1_2_2.md): Release Number - [Release 1.2.3](/release-notes/infrahub/release-1_2_3.md): Release Number - [Release 1.2.4](/release-notes/infrahub/release-1_2_4.md): Release Number - [Release 1.2.5](/release-notes/infrahub/release-1_2_5.md): Release Number - [Release 1.2.6](/release-notes/infrahub/release-1_2_6.md): Release Number - [Release 1.2.7](/release-notes/infrahub/release-1_2_7.md): Release Number - [Release 1.2.8](/release-notes/infrahub/release-1_2_8.md): Release Number - [Release 1.2.9](/release-notes/infrahub/release-1_2_9.md): Release Number - [Release 1.3.0](/release-notes/infrahub/release-1_3_0.md): Release Number - [Release 1.3.1](/release-notes/infrahub/release-1_3_1.md): Release Number - [Release 1.3.2](/release-notes/infrahub/release-1_3_2.md): Release Number - [Release 1.3.3](/release-notes/infrahub/release-1_3_3.md): Release Number - [Release 1.3.5](/release-notes/infrahub/release-1_3_5.md): Release Number - [Release 1.3.6](/release-notes/infrahub/release-1_3_6.md): Release Number - [Release 1.3.7](/release-notes/infrahub/release-1_3_7.md): Release Number - [Release 1.4.0](/release-notes/infrahub/release-1_4_0.md): Release Number - [Release 1.4.1](/release-notes/infrahub/release-1_4_1.md): Release Number - [Release 1.4.10](/release-notes/infrahub/release-1_4_10.md): Release Number - [Release 1.4.11](/release-notes/infrahub/release-1_4_11.md): Release Number - [Release 1.4.12](/release-notes/infrahub/release-1_4_12.md): Release Number - [Release 1.4.13](/release-notes/infrahub/release-1_4_13.md): Release Number - [Release 1.4.2](/release-notes/infrahub/release-1_4_2.md): Release Number - [Release 1.4.3](/release-notes/infrahub/release-1_4_3.md): Release Number - [Release 1.4.4](/release-notes/infrahub/release-1_4_4.md): Release Number - [Release 1.4.5](/release-notes/infrahub/release-1_4_5.md): Release Number - [Release 1.4.6](/release-notes/infrahub/release-1_4_6.md): Release Number - [Release 1.4.7](/release-notes/infrahub/release-1_4_7.md): Release Number - [Release 1.4.8](/release-notes/infrahub/release-1_4_8.md): Release Number - [Release 1.4.9](/release-notes/infrahub/release-1_4_9.md): Release Number - [Main changes](/release-notes/infrahub/release-1_5_0.md): Release Number - [Release 1.5.1](/release-notes/infrahub/release-1_5_1.md): Release Number - [Release 1.5.2](/release-notes/infrahub/release-1_5_2.md): Release Number - [Release 1.5.3](/release-notes/infrahub/release-1_5_3.md): Release Number - [Main changes](/release-notes/infrahub/release-1_6_0.md): Release Number - [Release 1.6.1](/release-notes/infrahub/release-1_6_1.md): Release Number - [Release 1.6.2](/release-notes/infrahub/release-1_6_2.md): Release Number - [Release 1.6.3](/release-notes/infrahub/release-1_6_3.md): Release Number - [Release 1.7.0](/release-notes/infrahub/release-1_7_0.md): Release Number - [Release 1.7.1](/release-notes/infrahub/release-1_7_1.md): Release Number - [Release 1.7.2](/release-notes/infrahub/release-1_7_2.md): Release Number - [Release 1.7.3](/release-notes/infrahub/release-1_7_3.md): Release Number - [Release 1.7.4](/release-notes/infrahub/release-1_7_4.md): Release Number - [Release 1.7.5](/release-notes/infrahub/release-1_7_5.md): Release Number - [Release 1.7.6](/release-notes/infrahub/release-1_7_6.md): Release Number - [Release 1.7.7](/release-notes/infrahub/release-1_7_7.md): Release Number - [Release 1.8.0](/release-notes/infrahub/release-1_8_0.md): Release Number - [Release 1.8.1](/release-notes/infrahub/release-1_8_1.md): Release Number - [Release 1.8.2](/release-notes/infrahub/release-1_8_2.md): Release Number - [Release 1.8.3](/release-notes/infrahub/release-1_8_3.md): Release Number - [Release 1.8.4](/release-notes/infrahub/release-1_8_4.md): Release Number - [Release 1.8.5](/release-notes/infrahub/release-1_8_5.md): Release Number - [Release 1.8.6](/release-notes/infrahub/release-1_8_6.md): Release Number - [Release 1.9.0](/release-notes/infrahub/release-1_9_0.md): Release Number - [Release 1.9.1](/release-notes/infrahub/release-1_9_1.md): Release Number - [Release 1.9.2](/release-notes/infrahub/release-1_9_2.md): Release Number - [Release 1.9.3](/release-notes/infrahub/release-1_9_3.md): Release Number - [Release 1.9.4](/release-notes/infrahub/release-1_9_4.md): Release Number - [Release 1.9.5](/release-notes/infrahub/release-1_9_5.md): Release Number - [Release 1.9.6](/release-notes/infrahub/release-1_9_6.md): Release Number - [Release 1.9.7](/release-notes/infrahub/release-1_9_7.md): Release Number ## resource-manager ### allocate-ip-address IP address pools (CoreIPAddressPool) dynamically allocate individual IP addresses from source prefixes. - [Allocate IP addresses](/resource-manager/allocate-ip-address.md): IP address pools (CoreIPAddressPool) dynamically allocate individual IP addresses from source prefixes. ### allocate-ip-prefix IP prefix pools (CoreIPPrefixPool) allocate IP subnets from larger prefixes. - [Allocate IP prefixes](/resource-manager/allocate-ip-prefix.md): IP prefix pools (CoreIPPrefixPool) allocate IP subnets from larger prefixes. ### allocate-number Number pools (CoreNumberPool) automatically assign sequential numbers to numeric attributes. - [Allocate numbers](/resource-manager/allocate-number.md): Number pools (CoreNumberPool) automatically assign sequential numbers to numeric attributes. ### overview Resource Manager in Infrahub automates the allocation of network resources from predefined pools, eliminating manual assignment and preventing conflicts across your infrastructure. This system ensures consistent resource allocation while maintaining complete visibility and control over your available resources. - [Resource Manager](/resource-manager/overview.md): Resource Manager in Infrahub automates the allocation of network resources from predefined pools, eliminating manual assignment and preventing conflicts across your infrastructure. This system ensures consistent resource allocation while maintaining complete visibility and control over your available resources. ### weighted-allocation When multiple resources can be allocated from a pool, you can control the allocation order using weights. Resources with higher weights are allocated first. - [Weighted allocation](/resource-manager/weighted-allocation.md): When multiple resources can be allocated from a pool, you can control the allocation order using weights. Resources with higher weights are allocated first. ## schema-and-data - [Schema & Data](/schema-and-data.md) ## schema ### branch-awareness Every schema element — nodes, attributes, and relationships — can be configured to control how changes to its data behave across branches. - [Branch awareness](/schema/branch-awareness.md): Every schema element — nodes, attributes, and relationships — can be configured to control how changes to its data behave across branches. ### create-and-load Schemas are defined in YAML format and follow a strict structure. Splitting a schema into multiple smaller files is recommended to keep it maintainable as it grows. - [Create and load schema](/schema/create-and-load.md): Schemas are defined in YAML format and follow a strict structure. Splitting a schema into multiple smaller files is recommended to keep it maintainable as it grows. ### display_label Display labels in Infrahub provide human-friendly names and identifiers for schema elements and object instances. They serve as the primary way users interact with and identify objects throughout the system, from the user interface to GraphQL queries. - [Display labels](/schema/display_label.md): Display labels in Infrahub provide human-friendly names and identifiers for schema elements and object instances. They serve as the primary way users interact with and identify objects throughout the system, from the user interface to GraphQL queries. ### extensions Schema extensions provide a mechanism to add attributes and relationships to existing nodes without redefining them. This enables modular schema composition where features can be developed, reviewed, and managed as self-contained files. - [Schema extensions](/schema/extensions.md): Schema extensions provide a mechanism to add attributes and relationships to existing nodes without redefining them. This enables modular schema composition where features can be developed, reviewed, and managed as self-contained files. ### field-visibility Infrahub schemas can declare how attributes and relationships should appear in the frontend, independently of their presence in the data model. These declarations are purely UI hints — they do not affect data access via the API, GraphQL, or forms. - [Field visibility](/schema/field-visibility.md): Infrahub schemas can declare how attributes and relationships should appear in the frontend, independently of their presence in the data model. These declarations are purely UI hints — they do not affect data access via the API, GraphQL, or forms. ### file-object Infrastructure management often involves more than just structured data. Contracts, documents, and pictures are all essential assets that relate directly to the devices, circuits, and services they describe. Infrahub's file object feature lets you attach files to any node in the graph, making these files first-class citizens of your infrastructure data model with full version control, branch isolation, and permission enforcement. - [File objects](/schema/file-object.md): Infrastructure management often involves more than just structured data. Contracts, documents, and pictures are all essential assets that relate directly to the devices, circuits, and services they describe. Infrahub's file object feature lets you attach files to any node in the graph, making these files first-class citizens of your infrastructure data model with full version control, branch isolation, and permission enforcement. ### generics-and-inheritance A Generic in Infrahub is a reusable base that shares attributes and relationships across multiple node types. They work similarly to abstract base classes or interfaces in object-oriented programming — you define common structure once, and node types that inherit_from a generic receive that structure automatically. - [Generics & inheritance](/schema/generics-and-inheritance.md): A Generic in Infrahub is a reusable base that shares attributes and relationships across multiple node types. They work similarly to abstract base classes or interfaces in object-oriented programming — you define common structure once, and node types that inherit_from a generic receive that structure automatically. ### hierarchy Infrahub supports organizing nodes of similar types into a tree structure. Hierarchy mode enables ancestor and descendant queries, and allows filtering related data across multiple levels of the tree without direct relationships between every node. - [Hierarchy](/schema/hierarchy.md): Infrahub supports organizing nodes of similar types into a tree structure. Hierarchy mode enables ancestor and descendant queries, and allows filtering related data across multiple levels of the tree without direct relationships between every node. ### marketplace The Infrahub Marketplace is a public catalog of pre-built schemas and schema collections that you can fetch and load into any Infrahub instance. - [Infrahub Marketplace](/schema/marketplace.md): The Infrahub Marketplace is a public catalog of pre-built schemas and schema collections that you can fetch and load into any Infrahub instance. ### migration Unlike most databases that support a single schema at a time, in Infrahub it is possible to have a different schema per branch. - [Schema migration](/schema/migration.md): Unlike most databases that support a single schema at a time, in Infrahub it is possible to have a different schema per branch. ### nodes-and-attributes A Node is the fundamental unit of the schema — it represents a concrete object in your infrastructure model such as a device, interface, or IP address. Nodes are composed of Attributes (direct values) and Relationships (links to other nodes). This page covers how to define nodes and attributes, what kinds are available, and how to configure identifiers, constraints, and display. - [Nodes & attributes](/schema/nodes-and-attributes.md): A Node is the fundamental unit of the schema — it represents a concrete object in your infrastructure model such as a device, interface, or IP address. Nodes are composed of Attributes (direct values) and Relationships (links to other nodes). This page covers how to define nodes and attributes, what kinds are available, and how to configure identifiers, constraints, and display. ### number-pool The NumberPool attribute kind enables the dynamic creation of a CoreNumberPool for the specific schema node and attribute rather than requiring users to define this after the schema is loaded. - [Number pools](/schema/number-pool.md): The NumberPool attribute kind enables the dynamic creation of a CoreNumberPool for the specific schema node and attribute rather than requiring users to define this after the schema is loaded. ### order-weight The orderweight property controls how attributes and relationships are ordered in the Infrahub frontend, including table views and detailed object views. **Lower orderweight values appear first. This means items with smaller numbers are displayed before those with larger numbers. Understanding how default values are assigned and how to work with them effectively is crucial for creating well-organized schemas. - [Order weight](/schema/order-weight.md): The orderweight property controls how attributes and relationships are ordered in the Infrahub frontend, including table views and detailed object views. **Lower orderweight values appear first. This means items with smaller numbers are displayed before those with larger numbers. Understanding how default values are assigned and how to work with them effectively is crucial for creating well-organized schemas. ### overview The schema is Infrahub's data model — a flexible, organization-specific definition of what objects exist in your infrastructure, design, and business logic, what properties they have, and how they relate to each other. It acts as an abstraction layer over the graph database, so no knowledge of database administration is needed for day-to-day use. - [About schema](/schema/overview.md): The schema is Infrahub's data model — a flexible, organization-specific definition of what objects exist in your infrastructure, design, and business logic, what properties they have, and how they relate to each other. It acts as an abstraction layer over the graph database, so no knowledge of database administration is needed for day-to-day use. ### relationships A Relationship in Infrahub represents a typed link between two nodes. Unlike a simple foreign key, relationships have a kind that determines how they appear in the UI and how they behave during deletion and hierarchy traversal. - [Relationships](/schema/relationships.md): A Relationship in Infrahub represents a typed link between two nodes. Unlike a simple foreign key, relationships have a kind that determines how they appear in the UI and how they behave during deletion and hierarchy traversal. ## snippets ### attribute-kind-params | Parameter | Default | - [attribute-kind-params](/snippets/attribute-kind-params.md): | Parameter | Default | ### pre-reqs-base | Prerequisite Tool(s) | Post Installation Steps | - [pre-reqs-base](/snippets/pre-reqs-base.md): | Prerequisite Tool(s) | Post Installation Steps | ### pre-reqs-frontend | Prerequisite Tool(s) | Post Installation Steps | - [pre-reqs-frontend](/snippets/pre-reqs-frontend.md): | Prerequisite Tool(s) | Post Installation Steps | ## testing-framework ### overview Summary - [Testing framework](/testing-framework/overview.md): Summary ## transformations ### jinja2 A Jinja2 Transformation renders Infrahub data through a Jinja template, producing plain text output (configurations, manifests, payloads). The steps below cover how to write one. - [Write a Jinja2 Transformation](/transformations/jinja2.md): A Jinja2 Transformation renders Infrahub data through a Jinja template, producing plain text output (configurations, manifests, payloads). The steps below cover how to write one. ### overview A Transformation is a generic plugin to transform a dataset into a different format to simplify it's ingestion by third-party systems. - [Transformations](/transformations/overview.md): A Transformation is a generic plugin to transform a dataset into a different format to simplify it's ingestion by third-party systems. ### python A Python Transformation processes Infrahub data through user-written Python code, producing JSON output (or any structured data you serialize). Use this when Jinja templating isn't enough — for example, conditional logic, external API calls, or complex aggregation. The steps below cover how to write one. - [Write a Python Transformation](/transformations/python.md): A Python Transformation processes Infrahub data through user-written Python code, producing JSON output (or any structured data you serialize). Use this when Jinja templating isn't enough — for example, conditional logic, external API calls, or complex aggregation. The steps below cover how to write one. ## webhooks ### create 1. Login to Infrahub's web interface as an administrator. - [Create a webhook](/webhooks/create.md): 1. Login to Infrahub's web interface as an administrator. ### custom-transformation Custom webhooks allow you to transform event data before sending it to an external endpoint. This is useful when the receiving system expects a specific payload format, such as Slack, Microsoft Teams, GitHub Actions, or other third-party APIs. - [Webhook with custom Transformation](/webhooks/custom-transformation.md): Custom webhooks allow you to transform event data before sending it to an external endpoint. This is useful when the receiving system expects a specific payload format, such as Slack, Microsoft Teams, GitHub Actions, or other third-party APIs. ### overview Webhooks are HTTP callbacks that deliver data to external systems in real-time when an event occurs within Infrahub. They allow you to: - [What are webhooks?](/webhooks/overview.md): Webhooks are HTTP callbacks that deliver data to external systems in real-time when an event occurs within Infrahub. They allow you to: