{"id":24085414,"url":"https://github.com/cpoole/tf-wrapper","last_synced_at":"2026-03-12T05:31:24.906Z","repository":{"id":57474956,"uuid":"70104616","full_name":"cpoole/tf-wrapper","owner":"cpoole","description":"a wrapper around terraform for multi environment support","archived":false,"fork":false,"pushed_at":"2017-03-28T21:25:30.000Z","size":75,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-25T07:28:13.636Z","etag":null,"topics":["aws","gce","infrastructure","terraform","tf-wrapper"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cpoole.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-10-05T22:31:24.000Z","updated_at":"2017-03-23T18:49:21.000Z","dependencies_parsed_at":"2022-09-10T02:23:21.789Z","dependency_job_id":null,"html_url":"https://github.com/cpoole/tf-wrapper","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/cpoole/tf-wrapper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpoole%2Ftf-wrapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpoole%2Ftf-wrapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpoole%2Ftf-wrapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpoole%2Ftf-wrapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cpoole","download_url":"https://codeload.github.com/cpoole/tf-wrapper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpoole%2Ftf-wrapper/sbom","scorecard":{"id":306692,"data":{"date":"2025-08-11","repo":{"name":"github.com/cpoole/tf-wrapper","commit":"9cd9463c1a972e26f154d0395f55e6fba4e6ef1b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.8,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/28 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":8,"reason":"binaries present in source code","details":["Warn: binary detected: dist/tf_wrapper-1.0.0-py2.py3-none-any.whl:1","Warn: binary detected: tf_wrapper/__pycache__/__init__.cpython-35.pyc:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-17T22:13:53.822Z","repository_id":57474956,"created_at":"2025-08-17T22:13:53.823Z","updated_at":"2025-08-17T22:13:53.823Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30416310,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T04:41:02.746Z","status":"ssl_error","status_checked_at":"2026-03-12T04:40:12.571Z","response_time":114,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["aws","gce","infrastructure","terraform","tf-wrapper"],"created_at":"2025-01-10T01:28:27.217Z","updated_at":"2026-03-12T05:31:24.879Z","avatar_url":"https://github.com/cpoole.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"**DEPRICATION NOTICE**\nAs of terraform 0.9.2 remote state management using s3 is greatly improved. In addition terraform now has the concept of environments. \nI highly suggest migrating to this format and using map vars to store environment specific variables with the terraform.environment as a lookup key.\n\nTerraform Wrapper\n=================\nThis project is intended to provide a wrapper around terraform for any projects where infrastructure might be duplicated in different environments. If you maintain different environments (dev, stage, prod) in separate regions, data centers, or different clouds this tool will help you maintain consistency across your infrastructure.\n\nThe Fundamentals\n================\n**Requirements**\n\nYou must have AWS credentials, and terraform already installed. The AWS credentials file must have the individual profiles labeled\n\n**Project Structure**\n\nThis project requires the following format:\n\n```\n    .\n    ├── environments\n    │   ├── dev\n    │   │   └── dev.tf\n    │   ├── environment_vars.json\n    │   ├── hub\n    │   │   └── hub.tf\n    │   └── prod\n    │       └── prod.tf\n    ├── main.tf\n    └── variables.tf\n```\n\nIn each project shared resources and variables are placed at the top level. Environment specific resources are placed under ``./environments/\u003cenvironment_name\u003e/\u003cany files you want\u003e``. The file ``./environment/environment_vars.json`` stores the information about your AWS remote state.\n\n**Example environment_vars.json**\n\n```\n{\n    \"hub\": {\n        \"region\": \"us-west-2\",\n        \"bucket_prefix\": \"config/tf/implementations/rancher-hosts/\",\n        \"profile\": \"profile1\",\n        \"bucket\": \"bucket-for-profile1\"\n    },\n    \"prod\": {\n        \"region\": \"us-west-2\",\n        \"bucket_prefix\": \"config/tf/implementations/rancher-hosts/\",\n        \"profile\": \"profile2\",\n        \"bucket\": \"bucket-for-profile2\"\n    }\n}\n```\nplease note the name of each environment definition must be the same as the name of the environment folder\n\n**Package Use**\n\nEvery time you run this package you need to specify the environment and the action. the environment is the name of the folder under ``./environments`` and the action is the typical action passed to terraform (ie. plan, destroy, apply, etc.)\n\nA sample command would be: ``tf -environment prod -action plan``\n\n**Usage Details**\n\nWhen you run this command the tf-wrapper will:\n- Symlink all files under ``./environments/\u003cenvironment_name\u003e/`` into the top level directory.\n- It will delete the ``.terraform/terraform.tfstate`` and ``.terraform/terraform.tfstate.backup`` files as this project requires remote state config, negating the need for local copies of state after the run has completed.\n- For commands ``apply`` and ``destroy`` the resulting run state will automatically be pushed.\n\n**Upgrading from \u003c 1.0.0**\n\nPlease run ``tf -reconfigure true`` to update your terraform files to the latest format\n\n**Authors**\n\nConnor Poole @cpoole\nMatt Rabinovitch @roobytwo\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcpoole%2Ftf-wrapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcpoole%2Ftf-wrapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcpoole%2Ftf-wrapper/lists"}