Variaveis
https://developer.hashicorp.com/packer/docs/templates/hcl_templates/variables
As variáveis no packer são praticamente igual ao terraform.
Um bloco de variáveis pode ter os seguintes argumentos
-
default: Valor padrão caso não definido, é opcional.
-
type: toda variável deve ser do tipo string number ou bool
- string
- number
- bool
- Mas pode ser também um conjunto delas
list(`<TYPE>`)
set(<`TYPE>`)
map(`<TYPE>`)
object({`<ATTR NAME>` = `<TYPE>`, ... })
tuple([`<TYPE>`, ...]) -
description - Documentação da variável, é boa prática utilizar, mas não é obrigatório.
-
validation - Bloco que valida se o valor da variável pode ou não ser utilizado. Não é obrigatório.
-
sensitive - Caso o valor da variável não deva ser exibida no console defina como true. O padrão é false e não é obrigatório.
Vejamos este exemplo. O nome da variável fica entre aspas, minusculo e deve ser usado _ ao invés de - caso o nome for composto.
variable "environment" {
type = string
description = "Nome do ambiente"
}
variable "instance_type" {
type = string
description = "Instancia que será utilizada para processamento das configurações"
default = "t3.medium"
}
Agora imaginemos que environment pode ser somente develop, staging ou production, o que fazer? Nesse caso estamos colocando uma condicional com um erro caso não for estabelecido o valor develop stating ou production.
variable "environment" {
type = string
description = "Ambiente que a imagem será usada"
validation {
condition = contains(["develop", "staging", "production"], var.environment)
error_message = "Invalid input, options: \"development\", \"staging\" or \"production\"."
}
}
Neste podemos observer que contains é uma função que tem como entrada uma lista de possíveis palavras e irá retornar true caso algumas delas esteja na variável var.environment que for passada.
Funções são muito úteis e podem ser encontradas na documentação oficial. Farei uma lista das funções mais usadas mais pra frente.
Confira agora o que temos em project/variables.pkr.hcl
Em complemento temos o que usaremos de entrada nestas variáveis em project/vars
Observe que posso redefinir um valor de variável que já tem um valor default.
A vantagem de trabalhar com um arquivo para injetar valores nas variáveis é que caso eu queira ter 10 arquivos diferentes desses eu posso somente chamar o a função build passando o que eu quiser.
Posso ter uma entrada para produção, uma para develop e outra para staging.
Extra
Variáveis de Path
- path.cwd: o diretório de onde o Packer foi iniciado.
- path.root: o diretório do arquivo HCL de entrada ou a pasta de entrada.
Algumas variáveis são especiais e existentes que podem ser referenciadas no build em relação ao source. Isso será explicado em build.