Skip to content

User Guide

This guide covers all Custom Resource Definitions (CRDs) provided by DB Provision Operator.

Resource Hierarchy

graph TD
    DI[DatabaseInstance] --> DB[Database]
    DI --> DU[DatabaseUser]
    DI --> DR[DatabaseRole]
    DB --> DBB[DatabaseBackup]
    DB --> DBS[DatabaseBackupSchedule]
    DBB --> DBR[DatabaseRestore]
    DU --> DG[DatabaseGrant]
    DR --> DG

CRD Overview

CRD Description Depends On
DatabaseInstance Connection to a database server -
Database Logical database DatabaseInstance
DatabaseUser Database user with credentials DatabaseInstance
DatabaseRole Group role for permissions DatabaseInstance
DatabaseGrant Permission assignments DatabaseUser, DatabaseRole
DatabaseBackup One-time backup Database
DatabaseBackupSchedule Scheduled backups Database
DatabaseRestore Restore from backup DatabaseBackup
ClusterDatabaseInstance Cluster-scoped database server connection -
ClusterDatabaseRole Cluster-scoped permission group ClusterDatabaseInstance
ClusterDatabaseGrant Cluster-scoped permission grants ClusterDatabaseRole or DatabaseUser

Common Patterns

Resource Naming

All resources support a name field in the spec that defines the actual database object name (e.g., database name, username). If not specified, the Kubernetes resource name is used.

apiVersion: dbops.dbprovision.io/v1alpha1
kind: Database
metadata:
  name: my-k8s-resource-name  # Kubernetes resource name
spec:
  name: actual_database_name  # Database name (optional, defaults to metadata.name)

Instance References

Child resources reference their parent DatabaseInstance:

spec:
  instanceRef:
    name: postgres-primary
    namespace: default  # Optional, defaults to same namespace

Deletion Policies

Resources that create external database objects support deletion policies:

Policy Behavior
Retain Keep the database object when CR is deleted
Delete Delete the database object when CR is deleted
Snapshot Create a backup before deletion (backup-capable resources)

Deletion Protection

Enable deletion protection to prevent accidental deletion:

# Database, DatabaseInstance, DatabaseGrant, DatabaseBackupSchedule
spec:
  deletionProtection: true

DatabaseUser and DatabaseRole

DatabaseUser and DatabaseRole use annotations instead of spec fields:

metadata:
  annotations:
    dbops.dbprovision.io/deletion-protection: "true"
    dbops.dbprovision.io/deletion-policy: "Retain"  # or Delete

Skip Reconcile

Temporarily pause reconciliation:

metadata:
  annotations:
    dbops.dbprovision.io/skip-reconcile: "true"

Status Phases

All resources report their status through a phase field:

Phase Description
Pending Waiting for dependencies (e.g., instance not ready)
Creating Resource is being created
Ready Resource is successfully created and healthy
Updating Resource is being updated
Deleting Resource is being deleted
Failed An error occurred

Conditions

Resources also expose detailed conditions:

status:
  conditions:
    - type: Ready
      status: "True"
      reason: ReconcileSuccess
      message: "Database created successfully"
      lastTransitionTime: "2024-01-01T00:00:00Z"

Advanced Features

Next Steps