Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lib/types/workload.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ type AWSWorkloadConfig struct {
ExternalID *uuid.UUID `json:"external_id" yaml:"external_id"`
ExtraClusterOidcUrls []string `json:"extra_cluster_oidc_urls" yaml:"extra_cluster_oidc_urls"`
ExtraPostgresDbs []string `json:"extra_postgres_dbs" yaml:"extra_postgres_dbs"`
FsxOpenzfsDailyAutomaticBackupStartTime string `json:"fsx_openzfs_daily_automatic_backup_start_time" yaml:"fsx_openzfs_daily_automatic_backup_start_time"`
FsxOpenzfsDailyAutomaticBackupStartTime *string `json:"fsx_openzfs_daily_automatic_backup_start_time" yaml:"fsx_openzfs_daily_automatic_backup_start_time"`
FsxOpenzfsMultiAz bool `json:"fsx_openzfs_multi_az" yaml:"fsx_openzfs_multi_az"`
FsxOpenzfsOverrideDeploymentType *string `json:"fsx_openzfs_override_deployment_type" yaml:"fsx_openzfs_override_deployment_type"`
FsxOpenzfsStorageCapacity int `json:"fsx_openzfs_storage_capacity" yaml:"fsx_openzfs_storage_capacity"`
Expand Down
13 changes: 11 additions & 2 deletions python-pulumi/src/ptd/pulumi_resources/aws_fsx_openzfs_multi.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class AWSFsxOpenZfsMultiArgs:
automatic_backup_retention_days: pulumi.Input[int]
copy_tags_to_backups: pulumi.Input[bool]
copy_tags_to_volumes: pulumi.Input[bool]
daily_automatic_backup_start_time: pulumi.Input[str]
daily_automatic_backup_start_time: pulumi.Input[str] | None
deployment_type: pulumi.Input[str]
root_volume_configuration: AWSFsxOpenZfsMultiRootVolumeConfigurationArgs
route_table_ids: list[str] | list[pulumi.Output[str]]
Expand Down Expand Up @@ -85,6 +85,15 @@ def __init__(
# Use the first subnet as preferred for MULTI_AZ
preferred_subnet_id = props.subnet_ids[0]

# Only pass daily_automatic_backup_start_time if it has a valid value.
# AWS doesn't return this field properly on refresh, causing state corruption
# with empty strings that fail validation. By making it conditional, we avoid
# the validation error and let AWS use its default if the state is corrupted.
daily_backup_time = props.daily_automatic_backup_start_time
if daily_backup_time is not None and len(daily_backup_time) != 5:
# Invalid value (likely empty string from corrupted state), don't pass it
daily_backup_time = None

self.file_system = aws.fsx.OpenZfsFileSystem(
f"{name}-filesystem",
automatic_backup_retention_days=props.automatic_backup_retention_days,
Expand All @@ -97,7 +106,7 @@ def __init__(
throughput_capacity=props.throughput_capacity,
copy_tags_to_backups=props.copy_tags_to_backups,
copy_tags_to_volumes=props.copy_tags_to_volumes,
daily_automatic_backup_start_time=props.daily_automatic_backup_start_time,
daily_automatic_backup_start_time=daily_backup_time,
route_table_ids=props.route_table_ids,
root_volume_configuration=root_volume_configuration,
tags=props.tags,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -866,10 +866,16 @@ def _define_fsx_openzfs(self) -> None:
)

else:
# Sanitize daily_automatic_backup_start_time - AWS doesn't return this field
# properly on refresh, causing state corruption with empty strings.
daily_backup_time = self.workload.cfg.fsx_openzfs_daily_automatic_backup_start_time
if daily_backup_time is not None and len(daily_backup_time) != 5:
daily_backup_time = None

self.fsx_openzfs_fs = aws.fsx.OpenZfsFileSystem(
self.workload.compound_name,
automatic_backup_retention_days=30,
daily_automatic_backup_start_time=self.workload.cfg.fsx_openzfs_daily_automatic_backup_start_time,
daily_automatic_backup_start_time=daily_backup_time,
preferred_subnet_id=(subnet_ids[0] if deployment_type.startswith("MULTI") else None),
subnet_ids=subnet_ids,
deployment_type=deployment_type,
Expand Down
Loading