Code Monkey home page Code Monkey logo

chtf's Introduction

chtf - Terraform version switcher

Do you need different Terraform versions on different projects? Or maybe you want to test your modules with a new Terraform version?

chtf is a small shell tool for selecting a specified Terraform version. It can also install the specified version automatically.


Requirements

chtf supports currently bash, zsh, and fish shells. Version switching itself doesn't have any external dependencies.

Optional automatic instal of missing Terraform versions requires either:


Installation

Homebrew

On MacOS (and OSX) the easiest way is to use Homebrew. After installing Homebrew, run:

brew install yleisradio/terraforms/chtf

Homebrew also installs the completion for all supported shells.

All systems

Manual installation on all systems:

curl -L -o chtf-2.1.1.tar.gz https://github.com/Yleisradio/chtf/archive/v2.1.1.tar.gz
tar -xzvf chtf-2.1.1.tar.gz
cd chtf-2.1.1/
make install

The default installation location is $HOME/share/chtf/ for bash/zsh, and $HOME/.config/fish/ for fish. See the Tips section for installing to other locations.

The etc/ directory includes completion files for the supported shells. Follow your shell's instructions how to install them. The fish autocompletion is installed for autoloading.


Configuration

The following environment variables can be used for configuring chtf. Click to expand.

CHTF_TERRAFORM_DIR - Specifies where the Terraform versions are stored.

Defaults to the Homebrew Caskroom if the "yleisradio/terraforms" Tap is installed, $HOME/.terraforms/ otherwise. Each version should be installed as $CHTF_TERRAFORM_DIR/terraform-<version>/terraform.

CHTF_AUTO_INSTALL - Controls automatic installation missing Terraform versions.

Possible values are: yes, no, and ask. The default is ask, which will prompt the user for confirmation before automatic installation.

CHTF_AUTO_INSTALL_METHOD - Specifies the method used for automatic installation.

The default is homebrew if CHTF_TERRAFORM_DIR is no specified and the "yleisradio/terraforms" Tap is installed, zip otherwise. There shouldn't be normally need to set this variable.

Activating the chtf command

After installing, chtf has to be loaded to the shell.

fish

The fish version is autoloaded so there is nothing more to do!

bash and zsh

The base directory on the following examples depends how and where chtf is installed. This assumes make install. With Homebrew, replace $HOME with the output of brew --prefix.

New shell session has to be started for the changes to take effect.

Add the following to the ~/.bashrc or ~/.zshrc:

######################################################################
# chtf

# Uncomment and change the value to override the default:
#CHTF_AUTO_INSTALL="ask" # yes/no/ask

if [[ -f "$HOME/share/chtf/chtf.sh" ]]; then
    source "$HOME/share/chtf/chtf.sh"
fi

Usage

List all installed Terraform versions:

chtf

Select the wanted Terraform version, for example:

chtf 0.13.5

Use the Terraform version installed globally outside chtf (e.g. via a package manager):

chtf system

Tips

Customized install

make install installs chtf by default to the user's $HOME directory. But if installed as a root user (e.g. via sudo), the default location is /usr/local for system wide use. In both cases the wanted location can be specified with PREFIX. For example:

sudo make install PREFIX=/opt

The development version of chtf can be used either by sourceing or make installing from a clone of this repository, or with Homebrew:

brew install yleisradio/terraforms/chtf --HEAD
Automatic switching on new shell session

If you want to have a default Terraform version selected when starting a new shell session, you can of course add chtf <version> to the config file after loading chtf. A bit more flexible way is to write the wanted version number to a file named ~/.terraform-version, and read that.

# bash and zsh
if [[ -f "$HOME/.terraform-version" ]]; then
    chtf "$(< "$HOME/.terraform-version")"
fi
# fish
if test -f $HOME/.terraform-version
    chtf (cat $HOME/.terraform-version)
end
Uninstalling Terraform versions

Homebrew installed Terraform versions can be uninstalled with:

brew cask uninstall terraform-<version>

Otherwise installed versions can be uninstalled by deleting the directory:

rm -r "$CHTF_TERRAFORM_DIR/terraform-<version>"
Uninstalling chtf

Homebrew installed chtf can be uninstalled with:

brew uninstall chtf

chtf installed with make can be uninstalled by deleting the directory:

rm -r "$HOME/share/chtf" # or where it was installed

Contibuting

Bug reports, pull requests, and other contributions are welcome on GitHub at https://github.com/Yleisradio/chtf.

This project is intended to be a safe, welcoming space for collaboration. By participating in this project you agree to abide by the terms of Contributor Code of Conduct.


Licence and Credits

The project is released as open source under the terms of the MIT License.

Original idea and implementation of chtf was heavily affected by chruby.

Included terraform-installer is released under the Apache 2.0 License.

NOTE: chtf was originally part of the homebrew-terraforms project, but has been extracted to own project and modified to support also non-Homebrew environments.

chtf's People

Contributors

tmatilai avatar aforsell avatar alexkulbiy avatar haines avatar kytomaki avatar shoekstra avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.