From 0d1876b09b8f339c9e4199a51bc65fc28a0efd70 Mon Sep 17 00:00:00 2001 From: flora-five <72858916+flora-five@users.noreply.github.com> Date: Mon, 29 Sep 2025 17:31:49 +0000 Subject: [PATCH] feat: Add wrappers --- .pre-commit-config.yaml | 5 +- wrappers/README.md | 100 ++++++++++++++++++++++++++ wrappers/dsql/README.md | 100 ++++++++++++++++++++++++++ wrappers/dsql/main.tf | 14 ++++ wrappers/dsql/outputs.tf | 5 ++ wrappers/dsql/variables.tf | 11 +++ wrappers/dsql/versions.tf | 10 +++ wrappers/main.tf | 144 +++++++++++++++++++++++++++++++++++++ wrappers/outputs.tf | 5 ++ wrappers/variables.tf | 11 +++ wrappers/versions.tf | 10 +++ 11 files changed, 413 insertions(+), 2 deletions(-) create mode 100644 wrappers/README.md create mode 100644 wrappers/dsql/README.md create mode 100644 wrappers/dsql/main.tf create mode 100644 wrappers/dsql/outputs.tf create mode 100644 wrappers/dsql/variables.tf create mode 100644 wrappers/dsql/versions.tf create mode 100644 wrappers/main.tf create mode 100644 wrappers/outputs.tf create mode 100644 wrappers/variables.tf create mode 100644 wrappers/versions.tf diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a6cd369..52fd864 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,8 +1,9 @@ repos: - repo: https://github.com/antonbabenko/pre-commit-terraform - rev: v1.96.1 + rev: v1.100.1 hooks: - id: terraform_fmt + - id: terraform_wrapper_module_for_each - id: terraform_docs args: - '--args=--lockfile=false' @@ -23,7 +24,7 @@ repos: - '--args=--only=terraform_workspace_remote' - id: terraform_validate - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 + rev: v6.0.0 hooks: - id: check-merge-conflict - id: end-of-file-fixer diff --git a/wrappers/README.md b/wrappers/README.md new file mode 100644 index 0000000..4e9280f --- /dev/null +++ b/wrappers/README.md @@ -0,0 +1,100 @@ +# Wrapper for the root module + +The configuration in this directory contains an implementation of a single module wrapper pattern, which allows managing several copies of a module in places where using the native Terraform 0.13+ `for_each` feature is not feasible (e.g., with Terragrunt). + +You may want to use a single Terragrunt configuration file to manage multiple resources without duplicating `terragrunt.hcl` files for each copy of the same module. + +This wrapper does not implement any extra functionality. + +## Usage with Terragrunt + +`terragrunt.hcl`: + +```hcl +terraform { + source = "tfr:///terraform-aws-modules/rds-aurora/aws//wrappers" + # Alternative source: + # source = "git::git@github.com:terraform-aws-modules/terraform-aws-rds-aurora.git//wrappers?ref=master" +} + +inputs = { + defaults = { # Default values + create = true + tags = { + Terraform = "true" + Environment = "dev" + } + } + + items = { + my-item = { + # omitted... can be any argument supported by the module + } + my-second-item = { + # omitted... can be any argument supported by the module + } + # omitted... + } +} +``` + +## Usage with Terraform + +```hcl +module "wrapper" { + source = "terraform-aws-modules/rds-aurora/aws//wrappers" + + defaults = { # Default values + create = true + tags = { + Terraform = "true" + Environment = "dev" + } + } + + items = { + my-item = { + # omitted... can be any argument supported by the module + } + my-second-item = { + # omitted... can be any argument supported by the module + } + # omitted... + } +} +``` + +## Example: Manage multiple S3 buckets in one Terragrunt layer + +`eu-west-1/s3-buckets/terragrunt.hcl`: + +```hcl +terraform { + source = "tfr:///terraform-aws-modules/s3-bucket/aws//wrappers" + # Alternative source: + # source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git//wrappers?ref=master" +} + +inputs = { + defaults = { + force_destroy = true + + attach_elb_log_delivery_policy = true + attach_lb_log_delivery_policy = true + attach_deny_insecure_transport_policy = true + attach_require_latest_tls_policy = true + } + + items = { + bucket1 = { + bucket = "my-random-bucket-1" + } + bucket2 = { + bucket = "my-random-bucket-2" + tags = { + Secure = "probably" + } + } + } +} +``` diff --git a/wrappers/dsql/README.md b/wrappers/dsql/README.md new file mode 100644 index 0000000..f0ca099 --- /dev/null +++ b/wrappers/dsql/README.md @@ -0,0 +1,100 @@ +# Wrapper for module: `modules/dsql` + +The configuration in this directory contains an implementation of a single module wrapper pattern, which allows managing several copies of a module in places where using the native Terraform 0.13+ `for_each` feature is not feasible (e.g., with Terragrunt). + +You may want to use a single Terragrunt configuration file to manage multiple resources without duplicating `terragrunt.hcl` files for each copy of the same module. + +This wrapper does not implement any extra functionality. + +## Usage with Terragrunt + +`terragrunt.hcl`: + +```hcl +terraform { + source = "tfr:///terraform-aws-modules/rds-aurora/aws//wrappers/dsql" + # Alternative source: + # source = "git::git@github.com:terraform-aws-modules/terraform-aws-rds-aurora.git//wrappers/dsql?ref=master" +} + +inputs = { + defaults = { # Default values + create = true + tags = { + Terraform = "true" + Environment = "dev" + } + } + + items = { + my-item = { + # omitted... can be any argument supported by the module + } + my-second-item = { + # omitted... can be any argument supported by the module + } + # omitted... + } +} +``` + +## Usage with Terraform + +```hcl +module "wrapper" { + source = "terraform-aws-modules/rds-aurora/aws//wrappers/dsql" + + defaults = { # Default values + create = true + tags = { + Terraform = "true" + Environment = "dev" + } + } + + items = { + my-item = { + # omitted... can be any argument supported by the module + } + my-second-item = { + # omitted... can be any argument supported by the module + } + # omitted... + } +} +``` + +## Example: Manage multiple S3 buckets in one Terragrunt layer + +`eu-west-1/s3-buckets/terragrunt.hcl`: + +```hcl +terraform { + source = "tfr:///terraform-aws-modules/s3-bucket/aws//wrappers" + # Alternative source: + # source = "git::git@github.com:terraform-aws-modules/terraform-aws-s3-bucket.git//wrappers?ref=master" +} + +inputs = { + defaults = { + force_destroy = true + + attach_elb_log_delivery_policy = true + attach_lb_log_delivery_policy = true + attach_deny_insecure_transport_policy = true + attach_require_latest_tls_policy = true + } + + items = { + bucket1 = { + bucket = "my-random-bucket-1" + } + bucket2 = { + bucket = "my-random-bucket-2" + tags = { + Secure = "probably" + } + } + } +} +``` diff --git a/wrappers/dsql/main.tf b/wrappers/dsql/main.tf new file mode 100644 index 0000000..07daf12 --- /dev/null +++ b/wrappers/dsql/main.tf @@ -0,0 +1,14 @@ +module "wrapper" { + source = "../../modules/dsql" + + for_each = var.items + + clusters = try(each.value.clusters, var.defaults.clusters, null) + create = try(each.value.create, var.defaults.create, true) + create_cluster_peering = try(each.value.create_cluster_peering, var.defaults.create_cluster_peering, false) + deletion_protection_enabled = try(each.value.deletion_protection_enabled, var.defaults.deletion_protection_enabled, null) + kms_encryption_key = try(each.value.kms_encryption_key, var.defaults.kms_encryption_key, null) + tags = try(each.value.tags, var.defaults.tags, {}) + timeouts = try(each.value.timeouts, var.defaults.timeouts, {}) + witness_region = try(each.value.witness_region, var.defaults.witness_region, null) +} diff --git a/wrappers/dsql/outputs.tf b/wrappers/dsql/outputs.tf new file mode 100644 index 0000000..ec6da5f --- /dev/null +++ b/wrappers/dsql/outputs.tf @@ -0,0 +1,5 @@ +output "wrapper" { + description = "Map of outputs of a wrapper." + value = module.wrapper + # sensitive = false # No sensitive module output found +} diff --git a/wrappers/dsql/variables.tf b/wrappers/dsql/variables.tf new file mode 100644 index 0000000..a6ea096 --- /dev/null +++ b/wrappers/dsql/variables.tf @@ -0,0 +1,11 @@ +variable "defaults" { + description = "Map of default values which will be used for each item." + type = any + default = {} +} + +variable "items" { + description = "Maps of items to create a wrapper from. Values are passed through to the module." + type = any + default = {} +} diff --git a/wrappers/dsql/versions.tf b/wrappers/dsql/versions.tf new file mode 100644 index 0000000..7aad8ab --- /dev/null +++ b/wrappers/dsql/versions.tf @@ -0,0 +1,10 @@ +terraform { + required_version = ">= 1.0" + + required_providers { + aws = { + source = "hashicorp/aws" + version = ">= 5.100" + } + } +} diff --git a/wrappers/main.tf b/wrappers/main.tf new file mode 100644 index 0000000..b684e9e --- /dev/null +++ b/wrappers/main.tf @@ -0,0 +1,144 @@ +module "wrapper" { + source = "../" + + for_each = var.items + + allocated_storage = try(each.value.allocated_storage, var.defaults.allocated_storage, null) + allow_major_version_upgrade = try(each.value.allow_major_version_upgrade, var.defaults.allow_major_version_upgrade, false) + apply_immediately = try(each.value.apply_immediately, var.defaults.apply_immediately, null) + auto_minor_version_upgrade = try(each.value.auto_minor_version_upgrade, var.defaults.auto_minor_version_upgrade, null) + autoscaling_enabled = try(each.value.autoscaling_enabled, var.defaults.autoscaling_enabled, false) + autoscaling_max_capacity = try(each.value.autoscaling_max_capacity, var.defaults.autoscaling_max_capacity, 2) + autoscaling_min_capacity = try(each.value.autoscaling_min_capacity, var.defaults.autoscaling_min_capacity, 0) + autoscaling_policy_name = try(each.value.autoscaling_policy_name, var.defaults.autoscaling_policy_name, "target-metric") + autoscaling_scale_in_cooldown = try(each.value.autoscaling_scale_in_cooldown, var.defaults.autoscaling_scale_in_cooldown, 300) + autoscaling_scale_out_cooldown = try(each.value.autoscaling_scale_out_cooldown, var.defaults.autoscaling_scale_out_cooldown, 300) + autoscaling_target_connections = try(each.value.autoscaling_target_connections, var.defaults.autoscaling_target_connections, 700) + autoscaling_target_cpu = try(each.value.autoscaling_target_cpu, var.defaults.autoscaling_target_cpu, 70) + availability_zones = try(each.value.availability_zones, var.defaults.availability_zones, null) + backtrack_window = try(each.value.backtrack_window, var.defaults.backtrack_window, null) + backup_retention_period = try(each.value.backup_retention_period, var.defaults.backup_retention_period, null) + ca_cert_identifier = try(each.value.ca_cert_identifier, var.defaults.ca_cert_identifier, null) + cloudwatch_log_group_class = try(each.value.cloudwatch_log_group_class, var.defaults.cloudwatch_log_group_class, null) + cloudwatch_log_group_kms_key_id = try(each.value.cloudwatch_log_group_kms_key_id, var.defaults.cloudwatch_log_group_kms_key_id, null) + cloudwatch_log_group_retention_in_days = try(each.value.cloudwatch_log_group_retention_in_days, var.defaults.cloudwatch_log_group_retention_in_days, 7) + cloudwatch_log_group_skip_destroy = try(each.value.cloudwatch_log_group_skip_destroy, var.defaults.cloudwatch_log_group_skip_destroy, null) + cloudwatch_log_group_tags = try(each.value.cloudwatch_log_group_tags, var.defaults.cloudwatch_log_group_tags, {}) + cluster_ca_cert_identifier = try(each.value.cluster_ca_cert_identifier, var.defaults.cluster_ca_cert_identifier, null) + cluster_members = try(each.value.cluster_members, var.defaults.cluster_members, null) + cluster_monitoring_interval = try(each.value.cluster_monitoring_interval, var.defaults.cluster_monitoring_interval, 0) + cluster_performance_insights_enabled = try(each.value.cluster_performance_insights_enabled, var.defaults.cluster_performance_insights_enabled, null) + cluster_performance_insights_kms_key_id = try(each.value.cluster_performance_insights_kms_key_id, var.defaults.cluster_performance_insights_kms_key_id, null) + cluster_performance_insights_retention_period = try(each.value.cluster_performance_insights_retention_period, var.defaults.cluster_performance_insights_retention_period, null) + cluster_scalability_type = try(each.value.cluster_scalability_type, var.defaults.cluster_scalability_type, null) + cluster_tags = try(each.value.cluster_tags, var.defaults.cluster_tags, {}) + cluster_timeouts = try(each.value.cluster_timeouts, var.defaults.cluster_timeouts, {}) + cluster_use_name_prefix = try(each.value.cluster_use_name_prefix, var.defaults.cluster_use_name_prefix, false) + compute_redundancy = try(each.value.compute_redundancy, var.defaults.compute_redundancy, null) + copy_tags_to_snapshot = try(each.value.copy_tags_to_snapshot, var.defaults.copy_tags_to_snapshot, null) + create = try(each.value.create, var.defaults.create, true) + create_cloudwatch_log_group = try(each.value.create_cloudwatch_log_group, var.defaults.create_cloudwatch_log_group, false) + create_db_cluster_activity_stream = try(each.value.create_db_cluster_activity_stream, var.defaults.create_db_cluster_activity_stream, false) + create_db_cluster_parameter_group = try(each.value.create_db_cluster_parameter_group, var.defaults.create_db_cluster_parameter_group, false) + create_db_parameter_group = try(each.value.create_db_parameter_group, var.defaults.create_db_parameter_group, false) + create_db_subnet_group = try(each.value.create_db_subnet_group, var.defaults.create_db_subnet_group, false) + create_monitoring_role = try(each.value.create_monitoring_role, var.defaults.create_monitoring_role, true) + create_security_group = try(each.value.create_security_group, var.defaults.create_security_group, true) + create_shard_group = try(each.value.create_shard_group, var.defaults.create_shard_group, false) + database_insights_mode = try(each.value.database_insights_mode, var.defaults.database_insights_mode, null) + database_name = try(each.value.database_name, var.defaults.database_name, null) + db_cluster_activity_stream_kms_key_id = try(each.value.db_cluster_activity_stream_kms_key_id, var.defaults.db_cluster_activity_stream_kms_key_id, null) + db_cluster_activity_stream_mode = try(each.value.db_cluster_activity_stream_mode, var.defaults.db_cluster_activity_stream_mode, null) + db_cluster_db_instance_parameter_group_name = try(each.value.db_cluster_db_instance_parameter_group_name, var.defaults.db_cluster_db_instance_parameter_group_name, null) + db_cluster_instance_class = try(each.value.db_cluster_instance_class, var.defaults.db_cluster_instance_class, null) + db_cluster_parameter_group_description = try(each.value.db_cluster_parameter_group_description, var.defaults.db_cluster_parameter_group_description, null) + db_cluster_parameter_group_family = try(each.value.db_cluster_parameter_group_family, var.defaults.db_cluster_parameter_group_family, "") + db_cluster_parameter_group_name = try(each.value.db_cluster_parameter_group_name, var.defaults.db_cluster_parameter_group_name, null) + db_cluster_parameter_group_parameters = try(each.value.db_cluster_parameter_group_parameters, var.defaults.db_cluster_parameter_group_parameters, []) + db_cluster_parameter_group_use_name_prefix = try(each.value.db_cluster_parameter_group_use_name_prefix, var.defaults.db_cluster_parameter_group_use_name_prefix, true) + db_parameter_group_description = try(each.value.db_parameter_group_description, var.defaults.db_parameter_group_description, null) + db_parameter_group_family = try(each.value.db_parameter_group_family, var.defaults.db_parameter_group_family, "") + db_parameter_group_name = try(each.value.db_parameter_group_name, var.defaults.db_parameter_group_name, null) + db_parameter_group_parameters = try(each.value.db_parameter_group_parameters, var.defaults.db_parameter_group_parameters, []) + db_parameter_group_use_name_prefix = try(each.value.db_parameter_group_use_name_prefix, var.defaults.db_parameter_group_use_name_prefix, true) + db_shard_group_identifier = try(each.value.db_shard_group_identifier, var.defaults.db_shard_group_identifier, null) + db_subnet_group_name = try(each.value.db_subnet_group_name, var.defaults.db_subnet_group_name, "") + delete_automated_backups = try(each.value.delete_automated_backups, var.defaults.delete_automated_backups, null) + deletion_protection = try(each.value.deletion_protection, var.defaults.deletion_protection, null) + domain = try(each.value.domain, var.defaults.domain, null) + domain_iam_role_name = try(each.value.domain_iam_role_name, var.defaults.domain_iam_role_name, null) + enable_global_write_forwarding = try(each.value.enable_global_write_forwarding, var.defaults.enable_global_write_forwarding, null) + enable_http_endpoint = try(each.value.enable_http_endpoint, var.defaults.enable_http_endpoint, null) + enable_local_write_forwarding = try(each.value.enable_local_write_forwarding, var.defaults.enable_local_write_forwarding, null) + enabled_cloudwatch_logs_exports = try(each.value.enabled_cloudwatch_logs_exports, var.defaults.enabled_cloudwatch_logs_exports, []) + endpoints = try(each.value.endpoints, var.defaults.endpoints, {}) + engine = try(each.value.engine, var.defaults.engine, null) + engine_lifecycle_support = try(each.value.engine_lifecycle_support, var.defaults.engine_lifecycle_support, null) + engine_mode = try(each.value.engine_mode, var.defaults.engine_mode, "provisioned") + engine_native_audit_fields_included = try(each.value.engine_native_audit_fields_included, var.defaults.engine_native_audit_fields_included, false) + engine_version = try(each.value.engine_version, var.defaults.engine_version, null) + final_snapshot_identifier = try(each.value.final_snapshot_identifier, var.defaults.final_snapshot_identifier, null) + global_cluster_identifier = try(each.value.global_cluster_identifier, var.defaults.global_cluster_identifier, null) + iam_database_authentication_enabled = try(each.value.iam_database_authentication_enabled, var.defaults.iam_database_authentication_enabled, null) + iam_role_description = try(each.value.iam_role_description, var.defaults.iam_role_description, null) + iam_role_force_detach_policies = try(each.value.iam_role_force_detach_policies, var.defaults.iam_role_force_detach_policies, null) + iam_role_managed_policy_arns = try(each.value.iam_role_managed_policy_arns, var.defaults.iam_role_managed_policy_arns, null) + iam_role_max_session_duration = try(each.value.iam_role_max_session_duration, var.defaults.iam_role_max_session_duration, null) + iam_role_name = try(each.value.iam_role_name, var.defaults.iam_role_name, null) + iam_role_path = try(each.value.iam_role_path, var.defaults.iam_role_path, null) + iam_role_permissions_boundary = try(each.value.iam_role_permissions_boundary, var.defaults.iam_role_permissions_boundary, null) + iam_role_use_name_prefix = try(each.value.iam_role_use_name_prefix, var.defaults.iam_role_use_name_prefix, false) + iam_roles = try(each.value.iam_roles, var.defaults.iam_roles, {}) + instance_class = try(each.value.instance_class, var.defaults.instance_class, "") + instance_timeouts = try(each.value.instance_timeouts, var.defaults.instance_timeouts, {}) + instances = try(each.value.instances, var.defaults.instances, {}) + instances_use_identifier_prefix = try(each.value.instances_use_identifier_prefix, var.defaults.instances_use_identifier_prefix, false) + iops = try(each.value.iops, var.defaults.iops, null) + is_primary_cluster = try(each.value.is_primary_cluster, var.defaults.is_primary_cluster, true) + kms_key_id = try(each.value.kms_key_id, var.defaults.kms_key_id, null) + manage_master_user_password = try(each.value.manage_master_user_password, var.defaults.manage_master_user_password, true) + manage_master_user_password_rotation = try(each.value.manage_master_user_password_rotation, var.defaults.manage_master_user_password_rotation, false) + master_password = try(each.value.master_password, var.defaults.master_password, null) + master_user_password_rotate_immediately = try(each.value.master_user_password_rotate_immediately, var.defaults.master_user_password_rotate_immediately, null) + master_user_password_rotation_automatically_after_days = try(each.value.master_user_password_rotation_automatically_after_days, var.defaults.master_user_password_rotation_automatically_after_days, null) + master_user_password_rotation_duration = try(each.value.master_user_password_rotation_duration, var.defaults.master_user_password_rotation_duration, null) + master_user_password_rotation_schedule_expression = try(each.value.master_user_password_rotation_schedule_expression, var.defaults.master_user_password_rotation_schedule_expression, null) + master_user_secret_kms_key_id = try(each.value.master_user_secret_kms_key_id, var.defaults.master_user_secret_kms_key_id, null) + master_username = try(each.value.master_username, var.defaults.master_username, null) + max_acu = try(each.value.max_acu, var.defaults.max_acu, null) + min_acu = try(each.value.min_acu, var.defaults.min_acu, null) + monitoring_interval = try(each.value.monitoring_interval, var.defaults.monitoring_interval, 0) + monitoring_role_arn = try(each.value.monitoring_role_arn, var.defaults.monitoring_role_arn, "") + name = try(each.value.name, var.defaults.name, "") + network_type = try(each.value.network_type, var.defaults.network_type, null) + performance_insights_enabled = try(each.value.performance_insights_enabled, var.defaults.performance_insights_enabled, null) + performance_insights_kms_key_id = try(each.value.performance_insights_kms_key_id, var.defaults.performance_insights_kms_key_id, null) + performance_insights_retention_period = try(each.value.performance_insights_retention_period, var.defaults.performance_insights_retention_period, null) + port = try(each.value.port, var.defaults.port, null) + predefined_metric_type = try(each.value.predefined_metric_type, var.defaults.predefined_metric_type, "RDSReaderAverageCPUUtilization") + preferred_backup_window = try(each.value.preferred_backup_window, var.defaults.preferred_backup_window, "02:00-03:00") + preferred_maintenance_window = try(each.value.preferred_maintenance_window, var.defaults.preferred_maintenance_window, "sun:05:00-sun:06:00") + publicly_accessible = try(each.value.publicly_accessible, var.defaults.publicly_accessible, null) + putin_khuylo = try(each.value.putin_khuylo, var.defaults.putin_khuylo, true) + replication_source_identifier = try(each.value.replication_source_identifier, var.defaults.replication_source_identifier, null) + restore_to_point_in_time = try(each.value.restore_to_point_in_time, var.defaults.restore_to_point_in_time, {}) + s3_import = try(each.value.s3_import, var.defaults.s3_import, {}) + scaling_configuration = try(each.value.scaling_configuration, var.defaults.scaling_configuration, {}) + security_group_description = try(each.value.security_group_description, var.defaults.security_group_description, null) + security_group_name = try(each.value.security_group_name, var.defaults.security_group_name, "") + security_group_rules = try(each.value.security_group_rules, var.defaults.security_group_rules, {}) + security_group_tags = try(each.value.security_group_tags, var.defaults.security_group_tags, {}) + security_group_use_name_prefix = try(each.value.security_group_use_name_prefix, var.defaults.security_group_use_name_prefix, true) + serverlessv2_scaling_configuration = try(each.value.serverlessv2_scaling_configuration, var.defaults.serverlessv2_scaling_configuration, {}) + shard_group_tags = try(each.value.shard_group_tags, var.defaults.shard_group_tags, {}) + shard_group_timeouts = try(each.value.shard_group_timeouts, var.defaults.shard_group_timeouts, {}) + skip_final_snapshot = try(each.value.skip_final_snapshot, var.defaults.skip_final_snapshot, false) + snapshot_identifier = try(each.value.snapshot_identifier, var.defaults.snapshot_identifier, null) + source_region = try(each.value.source_region, var.defaults.source_region, null) + storage_encrypted = try(each.value.storage_encrypted, var.defaults.storage_encrypted, true) + storage_type = try(each.value.storage_type, var.defaults.storage_type, null) + subnets = try(each.value.subnets, var.defaults.subnets, []) + tags = try(each.value.tags, var.defaults.tags, {}) + vpc_id = try(each.value.vpc_id, var.defaults.vpc_id, "") + vpc_security_group_ids = try(each.value.vpc_security_group_ids, var.defaults.vpc_security_group_ids, []) +} diff --git a/wrappers/outputs.tf b/wrappers/outputs.tf new file mode 100644 index 0000000..f137373 --- /dev/null +++ b/wrappers/outputs.tf @@ -0,0 +1,5 @@ +output "wrapper" { + description = "Map of outputs of a wrapper." + value = module.wrapper + sensitive = true # At least one sensitive module output (cluster_master_password) found (requires Terraform 0.14+) +} diff --git a/wrappers/variables.tf b/wrappers/variables.tf new file mode 100644 index 0000000..a6ea096 --- /dev/null +++ b/wrappers/variables.tf @@ -0,0 +1,11 @@ +variable "defaults" { + description = "Map of default values which will be used for each item." + type = any + default = {} +} + +variable "items" { + description = "Maps of items to create a wrapper from. Values are passed through to the module." + type = any + default = {} +} diff --git a/wrappers/versions.tf b/wrappers/versions.tf new file mode 100644 index 0000000..c00acf7 --- /dev/null +++ b/wrappers/versions.tf @@ -0,0 +1,10 @@ +terraform { + required_version = ">= 1.0" + + required_providers { + aws = { + source = "hashicorp/aws" + version = ">= 5.89" + } + } +}