Example 23

Temporary access expires

Test data must not outlive the run that needed it.

Status
illustrative
Industry
Cross-industry
Language
Bash
Framework
DataNivra CLI
CI
any
Fulfilment
LEASE_CERTIFIED_VERSION
Profile
orders-pr-regression

About this example

All data is synthetic. DataNivra provisions approved test data into a customer-controlled target; it does not run these tests. Credentials for the target are never returned by DataNivra — your runner holds its own.

Why test data matters

Test data must not outlive the run that needed it.

What is requested

A 15-minute lease.

Policy gates

TTL within the profile (and the envelope for CI).

What is provisioned

An isolated copy with a deadline.

Expected output

After 15 minutes the request reads RELEASED with lease state EXPIRED.

Cleanup

Automatic teardown by the TTL sweeper.

Files

  • request.yaml
  • ttl.sh

Run

  1. A tenant administrator defines and a second person approves the profile (datanivra test-data define ../../profiles/orders-pr-regression.yaml --submit, then datanivra policies approve).
  2. datanivra test-data validate request.yaml && datanivra test-data plan request.yaml
  3. Run the example with DATANIVRA_BASE_URL and a session or workload token.

Files

Exactly as they are in the examples repository. Every value is a synthetic placeholder; nothing here is a credential.

request.yaml

# yaml-language-server: $schema=../../../../packages/contracts/schemas/v1/manifests/test-data-request.schema.json
# DataNivra test-data-request manifest (apiVersion datanivra.io/v1alpha1). Validate: datanivra test-data validate <file>
apiVersion: datanivra.io/v1alpha1
kind: TestDataRequest
metadata:
  name: short-lived
spec:
  profile: { name: orders-pr-regression, version: 1 }
  ttl_seconds: 900

examples/test-data-api/scenarios/23-ttl-expiry-teardown/request.yaml

ttl.sh

#!/usr/bin/env bash
# Temporary access expires — request a short lease and watch it end on its own.
set -euo pipefail
id=$(datanivra test-data request request.yaml --wait -o json | jq -r .id)
datanivra test-data status "$id" -o json | jq '{state, expires_at}'
# No release on purpose: after ttl_seconds (15 min) the TTL sweeper ends the lease and tears it down.
sleep 960
datanivra test-data status "$id" -o json | jq '{state, lease_state}'   # RELEASED / EXPIRED

examples/test-data-api/scenarios/23-ttl-expiry-teardown/ttl.sh

The profile it uses: orders-pr-regression

A tenant administrator defines this profile and a second person approves it; requests can only ask for what it allows. All profiles

orders-pr-regression.yaml

# yaml-language-server: $schema=../../../packages/contracts/schemas/v1/manifests/test-data-profile.schema.json
# DataNivra test-data-profile manifest (apiVersion datanivra.io/v1alpha1). Validate: datanivra test-data validate <file>
# Placeholder ids (00000000-0000-4000-8000-0000000000NN): replace with your ids.
# 01 = approved target environment, 11 = certified dataset, 21 = customer agent,
# 99 = workload identity trust (datanivra workload-identities list).
apiVersion: datanivra.io/v1alpha1
kind: TestDataProfile
metadata:
  name: orders-pr-regression
  description: Certified orders dataset leased into an isolated CI database per pull request
spec:
  fulfilment: LEASE_CERTIFIED_VERSION
  lease:
    dataset_id: 00000000-0000-4000-8000-000000000011
    agent_id: 00000000-0000-4000-8000-000000000021
    provider_kind: POSTGRESQL_CONTAINER
    default_ttl_seconds: 1800
    max_ttl_seconds: 7200
    target_pool:
      - env://DATANIVRA_CI_DB_1
      - env://DATANIVRA_CI_DB_2
      - env://DATANIVRA_CI_DB_3
      - env://DATANIVRA_CI_DB_4
  automation:
    workload_identity_ids: [00000000-0000-4000-8000-000000000099]
    max_ttl_seconds: 3600
    max_live_requests: 4
  audit_tags: [CI_PULL_REQUEST]

examples/test-data-api/profiles/orders-pr-regression.yaml