All Projects → paraterraform → Para

paraterraform / Para

Licence: mit
Para - community plugin manager and a "swiss army knife" for Terraform/Terragrunt - just 1 tool to facilitate all your workflows.

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Para

Terragrunt
Terragrunt is a thin wrapper for Terraform that provides extra tools for working with multiple Terraform modules.
Stars: ✭ 5,446 (+11487.23%)
Mutual labels:  cli, terraform, devops
Terratest
Terratest is a Go library that makes it easier to write automated tests for your infrastructure code.
Stars: ✭ 5,797 (+12234.04%)
Mutual labels:  terraform, devops
Guide
Kubernetes clusters for the hobbyist.
Stars: ✭ 5,150 (+10857.45%)
Mutual labels:  terraform, devops
Carvel Ytt
YAML templating tool that works on YAML structure instead of text
Stars: ✭ 816 (+1636.17%)
Mutual labels:  cli, devops
Awless
A Mighty CLI for AWS
Stars: ✭ 4,821 (+10157.45%)
Mutual labels:  cli, devops
Intro To Terraform
Sample code for the blog post series "A Comprehensive Guide to Terraform."
Stars: ✭ 550 (+1070.21%)
Mutual labels:  terraform, devops
Atlantis
Atlantis is now being maintained at https://github.com/runatlantis/atlantis
Stars: ✭ 628 (+1236.17%)
Mutual labels:  terraform, devops
Org Formation Cli
Better than landingzones!
Stars: ✭ 471 (+902.13%)
Mutual labels:  cli, devops
Terraform Modules
Terraform Modules
Stars: ✭ 25 (-46.81%)
Mutual labels:  terraform, devops
Jabbar
Find out who is interested in your GitHub Code
Stars: ✭ 14 (-70.21%)
Mutual labels:  cli, community
Ebs bckup
Stars: ✭ 32 (-31.91%)
Mutual labels:  terraform, devops
Mask
🎭 A CLI task runner defined by a simple markdown file
Stars: ✭ 495 (+953.19%)
Mutual labels:  cli, devops
Carvel Kapp
kapp is a simple deployment tool focused on the concept of "Kubernetes application" — a set of resources with the same label
Stars: ✭ 489 (+940.43%)
Mutual labels:  cli, devops
Good First Issue
🖥 CLI for finding good first issues
Stars: ✭ 485 (+931.91%)
Mutual labels:  cli, community
Terraform Nextjs Plugin
A plugin to generate terraform configuration for Nextjs 8 and 9
Stars: ✭ 41 (-12.77%)
Mutual labels:  cli, terraform
Terraform Aws Secure Baseline
Terraform module to set up your AWS account with the secure baseline configuration based on CIS Amazon Web Services Foundations and AWS Foundational Security Best Practices.
Stars: ✭ 596 (+1168.09%)
Mutual labels:  terraform, devops
Tads Boilerplate
Terraform + Ansible + Docker Swarm boilerplate = DevOps on 🔥🔥🔥 | Infrastructure as Code
Stars: ✭ 424 (+802.13%)
Mutual labels:  terraform, devops
Terracognita
Reads from existing Cloud Providers (reverse Terraform) and generates your infrastructure as code on Terraform configuration
Stars: ✭ 452 (+861.7%)
Mutual labels:  terraform, devops
Ssh Helper
Easily manage your ssh config.
Stars: ✭ 19 (-59.57%)
Mutual labels:  cli, devops
K8s Digitalocean Terraform
Deploy latest Kubernetes cluster on DigitalOcean using Terraform
Stars: ✭ 33 (-29.79%)
Mutual labels:  terraform, devops

Para

Para - community plugin manager for Terraform. A "swiss army knife" for Terraform and Terragrunt - just 1 tool to facilitate all your workflows.

Overview

Para, together with Terraform, is a reference to the concept of paraterraforming.

As paraterraforming is an option until terraforming is possible - Para takes care of distributing community plugins for Terraform until it's implemented in Terraform.

Para uses FUSE to mount a virtual file system over well-known Terraform plugin locations (such as terraform.d/plugins and ~/.terraform.d/plugins - see official docs for details) and downloads them on demand (with optional caching) using a curated index (or your own).

Please note that FUSE must be available (macOS requires OSXFUSE).

Capabilities

Examples

Please see examples for complete setups showcasing Para's usage.

Installation

Automatic

There is an automatic launcher script that in about 80 lines of Bash would download (and cache!) the right (or the latest) version of para whenever you need it (and check for updates). It's suggested way of installing para - just download the launcher script to your Terraform/Terragrunt config dir (dont' forget to check it into your version control system) and make it executable:

curl -Lo para https://raw.githubusercontent.com/paraterraform/para/master/para && chmod +x para 

From there on just always invoke Para as ./para:

$ ./para terraform init
Para Launcher Activated!
- Checking para.cfg.yaml in current directory for 'version: X.Y.Z'
- Desired version: latest (latest is used when no version specified)
- Downloading Para checksums for version 'latest' to '$TMPDIR/para-501/para/latest'
- Downloading Para 'darwin' binary for version 'latest' to '$TMPDIR/para-501/para/latest'
- Starting Para from '$TMPDIR/para-501/para/latest/para_v0.4.3_darwin-amd64'

------------------------------------------------------------------------

Para is being initialized...
<rest is omitted for brevity>

You can request a specific version of Para by adding a version field to para.cfg.yaml next to the launcher script.

Manual

Just download the binary for your platform from the latest release page with curl:

curl -Lo para "https://github.com/paraterraform/para/releases/latest/download/$(curl -L https://github.com/paraterraform/para/releases/latest/download/SHA256SUMS | grep -i $(uname -s) | awk '{ print $2 }')"
chmod +x para

It's advised to make sure that para is on your $PATH for convenience.

Usage

Para serves as a process wrapper so just prepend it to every terraforrm (or terragrunt) command.

The step-by-step instruction for the demo are available here.

For the rest, check the short help output or long help output by running para or para -h respectively!

Index

Para relies heavily on a special plugin index for discovery of 3rd party plugins.

Primary

It's the main source of truth for Para. Always just 1 file is used. Unless overridden, Para uses 1st available from the list of pre-defined locations:

  • para.idx.yaml
  • ~/.para/para.idx.yaml
  • /etc/para/para.idx.yaml
  • https://raw.githubusercontent.com/paraterraform/index/master/para.idx.yaml

As you can see, even by default para will always prefer your local index if there is one before falling back on the default one. Alternatively, you can override it via a config, environment variable or a command line flag.

Primary index file should be a YAML in the format of:

<kind>:
  <name>:
   <vX.Y.Z>:
     <platform>:
       url: <file://...|http://...|https://...>
       size: <size of the provider binary in bytes>
       digest: <md5|sha1|sha256|sha512>:<hash of the file that will be download - verified before extraction>

All strings (key & values, except for URLs) must be lowercase. All fields are required (url, size, digest).

URLs may point to archives and they will be automatically extracted (size MUST be always derived from the actual plugin binary and digest MUST be derived from the archive in such cases) if supported (determined by the extension at the end of the Url):

  • .zip
  • .tar
  • .tar.gz or .tgz
  • .tar.bz2 or .tbz2
  • .tar.xz or .txz
  • .tar.lz4 or .tlz4
  • .tar.sz or .tsz
  • .rar

Extensions

You may like the primary index in general but what if:

  • something is missing from the primary index?
  • you would rather use some other version for one particular plugin?
  • there is a plugin that is only available in your corporate network?
  • you want to have some special plugins for this particular project?
  • you'd rather curate your plugins explicitly?

Those and many other use-cases can be addressed with index extensions!

By default (which you can change to your liking!) they are loaded from one of the following dirs:

  • para.idx.d
  • ~/.para/para.idx.d
  • /etc/para/para.idx.d

Both file names and file content are used when processing index extensions Only files matching the pattern <kind>.<name>.yaml are loaded. Each index extension file should be one of the following:

  • a valid single-document YAMLs with the following structure
<vX.Y.Z>:
   <platform>:
     url: <file://...|http://...|https://...>
     size: <size of the provider binary in bytes>
     digest: <md5|sha1|sha256|sha512>:<hash of the file that will be download - verified before extraction>
  • a single line with a URL like file://...|http://...|https://... pointing to a file with the content as described above.

The former may come handy if you'd rather have your index in-place and the latter may be useful for plugin developers if they want to maintain their own feed of plugin versions as seen in terraform-provider-yaml.

Alternatively, it can be used to block certain plugins as putting an empty file like provider.foo.yaml would wipe out all known versions of the prrovider plugin named foo from the primary index.

Development

Roadmap

Future is not set in stone but might as well look like:

  • testing ¯\_(ツ)_/¯
  • logging/tracing for debugging
  • helper commands to analyze/verify indices
  • helper commands to control cache state
  • serve as an adaptor for arbitrary state management backends (leverage http backend to convert API calls into command line calls)
  • you name it!

Guidelines

Para is written and maintained by Borys Pierov. Contributions are welcome and should follow development guidelines. All contributors are honored in CONTRIBUTORS.md.

License

See LICENSE.txt

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].