ASDF - Painel de Ferramentas
Tags: asdf, terraform, iac
Published: 2021-09-15 01:57:08

Se você trabalha com Terraform em múltiplos ambientes, é provável que você já tenha se deparado com versões diferentes do Terraform. Dai é ficar trocando de versão em cada projeto. Isso é chato.
O mesmo ocorre quando vc possui projetos com versões diferentes de Nodejs entre outros.
O melhor dos mundos seria ter todas as versões utilizamos instaladas e serem automaticamente selecionadas em cada projeto, sem ter que utar um executável diferente. Melhor ainda, que fosse algo fácil de utilizar em time, fazendo com que todos possam ter a mesma caixa de ferramentas.

É ai que o **asdf** entra em ação. Com objetivo de gerenciar multiplos versões de runtimes em um único lugar, o **asdf** facilita a instalação de múltiplas versões e seleção de da versão necessária dependendo do contexto de utilização.

Link: [https://asdf-vm.com/](https://asdf-vm.com/)

## Instalação

O **asdf** possui apenas duas dependências, o **curl** e o **git**. 

Faça o clone do repositório do projeto:

```bash
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.8.1
```

Configure o bash:

```bash
. $HOME/.asdf/asdf.sh
. $HOME/.asdf/completions/asdf.bash
```

Pronto, o **asdf** já estará disponível. 

Caso você utilize macOS ou queria outras formas de instalação, acesse [https://asdf-vm.com/guide/getting-started.html#_3-install-asdf](https://asdf-vm.com/guide/getting-started.html#_3-install-asdf) para mais opções.

## Adicionando plugins

Os runtimes ou ferramentas gerenciadas pelo **asdf** são chamadas de plugins. Sendo assim, para que o **asdf** gerencie uma ferramenta, é necessário que seja adicionar o plugin da mesma. 
Abaixo segue o exemplo do plugin terraform:

```bash
asdf plugin add terraform
```

Depois de adicionar o plugin, será necessário efetuar a instalação de uma das versões.

Abaixo segue o exemplo da instalação da última versão do terraform:

```bash
asdf install terraform latest
```

Caso queria instalar alguma versão especifica, basta informar o número ao invés de latest. Ex.:

```bash
asdf install terraform 0.15.31
```

Pronto, já temos duas versões do terraform instaladas.

```bash
asdf list terraform
0.15.4
1.0.6
```

A lista completa de plugins disponíveis pode ser acessada em [https://github.com/asdf-vm/asdf-plugins](https://github.com/asdf-vm/asdf-plugins).

## Configurando

A configuração do **asdf** é simples. Através de um arquivo com nome **.tool-versions,** que quando existente na pasta, faz com que o **asdf** utilize a versão indicada da ferramenta ou runtime.

O conteúdo do **.tool-versions** deverá conter o nome do plugin e a versão que deverá ser utilizada:

```bash
terraform 0.15.4
```

Link: [https://github.com/andremulin/asdf-example/blob/main/terraform/.tool-versions](https://github.com/andremulin/asdf-example/blob/main/terraform/.tool-versions)

A configuração Local é utilizada em cada projeto com objetivo de definirmos uma versão especifica dos runtimes ou ferramentas para o projeto em questão. 

Já para definir globalmente quais versões você quer utilizar, o arquivo **.tool-version** precisará ser criado na pasta home do seu usuário:

```bash
~/.tool-versions
```

## Resumo

Tendo seguido essas passos, sua estação de trabalho já terá a capacidade de alternar entre versões diferentes de Terraform. Agora você precisa adicionar o arquivo **.tool-versions** em seus projetos para que o **asdf** possa reconhecer a versão a ser utilizada.