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 tipostext, 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:
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:
locals{
var1 = "String text"
var2 = 10
var3 = null
var4 = tolist(var.example_set)
}
Após extrair as variáveis:
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:
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:
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}}
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:
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.