Migrar para Plugin de Infraestrutura
O comando stk create plugin simplifica a criação de Plugins de Infraestrutura a partir de códigos IaC (Infrastructure as Code) legados, como arquivos Terraform que você já possui.
Como funciona?
O gerador de Plugins analisa sua estrutura Terraform existente e:
- Extrai variáveis e valores locais do arquivo Terraform.
- Transforma essas variáveis em inputs para o Plugin de Infraestrutura. Essas variáveis são necessárias, pois serão utilizadas nas configurações do Terraform dentro do Plugin. O gerador automatiza a criação de Plugins, permitindo que você reutilize seu código legado de forma eficiente e integrada à StackSpot.
Valores extraídos do Terraform
Os valores 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 boolcorresponderão aos tipostext, int e boolda StackSpot. - A descrição da variável será a descrição do input.
- Valores default da variável serão definidos no campo
defaultdo 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:
stringnumber(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.