Le Langage HCL
Dans le vaste univers des outils DevOps dédiés à l'automatisation et à la gestion de l'infrastructure, il est courant de croiser des langages tels que JSON ou YAML. Cependant, la société HashCorp a fait le choix de proposer son propre langage : le HCL pour HashiCorp Configuration Language. On le retrouve ainsi sur les outils tels que Terraform, Packer, Consul et Vault.
La syntaxe HCL est inspirée de libucl, de la configuration nginx et d'autres.
Cette documentation porte sur la version 2 de ce langage.
Les bases du HCL
L'un des principaux atouts du HCL réside dans sa syntaxe simple et lisible. Contrairement à certains langages de configuration plus verbeux, le HCL utilise une approche minimaliste qui le rend accessible aux développeurs, aux administrateurs système et à toute personne impliquée dans la gestion de l'infrastructure.
Voici un exemple de configuration HCL pour illustrer sa simplicité :
resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "ExampleInstance"
}
}
Cette configuration déclare une instance EC2 sur Amazon Web Services (AWS). La syntaxe est claire et compréhensible, ce qui facilite la définition d'infrastructures complexes en toute simplicité.
Commentaires
Les commentaires sont également pris en charge en HCL pour documenter votre
code. Vous pouvez ajouter des commentaires en utilisant le symbole #
. Les
commentaires sont utiles pour expliquer la logique de votre configuration et
pour rendre le code plus compréhensible pour d'autres collaborateurs.
Exemple de commentaires en HCL :
server "web" {
# Configuration du serveur web ici
# Cet attribut spécifie l'adresse IP du serveur
ip_address = "192.168.1.10"
}
Sections, Blocs et Attributs
Le HCL repose sur un modèle de configuration basé sur des sections, des blocs et des attributs. Cette structure hiérarchique facilite la définition des composants de votre configuration.
Sections
Une configuration HCL est généralement organisée en sections. Chaque section est
délimitée par des accolades {}
et peut contenir un ou plusieurs blocs de
configuration. Par exemple, une section pourrait être dédiée à la configuration
d'une infrastructure réseau, tandis qu'une autre pourrait être utilisée pour
définir des instances de serveurs.
Exemple de section en HCL :
network {
# Configuration du réseau ici
}
servers {
# Configuration des serveurs ici
}
Blocs
À l'intérieur des sections, vous pouvez définir des blocs de configuration. Les blocs sont utilisés pour regrouper des attributs associés à un composant spécifique. Par exemple, dans la section "servers", vous pouvez avoir plusieurs blocs pour décrire différents serveurs.
Exemple de bloc en HCL :
server "web" {
# Configuration du serveur web ici
}
server "database" {
# Configuration du serveur de base de données ici
}
Attributs
Les attributs sont les éléments de données qui définissent les caractéristiques et les paramètres d'un composant. Ils sont généralement associés à un bloc de configuration. Par exemple, dans le bloc "server web", vous pouvez définir des attributs tels que l'adresse IP, le type de serveur, ou d'autres paramètres spécifiques.
Exemple d'attributs en HCL :
server "web" {
ip_address = "192.168.1.10"
instance_type = "t2.micro"
# Autres attributs ici
}
Types de Données en HCL
Le HCL (HashiCorp Configuration Language) prend en charge différents types de données pour permettre la définition de configurations.
Types de Données Simples
Chaînes de Caractères (Strings)
Les chaînes de caractères sont utilisées pour représenter du texte. Elles sont définies en entourant le texte de guillemets doubles ou simples.
Exemple :
nom = "John Doe"
Nombres (Numbers)
Les nombres sont utilisés pour représenter des valeurs numériques, qu'elles soient entières ou à virgule flottante.
Exemples :
age = 30
prix = 19.99