Skip to main content

Schema file

The recommended way to manage and load a schema is to create a schema file in YAML format. With a schema file it's possible to:

  • Define new nodes
  • Extend nodes, by adding attributes or relationships to the existing nodes

At a high level, the format of the schema file looks like the following:

---
version: '1.0'
nodes:
- <new nodes are defined here>
extensions:
nodes:
- <node extensions are defined here>
Example of schema file that is defining new nodes and adding a relationship to an existing one
# yaml-language-server: $schema=https://schema.infrahub.app/infrahub/schema/latest.json
---
version: '1.0'
nodes:
- name: Rack
namespace: Infra
description: "A Rack represents a physical two- or four-post equipment rack in which devices can be installed"
label: "Rack"
default_filter: name__value
icon: clarity:rack-server-solid
display_labels:
- name__value
attributes:
- name: name
kind: Text
# unique: true
- name: description
kind: Text
optional: true
- name: height
kind: Text
- name: facility_id
label: Facility ID
kind: Text
optional: true
- name: serial_number
label: Serial Number
kind: Text
optional: true
- name: asset_tag
label: Asset Tag
kind: Text
optional: true
- name: status
kind: Dropdown
choices:
- name: active
label: Active
description: "Functional and ready for production"
color: "#009933"
- name: planned
label: Planned
description: "Not physically present yet"
color: "#cc66ff"
default_value: "active"
- name: role
kind: Dropdown
choices:
- name: compute
description: "Rack mainly composed of compute"
color: "#0099ff"
- name: storage
description: "Rack mainly composed of Storage devices"
color: "#993399"
- name: networking
description: "Rack mainly composed of Network devices"
color: "#ff6600"
optional: true
relationships:
- name: site
peer: InfraSite
optional: false
cardinality: one
kind: Attribute
- name: tags
peer: BuiltinTag
optional: true
cardinality: many
kind: Attribute
extensions:
nodes:
- kind: InfraSite
relationships:
- name: racks
peer: InfraRack
optional: true
cardinality: many
kind: Generic
note

To help with the development process of a schema definition file, you can leverage schema validation within your editor.

Load a schema file​

Schema files can be loaded into Infrahub with the infrahubctl command or directly via the Git integration.

infrahubctl command​

The infrahubctl command can be used to load individual schema files or multiple files as part of a directory.

infrahubctl schema load <path to schema file or a directory> <path to schema file or a directory>

Git integration​

You can defined a schema in an external repository. The schemas that should be loaded must be declared in the .infrahub.yml file, under schemas.

Individual files and directory are both supported.

---
schemas:
- schemas/demo_edge_fabric.yml