Skip to content

Configuration Copy

Using the contrail cli, you can download your entire org's configuration. You will be able to upload this configuration to a different org, modify it and load it again or review your configuration data.

Getting Started

To download your organization's configuration, follow these steps:

  1. Create a new folder named after your organization to store configuration files.
  2. Navigate to this folder in your terminal and run:
    contrail types getAll
    
  3. When prompted, enter your VibeIQ login credentials to authenticate.
  4. After the command execution completes, you'll find the following file structure in your folder.

Configuration File Structure

📦 Root
├── 📁 option-set-hierarchies
│   ├── 📄 option-set-hierarchy-1.yml
├── 📁 option-sets
│   ├── 📄 custom-option-set-1.yml
│   ├── 📄 custom-option-set2.yml
│   ├── 📄 men.yml
│   ├── 📄 women.yml
│   ├── 📄 children.yml
├── 📁 rule-sets
├── 📁 type-policies
├── 📁 type-property-policies
│   └── 📄 tp-policy.yml
├── 📁 types
│   ├── 📄 asset.yml
│   ├── 📄 assortment-item.yml
│   ├── 📄 assortment.yml
│   ├── 📄 board.yml
│   ├── 📄 change-history.yml
│   ├── 📄 color.yml
│   ├── 📄 comment.yml
│   ├── 📄 content.yml
│   ├── 📄 custom-entity.yml
│   ├── 📄 file.yml
│   ├── 📄 item-color.yml
│   ├── 📄 item.yml
│   ├── 📄 org.yml
│   ├── 📄 plan-placeholder.yml
│   ├── 📄 plan.yml
│   ├── 📄 policy.yml
│   ├── 📄 project-item.yml
│   ├── 📄 project.yml
│   ├── 📄 showcase.yml
│   ├── 📄 size-range-template.yml
│   ├── 📄 system-notification.yml
│   ├── 📄 user-access.yml
│   ├── 📄 user-org.yml
│   ├── 📄 user.yml
│   ├── 📄 workspace-principal.yml
│   └── 📄 workspace.yml
├── 📄 rule-set-links.yml
├── 📄 type-option-set-hierarchy-links.yml
├── 📄 type-policy-links.yml
├── 📄 type-property-policy-links.yml
└── 📄 usage-info.yml

Option Set Hierarchies (Folder)

This folder contains a set of .yml files, one for each Option Set Hierarchy (OSH) found in your org. Each .yml file contains the following structure:

  • name: The display name of the OSH.
  • identifier: A unique identifier for the OSH.
  • hierarchy: Lists the Option Sets in order from the top level to bottom.
  • options: A tree-like structure where:
  • Each value corresponds to an option from the Option Sets in the OSH.
  • Nested options define valid choices for the next level.

Example:

name: Division-Color
identifier: Division-Color25
hierarchy:
  - Division # Option Set in the first level with values: men,women,children
  - Color # Option Set in the second level with values: red,yellow,green
options:
  - value: men
    options:
      - value: red
  - value: women
    options:
      - value: yellow
  - value: children
    options:
      - value: green

In this example, for an item containing division and color properties with their corresponding Option Sets assigned, if the division value is men, the color value can only be red.

Option Sets (Folder)

This folder contains a set of .yml files, one for each Option Set in your org. Each .yml file contains the following structure:

  • name: The display name of the Option Set.
  • slug: The key of the Option Set.
  • optionSet: The different options available in the Option Set.
  • Each option has three properties:
  • value: The option's key.
  • display: The value displayed to the user.
  • disabled: A boolean that sets an option as disabled.
  • disabled: A boolean that disables an entire Option Set.
  • isArchived: A boolean indicating if the Option Set is archived.

Example:

name: Division
slug: Division
isArchived: false
optionSet:
  - value: men
    display: Men
    disabled: false
  - value: women
    display: Women
    disabled: false
  - value: children
    display: Children
    disabled: true
disabled: false

Rule Sets (Folder)

This folder contains a set of .yml files, one for each Rule Set in your org. Each .yml file contains the following structure:

  • name: The display name of the Rule Set.
  • identifier: A unique identifier for the Rule Set.
  • ruleSet: This field contains a series of criteria-rules combinations. There can be several criteria and each can have several rules.

Example:

name: Invalid-Color-Value
identifier: 143_division-invalid-color
ruleSet:
  - criteria:
      propertyCriteria:
        - filterPropertyDefinition:
            slug: division
          filterConditionType: is_not_empty
    rules:
      - invalidValues:
          - null
        slug: color

In this example, the criteria checks if a property named division is not empty. When the criteria is met, the rule specifies that the value for the color property cannot be null.

Type Policies (Folder)

This folder contains a set of .yml files, one for each Policy in your org. Each .yml file contains the following structure:

  • label: The Policy's display value.
  • identifier: The Policy's identifier.
  • policy: Contains the version of the policy and the statements.
  • Inside the statements we can find:
    • principal: Indicates the user or groups of users this policy applies to.
    • action: The actions allowed (READ, CREATE, UPDATE, DELETE).
    • effect: Indicates the selected users are allowed to perform these actions.

Example:

label: All User Read
identifier: All-User-Read
policy:
  version: 6-23-2025
  statements:
    - principal: '*'
      action:
        - READ
      id: 8kei382kk
      resource: '*'
      effect: ALLOW

Type Property Policies (Folder)

This folder contains a set of .yml files with an identical structure to the Type Policies, but these can be applied to Type Properties instead.

Types (Folder)

This folder contains a set of .yml files, one for each type defined in your org (item, project, project-item, assortment, assortment-item, etc.). Each file contains the following structure:

  • typePath: Types have root and subtypes TypePaths. For example, the Item type has the typePath item and its subtypes can be item:footwear, item:apparel, or item:material. The typePath serves as a way to organize your data.
  • slug: The type's key.
  • label: The type's display value.
  • typeProperties: All the properties defined for this type.
  • isArchived: A boolean indicating if the type is archived.

Example:

- typePath: item
  slug: item
  label: Item
  isArchived: false
  typeProperties:
    # Properties would be listed here

This .yml file specifies the types your Rule Sets are linked to. Each link will have:

  • ruleSet: The name of the rule set.
  • type: The type the rule set applies to.

Example:

- ruleSet: non-editable-project-items
  type: project-item
- ruleSet: only-read-pph
  type: plan-placeholder

This .yml file specifies the type and list of properties an OSH is linked to:

  • optionSetHierarchyIdentifier: OSH's identifier.
  • typeSlug: The type the OSH is linked to.
  • typePropertySlugs: List of property slugs the OSH is composed of.

Example:

- optionSetHierarchyIdentifier: New-Apparel-Hierarchy-RL#19751
  typeSlug: item
  typePropertySlugs:
    - brand
    - productSegment
    - wearerSegment
    - styleCategory
    - materialGroup
    - styleClass

This .yml file specifies all the links between a Type and a Type Policy in your org.

Example:

- typeSlug: productConcept
  typePolicyIdentifier: Custom-Entity-Admins

This .yml file specifies all the links between a Type Property and a Type Property Policy in your org.

Usage Info (.yml file)

There are some specific properties in VibeIQ that are not meant to be edited (name, optionName, createdOn, updatedOn) but, in case your business logic requires it, the Usage Info file will contain these changes (For example a different Label value for the name property on items).

Copying your configuration to a different org

After modifying the configuration, if needed, you will be able to setup the same configuration in a different org. To do so, use your configuration files to point to a different org.

Once the destination org is selected, use the following command in the root directory where the previous org's configuration was downloaded:

contrail types loadAll

The CLI will then analyze the contents of the current folder to push the changes to the destination org. Make sure all the necessary files (described above) exist and are correctly formatted.