{"id":13515455,"url":"https://github.com/Ant0wan/tfam","last_synced_at":"2025-03-31T04:37:05.431Z","repository":{"id":154482665,"uuid":"630655960","full_name":"Ant0wan/tfam","owner":"Ant0wan","description":"A Rust-based wrapper for concurrent Terraform apply, enabling multi-deployment support.","archived":false,"fork":false,"pushed_at":"2025-03-06T14:47:13.000Z","size":802,"stargazers_count":23,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-06T15:36:24.077Z","etag":null,"topics":["terraform","tfswitch","tofu"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ant0wan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["username"],"open_collective":["username"],"ko_fi":["username"],"tidelift":["package-name"],"community_bridge":["project-id"],"custom":[{"url":"https://example.com/donate","platform":"Custom Donation Platform"},{"url":"https://example.com/sponsor","platform":"Custom Sponsorship Platform"}]}},"created_at":"2023-04-20T21:22:19.000Z","updated_at":"2025-03-06T14:47:17.000Z","dependencies_parsed_at":"2024-11-01T19:41:52.170Z","dependency_job_id":null,"html_url":"https://github.com/Ant0wan/tfam","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ant0wan%2Ftfam","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ant0wan%2Ftfam/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ant0wan%2Ftfam/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ant0wan%2Ftfam/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ant0wan","download_url":"https://codeload.github.com/Ant0wan/tfam/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246418657,"owners_count":20773934,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["terraform","tfswitch","tofu"],"created_at":"2024-08-01T05:01:11.544Z","updated_at":"2025-03-31T04:37:04.103Z","avatar_url":"https://github.com/Ant0wan.png","language":"Rust","funding_links":["https://github.com/sponsors/username","https://opencollective.com/[\"username\"]","https://ko-fi.com/[\"username\"]","https://tidelift.com/funding/github/[\"package-name\"]","https://funding.communitybridge.org/projects/[\"project-id\"]",{"url":"https://example.com/donate","platform":"Custom Donation Platform"},{"url":"https://example.com/sponsor","platform":"Custom Sponsorship Platform"}],"categories":["Tools"],"sub_categories":["Wrappers"],"readme":"\u003cbr /\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"\"\u003e\n    \u003cimg src=\".logo.png\" alt=\"Logo\" height=\"80\"\u003e\n  \u003c/a\u003e\n      \u003ch1 align=\"center\"\u003eTerraform Apply Manager\u003c/h1\u003e\n  \u003cp align=\"center\"\u003e\u003ci\u003eA Rust-based wrapper for concurrent Terraform apply, enabling multi-deployment support.\u003c/i\u003e\u003c/p\u003e\n\u003c/p\u003e\n\n---\n\n*tfam* stands for *\"Terraform Apply Manager\"*\n\n![tfam interactive demo](menu.gif)\n\n## How it works\n\n```mermaid\nflowchart TD\n    A(tfam) --\u003e C{dev.tfvars}\n    A(tfam) --\u003e E{staging.tfvars}\n    A(tfam) --\u003e F{production.tfvars}\n    C  --\u003e ter(terraform)\n    E  --\u003e te(terraform)\n    F  --\u003e t(terraform)\n```\n\n## Specifications\n\nTerraform Apply Manager interacts with the Terraform binary and provides the following features:\n\n- **Non-invasive**: It reads and uses `.tf` and `.tfvars` files as they are, even if they have been modified by the user. This ensures that the user maintains full control over their configuration files and prevents interference with other processes that may also be using those files.\n- **Non-destructive**: It preserves any Terraform options and commands that are passed to it, and passes them on to the Terraform binary unchanged. This ensures that the behavior of the Terraform binary remains the same, and that any options or commands provided by the user are respected. The tool/script may add additional functionality, but it should not modify or remove any existing functionality.\n\nBy providing these features, Terraform Apply Manager offers a seamless and flexible way to interact with the Terraform binary, without interfering with the user's workflow or modifying the behavior of the binary.\n\n## Installation\n\nTo install tfam, simply run the install.sh script provided in this repository. The script will automatically download and install the necessary dependencies, and set up tfexe on your system.\n\n```shell\nwget -q -O -  https://raw.githubusercontent.com/Ant0wan/tfam/master/install.sh | sh\n```\n\n## Usage\n\nTo use **tfam**, you can set the following environment variables or provide command-line options:\n\n**TFAM_EXE**: Set the Terraform executable path or binary to be used by **tfam**. For example:\n\n```shell\nTFAM_EXE=tfexe tfam init\nTFAM_EXE=tofu tfam init\nTFAM_EXE=terraform tfam init\nTFAM_EXE=path/to/your/binary tfam init\n```\n\n**TF_WORKSPACE_FORMAT**: This environment variable defines an awk-like format for generating workspace names based on file paths. The placeholders **$1**, **$2**, etc., represent segments of the file path, with **$1** corresponding to the first segment and **$-1** corresponding to the last segment. For example:\n\n```shell\nexport TF_WORKSPACE_FORMAT='myworkspace-$2_$1_$3'\nexport TF_WORKSPACE_FORMAT='$-3_$-1_$-2'\n```\n\nCommand-line options:\n\n`-interactive`: Enables an interactive selection menu for certain operations.\n\n`-concurrent`: Allows running operations concurrently.\n\n`-var-file`: Specifies one or more variable files to be used. For example:\n\n```shell\ntfam plan -var-file /path/to/file1 -var-file /path/to/file2\n```\n\nPlease note that the specific functionalities and behavior may vary depending on the version of **tfam** and the Terraform version being used.\n\n## Configuration\n\n### Autocompletion\n\n```shell\ncomplete -W \"-interactive -concurrent -workspace-format\" -d -f -C $(which terraform) tfam\n```\n\n## License\n\nThis repository is protected by the GPL3 (GNU General Public License v3.0). You can find the full text of the license in the LICENSE file. Please review and comply with the terms and conditions of the GPL3 license before using or contributing to this project.\n\nFor any questions, bug reports, or contributions, please feel free to open an issue or submit a pull request. Thank you for using tfam!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAnt0wan%2Ftfam","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FAnt0wan%2Ftfam","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FAnt0wan%2Ftfam/lists"}