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¶
- A running Qumulo cluster accessible via REST API
- Admin credentials for the cluster
Resources Created¶
| Resource | Description |
|---|---|
qumulo_file_system_settings |
File system permissions, atime, and notify settings |
Usage¶
- 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:
Destroy Behavior¶
On destroy, the file system settings are reset to their safe defaults:
permissions_modeis set toNATIVEatime_enabledis set tofalseatime_granularityis set toDAYnotify_recursive_modeis set toDISABLED_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
}