Pular para o conteúdo principal

Gerar Plugin de Infraestrutura

Nesta seção, você encontra um guia de como usar arquivos Terraform legados para criar Plugins de Infraestrutura.

Como funciona

Para facilitar a construção de Plugins de Infraestrutura a partir de códigos IaC (Infrastructure as Code) legados, o comando stk create plugin tem um recurso para gerar um Plugin de Infraestrutura a partir dos arquivos Terraform que você possui.

As variáveis do Terraform precisam ter o seu valor informado de alguma maneira, pois elas serão utilizadas dentro das estruturas do Terraform. Baseado em uma estrutura Terraform já existente, o gerador de Plugins vai extrair as variáveis e valores locais do arquivo Terraform e construir um Plugin de Infraestrutura baseado nessas variáveis tornando-as os inputs do seu Plugin.

Valores extraídos do Terraform

Os valors extraídos serão:

  • Valores locais do Terraform (locals): valores que são usados apenas no escopo do arquivo em que foram declarados.
  • Variáveis (variable): variáveis válidas para todo o escopo da execução do Terraform.

O arquivo Terraform é analisado e cada variável é extraída, onde:

  • O tipo da variável ou valor local será o tipo do input. Os tipos suportados do Terraform são string, number e bool corresponderão aos tipos text, int e bool da StackSpot.
  • A descrição da variável será a descrição do input.
  • Valores default da variável serão definidos no campo default do input.

Valores locais

Valores locais (locals) serão extraídos apenas se forem valores literais como os tipos string, number e bool. Variáveis que recebem como valor a referência de outra variável não serão extraídas. Valores locais definidos como nulos também não serão extraídos.

Exemplo:

main.tf
locals{
var1 = "String text"
var2 = local.var1
var3 = null
}

Os valores locais extraídos serão transformados em expressões Jinja no arquivo Terraform do template do seu Plugin (na pasta templates-deploy) para corresponder com os inputs do Plugin. Os valores que não forem extraídos não serão alterados no seu arquivo Terraform.

Exemplo:

main.tf
locals{
var1 = "String text"
var2 = 10
var3 = null
var4 = tolist(var.example_set)
}

Após extrair as variáveis:

main.tf
locals{
var1 = {{main_local_var1}}
var2 = {{main_local_var2}}
var3 = null
var4 = tolist(var.example_set)
}

Variáveis

Variáveis (variable): serão extraídas todas as variáveis desde que elas não sejam um tipo composto do Terraform, por exemplo object, list, map, etc. Isso porque a StackSpot não suporta estes tipos do Terraform.

Os tipos suportados são:

  • string
  • number (inteiro ou decimal)
  • bool

Os valores das variáveis variable não serão alterados diretamente no seu template, exceto os valores aninhados dentro de variable. Em vez disso, as modificações são feitas no arquivo gerado pelo Terraform, chamado terraform.tfvars, que contém todos os valores de cada variable.

Ao extrair uma variável com o valor default 'null', ela será extraída como um input do tipo text, sem a propriedade 'default' e a propriedade 'required' como false.

Este arquivo é um mecanismo do Terraform que gera um arquivo terraform.tfvars com os valores de todas as variáveis (variable) para que o usuário não tenha que preencher os mesmos inputs todas as vezes, principalmente quando a variável não possui um valor padrão definido.

Durante a criação do Plugin de Infraestrutura, a StackSpot irá utilizar este arquivo ou criá-lo caso ele não exista. Também vai configurá-lo com expressões Jinja.

Por exemplo, considere o arquivo terraform.tfvars com as seguintes variáveis preenchidas:

Arquivo variables.tf:

variable "var1"{
description = "Variable var1"
type = string
default = "var1 value"
}
variable "var2"{
description = "Variable var2"
type = string
default = "var2 value"
}
variable "var3"{
description = "Variable var3"
type = string
default = "var3 value"
}
variable "var4"{
description = "Variable var4"
type = number
default = 2.5
}
variable "var5"{
description = "Variable var5"
type = string
default = "null"
}
variable "var6"{
description = "Variable var6"
type = bool
default = true
}

Arquivo terraform.tfvars existente e preenchido:

terraform.tfvars
var1 = "string text"
var2 = "string text"
var3 = "string text"
var4 = 11.5
var5 = "null"
var6 = true

Arquivo terraform.tfvars transformado após extração das variáveis ou gerado durante a criação do Plugin:

terraform.tfvars
var1 = {{variables_var_var1}}
var2 = {{variables_var_var2}}
var3 = {{variables_var_var3}}
var4 = {{variables_var_var4}}
var5 = {{variables_var_var5 ou "null"}}
var6 = {{variables_var_var6}}
Informação Adicional

Com o arquivo terraform.tfvars você tem a visão de todas as variáveis variable que foram extraídas (valores substituídas por uma expressão Jinja) e as que não foram. Os valores do bloco locals não vão para este arquivo.

Durante a aplicação do Plugin de Infraestrutura, no arquivo terraform.tfvars os valores com as expressões Jinja serão substituídos quando o template for renderizado.

Criar o Plugin de Infraestrutura

Para criar o Plugin, além do nome do Plugin, use os seguintes parâmetros durante a execução do comando stk create plugin:

  • --type: tipo do Plugin. O tipo deve ser "infra".
  • --source-type: tipo do arquivo fonte. O tipo aceito é "terraform".
  • --source-path: caminho para uma pasta com arquivos Terraform.

Sintaxe:

stk create plugin nome-plugin-infra --type infra --source-type terraform --source-path PASTA/ARQUIVOS/TERRAFORM

Exemplo:

Arquivos Terraform na pasta 'Documents/infra-iac'
stk create plugin plugin-infra-legacy --type infra --source-type terraform --source-path localUser/Documents/infra-iac

O seu Plugin de Infraestrutura será gerado na pasta atual em que você executar o comando. Confira todos os arquivos da pasta templates-deploy e os inputs do Plugin no arquivo plugin.yaml.

Você deve tratar manualmente os valores que não foram extraídos em inputs para o seu Plugin. Para saber todas as opções do comando 'stk create plugin' consulte a página de comandos da StackSpot.