OSDU Data Load
Execute directly. Do NOT delegate to an agent or sub-agent.
Step 1: Parse the user's intent
| User Input |
Action |
datasets, what datasets, list data, what can I load |
Run datasets command |
check, what's loaded, is reference data loaded, how many records |
Run check command |
load reference-data, load tno, load volve, load nopims |
Run load command |
load all, bootstrap instance, populate data |
Run load --dataset all |
dry run, preview load, what would load do |
Run load --dry-run |
Step 2: Verify prerequisites
Before running any command, check:
- uv is installed:
uv --version
- Data repos are cloned (the script will tell you if they're missing, but you can check proactively):
data-definitions — needed for reference-data, schemas, activity-templates
open-test-data — needed for tno, volve, nopims
If repos are missing, clone them using the clone skill or the commands shown in the script output.
For CIMPL environments, kubectl must be configured and pointing at the cluster. The script auto-detects everything else.
Step 3: Run the command
The script path (relative to plugin root):
LOAD_SCRIPT="skills/osdu-data-load/scripts/load.py"
List Available Datasets
uv run "$LOAD_SCRIPT" datasets
Check What's Loaded
uv run "$LOAD_SCRIPT" check --dataset reference-data
uv run "$LOAD_SCRIPT" check --dataset all
Load Data
Two modes:
--direct (recommended): Uses Storage API directly. Fast, synchronous.
- Default (Workflow): Submits to Airflow DAG pipeline. Slower but validates schema/integrity.
# Load reference data (fast direct mode)
uv run "$LOAD_SCRIPT" load --dataset reference-data --direct
# Load TNO test dataset
uv run "$LOAD_SCRIPT" load --dataset tno --direct
# Load everything
uv run "$LOAD_SCRIPT" load --dataset all --direct
# Preview without submitting
uv run "$LOAD_SCRIPT" load --dataset reference-data --dry-run
# Filter by filename
uv run "$LOAD_SCRIPT" load --dataset reference-data --direct --filter seismic
Dataset Registry
| Dataset |
Source Repo |
Contents |
Recommended Mode |
reference-data |
data-definitions |
566 lookup catalogs, 79,904 records |
--direct |
schemas |
data-definitions |
OSDU schema registrations |
workflow |
activity-templates |
data-definitions |
Standard subsurface activity templates |
--direct |
tno |
open-test-data |
TNO wells, wellbores, logs, markers, trajectories |
--direct |
volve |
open-test-data |
Volve wells, wellbores, seismics, logs, horizons |
workflow |
nopims |
open-test-data |
Australian open petroleum wells, wellbores, seismics |
workflow |
Environment Configuration
CIMPL Environments (Zero Config)
If kubectl is configured and pointing at a CIMPL cluster, the script auto-detects everything:
- Reads
datafier-secret from the osdu namespace
- Derives Keycloak token URL from the
platform namespace
- Manages port-forwards automatically (Keycloak 18082, Storage 18081, Search 18084, Workflow 18083)
- Defaults to
osdu-demo-legaltag legal tag
Azure ADME / Helm Environments
export OSDU_URL="https://platform5552.energy.azure.com"
export OSDU_DATA_PARTITION="opendes"
export OSDU_CLIENT_ID="<client-id>"
export OSDU_CLIENT_SECRET="<client-secret>"
export OSDU_TENANT_ID="<tenant-id>"
export OSDU_LEGAL_TAG="opendes-legal-tag-load"
Keycloak Environments (Manual)
export OSDU_URL="https://osdu.myenv.example.com"
export OSDU_DATA_PARTITION="osdu"
export OSDU_CLIENT_ID="datafier"
export OSDU_CLIENT_SECRET="<secret>"
export OSDU_TOKEN_URL="https://keycloak.myenv.example.com/realms/osdu/protocol/openid-connect/token"
export OSDU_LEGAL_TAG="osdu-demo-legaltag"
Required Data Repos
git clone https://community.opengroup.org/osdu/data/data-definitions.git ~/workspace/data-definitions
git clone https://community.opengroup.org/osdu/data/open-test-data.git ~/workspace/open-test-data
Environment Variables
| Variable |
Required |
Default |
Description |
OSDU_URL |
ADME only |
auto-detected for CIMPL |
OSDU base URL |
OSDU_DATA_PARTITION |
ADME only |
osdu for CIMPL |
Data partition |
OSDU_CLIENT_ID |
ADME only |
auto-detected for CIMPL |
Client ID |
OSDU_CLIENT_SECRET |
ADME only |
auto-detected for CIMPL |
Client secret |
OSDU_TENANT_ID |
ADME only |
— |
Azure AD tenant ID |
OSDU_TOKEN_URL |
Keycloak manual |
auto-detected for CIMPL |
Keycloak token endpoint |
OSDU_LEGAL_TAG |
ADME only |
osdu-demo-legaltag for CIMPL |
Legal tag |
OSDU_RESOURCE_ID |
No |
same as client_id |
AAD app ID for OAuth scope |
OSDU_ACL_OWNERS |
No |
derived from partition |
ACL owners group |
OSDU_ACL_VIEWERS |
No |
derived from partition |
ACL viewers group |
OSDU_DATA_DEFINITIONS_DIR |
No |
~/workspace/data-definitions |
data-definitions repo path |
OSDU_OPEN_TEST_DATA_DIR |
No |
~/workspace/open-test-data |
open-test-data repo path |
Error Handling
| Error |
Cause |
Solution |
| Missing env vars |
Not configured and not CIMPL |
Set required variables or ensure kubectl context |
Repo not found |
Data repo not cloned |
Run git clone command shown above |
| HTTP 401/403 |
Auth failure |
Check credentials or kubectl context |
| HTTP 409 |
Record exists |
Safe to ignore (record already loaded) |
| "Invalid legal tags" |
Wrong legal tag name |
Check OSDU_LEGAL_TAG matches an existing tag |
| Port-forward failure |
Service not running in cluster |
Check kubectl get svc -n osdu for available services |
1---2name: osdu-data-load3description: Load OSDU datasets (reference data, TNO, Volve, NOPIMS) into any OSDU instance. Use when the user asks to load test data, bootstrap an instance, populate reference data, check what data is loaded, list available datasets, or load specific datasets like TNO/Volve/NOPIMS. Also triggers on "what datasets are available", "is reference data loaded", "load all data", or "how do I get test data into my OSDU instance". Supports CIMPL (auto-detected via kubectl) and Azure ADME (via environment variables). Not for: querying existing records (use OSDU MCP tools), schema management (use schema MCP tools), or building/testing services (use maven or acceptance-test).4---56# OSDU Data Load78> **Execute directly. Do NOT delegate to an agent or sub-agent.**910## Step 1: Parse the user's intent1112| User Input | Action |13|------------|--------|14| `datasets`, `what datasets`, `list data`, `what can I load` | Run `datasets` command |15| `check`, `what's loaded`, `is reference data loaded`, `how many records` | Run `check` command |16| `load reference-data`, `load tno`, `load volve`, `load nopims` | Run `load` command |17| `load all`, `bootstrap instance`, `populate data` | Run `load --dataset all` |18| `dry run`, `preview load`, `what would load do` | Run `load --dry-run` |1920## Step 2: Verify prerequisites2122Before running any command, check:23241. **uv** is installed: `uv --version`252. **Data repos** are cloned (the script will tell you if they're missing, but you can check proactively):26 - `data-definitions` — needed for reference-data, schemas, activity-templates27 - `open-test-data` — needed for tno, volve, nopims2829If repos are missing, clone them using the `clone` skill or the commands shown in the script output.3031For CIMPL environments, **kubectl** must be configured and pointing at the cluster. The script auto-detects everything else.3233## Step 3: Run the command3435The script path (relative to plugin root):36```37LOAD_SCRIPT="skills/osdu-data-load/scripts/load.py"38```3940### List Available Datasets41```bash42uv run "$LOAD_SCRIPT" datasets43```4445### Check What's Loaded46```bash47uv run "$LOAD_SCRIPT" check --dataset reference-data48uv run "$LOAD_SCRIPT" check --dataset all49```5051### Load Data5253Two modes:54- **`--direct`** (recommended): Uses Storage API directly. Fast, synchronous.55- **Default (Workflow)**: Submits to Airflow DAG pipeline. Slower but validates schema/integrity.5657```bash58# Load reference data (fast direct mode)59uv run "$LOAD_SCRIPT" load --dataset reference-data --direct6061# Load TNO test dataset62uv run "$LOAD_SCRIPT" load --dataset tno --direct6364# Load everything65uv run "$LOAD_SCRIPT" load --dataset all --direct6667# Preview without submitting68uv run "$LOAD_SCRIPT" load --dataset reference-data --dry-run6970# Filter by filename71uv run "$LOAD_SCRIPT" load --dataset reference-data --direct --filter seismic72```7374## Dataset Registry7576| Dataset | Source Repo | Contents | Recommended Mode |77|---------|-------------|----------|-----------------|78| `reference-data` | data-definitions | 566 lookup catalogs, 79,904 records | `--direct` |79| `schemas` | data-definitions | OSDU schema registrations | workflow |80| `activity-templates` | data-definitions | Standard subsurface activity templates | `--direct` |81| `tno` | open-test-data | TNO wells, wellbores, logs, markers, trajectories | `--direct` |82| `volve` | open-test-data | Volve wells, wellbores, seismics, logs, horizons | workflow |83| `nopims` | open-test-data | Australian open petroleum wells, wellbores, seismics | workflow |8485## Environment Configuration8687### CIMPL Environments (Zero Config)8889If kubectl is configured and pointing at a CIMPL cluster, the script **auto-detects** everything:90- Reads `datafier-secret` from the `osdu` namespace91- Derives Keycloak token URL from the `platform` namespace92- Manages port-forwards automatically (Keycloak 18082, Storage 18081, Search 18084, Workflow 18083)93- Defaults to `osdu-demo-legaltag` legal tag9495### Azure ADME / Helm Environments9697```bash98export OSDU_URL="https://platform5552.energy.azure.com"99export OSDU_DATA_PARTITION="opendes"100export OSDU_CLIENT_ID="<client-id>"101export OSDU_CLIENT_SECRET="<client-secret>"102export OSDU_TENANT_ID="<tenant-id>"103export OSDU_LEGAL_TAG="opendes-legal-tag-load"104```105106### Keycloak Environments (Manual)107108```bash109export OSDU_URL="https://osdu.myenv.example.com"110export OSDU_DATA_PARTITION="osdu"111export OSDU_CLIENT_ID="datafier"112export OSDU_CLIENT_SECRET="<secret>"113export OSDU_TOKEN_URL="https://keycloak.myenv.example.com/realms/osdu/protocol/openid-connect/token"114export OSDU_LEGAL_TAG="osdu-demo-legaltag"115```116117## Required Data Repos118119```bash120git clone https://community.opengroup.org/osdu/data/data-definitions.git ~/workspace/data-definitions121git clone https://community.opengroup.org/osdu/data/open-test-data.git ~/workspace/open-test-data122```123124## Environment Variables125126| Variable | Required | Default | Description |127|----------|----------|---------|-------------|128| `OSDU_URL` | ADME only | auto-detected for CIMPL | OSDU base URL |129| `OSDU_DATA_PARTITION` | ADME only | `osdu` for CIMPL | Data partition |130| `OSDU_CLIENT_ID` | ADME only | auto-detected for CIMPL | Client ID |131| `OSDU_CLIENT_SECRET` | ADME only | auto-detected for CIMPL | Client secret |132| `OSDU_TENANT_ID` | ADME only | — | Azure AD tenant ID |133| `OSDU_TOKEN_URL` | Keycloak manual | auto-detected for CIMPL | Keycloak token endpoint |134| `OSDU_LEGAL_TAG` | ADME only | `osdu-demo-legaltag` for CIMPL | Legal tag |135| `OSDU_RESOURCE_ID` | No | same as client_id | AAD app ID for OAuth scope |136| `OSDU_ACL_OWNERS` | No | derived from partition | ACL owners group |137| `OSDU_ACL_VIEWERS` | No | derived from partition | ACL viewers group |138| `OSDU_DATA_DEFINITIONS_DIR` | No | `~/workspace/data-definitions` | data-definitions repo path |139| `OSDU_OPEN_TEST_DATA_DIR` | No | `~/workspace/open-test-data` | open-test-data repo path |140141## Error Handling142143| Error | Cause | Solution |144|-------|-------|----------|145| Missing env vars | Not configured and not CIMPL | Set required variables or ensure kubectl context |146| `Repo not found` | Data repo not cloned | Run `git clone` command shown above |147| HTTP 401/403 | Auth failure | Check credentials or kubectl context |148| HTTP 409 | Record exists | Safe to ignore (record already loaded) |149| "Invalid legal tags" | Wrong legal tag name | Check `OSDU_LEGAL_TAG` matches an existing tag |150| Port-forward failure | Service not running in cluster | Check `kubectl get svc -n osdu` for available services |