Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/devopsmakers/xterrafile
XTerrafile is a Go tool for managing vendored modules and formulas using a YAML file
https://github.com/devopsmakers/xterrafile
devops-tools go golang terrafile terraform terraform-modules
Last synced: 3 months ago
JSON representation
XTerrafile is a Go tool for managing vendored modules and formulas using a YAML file
- Host: GitHub
- URL: https://github.com/devopsmakers/xterrafile
- Owner: devopsmakers
- License: mit
- Archived: true
- Created: 2019-03-02T04:55:14.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2021-06-11T13:46:12.000Z (over 3 years ago)
- Last Synced: 2024-09-23T04:32:48.653Z (3 months ago)
- Topics: devops-tools, go, golang, terrafile, terraform, terraform-modules
- Language: Go
- Homepage:
- Size: 7.14 MB
- Stars: 66
- Watchers: 3
- Forks: 11
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome-terraform - xterrafile
- awesome-tf - xterrafile
README
# NO LONGER MAINTAINED
Please consider using `vendir`: https://carvel.dev/vendir/---
# XTerrafile [![Build Status](https://circleci.com/gh/devopsmakers/xterrafile.svg?style=shield)](https://circleci.com/gh/devopsmakers/xterrafile) [![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fdevopsmakers%2Fxterrafile.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fdevopsmakers%2Fxterrafile?ref=badge_shield) [![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)
`xterrafile` is a binary written in Go to manage external modules from various sources for use with (but not limited to) Terraform. See this [article](http://bensnape.com/2016/01/14/terraform-design-patterns-the-terrafile/) for more information on how it was introduced in a Ruby rake task.
Inspired by:
* https://github.com/coretech/terrafile
* https://github.com/claranet/python-terrafile## How to install
### Requirements
* `git`### macOS
```sh
brew tap devopsmakers/xterrafile && brew install xterrafile
```### Linux
Download your preferred flavour from the [releases](https://github.com/devopsmakers/xterrafile/releases/latest) page and install manually.For example:
```sh
curl -L https://github.com/devopsmakers/xterrafile/releases/download/v{VERSION}/xterrafile_{VERSION}_Linux_x86_64.tar.gz | tar xz -C /usr/local/bin
```## How to use
By default, `xterrafile` expects a file named `./Terrafile` which will contain your terraform module dependencies in YAML format.Specifying modules in your `Terrafile`:
```
# Terraform Registry module
terraform-digitalocean-droplet:
source: "terraform-digitalocean-modules/droplet/digitalocean"
version: "0.1.7" // If version is empty, the latest will be fetched# Git module (HTTPS)
terraform-digitalocean-droplet:
source: "https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
// No version will checkout default branch (usually master)# Git module (SSH + Tag)
terraform-digitalocean-droplet:
source: "[email protected]:terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
version: "v0.1.7" // Checkout tags# Git module (HTTPS + Branch as url parameter)
terraform-digitalocean-droplet:
source: "https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git?ref=new_feature"# Git module (SSH + Commit)
terraform-digitalocean-droplet:
source: "[email protected]:terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
version: "2e6b9729f3f6ea3ef5190bac0b0e1544a01fd80f" // Checkout a commit# Get a path from within a Git monorepo
terraform-digitalocean-droplet:
source: "https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git"
version: "v0.1.7"
path: "examples/simple"# Get a path from within a Git monorepo - alternate syntax
terraform-digitalocean-droplet:
source: "https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet.git//examples/simple?ref=v0.1.7"# Compressed archive (extracting a directory from inside archive)
terraform-digitalocean-droplet:
source: "https://github.com/terraform-digitalocean-modules/terraform-digitalocean-droplet/archive/v0.1.7.tar.gz//terraform-digitalocean-droplet-0.1.7"# Local directory module
terraform-digitalocean-droplet:
source: "../../modules/terraform-digitalocean-droplet"
```You can specify modules using Terraform's `source` specifications:
https://www.terraform.io/docs/modules/sources.html### Versions
The `version` can be a tag, a branch or a commit hash. By default, `xterrafile`
will checkout the default branch of a module which is usually `master`.When using modules from a Terraform registry you can specify version ranges like:
- `<1.0.0` Less than `1.0.0`
- `<=1.0.0` Less than or equal to `1.0.0`
- `>1.0.0` Greater than `1.0.0`
- `>=1.0.0` Greater than or equal to `1.0.0`
- `1.0.0`, `=1.0.0`, `==1.0.0` Equal to `1.0.0`
- `!1.0.0`, `!=1.0.0` Not equal to `1.0.0`. Excludes version `1.0.0`.Note that spaces between the operator and the version will be gracefully tolerated.
A `Range` can link multiple `Ranges` separated by space:
Ranges can be linked by logical AND:
- `>1.0.0 <2.0.0` would match between both ranges, so `1.1.1` and `1.8.7` but not `1.0.0` or `2.0.0`
- `>1.0.0 <3.0.0 !2.0.3-beta.2` would match every version between `1.0.0` and `3.0.0` except `2.0.3-beta.2`Ranges can also be linked by logical OR:
- `<2.0.0 || >=3.0.0` would match `1.x.x` and `3.x.x` but not `2.x.x`
AND has a higher precedence than OR. It's not possible to use brackets.
Ranges can be combined by both AND and OR
- `>1.0.0 <2.0.0 || >3.0.0 !4.2.1` would match `1.2.3`, `1.9.9`, `3.1.1`, but not `4.2.1`, `2.1.1`
### Module Download Location
Modules will be downloaded to `./vendor/modules/` by default.## Example Usage
Help:
```
xterrafile help
Manage vendored modules with a YAML file.Usage:
xterrafile [command]Available Commands:
help Help about any command
install Installs the modules in your Terrafile
version Show version information for xterrafileFlags:
-d, --directory string module directory (default "vendor/modules")
-f, --file string config file (default "Terrafile")
-h, --help help for xterrafileUse "xterrafile [command] --help" for more information about a command.
```Defaults:
```
xterrafile install
```Custom "Terrafile":
```
xterrafile -f Saltfile install
```Custom "Terrafile" and custom download directory:
```
xterrafile -f Saltfile -d /srv/formulas install
```## License
[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fdevopsmakers%2Fxterrafile.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fdevopsmakers%2Fxterrafile?ref=badge_large)