Terraform Version Manager inspirado pelo RBENV
Atualmente, o TFENV suporta os seguintes sistemas operacionais
Instale via homebrew
brew install tfenv
Instale via Arch User Repository (AUR)
yay --sync tfenv
Instale via fantoche
Usando o módulo de boneco sergk-tfenv
include ::tfenv
${HOME}/.tfenv
) git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv
~/.tfenv/bin
ao seu $PATH
da maneira que quiserBash:
echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile
ZSH:
$ echo ' export PATH="$HOME/.tfenv/bin:$PATH" ' >> ~ /.zprofile
Para usuários WSL:
echo ' export PATH=$PATH:$HOME/.tfenv/bin ' >> ~ /.bashrc
Ou você pode fazer símbolos para tfenv/bin/*
scripts em um caminho que já está adicionado ao seu $PATH
(por exemplo /usr/local/bin
) OSX/Linux Only!
ln -s ~/.tfenv/bin/* /usr/local/bin
No Ubuntu/Debian Touching /usr/local/bin
pode exigir acesso sudo, mas você pode criar ${HOME}/bin
ou ${HOME}/.local/bin
e, no próximo login, ele será adicionado à sessão $PATH
ou executando . ${HOME}/.profile
ele será adicionado ao $PATH
da sessão do shell.
mkdir -p ~/.local/bin/
. ~/.profile
ln -s ~/.tfenv/bin/* ~/.local/bin
which tfenv
Instale uma versão específica do Terraform.
Se nenhum parâmetro for passado, a versão a ser usada será resolvida automaticamente via variável de ambiente TFENV_TERRAFORM_VERSION ou arquivos .terraform-version, nessa ordem de precedência, ou seja, TFENV_TERRAFORM_VERSION, depois .terraform-version. O padrão é "mais recente" se nenhum for encontrado.
Se um parâmetro for passado, opções disponíveis:
xyz
semver 2.0.0 especificando a versão exata para instalarlatest
é uma sintaxe para instalar a versão mais recentelatest:<regex>
é uma sintaxe para instalar a versão mais recente que corresponda a regex (usado por grep -e)latest-allowed
é uma sintaxe para digitalizar seus arquivos Terraform para detectar qual versão é permitida ao máximo.min-required
é uma sintaxe para digitalizar seus arquivos Terraform para detectar qual versão é minimamente necessária.Veja os documentos necessários_version. Veja também a seção Min-Requiter e mais recente abaixo.
$ tfenv install
$ tfenv install 0.7.0
$ tfenv install latest
$ tfenv install latest:^0.8
$ tfenv install latest-allowed
$ tfenv install min-required
Se shasum
estiver presente no caminho, o TFENV verificará o download contra o hash sha256 publicado da Hashicorp. Se a Keybase estiver disponível no caminho, também verificará a assinatura para os hashes publicados usando a chave pública publicada por Hashicorp.
Você pode optar por usar as ferramentas GNUPG para verificação de assinatura PGP se não estiver disponível Keybase:
Onde TFENV_INSTALL_DIR
é, por exemplo, ~/.tfenv
ou /usr/local/Cellar/tfenv/<version>
echo 'trust-tfenv: yes' > ${TFENV_INSTALL_DIR}/use-gpgv
tfenv install
A diretiva trust-tfenv
significa que a verificação usa uma cópia da chave Hashicorp OpenPGP encontrada no repositório TFENV. Ignorar essa diretiva significa que a chave Hashicorp deve estar nas chaves confiáveis padrão existentes. Use o arquivo ${TFENV_INSTALL_DIR}/use-gnupg
para invocar a ferramenta gpg
completa e ver status da web-de-trust; Cuidado que a falta de caminho de confiança não causará uma falha de validação.
Se você usar um arquivo .terraform-version, tfenv install
(sem argumento) instalará a versão escrita nele.
Observe que não fazemos a análise de faixa de versão semântica, mas usamos a versão primeiro encontrada como candidato para uma denominada minimamente exigida. Cabe ao usuário manter a definição razoável. Ou seja
// this will detect 0.12.3
terraform {
required_version = " <0.12.3, >= 0.10.0 "
}
// this will detect 0.10.8 (the latest 0.10.x release)
terraform {
required_version = " ~> 0.10.0, <0.12.3 "
}
TFENV_ARCH
String (Padrão: amd64
)
Especifique arquitetura. A arquitetura diferente do AMD64 padrão pode ser especificado com a variável de ambiente TFENV_ARCH
NOTA: Alterações padrão no arm64
para versões que possuem o ARM64 construídas disponíveis quando $(uname -m)
corresponde a aarch64* | arm64*
TFENV_ARCH=arm64 tfenv install 0.7.9
TFENV_AUTO_INSTALL
String (padrão: true)
Se o TFENV instalar automaticamente o TerraForm se a versão especificada por padrão ou um arquivo .terraform-version não estiver instalado no momento.
TFENV_AUTO_INSTALL=false terraform plan
terraform use <version that is not yet installed>
TFENV_CURL_OUTPUT
Inteiro (Padrão: 2)
Defina o mecanismo usado para exibir o progresso do download ao baixar versões Terraform no servidor remoto.
-#
para Curl-s
para enrolar TFENV_DEBUG
Inteiro (padrão: 0)
Defina o nível de depuração para TFENV.
TFENV_REMOTE
String (padrão: https://releases.hashicorp.com)
Para instalar a partir de um controle remoto que não o padrão
TFENV_REMOTE=https://example.jfrog.io/artifactory/hashicorp
TFENV_REVERSE_REMOTE
Inteiro (padrão: 0)
Ao usar um controle remoto personalizado, como o Artifactory, em vez dos servidores Hashicorp, a lista de versões Terraform devolvida pelo Curl do diretório remoto pode ser invertida. Nesse caso, a funcionalidade latest
não funcionará conforme o esperado, porque espera que as versões sejam listadas na ordem da data de lançamento do mais novo ao mais antigo. Se o seu controle remoto estiver fornecendo uma lista que for o primeiro, defina TFENV_REVERSE_REMOTE=1
e a funcionalidade será restaurada.
TFENV_REVERSE_REMOTE=1 tfenv list-remote
TFENV_CONFIG_DIR
Caminho (padrão: $TFENV_ROOT
)
O caminho para um diretório em que existem versões locais de terraforme e arquivos de configuração.
TFENV_CONFIG_DIR="$XDG_CONFIG_HOME/tfenv"
TFENV_TERRAFORM_VERSION
String (padrão: "")
Se não estiver vazio, essa variável substitui a versão Terraform, especificada em arquivos .terraform-version. latest
e latest:<regex>
sintaxe também são suportadas. O comando tfenv install
e tfenv use
também respeita essa variável.
por exemplo
TFENV_TERRAFORM_VERSION=latest:^0.11. terraform --version
TFENV_NETRC_PATH
String (padrão: "")
Se não estiver vazio, essa variável especifica o arquivo de credenciais usado para acessar o local remoto (útil se usado em conjunto com o tfenv_remote).
por exemplo
TFENV_NETRC_PATH="$PWD/.netrc.tfenv"
BASHLOG_COLOURS
Inteiro (Padrão: 1)
Para desativar a coloração da saída do console, defina como 0.
BASHLOG_DATE_FORMAT
String (padrão: + %f %t)
O formato de exibição para a data passada para o binário date
para gerar um DataSestamp usado como prefixo para:
FILE
Linhas de arquivo de log.BASHLOG_EXTRA=1
BASHLOG_EXTRA
Inteiro (padrão: 0)
Por padrão, a saída do console do TFENV não imprime um carimbo de data ou gravidade do log.
Para ativar essa funcionalidade, tornando a saída normal equivalente à saída do log de arquivos, defina como 1.
BASHLOG_FILE
Inteiro (padrão: 0)
Defina como 1 para ativar o log de texto sem formatação como arquivo (log de arquivo de arquivo).
O caminho padrão para arquivos de log é definido por /tmp /$ (nome da base $ 0) .Log Cada logs executável em seu próprio arquivo.
por exemplo
BASHLOG_FILE=1 tfenv use latest
fará login para /tmp/tfenv-use.log
BASHLOG_FILE_PATH
String (padrão: /tmp /$ (nome da base $ {0}). Log)
Para especificar um único arquivo como o destino para todo o registro do tipo de arquivo, independentemente do script de execução.
BASHLOG_I_PROMISE_TO_BE_CAREFUL_CUSTOM_EVAL_PREFIX
String (padrão: "")
Tenha cuidado - o uso indevido vai destruir tudo o que você sempre amou
Essa variável permite que você passe uma string contendo um comando que será executado usando eval
para produzir um prefixo para cada linha de saída do console e cada entrada de log de tipo de arquivo.
por exemplo
BASHLOG_I_PROMISE_TO_BE_CAREFUL_CUSTOM_EVAL_PREFIX='echo "${$$} "'
prefixará todas as linhas de log com o processo de chamada 'PID.
BASHLOG_JSON
Inteiro (padrão: 0)
Defina como 1 para ativar o registro do JSON para arquivar (log de tipo JSON).
O caminho padrão para arquivos de log é definido por /tmp /$ (nome da base $ 0) .Log.json Cada logs executáveis em seu próprio arquivo.
por exemplo
BASHLOG_JSON=1 tfenv use latest
fará login no formato json para /tmp/tfenv-use.log.json
Conteúdo do Log JSON:
{"timestamp":"<date +%s>","level":"<log-level>","message":"<log-content>"}
BASHLOG_JSON_PATH
String (default: /tmp /$ (nome da base $ {0}). Log.json)
Para especificar um único arquivo como o destino para todo o registro do tipo JSON, independentemente do script de execução.
BASHLOG_SYSLOG
Inteiro (padrão: 0)
Para fazer login no syslog usando o binário logger
, defina isso como 1.
A funcionalidade básica é assim:
local tag="${BASHLOG_SYSLOG_TAG:-$(basename "${0}")}";
local facility="${BASHLOG_SYSLOG_FACILITY:-local0}";
local pid="${$}";
logger --id="${pid}" -t "${tag}" -p "${facility}.${severity}" "${syslog_line}"
BASHLOG_SYSLOG_FACILITY
String (padrão: local0)
A instalação do syslog para especificar ao usar o log do tipo syslog.
BASHLOG_SYSLOG_TAG
String (Padrão: $ (nome da base $ 0))
A tag syslog para especificar ao usar o log do tipo syslog.
Padrões no PID do processo de chamada.
Mudar uma versão para usar
Se nenhum parâmetro for passado, a versão a ser usada será resolvida automaticamente por meio de arquivos .terraform-version ou TFENV_TERRAFORM_VERSION AIMBORAL VARIABLE (TFENV_TERRAFORM_VERSION tem precedência), defendendo o 'mais recente' se nenhum for encontrado.
latest
é uma sintaxe para usar a versão mais recente instalada
latest:<regex>
é uma sintaxe para usar a versão instalada mais recente que corresponde a regex (usado por grep -e)
min-required
mudará para a versão minimamente exigida por suas fontes de Terraform (veja tfenv install
)
$ tfenv use
$ tfenv use min-required
$ tfenv use 0.7.0
$ tfenv use latest
$ tfenv use latest:^0.8
NOTA: tfenv use latest
ou tfenv use latest:<regex>
encontrará a versão mais recente de correspondência que já está instalada. Se nenhuma versões correspondentes for instalada, e TFENV_AUTO_INSTALL estiver definido como true
(que é o padrão), a versão mais recente de correspondência no repositório remoto será instalada e usada.
Desinstale uma versão específica do Terraform latest
é uma sintaxe para desinstalar a versão mais recente latest:<regex>
é uma sintaxe para desinstalar a versão mais recente que corresponde a regex (usado por grep -e)
$ tfenv uninstall 0.7.0
$ tfenv uninstall latest
$ tfenv uninstall latest:^0.8
Lista de versões instaladas
$ tfenv list
* 0.10.7 (set by /opt/tfenv/version)
0.9.0-beta2
0.8.8
0.8.4
0.7.0
0.7.0-rc4
0.6.16
0.6.2
0.6.1
Liste versões instaláveis
$ tfenv list-remote
0.9.0-beta2
0.9.0-beta1
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.8.0-rc3
0.8.0-rc2
0.8.0-rc1
0.8.0-beta2
0.8.0-beta1
0.7.13
0.7.12
...
Se você colocar um arquivo .terraform-version
no seu projeto ROOT ou no seu diretório inicial, o TFENV o detecta e usa a versão escrita nele. Se a versão for latest
ou latest:<regex>
, a versão mais recente de correspondência atualmente instalada será selecionada.
Observe que a variável de ambiente TFENV_TERRAFORM_VERSION pode ser usada para substituir a versão, especificada pelo arquivo .terraform-version
.
$ cat .terraform-version
0.6.16
$ terraform version
Terraform v0.6.16
Your version of Terraform is out of date! The latest version
is 0.7.3. You can update by downloading from www.terraform.io
$ echo 0.7.3 > .terraform-version
$ terraform version
Terraform v0.7.3
$ echo latest:^0.8 > .terraform-version
$ terraform version
Terraform v0.8.8
$ TFENV_TERRAFORM_VERSION=0.7.3 terraform --version
Terraform v0.7.3
git --git-dir=~/.tfenv/.git pull
rm -rf /some/path/to/tfenv