Schema

Schema are top-level asset families : Devices, Applications, Laptops, Projects, Customers, Books, Facilities, Cooking Receipes, Invoices, etc.

Create a simple Schema

To manage laptops (for example), you can use a simple Schema:

- classname: _schema
  keyname: laptop
  displayname: User Laptops      

Go to the import tool from the left sidebar, and paste this YAML snippet. Clic on import. You can now access the laptop objects from the menu.

You can also use the CLI command :

$ cavaliba load laptop.yaml

To create a first laptop object in the new Schema, either use the Web UI (edit), or import the following YAML snippet:

- classname: laptop
  keyname: pc0001
  displayname: Billy's laptop      

Builtin Fields

All Schema share a small number of builtin fields.

  • keyname - primary key - unique name of the Schema ; no special chars ; must be unique. Some options exists to hide/auto-generate keyname if a user friendly value is not needed.

  • displayname - a short label for humans to read

  • is_enabled - true/false ; disabled objects are not available to regular users.

  • _options - dictionary of Schema options. See below

Schema _options

  • page - string, page name in the Web UI displaying the list of available DataClasses

  • order - int, display order in the Web UI

  • icon - string, name of a FontAwsome Icon to display in UI

  • handle_method - method to create a unique HTML friendly primary key for instances

  • permissions… - a set of permissions to control authorizations on instances

Schema Fields

Each DataClass Schema can have zero or more custom fields. These fields can be single-valued or multi-valued. They have a type from one of the available field types below.

Field name must be a valid slug string (unique, no special chararcter) within the DataClass schema.

Available field types:

  • string
  • int
  • float
  • date
  • datetime
  • time
  • boolean
  • ipv4
  • text
  • enumerate (static lists)
  • schema (other DataClass)
  • user group
  • user

YAML Example

This simple example create a DataClass to manage user Laptops.

# Asset = User Laptops

- classname: _schema
  keyname: laptop
  displayname: User Laptops
  is_enabled: yes
  icon: fa-laptop
  order: 200
  page: Data
  handle_method: md5

  serial:
        displayname: serial_number
        page: General
        order: 100
        dataformat: string
               
  name:
        displayname: hostname
        page: General
        order: 110
        dataformat: string

  os:
        displayname: Operating System
        page: General
        order: 120
        dataformat: enumerate
        dataformat_ext: enumerate_os

  site:      
        displayname: Site
        dataformat: schema
        dataformat_ext: site
        order: 130
        page: General
        cardinal_min: 0
        cardinal_max: 1 

  owner:      
        displayname: User
        dataformat: user
        order: 140
        page: General
        cardinal_min: 0
        cardinal_max: 0

  purchase_date:
        displayname: Purchase date
        dataformat: date

  waranty_end_date:
        displayname: Waranty end date
        dataformat: date

  bitlocker:
        displayname: Bitlocker
        page: Security
        order: 500
        dataformat: boolean

YAML Reference


- classname: _schema
  _action: create/delete/update/enable/disable
  keyname: string
  displayname: string
  is_enabled: boolean
  handle_method: [keyname|uuid|external|md5]
  icon: icon_name
  order: int
  page: string
  p_admin:  PERMISSION_NAME
  p_read:   PERMISSION_NAME
  p_create: PERMISSION_NAME
  p_update: PERMISSION_NAME
  p_delete: PERMISSION_NAME
  p_import: PERMISSION_NAME
  p_export: PERMISSION_NAME

  field_name:
       _action: create/delete/update/enable/disable
       displayname: string
       dataformat: fieldtype
       dataformat_ext: extended_fieldtype
       cardinal_min: int
       cardinal_max: int
       default : string
   (...)