[GH-ISSUE #171] FileNotFoundError: [Errno 2] No such file or directory: #99

Closed
opened 2026-05-06 12:37:27 +02:00 by BreizhHardware · 5 comments

Originally created by @maxx-ukoo on GitHub (Feb 20, 2026).
Original GitHub issue: https://github.com/patrickchugh/terravision/issues/171

I try to generate graph with command

terravision draw --source IaC/terraform/prod  --show

and got error:

FileNotFoundError: [Errno 2] No such file or directory: '/Users/user/.terravision/module_cache/terraform-aws-modules_iam_aws;irsa-ebs-csi;/modules/iam-assumable-role-with-oidc'

in .terravision i have:

ls -ls ~/.terravision/module_cache
total 0
0 drwxr-xr-x@ 15 user  staff  480 20 лют.  15:07 terraform-aws-modules_iam_aws;irsa-ebs-csi;

The same error I see with docker.
Is it bug or issue with my local configuration?

Originally created by @maxx-ukoo on GitHub (Feb 20, 2026). Original GitHub issue: https://github.com/patrickchugh/terravision/issues/171 I try to generate graph with command ```sh terravision draw --source IaC/terraform/prod --show ``` and got error: ``` FileNotFoundError: [Errno 2] No such file or directory: '/Users/user/.terravision/module_cache/terraform-aws-modules_iam_aws;irsa-ebs-csi;/modules/iam-assumable-role-with-oidc' ``` in .terravision i have: ``` ls -ls ~/.terravision/module_cache total 0 0 drwxr-xr-x@ 15 user staff 480 20 лют. 15:07 terraform-aws-modules_iam_aws;irsa-ebs-csi; ``` The same error I see with docker. Is it bug or issue with my local configuration?
Author
Owner

@patrickchugh commented on GitHub (Feb 21, 2026):

Thanks @maxx-ukoo never seen this before can you share your TF module code or a code sample so I can try to reproduce? Is your module referencing another module like in a nested manner ?

<!-- gh-comment-id:3937829160 --> @patrickchugh commented on GitHub (Feb 21, 2026): Thanks @maxx-ukoo never seen this before can you share your TF module code or a code sample so I can try to reproduce? Is your module referencing another module like in a nested manner ?
Author
Owner

@maxx-ukoo commented on GitHub (Feb 21, 2026):

@patrickchugh I’m not a DevOps engineer, so I can’t write a minimal configuration, and I also can’t share the production code. But I simply asked Copilot to generate a minimal config. I got:

terraform {
  required_version = ">= 1.4.0"

  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = ">= 5.0"
    }
  }

  backend "local" {}
}

locals {
  region        = "us-east-1"
  user_pool_id  = "us-east-1_AbCdEf123"       # <-- your Cognito User Pool ID
  app_client_id = "4h5j6k7l8m9n0p1q2r3s4t5u"  # <-- your Cognito App Client ID
}

provider "aws" {
  region = local.region
}

# 1) IAM OIDC provider for the Cognito User Pool
resource "aws_iam_openid_connect_provider" "cognito" {
  url = "https://cognito-idp.${local.region}.amazonaws.com/${local.user_pool_id}"

  # This enforces the 'aud' claim at the provider level
  client_id_list = [local.app_client_id]

  # Amazon Root CA 1 thumbprint commonly used for AWS OIDC endpoints
  thumbprint_list = ["9e99a48a9960b14926bb7f3b02e22da0ecd4e4b5"]
}

# 2) IAM Role assumable via Cognito OIDC
module "iam_assumable_role_with_oidc" {
  source  = "terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc"
  version = "~> 5.0"

  create_role = true
  role_name   = "cognito-oidc-readonly"

  # NOTE: module expects the URL without "https://"
  provider_url = "cognito-idp.${local.region}.amazonaws.com/${local.user_pool_id}"

  # Allow any Cognito user from this pool (tighten as needed)
  oidc_subjects_with_wildcards = ["*"]

  # Attach minimal permissions
  role_policy_arns = [
    "arn:aws:iam::aws:policy/ReadOnlyAccess"
  ]
}

I not sure that it will work after apply but init/plan passed and with command:

docker run -it --rm  -v $(pwd):/project  -e AWS_ACCESS_KEY_ID="ID" -e AWS_SECRET_ACCESS_KEY="KEY" patrickchugh/terravision draw --source /project/

I got:

...
Decoding plan..


Analysing plan..


Converting TF Graph Connections..  (this may take a while)


Parsing Terraform Source Files..
  Added Source Location: /project
  Parsing /project/main.tf
    Found 1 module stanza(s)

Loading Sources..
  Processing External Module named 'iam_assumable_role_with_oidc': terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc
  Retrieved code from registry source: terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc
Unhandled error: <class 'FileNotFoundError'>, [Errno 2] No such file or directory: '/home/terravision/.terravision/module_cache/terraform-aws-modules_iam_aws;iam_assumable_role_with_oidc;/modules/iam-assumable-role-with-oidc'
Traceback (most recent call last):
  File "/home/terravision/.local/bin/terravision", line 8, in <module>
    sys.exit(main())
             ^^^^^^
  File "/home/terravision/.local/lib/python3.12/site-packages/terravision/terravision.py", line 1101, in main
    cli(
  File "/home/terravision/.local/lib/python3.12/site-packages/click/core.py", line 1485, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/terravision/.local/lib/python3.12/site-packages/click/core.py", line 1406, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/home/terravision/.local/lib/python3.12/site-packages/click/core.py", line 1873, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/terravision/.local/lib/python3.12/site-packages/click/core.py", line 1269, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/terravision/.local/lib/python3.12/site-packages/click/core.py", line 824, in invoke
    return callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/terravision/.local/lib/python3.12/site-packages/terravision/terravision.py", line 969, in draw
    tfdata = compile_tfdata(
             ^^^^^^^^^^^^^^^
  File "/home/terravision/.local/lib/python3.12/site-packages/terravision/terravision.py", line 533, in compile_tfdata
    tfdata = _process_terraform_source(source, varfile, workspace, annotate, debug)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/terravision/.local/lib/python3.12/site-packages/terravision/terravision.py", line 448, in _process_terraform_source
    tfdata = fileparser.read_tfsource(codepath, varfile, annotate, tfdata)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/terravision/.local/lib/python3.12/site-packages/modules/fileparser.py", line 322, in read_tfsource
    tfdata = iterative_parse(tf_file_paths, hcl_dict, EXTRACT, tfdata, tf_mod_dir)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/terravision/.local/lib/python3.12/site-packages/modules/fileparser.py", line 262, in iterative_parse
    source_files_list = find_tf_files(modpath, [], module_name)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/terravision/.local/lib/python3.12/site-packages/modules/fileparser.py", line 81, in find_tf_files
    files = [f for f in os.listdir(source_location)]
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/home/terravision/.terravision/module_cache/terraform-aws-modules_iam_aws;iam_assumable_role_with_oidc;/modules/iam-assumable-role-with-oidc'
<!-- gh-comment-id:3939308897 --> @maxx-ukoo commented on GitHub (Feb 21, 2026): @patrickchugh I’m not a DevOps engineer, so I can’t write a minimal configuration, and I also can’t share the production code. But I simply asked Copilot to generate a minimal config. I got: ```main.tf terraform { required_version = ">= 1.4.0" required_providers { aws = { source = "hashicorp/aws" version = ">= 5.0" } } backend "local" {} } locals { region = "us-east-1" user_pool_id = "us-east-1_AbCdEf123" # <-- your Cognito User Pool ID app_client_id = "4h5j6k7l8m9n0p1q2r3s4t5u" # <-- your Cognito App Client ID } provider "aws" { region = local.region } # 1) IAM OIDC provider for the Cognito User Pool resource "aws_iam_openid_connect_provider" "cognito" { url = "https://cognito-idp.${local.region}.amazonaws.com/${local.user_pool_id}" # This enforces the 'aud' claim at the provider level client_id_list = [local.app_client_id] # Amazon Root CA 1 thumbprint commonly used for AWS OIDC endpoints thumbprint_list = ["9e99a48a9960b14926bb7f3b02e22da0ecd4e4b5"] } # 2) IAM Role assumable via Cognito OIDC module "iam_assumable_role_with_oidc" { source = "terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc" version = "~> 5.0" create_role = true role_name = "cognito-oidc-readonly" # NOTE: module expects the URL without "https://" provider_url = "cognito-idp.${local.region}.amazonaws.com/${local.user_pool_id}" # Allow any Cognito user from this pool (tighten as needed) oidc_subjects_with_wildcards = ["*"] # Attach minimal permissions role_policy_arns = [ "arn:aws:iam::aws:policy/ReadOnlyAccess" ] } ``` I not sure that it will work after apply but init/plan passed and with command: ```sh docker run -it --rm -v $(pwd):/project -e AWS_ACCESS_KEY_ID="ID" -e AWS_SECRET_ACCESS_KEY="KEY" patrickchugh/terravision draw --source /project/ ``` I got: ``` ... Decoding plan.. Analysing plan.. Converting TF Graph Connections.. (this may take a while) Parsing Terraform Source Files.. Added Source Location: /project Parsing /project/main.tf Found 1 module stanza(s) Loading Sources.. Processing External Module named 'iam_assumable_role_with_oidc': terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc Retrieved code from registry source: terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc Unhandled error: <class 'FileNotFoundError'>, [Errno 2] No such file or directory: '/home/terravision/.terravision/module_cache/terraform-aws-modules_iam_aws;iam_assumable_role_with_oidc;/modules/iam-assumable-role-with-oidc' Traceback (most recent call last): File "/home/terravision/.local/bin/terravision", line 8, in <module> sys.exit(main()) ^^^^^^ File "/home/terravision/.local/lib/python3.12/site-packages/terravision/terravision.py", line 1101, in main cli( File "/home/terravision/.local/lib/python3.12/site-packages/click/core.py", line 1485, in __call__ return self.main(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/terravision/.local/lib/python3.12/site-packages/click/core.py", line 1406, in main rv = self.invoke(ctx) ^^^^^^^^^^^^^^^^ File "/home/terravision/.local/lib/python3.12/site-packages/click/core.py", line 1873, in invoke return _process_result(sub_ctx.command.invoke(sub_ctx)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/terravision/.local/lib/python3.12/site-packages/click/core.py", line 1269, in invoke return ctx.invoke(self.callback, **ctx.params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/terravision/.local/lib/python3.12/site-packages/click/core.py", line 824, in invoke return callback(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/terravision/.local/lib/python3.12/site-packages/terravision/terravision.py", line 969, in draw tfdata = compile_tfdata( ^^^^^^^^^^^^^^^ File "/home/terravision/.local/lib/python3.12/site-packages/terravision/terravision.py", line 533, in compile_tfdata tfdata = _process_terraform_source(source, varfile, workspace, annotate, debug) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/terravision/.local/lib/python3.12/site-packages/terravision/terravision.py", line 448, in _process_terraform_source tfdata = fileparser.read_tfsource(codepath, varfile, annotate, tfdata) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/terravision/.local/lib/python3.12/site-packages/modules/fileparser.py", line 322, in read_tfsource tfdata = iterative_parse(tf_file_paths, hcl_dict, EXTRACT, tfdata, tf_mod_dir) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/terravision/.local/lib/python3.12/site-packages/modules/fileparser.py", line 262, in iterative_parse source_files_list = find_tf_files(modpath, [], module_name) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/terravision/.local/lib/python3.12/site-packages/modules/fileparser.py", line 81, in find_tf_files files = [f for f in os.listdir(source_location)] ^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: '/home/terravision/.terravision/module_cache/terraform-aws-modules_iam_aws;iam_assumable_role_with_oidc;/modules/iam-assumable-role-with-oidc' ```
Author
Owner

@patrickchugh commented on GitHub (Feb 28, 2026):

I found this was related to a version mismatch on the module source terravision was downloading. This is now fixed in the latest version. Can you try agian?

<!-- gh-comment-id:3978504406 --> @patrickchugh commented on GitHub (Feb 28, 2026): I found this was related to a version mismatch on the module source terravision was downloading. This is now fixed in the latest version. Can you try agian?
Author
Owner

@patrickchugh commented on GitHub (Feb 28, 2026):

@maxx-ukoo Thanks for spotting this.

<!-- gh-comment-id:3978505931 --> @patrickchugh commented on GitHub (Feb 28, 2026): @maxx-ukoo Thanks for spotting this.
Author
Owner

@maxx-ukoo commented on GitHub (Mar 2, 2026):

@patrickchugh i have tested with 0.18.0 and it is works.

I have one more suggestion.
Could you update the README and change:

docker run -it --rm  -v $(pwd):/project  -v ~/.aws:/home/terravision/.aws:ro  patrickchugh/terravision draw --source /path/to/terraform_source

to:

docker run -it --rm  -v $(pwd):/project  -v ~/.aws:/home/terravision/.aws:ro  patrickchugh/terravision draw --source **/project/path/to/terraform_source_inside_you_project**

I guess this change can save few minutes for new users.

<!-- gh-comment-id:3983076848 --> @maxx-ukoo commented on GitHub (Mar 2, 2026): @patrickchugh i have tested with 0.18.0 and it is works. I have one more suggestion. Could you update the README and change: ```sh docker run -it --rm -v $(pwd):/project -v ~/.aws:/home/terravision/.aws:ro patrickchugh/terravision draw --source /path/to/terraform_source ``` to: ```sh docker run -it --rm -v $(pwd):/project -v ~/.aws:/home/terravision/.aws:ro patrickchugh/terravision draw --source **/project/path/to/terraform_source_inside_you_project** ``` I guess this change can save few minutes for new users.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/terravision#99
No description provided.