YAML
YAML (YAML Ain't Markup Language), apesar de seu nome incluir "linguagem", não é uma linguagem de programação no sentido tradicional. Em vez disso, YAML é uma especificação para um formato de serialização de dados. Ele define uma maneira de representar dados de forma estruturada e legível por humanos usando texto simples.
Embora o YAML possa parecer linguagem devido à sua sintaxe e capacidade de estruturar dados, ele não possui capacidades de programação, como execução de código ou lógica condicional. Em vez disso, é usado principalmente para representar configurações, estruturas de dados e informações em um formato fácil de ler e escrever, adequado para uso humano e também para máquinas.
No YAML, a estruturação dos dados é baseada em pares de chave-valor, semelhante a muitos outros formatos de dados (JSON é um ótimo exemplo), mas com uma proposta de ser menos verbosa e de direto ao ponto.
YAML é frequentemente usado para configuração de aplicativos, estruturação de dados, comunicação entre sistemas e muito mais. Em algum momento você precisará criar um arquivo YAML e será mais cedo do que pensa.
No mundo DevOps usamos muito programação declarativa e os YAML é muito utilizado para este propósito.
Algumas características do YAML incluem:
-
Legibilidade humana: O YAML é projetado para ser fácil de ler e escrever, tornando-o adequado para configuração manual e leitura por humanos.
-
Sintaxe simples: YAML usa uma sintaxe simples baseada em espaços e recuo para estruturar dados. Isso o torna mais intuitivo do que alguns outros formatos de serialização, como o JSON.
-
Suporte para diversos tipos de dados: YAML suporta strings, números, listas, dicionários e estruturas aninhadas, tornando-o flexível o suficiente para representar uma variedade de dados.
-
Extensibilidade: YAML é facilmente estendido para suportar tipos de dados adicionais, como datas, expressões regulares e muito mais, tornando-o adequado para uma variedade de casos de uso.
Independente de linguagem: Como é um formato de dados independente de linguagem, o YAML pode ser processado por uma ampla variedade de linguagens de programação.
Vamos analisar 3 estrutura de dados que expressam a mesma coisa.
<Servers>
<Server>
<name>Server1</name>
<status>active</status>
<ip>192.168.0.10</ip>
</Server>
<Server>
<name>Server2</name>
<status>active</status>
<ip>192.168.0.20</ip>
</Server>
</Servers>
{
"servers": [
{
"name": "Server1",
"status": "active",
"ip": "192.168.0.10"
},
{
"name": "Server1",
"status": "active",
"ip": "192.168.0.10"
}
]
}
servers:
- name: Server1
status: active
ip: 192.168.0.10
- name: Server2
status: active
ip: 192.168.0.20
Consegue observar o quanto é mais simples com YAML? Não tem chaves não tem vírgulas, não tem não precisa de aspas em todo lugar não tem repetição de nomes. É vida!
A formatação no YAML é crucial. É simples, mas um espaço faz diferença.
Os arquivos YAML vão aparecer com as extensões .yaml ou .yml. Até hoje não definiram qual é o padrão! Ambas as extensões são reconhecidas pelo sistemas operacionais como arquivos yaml.
Aqui um simples exemplo de chave valor. Vamos imaginar que queremos informações sobre david. Esse YAML somente traz informações sobre 1 pessoa.
O formato para chave-valor no YAML é
chave: valor
sendo necessário o espaço depois do :.
name: david
age: 38
status: studing
position: devsecops
O valor para uma chave pode ser uma lista/array ou um dicionario. Podemos ter quantas chaves quisermos.
Um exemplo de lista:
person:
- name: david
- name: maria
- name: carlos
Vale lembrar que uma lista é algo ordenado logo o exemplo abaixo é diferente do exemplo acima. person:
person:
- name: maria
- name: carlos
- name : david
Também podemos ter um dicionario/map, ou seja, diferentes dados sobre o elemento: Vamos transformar o primeiro exemplo em um dicionaŕio e vamos incluir uma lista de telefone. Também já vamos incluir um outro dicionario dentro deste.
david:
age: 38
status: studing
position: devsecops
telephone:
- mobile: +5511999998888
- home: +551234567890
address:
city: vila velha
state: ES
A ordem das chaves não importa. Sempre buscamos um valor pela chave e não pela posição. O exemplo a seguir é a mesma coisa que o exemplo acima.
david:
position: devsecops
status: studing
address:
city: vila velha
state: ES
age: 38
telephone:
- mobile: +5511999998888
- home: +551234567890
Quando estamos fazendo uma lista pegamos um conjunto completo. O exemplo acima não é bom, vamos generalizar para servir para qualquer pessoa.
person:
name: david
age: 38
status: studing
working: true
position: devsecops
telephone:
- mobile: +5511999998888
- home: +551234567890
address:
city: vila velha
state: ES
Agora podemos ter uma lista de pessoas de pessoas que são dicionarios/map. Dentro de cada dicionario temos mais lista e mais dicionario.
person:
- name: david
age: 38
status: studing
position: devsecops
working: true
telephone:
- mobile: +5511999998888
- home: +551234567890
address:
city: vila velha
state: ES
- name: carlos
age: 52
status: drinking
position: devsecops
working: true
telephone:
- mobile: +5511777776666
- home: +550987654321
address:
city: ribeirao preto
state: SP