Search
K

Data Flexibility

Learn how to expand and customize your configure8 instance data models
configure8 Data Flexibility feature allows you to extend the system's current data model schemas and create new ones.
If you want to extend your default configure8 data, there are basically two options:

1. Extend system with already existing data types

If you just want to add one of the following entities to another entity:
  • Application
  • Environment
  • Library
  • Manifest
  • Person
  • Repository
  • Resource
  • Service
  • Team
You can easily extend that data following this steps:
  1. 1.
    Go to add Settings -> Schemas -> Add Schemas.
  2. 2.
    Select the Type of entity you want to extend from the list above.
  3. 3.
    Provide a name, for instance if you want to extend Services: "ExtendedServices". You can use the same name as Identifier.
  4. 4.
    Don't add anything into the Data Model section.
  5. 5.
    Add a Relation to the entity you want to add to this.
    1. 1.
      Select Type, for instance "Person".
    2. 2.
      Add a name, for instance "BusinessOwner".
    3. 3.
      Add a display name, for instance "Business Owner".
    4. 4.
      Select the display Settings for the Service side:
      1. 1.
        Toogle first option if you want to show the BusinessOwner field on the Services table.
      2. 2.
        Toogle second option if you want to show the BusinessOwner field on the Service page.
    5. 5.
      Add the Foreigner Name field, for instance "BusinessOwner".
    6. 6.
      Add the Foreigner Display Name, for instance ""Business Owner".
    7. 7.
      Select the display Settings for the Business Owner side:
      1. 1.
        Toogle first option if you want to show the Services field on the BusinessOwner tables (Only available for One to Many or Many to Many relationship).
      2. 2.
        Toogle second option if you want to show the Services field on the people page.
    8. 8.
      Select the relation type. In this case Many to One, as many services can have one but only one BusinessOwner.
You can only extend a system schema once, so any other change or relation you want to add should be made in the same extended schema.

2. Create new data types and relate it with current system entities

You can also create new base schemas to model your specific data types, and create multiple relations from this to all other catalog entities.
Check below the full docs on how to add new schemas or take a look at our samples here.

Adding a Schema

To add a new schema to your organization, go to Settings -> Schemas -> Add Schema:
Schemas can only be added and edited by Administrators

1. Details

Type

Defines the general type of entities that can be created or extended in our system.
  • Application
  • Base
  • Environment
  • Library
  • Manifest
  • Person
  • Repository
  • Resource
  • Service
  • Team
For the application, environment, service, library, manifest, person, repository, resources, service, and team you are able only to extend the currently existing system schema.
So you can only add a new schema for those types one time, for adding any other attribute or relation you just need to edit the existing one.

Subtype

Defines the specific domain of entity that you are creating. Sub-types only exists for:
  • Base
  • Resource
You can have multiple schemas with different sub-types for Base and Resources type.

Name

Name that the user will see in the User Interface.
Name can be up to 150 characters.

Identifier

Identifier is a unique identifier or your schema, so you won’t be able to use it twice. This is used in your schema URL, for instance "domains" would be acessible in https://app.configure8.io/dnr-domains.
Identifier is auto-generated based on the Name, but you can change it if needed clicking on the lock icon.
Identifier can be "A-Z" , "_","-" and "0-9".
You can select a logo for your schema. This logo will be displayed in the Schemas table.

Logo

Add a description to explain for other Admins what is this schema about.

2. Data model

Form JSON Schema

This field is not required and it´s used to add more data fields and data field validations to the schema. It can be used to validated inputs that are pushed via the public API or directly in the UI for the new fields.
It is not required as we already have some default field for each new schema that you can check in the System Inherited Data Model field below. If you want to add more fields then you should add it here.
{
"$id": "https://app.configure8.io/snyk.issues.schema.json",
"title": "Snyk Issue",
"description": "Snyk Issue",
"type": "object",
"required": [
"severity"
],
"properties": {
"severity": {
"description": "",
"type": "string"
}
}
}
You can check the full supported syntax here.

Data Model JSON

This field is not required and it's used to add columns to the schema entity tables. By default no field will be displayed in the columns, not even the default ones from System Inherit Data Model. If you want to add new fields than you should add those properties here. For instance:
[{
"columnName": "Severity",
"name": "severity",
"calc": "details.severity",
"hidden": false
}]
  • columnName: The name that will be displayed on the table.
  • name: Property name in the entity JSON.
  • hidden: if you want hide this field in the tables. For instance if you just want to use it on the calculations but not show in the table.
  • calc: from where you want to take the value. Complex operations can be performed here with the following functions:
    • FUNCTION
    • MATH
    • NUMBER
    • PATH
Sample complex calculations for vulnerabilities schema:
[
{
"hidden": false,
"name": "lowIssue",
"columnName": "Low Issue",
"calc": {
"type": "MATH",
"condition": "*",
"values": [
{
"type": "MATH",
"condition": "/",
"values": [
{
"type": "NUMBER",
"value": 100
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id"
}
]
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id",
"filter": [
{
"type": "compare",
"field": "resources.snykIssues.details.severity",
"value": "low",
"compare": "eq"
}
]
}
]
}
},
{
"hidden": false,
"name": "mediumIssue",
"columnName": "Snyk Medium %",
"calc": {
"type": "MATH",
"condition": "*",
"values": [
{
"type": "MATH",
"condition": "/",
"values": [
{
"type": "NUMBER",
"value": 100
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id"
}
]
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id",
"filter": [
{
"type": "compare",
"field": "resources.snykIssues.details.severity",
"value": "medium",
"compare": "eq"
}
]
}
]
}
},
{
"hidden": false,
"name": "issueHighPercent",
"columnName": "Snyk High %",
"calc": {
"type": "MATH",
"condition": "*",
"values": [
{
"type": "MATH",
"condition": "/",
"values": [
{
"type": "NUMBER",
"value": 100
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id"
}
]
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id",
"filter": [
{
"type": "compare",
"field": "resources.snykIssues.details.severity",
"value": "high",
"compare": "eq"
}
]
}
]
}
},
{
"hidden": false,
"name": "issuep1Percent",
"columnName": "Snyk p1 %",
"calc": {
"type": "MATH",
"condition": "*",
"values": [
{
"type": "MATH",
"condition": "/",
"values": [
{
"type": "NUMBER",
"value": 100
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id"
}
]
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id",
"filter": [
{
"type": "compare",
"field": "resources.snykIssues.details.severity",
"value": "p1",
"compare": "eq"
}
]
}
]
}
},
{
"hidden": false,
"name": "issuep2Percent",
"columnName": "Snyk p2 %",
"calc": {
"type": "MATH",
"condition": "*",
"values": [
{
"type": "MATH",
"condition": "/",
"values": [
{
"type": "NUMBER",
"value": 100
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id"
}
]
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id",
"filter": [
{
"type": "compare",
"field": "resources.snykIssues.details.severity",
"value": "p2",
"compare": "eq"
}
]
}
]
}
},
{
"hidden": false,
"name": "issuep3Percent",
"columnName": "Snyk p3 %",
"calc": {
"type": "MATH",
"condition": "*",
"values": [
{
"type": "MATH",
"condition": "/",
"values": [
{
"type": "NUMBER",
"value": 100
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id"
}
]
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id",
"filter": [
{
"type": "compare",
"field": "resources.snykIssues.details.severity",
"value": "p3",
"compare": "eq"
}
]
}
]
}
},
{
"hidden": false,
"name": "issuep4Percent",
"columnName": "Snyk p4 %",
"calc": {
"type": "MATH",
"condition": "*",
"values": [
{
"type": "MATH",
"condition": "/",
"values": [
{
"type": "NUMBER",
"value": 100
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id"
}
]
},
{
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id",
"filter": [
{
"type": "compare",
"field": "resources.snykIssues.details.severity",
"value": "p4",
"compare": "eq"
}
]
}
]
}
},
{
"hidden": false,
"name": "snykIssuesCount",
"columnName": "Snyk Issues",
"calc": {
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.snykIssues.id",
"filter": []
}
},
{
"hidden": false,
"name": "EC2Count",
"columnName": "EC2Count",
"calc": {
"type": "FUNCTION",
"aggregation": "COUNT",
"path": "resources.id",
"filter": [
{
"type": "compare",
"field": "resources.providerResourceType",
"value": "AWS:EC2:Instance",
"compare": "eq"
}
]
}
}
]
Resulting table from the above JSON

System Inherited Data Model

View-only system schema for the selected "Type" that is inherited by default from configure8.
The additional Data Model JSON fields will be merged with this at the end of the process. But we will always show here the system original one.

3. Relations

Here we can adding relations from multiple data types and fields into this schema.
  • Application
  • Environment
  • Library
  • Manifest
  • Person
  • Repository
  • Resource
  • Service
  • Team
  • Custom Schemas
Target schema we want to make a relation to this schema.

Name

The property name of this entity in the scope of this schema.
This is the property will need to pass when pushing data via the API.

Display name

The UI name of this entity in the scope of this schema.

Display settings

Toogle - Show this relation in the entity table columns. For instance:
Toogle - Show this relation in the entity detail page. For instance:

Foreigner Name

The property name of this entity in the scope of the other entity it's related.

Foreigner Display name

The UI name of this entity in the scope of the other entity it's related.

Foreigner Display settings

Toogle - Show this relation in the foreigner entity table columns.
Toogle - Show this relation in the foreigner entity detail page. For instance:
Relation Type*
Relation Type will define how this two entities relate to each other. These are the available options:
  • One to One: Every entity has one foreigner entity and vice-versa.
  • One to Many: One entity can have many foreigner entities.
  • Many to One: Many entities can have just one foreigner entity.
  • Many to Many: Many entities can be related to many foreigner entities.

4. Custom Plugins

This section allows you to associate custom plugins with a particular schema that can be defined in one place (inside the schema) and used across different services.

Configuring custom schema plugins

To create a new custom schema plugin, click Add Plugin under the "Custom Plugins" heading:
This will open an empty dialog with the custom plugin editor:
Define your custom plugin (see the documentation on creating a custom plugin) and you'll be able to use it when you go to add a plugin to service:

Overriding plugins

When you edit a custom schema plugin in the services page, you will be presented with an empty code editor. You can override any properties of the original schema plugin and it will only be overridden for that instance of the plugin. This allows some customization per service without having to copy/paste configurations between services.
We suggest that you use this feature minimally, since it can be prone to breaking when editing the schema plugin in the future.
Copyright © 2023 configure8, Inc. All rights reserved.