YAML reference library
The YAML resource configuration files are core to the Cognite Toolkit. Each of the files configures one of the resource types that are supported by the Cognite Toolkit and the CDF API. This article describes how to configure the different resource types.
The Cognite Toolkit bundles logically connected resource configuration files in modules, and each module stores the configuration files in directories corresponding to the resource types, called resource directories. The available resource directories are:
./<module_name>/
├── 3dmodels/
├── auth/
├── classic/
├── data_models/
├── data_sets/
├── extraction_pipelines/
├── files/
├── functions/
├── hosted_extractors/
├── locations/
├── raw/
├── robotics/
├── timeseries/
├── transformations/
└── workflows/
Note that a resource directory can host one or more configuration types. For example, the data_models/
directory hosts
the configuration files for spaces, containers, views, data models, and nodes. While the classic/
directory hosts the
configuration files for labels, assets, and sequences.
When you deploy, the Cognite Toolkit uses the CDF API to implement the YAML configurations in the CDF project.
In general, the format of the YAML files matches the API specification for the resource types. We recommend
that you use the externalId
of the resources as (part of) the name of the YAML file. This is to enable using the same resource
configuration across multiple CDF projects, for example, a development, staging and production project. Use number prefixes
(1.<filename.suffix>) to control the order of deployment within each resource type.
3D Models
Resource directory: 3dmodels/
Requires Cognite Toolkit v0.3.0 or later
API documentation: 3D models
3D model configurations are stored in the module's 3dmodels/ directory. You can have one or more 3D models in a single YAML file.
The filename must end with 3DModel
, for example, my_3d_model.3DModel.yaml
.
Example 3D model configuration:
name: my_3d_model
dataSetExternalId: ds_3d_models
metadata:
origin: cdf-toolkit
Assets
Resource directory: classic/
Requires Cognite Toolkit v0.3.0 or later
API documentation: Assets
Asset configurations are stored in the module's assets/ directory. You can have one or more asset in a single YAML file.
The filename must end with Asset
, for example, my_asset.Asset.yaml
.
Example Asset configuration:
externalId: my_root_asset
name: SAP hierarchy
description: The root asset in the SAP hierarchy
dataSetExternalId: ds_sap_assets
source: SAP
metadata:
origin: cdf-toolkit
The asset API uses an internal ID for the data set, while the YAML configuration files reference the external ID; dataSetExternalId
. The Cognite Toolkit resolves the external ID to the internal ID before sending the request to the CDF API.
Table formats
In addition, to yaml
Cognite Toolkit also supports csv
and parquet
formats for asset configurations. As with the yaml
format,
the filename must end with Asset
, for example, my_asset.Asset.csv
.
externalId,name,description,dataSetExternalId,source,metadata.origin
my_root_asset,SAP hierarchy,The root asset in the SAP hierarchy,ds_sap_assets,SAP,cdf-toolkit
Note that the column names must match the field names in the yaml
configuration. The exception is the metadata
field,
which is a dictionary in the yaml
configuration, but a string in the csv
configuration. This is solved by using the
notation metadata.origin
column in the csv
configuration.
Groups
Resource directory: auth/
API documentation: Groups
The group configuration files are stored in the module's auth/ directory. Each group has a separate YAML file.
The name
field is used as a unique identifier for the group. If you change the name of the group manually in CDF,
it will be treated as a different group and will be ignored by the Cognite Toolkit.
Example group configuration:
name: 'my_group'
sourceId: '{{mygroup_source_id}}'
metadata:
origin: 'cognite-toolkit'
capabilities:
- projectsAcl:
actions:
- LIST
- READ
scope:
all: {}
We recommend using the metadata:origin
property to indicate that the group is created by the Cognite Toolkit
Populate the sourceId
with the group ID from CDF project's identity provider.
You can specify each ACL capability in CDF as in the projectsAcl
example above. Scoping to dataset, space, RAW table,
current user, or pipeline is also supported (see ACL scoping).
Groups and group deletion
If you delete groups with the cdf clean
or cdf deploy --drop
command, the Cognite Toolkit skips the groups that the running
user or service account is a member of. This prevents the cleaning operation from removing access rights from
the running user and potentially locking the user out from further operation.
ACL scoping
Dataset scope
Use to restrict access to data in a specific data set.
- threedAcl:
actions:
- READ
scope:
datasetScope: { ids: ['my_dataset'] }
The groups API uses an internal ID for the data set, while the YAML configuration files reference the external ID. The Cognite Toolkit resolves the external ID to the internal ID before sending the request to the CDF API.
Space scope
Use to restrict access to data in a data model space.
- dataModelInstancesAcl:
actions:
- READ
scope:
spaceIdScope: { spaceIds: ['my_space'] }
Table scope
Use to restrict access to a database or a table in a database.
- rawAcl:
actions:
- READ
- WRITE
scope:
tableScope:
dbsToTables:
my_database:
tables: []
Current user-scope
Use to restrict actions to the groups the user is a member of.
- groupsAcl:
actions:
- LIST
- READ
scope:
currentuserscope: {}
Security categories
Requires Cognite Toolkit v0.2.0 or later
Resource directory: auth/
API documentation: Security categories
The security categories are stored in the module's auth/ directory. You can have one or more security categories in a single YAML file.
We recommend that you start security category names with sc_
and use _
to separate words. The file name is not significant,
but we recommend that you name it after the security categories it creates.
- name: sc_my_security_category
- name: sc_my_other_security_category
Data models
Resource directory: data_models/
API documentation: Data modeling
The data model configurations are stored in the module's data_models directory.
A data model consists of a set of data modeling entities: one or more spaces, containers, views, and data models. Each entity has its own file with a suffix to indicate the entity type: my.space.yaml, my.container.yaml, my.view.yaml, my.datamodel.yaml.
You can also use the Cognite Toolkit to create nodes to keep configuration for applications (for instance, InField) and to create node types that are part of the data model. Define nodes in files with the .node.yaml suffix.
The Cognite Toolkit applies configurations in the order of dependencies between the entity types: first spaces, next containers, then views, and finally data models.
If there are dependencies between the entities of the same type, you can use prefix numbers in the filename to have the Cognite Toolkit apply the files in the correct order.
The Cognite Toolkit supports using subdirectories to organize the files, for example:
data_models/
┣ 📂 containers/
┣ 📂 views/
┣ 📂 nodes/
┣ 📜 my_data_model.datamodel.yaml
┗ 📜 data_model_space.space.yaml
Spaces
API documentation: Spaces
Spaces are the top-level entities and is the home of containers, views, and data models. You can create a space with a .space.yaml file in the data_models/ directory.
space: sp_cognite_app_data
name: cognite:app:data
description: Space for InField app data
CDF doesn't allow a space to be deleted unless it's empty. If a space contains, for example, nodes that aren't governed by the Cognite Toolkit, the Cognite Toolkit will not delete the space.
Containers
API documentation: Containers
Containers are the home of properties and data. You can create a container with a .container.yaml file in the data_models/ directory. You can also create indexes and constraints according to the API specification.
externalId: MyActivity
usedFor: node
space: sp_activity_data
properties:
id:
type:
type: text
list: false
collation: ucs_basic
nullable: true
title:
type:
type: text
list: false
collation: ucs_basic
nullable: true
description:
type:
type: text
list: false
collation: ucs_basic
nullable: true
The example container definition creates a container with three properties: id
, title
, and description
.
Note that sp_activity_data
requires its own activity_data.space.yaml file in the data_models/ directory.
Views
API documentation: Views
Use views to ingest, query, and structure the data into meaningful entities in your data model. You can create a view with a .view.yaml file in the data_models/ directory.
externalId: MyActivity
name: MyActivity
description: 'An activity represents a set of maintenance tasks with multiple operations for individual assets. The activity is considered incomplete until all its operations are finished.'
version: '3'
space: sp_activity_model
properties:
id:
description: 'Unique identifier from the source, for instance, an object ID in SAP.'
container:
type: container
space: sp_activity_data
externalId: MyActivity
containerPropertyIdentifier: id
title:
description: 'A title or brief description of the maintenance activity or work order.'
container:
type: container
space: sp_activity_data
externalId: MyActivity
containerPropertyIdentifier: title
description:
description: 'A detailed description of the maintenance activity or work order.'
container:
type: container
space: sp_activity_data
externalId: MyActivity
containerPropertyIdentifier: description
This example view configuration creates a view with three properties: id
, title
, and description
.
The view references the properties from the container MyActivity
in the sp_activity_data
space. The view
exists in a space called sp_activity_model
, while the container exists in the sp_activity_data
space.
Data models
API documentation: Data models
Use data models to structure the data into knowledge graphs with relationships between views using edges. From an implementation perspective, a data model is a collection of views.
You can create a data model with a .datamodel.yaml file in the data_models/ directory.
externalId: ActivityDataModel
name: My activity data model
version: '1'
space: sp_activity_model
description: 'A data model for structuring and querying activity data.'
views:
- type: view
externalId: MyActivity
space: sp_activity_model
version: '3'
- type: view
externalId: MyTask
space: sp_activity_model
version: '2'
The example data model configuration creates a data model with two views: MyActivity
and MyTasks
.
The data model exists in a space called sp_activity_model
together with the views.
Nodes
API documentation: Instances
Use nodes to populate a data model. You can create nodes with a .node.yaml file in the data_models/ directory.
- space: sp_config
externalId: myapp_config
sources:
- source:
space: sp_config
externalId: MY_APP_Config
version: '1'
type: view
properties:
rootLocationConfigurations:
- assetExternalId: 'my_root_asset_external_id'
adminGroup:
- gp_template_admins
dataSpaceId: sp_activity_data
modelSpaceId: sp_activity_model
activityDataModelId: MyActivity
activityDataModelVersion: '1'
This example node configuration creates a node instance with data that configures a node of the
type MY_APP_Config
with version '1' in the sp_config
space. The instance has data that is read by MY_APP and used to configure the application.
The node instance is created in the sp_config
space with myapp_config
as the externalId
. The example also
configures a root location for the application and specifies how to find the application's data: in the sp_activity_data
space with version 1
of the MyActivity
view.
Another example is node types. They are part of a data model schema (the description of how data is structured), and creates a type of node that can be created in the data model. This is an example of a YAML file with multiple node types defined.
- space: sp_my_model
externalId: pump
- space: sp_my_model
externalId: valve
Data sets
Resource directory: data_sets/
API documentation: Data sets
You can not delete data sets in CDF, but you can use the Cognite Toolkit to create new data sets or update existing ones. You can create multiple data sets in the same YAML file.
The data sets API uses an internal ID for the data set, while the YAML configuration files reference the
external ID; dataSetExternalId
. The Cognite Toolkit resolves the external ID to the internal ID before
sending the request to the CDF API. For an example, see files.
- externalId: ds_asset_hamburg
name: asset:hamburg
description: This dataset contains asset data for the Hamburg location.
- externalId: ds_files_hamburg
name: files:hamburg
description: This dataset contains files for the Hamburg location.
This example configuration creates two data sets using the naming conventions for data sets.
Labels
Requires Cognite Toolkit v0.3.0 or later
Resource directory: classic/ (labels/ in v0.2.0
)
API documentation: Data sets
Labels can be found in the module's classic/
directory. You can define one or more labels in a single YAML file.
The filename must end with Label
, for example, my_equipment.Label.yaml
.
The Cognite Toolkit creates labels before files and other resources that reference them.
Example label definition:
- externalId: label_pump
name: Pump
description: A pump is an equipment that moves fluids.
dataSetExternalId: ds_labels_{{example_variable}}
The CDF API doesn't support updating labels. When you update a label with the Cognite Toolkit, it deletes the previous label and creates a new one.
Extraction pipelines
Resource directory: extraction_pipelines/
API documentation: Extraction pipelines
API documentation Cofiguration: Extraction pipeline config
Documentation: Extraction pipeline documentation
Extractor pipelines and configurations are stored in the module's extraction_pipelines/ directory. You can define one or
more extraction pipelines in a single YAML file. It is, however, most common to have one pipeline per file. In
addition, one or more the extraction pipeline configurations must be stored in a separate file. Extraction pipeline
configurations are detected by the .config
suffix, while all other files are considered extraction pipelines.
externalId: 'ep_src_asset_hamburg_sap'
name: 'src:asset:hamburg:sap'
dataSetExternalId: 'ds_asset_{{location_name}}'
description: 'Asset source extraction pipeline with configuration for a DB extractor reading data from Hamburg SAP'
rawTables:
- dbName: 'asset_hamburg_sap'
tableName: 'assets'
source: 'sap'
documentation: "The DB Extractor is a general database extractor that connects to a database, runs one or several queries, and sends the result to CDF RAW.\n\nThe extractor connects to a database over ODBC, which means that you need an ODBC driver for your database. If you are running the Docker version of the extractor, ODBC drivers for MySQL, MS SQL, PostgreSql and Oracle DB are preinstalled in the image. See the example config for details on connection strings for these. If you are running the Windows exe version of the extractor, you must provide an ODBC driver yourself. These are typically provided by the database vendor.\n\nFurther documentation is available [here](./docs/documentation.md)\n\nFor information on development, consider the following guides:\n\n * [Development guide](guides/development.md)\n * [Release guide](guides/release.md)"
This example configuration creates an extraction pipeline with the external ID ep_src_asset_hamburg_sap
and the name src:asset:hamburg:sap
.
The configuration allows an extractor installed inside a closed network to connect to CDF and download the extractor's configuration file.
The Cognite Toolkit expects the configuration file be in the same directory and have the same name as the extraction
pipeline configuration file, but with the suffix .config.yaml
. The configuration file is not strictly required,
but the Cognite Toolkit warns if the file is missing during the deployment process.
The extraction pipeline can be connected to a data set and to the RAW tables that the extractor will write to.
This is an example configuration file for the extraction pipeline above:
externalId: 'ep_src_asset_hamburg_sap'
description: 'DB extractor config reading data from Hamburg SAP'
config:
logger:
console:
level: INFO
file:
level: INFO
path: 'file.log'
# List of databases
databases:
- type: odbc
name: postgres
connection-string: 'DSN={MyPostgresDsn}'
# List of queries
queries:
- name: test-postgres
database: postgres
query: >
SELECT
The Cognite Toolkit expects the config
property to be valid YAML and will not validate the content of the config property
beyond the syntax validation. The extractor that is configured to download the configuration file validates the content of the config
property.
Files
Resource directory files/
API documentation: Files
CogniteFile
Requires Cognite Toolkit v0.3.0 or later
Use the Cognite Toolkit only to upload example data, and not as a general solution to ingest files into CDF.
Files can be found in the module's files/
directory. You can define the metadata of one or more files in a single or multiple YAML file(s).
We support the classic /files
endpoints and CogniteFile
through data modeling endpoints (models/instances
).
To use the CogniteFile
, you must specify the CogniteFile
suffix in the filename, for example, my_file.CogniteFile.yaml
. All other YAML files are considered classic files, but we recommend that you use FileMetadata
as the suffix for classic files, for example, my_file.FileMetadata.yaml
.
To upload a file with the metadata, the name
in the YAML
file must match the filename of the file that should be uploaded.
Note: You can also use the template for uploading multiple files to upload multiple files without specifying the metadata for each file.
Below is an example of a classic file metadata configuration for multiple files, my_file.pdf
and my_other_file.pdf
:
- externalId: 'sharepointABC_my_file.pdf'
name: 'my_file.pdf'
source: 'sharepointABC'
dataSetExternalId: 'ds_files_hamburg'
directory: 'files'
mimeType: 'application/pdf'
metadata:
origin: 'cdf-project-templates'
- externalId: 'sharepointABC_my_other_file.pdf'
name: 'my_other_file.pdf'
source: 'sharepointABC'
dataSetExternalId: 'ds_files_hamburg'
directory: 'files'
mimeType: 'application/pdf'
metadata:
origin: 'cdf-project-templates'
Classic metadata configuration for a single file, my_file.pdf
:
externalId: 'sharepointABC_my_file.pdf'
name: 'my_file.pdf'
source: 'sharepointABC'
dataSetExternalId: 'ds_files_hamburg'
directory: 'files'
mimeType: 'application/pdf'
metadata:
origin: 'cdf-project-templates'
The data set is referenced by the dataSetExternalId
. The Cognite Toolkit automatically
resolves the external ID to the internal ID of the data set.
Below is an example of a CogniteFile
metadata configuration for a single file, my_file.pdf
:
externalId: 'sharepointABC_my_file.pdf'
space: 'sp_files_hamburg'
name: 'my_file.pdf'
description: 'This is a file uploaded from SharePoint.'
tags:
- 'file'
- 'sharepoint'
sourceId: 'sharepointABC'
sourceContext: 'sharepointABC'
source:
space: 'sp_files_hamburg'
externalId: 'sharepointABCSource'
sourceCreatedTime: '2022-01-01T00:00:00Z'
sourceUpdatedTime: '2022-01-01T00:00:00Z'
assets:
- space: 'sp_assets'
externalId: 'my_root_asset'
mimeType: 'application/pdf'
directory: 'files'
category:
- space: 'sp_categories'
externalId: 'sc_my_category'
Below is an example of a CogniteFile
metadata configuration for multiple files, my_file.pdf
and my_other_file.pdf
:
- space: 'sp_files_hamburg'
externalId: 'sharepointABC_my_file.pdf'
name: 'my_file.pdf'
description: 'This is a file uploaded from SharePoint.'
- space: 'sp_files_hamburg'
externalId: 'sharepointABC_my_other_file.pdf'
name: 'my_other_file.pdf'
description: 'This is another file uploaded from SharePoint.'
Uploading multiple files
To upload multiple files without specifying the metadata configuration for each file individually, use this template format
for the FileMetadata
configuration file:
- externalId: sharepointABC_$FILENAME
dataSetExternalId: ds_files_hamburg
name: $FILENAME
source: sharepointABC
or for the CogniteFile
configuration file:
- space: 'sp_files_hamburg'
externalId: sharepointABC_$FILENAME
name: $FILENAME
description: 'This is a file uploaded from SharePoint.'
This template is recognized by the Cognite Toolkit by
- It is a YAML file given in
list/array
format. - There is a single entry in the list.
- The
externalId
contains the$FILENAME
variable.
All files will be uploaded with the same properties except for the externalId
and name
properties.
The $FILENAME
variable will be replaced with the filename of the file being uploaded.
Functions
Resource directory functions/
API documentation: Functions
The function configuration files are stored in the module's functions/ directory. You can define one or more functions in a single or multiple YAML file(s). The Cognite Toolkit creates the functions in the order they are defined in the file.
The functions YAML files must be located in the functions/ directory and not in subdirectories. This allows you to store YAML files that are not configuration files in subdirectories as part of the function's code.
Place the function code and files to deploy to CDF as a function in a subdirectory with the same name
as the externalId
of the function.
Example function configuration:
Folder structure, including a function schedule:
./functions/
├── my_function.yaml
├── schedules.yaml
└── fn_example_repeater/
Configuration file:
# The directory with the function code must have the same name
# and externalId as the function itself as defined below.
- name: 'example:repeater'
externalId: 'fn_example_repeater'
owner: 'Anonymous'
description: 'Returns the input data, secrets, and function info.'
metadata:
version: '{{version}}'
secrets:
mysecret: '{{example_secret}}'
envVars:
# The two environment variables below are set by the Toolkit
ENV_TYPE: '${CDF_BUILD_TYPE}'
CDF_ENV: '${CDF_ENVIRON}'
runtime: 'py311'
functionPath: './src/handler.py'
# Data set id for the zip file with the code that is uploaded.
dataSetExternalId: 'ds_files_{{default_location}}'
The functionPath
is the path to the handler.py in the function code directory. In this case, handler.py
is expected to be in the fn_example_repeater/src/ directory.
Note that dataSetExternalId
is used to reference the data set that the function itself is assigned to.
The Cognite Toolkit automatically resolves the external ID to the internal ID of the data set.
Function schedules
Resource directory: functions/
API documentation: Schedules
Schedules for functions are also stored in the module's functions/ directory. The Cognite Toolkit expects the YAML file to include "schedule" as part of its file name, for example, schedules.yaml. You can specify more than one schedule in a single file.
To ensure that the function exists before the schedule is created, schedules are deployed after functions
Schedules don't have externalId
s, and the Cognite Toolkit identifies the schedule by a combination of the
functionExternalId
and the name
. Consequently, you can't deploy two schedules for a function with the
exact same name, and with two different sets of data.
- name: 'daily-8am-utc'
functionExternalId: 'fn_example_repeater'
description: 'Run every day at 8am UTC'
cronExpression: '0 8 * * *'
data:
breakfast: 'today: peanut butter sandwich and coffee'
lunch: 'today: greek salad and water'
dinner: 'today: steak and red wine'
authentication:
# Credentials to use to run the function in this schedule.
# In this example, we just use the main deploy credentials, so the result is the same, but use a different set of
# credentials (env variables) if you want to run the function with different permissions.
clientId: {{ myfunction_clientId }}
clientSecret: {{ myfunction_clientSecret }}
- name: 'daily-8pm-utc'
functionExternalId: 'fn_example_repeater'
description: 'Run every day at 8pm UTC'
cronExpression: '0 20 * * *'
data:
breakfast: 'tomorrow: peanut butter sandwich and coffee'
lunch: 'tomorrow: greek salad and water'
dinner: 'tomorrow: steak and red wine'