Bom pessoal, além da possibilidade de nós trabalharmos com strings, números e valores booleanos, nós podemos trabalhar também com tipos mais complexos. Nós podemos, por exemplo, trabalhar com listas em terraform. Então como exemplo, eu vou criar aqui uma variável frutas, onde nós teremos o tipo sendo uma lista de string, e os valores de full são apple, banana e depois eu repito apple. Então a sintaxe para definir uma lista, uma variável do tipo List, é nós colocarmos aqui List, então nós colocamos o tipo dos itens da lista entre parênteses, beleza? E aqui nós temos a nossa variável. E agora nós vamos entender como nós podemos utilizar essa variável aqui no nosso template. Então eu vou mudar aqui um pouco a formatação dessa string que representa o conteúdo deste arquivo, tá? Porque quando nós trabalhamos com argumentos multiline, nós queremos ter várias linhas, nós podemos também utilizar essa sintaxe aqui que vai nos ajudar bastante, tá? Nós colocamos aqui esse símbolo duas vezes, o símbolo de menor, e então, no final, nós colocamos simplesmente euf, beleza? E aqui nós vamos ter a nossa string, o nosso template. Eu vou adicionar aqui então algumas linhas e nós vamos colocar fruits e aqui eu vou acessar uma das frutas, tá? Eu vou colocar aqui var.fruits e vou acessar, por exemplo, o índice 1. por exemplo, o índice 1. Se nós dermos um terraform, terraform plan, nós vamos verificar aqui que nós temos, primeiramente, um erro, né? Deixa eu verificar aqui por quê, porque eu não salvei o arquivo variables, claro. Então, deixa eu rodar aqui novamente, e agora nós não temos mais nenhum erro, e aqui nós temos o nosso conteúdo, tá? É possível observar que nós temos aqui essa fruta, a fruta banana. Beleza. Além de nós termos a lista, nós também temos um outro tipo interessante que funciona de forma um pouco similar aqui à lista, que é o sete, tá? Porém, o sete, ele representa um conjunto. E num conjunto, nós não podemos ter itens repetidos. Então, se nós tentarmos primeiramente rodar dessa forma, nós teremos um erro. Porém o erro não é porque nós temos um item repetido aqui na nossa lista de full. O erro é porque nós não conseguimos fazer esse tipo de acesso, acesso por índice, em um set. Para nós fazermos esse acesso, nós temos que primeiro transformar numa lista. Nós transformamos numa lista, então nós acessamos pelo índice. Ao executar aqui o nosso Terraform Play, nós não temos erro e nós temos o mesmo conteúdo de antes. Porém, nós temos uma diferença que é a seguinte. Eu vou utilizar aqui uma função que nós temos no Terraform, que é a função length. Então nós podemos utilizar funções aqui dentro também, e uma delas é a função length, que funciona para listas e funciona também para set. Nós temos três itens aqui na nossa lista default, porém um deles está repetido. Quando nós rodamos o nosso Terraform plan, nós vemos aqui que o length retornou 2, porque ele ignorou o repetido. Agora se nós voltarmos de novo para a lista nós veremos que ao executar este comando nós temos aqui que agora nós temos 3 frutas então nós já vimos a diferença entre lista e vimos a diferença também entre lista e set, na verdade nós vimos a diferença entre estes dois tipos além disso, um outro tipo que nós temos é o map. Então, nós podemos fazer aqui, vamos criar uma outra variável. Variable, vamos criar aqui um person. Eu vou criar esse person map, tá? Porque o outro tipo que nós teremos aqui vai ser o map. Então, nós podemos ter um map com valor string. E o que isso representa? Vamos dar um exemplo aqui, vamos criar um valor exemplo default, que é o seguinte, você consegue ter propriedades alinhadas, na verdade não propriedades alinhadas, seria mais um valor de chaves e valores. Então você pode ter o seguinte, você pode ter essa variável que tem uma chave name, e o valor aqui vai ser meu nome, que vai ser Igor. E você pode ter também uma chave age que pode ser 29, 28, né? Que é a minha idade. Então você tem aqui um mapa de chaves e valores e você pode colocar quantas chaves e valores você quiser. E pra acessar é muito simples, tá? Nós podemos fazer o acesso da seguinte forma. Vou colocar aqui, por exemplo, name e vou acessar da seguinte forma var.personmap e aqui eu posso colocar o nome em seguida a gente pode ter o age também acessando de uma forma bem semelhar tá bem bem similar melhor dizendo né então vou colocar aqui age e quando nósarmos, nós teremos aqui agora o nosso nome e a nossa idade sem nenhum problema. Então, é uma forma bem dinâmica de nós trabalharmos com variáveis. Além disso, nós temos também um outro tipo, que é o tipo tupla. Então, nós podemos trabalhar com tuplas também aqui em Terraform. Então, agora nós teremos um person, só que ao invés de map, nós teremos um person só que ao invés de map nós teremos um person tuple beleza? e aqui nós especificamos o tipo da seguinte forma eu vou colocar tuple e aqui eu vou colocar o tipo, na verdade os tipos dos valores que nós teremos nessa tupla, primeiro nós teremos um tipo string que será o nosso nome e teremos depois um tipo number que será a idade. Então nós declaramos aqui de forma similar a uma lista, então nós vamos ter aqui primeiro Igor e eu vou ter aqui depois 28. Então você não identifica os valores como chave, você simplesmente especifica os valores, não há uma chave para esses valores. os valores, não há uma chave para esses valores. E agora nós podemos utilizar indexando esses elementos da forma como nós utilizamos aqui, por exemplo, para listas. Então eu vou repetir aqui esse name e esse age, porém agora nós teremos personTouple no índice 0, que vai ser o primeiro elemento da nossa tupla, e personTouple no índice 1, que vai ser o segundo elemento da tupla e person tuple, tuple no índice 1, que vai ser o segundo elemento da tupla. E agora, dando um terraform e plan, nós temos aqui o resultado esperado. Nós temos name equal e age 28 novamente. E nós temos agora, por fim, também um outro tipo, que é o tipo object. Provavelmente, algo que você já estava esperando aí. Nesse tipo, nós não especificamos simplesmente chaves e valores, tá? Nós podemos especificar todas as possíveis chaves e os seus tipos correspondentes. Então nós teremos aqui o seguinte, um object, onde nós temos uma propriedade name, uma propriedade alinhada name, que nós vamos aqui definir como sendo do tipo string, tá? E além disso nós teremos uma outra propriedade, que será do tipo number. E agora, todos os valores para esse objeto, que nós passarmos para essa variável, devem respeitar essa estrutura, tá? Devem ter uma chave name e uma chave age. Diferente aqui, novamente, do nosso map, onde nós podemos ter qualquer chave e qualquer valor, desde que seja do nosso map, onde nós podemos ter qualquer chave e qualquer valor, desde que seja do tipo string, tá? E aqui, você talvez tenha observado isso e tenha ficado na dúvida, né? O age nós colocamos aqui como sendo um número. Mas, para o caso de maps, né? De string, quando nós temos um número, ele já faz a conversão automaticamente para string, tá? E nós não temos erro. Nós teríamos um erro, por exemplo, deixa eu só comentar aqui esse trecho, para nós já vermos este exemplo. Eu vou comentar ele aqui, beleza? E agora, eu vou voltar aqui novamente para o nosso mapa, para a gente falar sobre isso. Se eu tivesse aqui number, beleza? Ao invés de um mapa de string, se eu tivesse um mapa de números, aí sim nós teríamos erro, tá? Por quê? Porque o valor dessa chave age, o valor dessa chave name, né? Ele não é um número, ele é na verdade um string. Então não há como o Terraform fazer essa conversão, ele não consegue converter uma string num número. Já um número, ele consegue converter sem problemas numa string. Então é por isso que nós não tivemos erro aqui quando nós criamos um mapa de string. Agora, quando nós trabalhamos com objetos, então se eu tiver aqui simplesmente um person, não vou especificar nenhum sufixo aqui para essa variável. Se eu tiver uma variável do tipo object, essa estrutura aqui, ela deve ser respeitada. Se eu tiver uma variável do tipo Object, essa estrutura aqui deve ser respeitada. Então, eu tenho que especificar um Name e eu tenho que especificar um Age e eu não posso especificar propriedades adicionais. E aí nós podemos também acessar de uma forma muito simples, assim como nós fizemos para acessar o nosso Map. Então, vamos lá. Ao invés de Person Underline Map, nós teremos simplesmente Person, e ao rodar aqui o nosso Terraforming Plan, nós não temos nenhum erro, e nós podemos ver aqui novamente o mesmo resultado, beleza? Então, agora você já sabe algumas formas de declarar esses valores, e é claro que você também pode sobrescrevê-los, tá? Então, vamos aqui a um exemplo de sobrescrita desses valores através daquela opção var. Nós temos aqui o var e nós podemos definir o var como sendo... Vamos pegar aqui, por exemplo, person. Vamos ver se nós conseguimos definir dessa forma. Nós podemos utilizar aqui name como sendo igual a Igor. E nós podemos utilizar aqui, especificar age como sendo igual a 30. Deixa eu especificar outro nome, né? Para a gente ver essa sobrescrita de fato funcionando. Eu vou colocar aqui test. Vamos soldar aqui. Nós temos um erro, tá? Assim, porque eu coloquei com asco simples. Então, vamos colocar aqui, provavelmente eu vou precisar de um carácter de escape. Deixa eu colocar aqui esse carácter de escape. Beleza, e agora sim. Agora nós já não temos mais nenhum erro. E aqui você pode observar que o valor dessa variável foi sobrescrito. Então, agora nós temos teste e temos o age 30 30 porque foi esse o valor que nós colocamos aqui então a sintaxe para você especificar variáveis na linha de comando é bem semelhante a sintaxe para especificar o valor aqui como nós especificamos em default, é bastante parecido com o JSON, seria aqui um JSON praticamente a chave nós colocamos aqui sem aspas, mas é basicamente um JSON. Beleza? Então dessa forma você já entendeu como nós conseguimos trabalhar com diversos tipos de variáveis, você já sabe como utilizá-los e já sabe inclusive como sobrescrevê-los. Eu espero que você tenha gostado. Vejo você na nossa próxima aula.