Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

provide means of getting set of folders #32654

Open
oliver-sentianse opened this issue Feb 9, 2023 · 5 comments
Open

provide means of getting set of folders #32654

oliver-sentianse opened this issue Feb 9, 2023 · 5 comments
Labels
enhancement functions new new issue not yet triaged

Comments

@oliver-sentianse
Copy link

Terraform Version

1.3.7

Use Cases

I have a terraform root module that needs to find all the sibling root modules to get some json files there (which it will use to generate IAM policies to be used in those other root modules, but that is not important). Eg

manager
root1
root2
root3

and manager folder has tf code with fileset("..", "root*"), the result will be empty.

Attempted Solutions

Use [for x in fileset("..", "root*/variables.tf"): dirname(x)] which as you can see is way more complicated than necessary

Proposal

Make fileset() support folders / directories too, or create a new function dirset()

References

No response

@oliver-sentianse oliver-sentianse added enhancement new new issue not yet triaged labels Feb 9, 2023
@crw
Copy link
Contributor

crw commented Feb 16, 2023

Thanks for this request!

@erthmeld
Copy link

erthmeld commented Jun 15, 2023

If I wanted to work on and submit a PR for this functionality should I just reference this ticket, or is more feedback and feature detail required?

I have a use case for a dirset function to allow for module instantiation/iteration over a set of directories with for_each. Then I can use the directory names as parameters for some of the individual resource instantiations in my module allowing me to pick up the config files in those paths in the generated AWS resources.

@bflad
Copy link
Contributor

bflad commented Jun 15, 2023

This sort of functionality could also (co-)exist as a data source of the hashicorp/local provider since it already works in the space of generic file management or really another provider, which would also allow the directory listing to be part of the graph rather than an upfront function call. Created hashicorp/terraform-provider-local#215 to gauge interest on that sort of proposal.

@crw
Copy link
Contributor

crw commented Mar 7, 2024

Thank you for your continued interest in this issue.

Terraform version 1.8 launches with support of provider-defined functions. It is now possible to implement your own functions! We would love to see this implemented as a provider-defined function.

Please see the provider-defined functions documentation to learn how to implement functions in your providers. If you are new to provider development, learn how to create a new provider with the Terraform Plugin Framework. If you have any questions, please visit the Terraform Plugin Development category in our official forum.

We hope this feature unblocks future function development and provides more flexibility for the Terraform community. Thank you for your continued support of Terraform!

@chokhareganesh
Copy link

chokhareganesh commented Apr 9, 2024

I know this not been implemented yet, but you can achieve it through with below sample

locals {
   # edit your path here
   batch_directory = "${path.module}/users_dir"

   subdirectories_with_files  = fileset(local.batch_directory, "**")
   subdirectories = setsubtract(flatten([for k, _ in toset(local.subdirectories_with_files) : dirname(k)]),["."])  //remove "." which is not directory name
}

output "subdirectories" {
  value = local.subdirectories
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement functions new new issue not yet triaged
Projects
None yet
Development

No branches or pull requests

6 participants