Skip to content

Add data sources for querying existing MinIO resources #739

@aminueza

Description

@aminueza

Description:

The provider needs data sources for reading existing MinIO configurations and resources without managing them. This enables importing existing infrastructure and making data-driven decisions.

Why it's important:

  • Query existing infrastructure
  • Import existing resources
  • Make conditional decisions based on current state
  • Support for brownfield deployments
  • Enable read-only Terraform modules

Needed data sources:

# IAM
data "minio_iam_user" "existing"
data "minio_iam_group" "existing"
data "minio_iam_policy" "existing"
data "minio_iam_service_account" "existing"

# Buckets
data "minio_s3_bucket" "existing"
data "minio_s3_bucket_policy" "existing"
data "minio_s3_bucket_versioning" "existing"
data "minio_s3_bucket_encryption" "existing"
data "minio_s3_bucket_replication" "existing"
data "minio_s3_bucket_notification" "existing"
data "minio_s3_bucket_lifecycle" "existing"
data "minio_s3_bucket_quota" "existing"
data "minio_s3_bucket_tags" "existing"

# Server
data "minio_server_info" "current"
data "minio_server_config" "current"
data "minio_kms_status" "current"
data "minio_health_status" "current"

# Replication
data "minio_site_replication_status" "current"
data "minio_site_replication_info" "current"

# Monitoring
data "minio_prometheus_config" "current"

# License
data "minio_license_info" "current"

# Tiers
data "minio_ilm_tiers" "available"
data "minio_ilm_tier" "specific"

# Batch jobs
data "minio_batch_job_status" "job"
data "minio_batch_jobs" "all"

Example usage:

# Query existing bucket
data "minio_s3_bucket" "existing" {
  bucket = "existing-bucket"
}

# Conditional resource creation
resource "minio_s3_bucket_encryption" "conditional" {
  count = data.minio_s3_bucket.existing.encryption_enabled ? 0 : 1
  
  bucket = data.minio_s3_bucket.existing.id
  # ... encryption config
}

# Query server info
data "minio_server_info" "current" {}

output "server_version" {
  value = data.minio_server_info.current.version
}

output "total_capacity" {
  value = data.minio_server_info.current.storage.total
}

# Query all buckets
data "minio_s3_buckets" "all" {}

output "bucket_count" {
  value = length(data.minio_s3_buckets.all.buckets)
}

# Import existing configuration
data "minio_server_config" "api" {
  key = "api"
}

# Use existing config values
resource "minio_server_config_api" "imported" {
  requests_max = data.minio_server_config.api.requests_max
  # ... other settings
}

References:

  • Terraform data source best practices
  • madmin-go info commands: info-commands.go, info-v4-commands.go

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions