Skip to content

File System Settings Example

This example demonstrates configuring file system settings on Qumulo clusters, including:

  • Permissions mode - Control how permissions work across NFS and SMB protocols
  • Access time (atime) tracking - Enable and configure file access time updates
  • File system notifications - Configure recursive notification behavior

Prerequisites

  1. A running Qumulo cluster accessible via REST API
  2. Admin credentials for the cluster

Resources Created

Resource Description
qumulo_file_system_settings File system permissions, atime, and notify settings

Usage

  1. Initialize, plan, and apply with your cluster variables:
terraform init -upgrade
terraform plan \
  -var="cluster_endpoint=https://your-cluster:8000" \
  -var="cluster_password=your-password"
terraform apply \
  -var="cluster_endpoint=https://your-cluster:8000" \
  -var="cluster_password=your-password"

Or create a terraform.tfvars file with your values and run terraform apply without -var flags.

Permissions Mode

The permissions_mode setting controls how file permissions behave across protocols:

Mode Description Use Case
NATIVE Each protocol uses its native permissions model Single-protocol environments
CROSS_PROTOCOL Unified permissions across NFS and SMB Mixed protocol environments
resource "qumulo_file_system_settings" "main" {
  connection_profile = "cluster1"

  permissions_mode = "CROSS_PROTOCOL"
}

Access Time (Atime) Tracking

Enable atime tracking to record when files are accessed. The granularity setting controls how often atime is updated:

Granularity Description
HOUR Update atime at most once per hour
DAY Update atime at most once per day (default)
WEEK Update atime at most once per week
resource "qumulo_file_system_settings" "main" {
  connection_profile = "cluster1"

  atime_enabled     = true
  atime_granularity = "DAY"
}

Note: Atime tracking has a small performance overhead. Use a coarser granularity (WEEK) for better performance, or disable it entirely for workloads that don't require access time tracking.

File System Notifications

The notify_recursive_mode setting controls how the cluster handles recursive notification requests:

Mode Description
DISABLED_ERROR Returns an error for recursive notification requests (default)
DISABLED_IGNORE Silently ignores the recursive flag
ENABLED Allows recursive notifications
resource "qumulo_file_system_settings" "main" {
  connection_profile = "cluster1"

  notify_recursive_mode = "ENABLED"
}

Warning: Enabling recursive notifications may impact performance on large directory trees. Use with caution.

Multi-Cluster Configuration

Use for_each to manage file system settings across multiple clusters:

variable "clusters" {
  type = map(object({
    endpoint = string
  }))
}

provider "qumulo" {
  connection_profiles = [
    for name, config in var.clusters : {
      name     = name
      endpoint = config.endpoint
      username = var.admin_username
      password = var.admin_password
    }
  ]
}

resource "qumulo_file_system_settings" "all" {
  for_each = var.clusters

  connection_profile = each.key

  permissions_mode      = "CROSS_PROTOCOL"
  atime_enabled         = true
  atime_granularity     = "DAY"
  notify_recursive_mode = "DISABLED_ERROR"
}

Import

Import existing file system settings:

# Format: connection_profile
terraform import qumulo_file_system_settings.main "prod"

Destroy Behavior

On destroy, the file system settings are reset to their safe defaults:

  • permissions_mode is set to NATIVE
  • atime_enabled is set to false
  • atime_granularity is set to DAY
  • notify_recursive_mode is set to DISABLED_ERROR

Full Configuration

# File System Settings Example
#
# This example demonstrates configuring file system settings on Qumulo clusters.
# It shows how to:
# - Configure permissions mode (NATIVE vs CROSS_PROTOCOL)
# - Enable and configure access time (atime) tracking
# - Configure file system notifications (recursive mode)

terraform {
  required_providers {
    qumulo = {
      source  = "qumulo-terraform-registry.s3.us-east-1.amazonaws.com/qumulo/qumulo"
      version = "~> 1.0"
    }
  }
}

variable "cluster_endpoint" {
  description = "Qumulo cluster REST API endpoint"
  type        = string
}

variable "cluster_username" {
  description = "Qumulo cluster admin username"
  type        = string
  default     = "admin"
}

variable "cluster_password" {
  description = "Qumulo cluster admin password"
  type        = string
  sensitive   = true
}

# Define connection profile for the cluster
provider "qumulo" {
  connection_profiles = [
    {
      name                 = "cluster1"
      endpoint             = var.cluster_endpoint
      username             = var.cluster_username
      password             = var.cluster_password
      insecure_skip_verify = true # Required for clusters with self-signed certificates
    }
  ]
}

# File system settings (singleton resource: one per cluster)
resource "qumulo_file_system_settings" "main" {
  connection_profile = "cluster1"

  # Permissions mode:
  # - NATIVE: Uses native permissions for each protocol (NFS/SMB)
  # - CROSS_PROTOCOL: Unified permissions across protocols
  permissions_mode = "CROSS_PROTOCOL"

  # Access time (atime) tracking:
  # When enabled, file access times are updated at the specified granularity
  atime_enabled     = true
  atime_granularity = "DAY" # Options: HOUR, DAY, WEEK

  # File system notifications:
  # - DISABLED_ERROR: Returns error for recursive notification requests
  # - DISABLED_IGNORE: Silently ignores recursive flag in notification requests
  # - ENABLED: Allows recursive notifications (may impact performance)
  notify_recursive_mode = "DISABLED_ERROR"
}

output "permissions_mode" {
  description = "The configured permissions mode"
  value       = qumulo_file_system_settings.main.permissions_mode
}

output "atime_enabled" {
  description = "Whether atime tracking is enabled"
  value       = qumulo_file_system_settings.main.atime_enabled
}

output "notify_recursive_mode" {
  description = "The configured notify recursive mode"
  value       = qumulo_file_system_settings.main.notify_recursive_mode
}