Administration : HCL ou JSON, quel langage utiliser pour les configurations ?
HCL et JSON sont des langages de configuration utilisés dans les scénarios d’Infrastructure-as-Code. Cet article présente leur syntaxe et leurs outils d’édition, pour choisir lequel correspond le mieux à un scénario d’usage.
L’Infrastructure-as-Code (IaC) est un élément essentiel de la boîte à outils de l’administrateur système. Divers gestionnaires de configuration, tels qu’Ansible, Puppet et Terraform, reconnaissent et utilisent des langages de configuration spécifiques.
Cet article examine les langages de configuration HCL, spécifiquement créé par HashiCorp pour Terraform, et JSON, plus large, qui est né de JavaScript pour proposer une alternative à XML. HCL et JSON ont des utilisations et des exigences de format spécifiques. Comparer les deux permet de savoir lequel est le plus adapté à un scénario donné.
HCL fonctionne avec des configurations sur site et en cloud, pour des équipements d’infrastructure, des réseaux SDN ou encore des services PaaS. Et, d’une manière générale, HCL est présent partout où Terraform est utilisé. Notez que HCL fonctionne aussi avec des utilitaires autres que ceux fournis par HashiCorp.
JSON a un spectre d’utilisation plus large. Il est principalement utilisé pour transférer des données entre les serveurs ou entre les applications. Il sert aussi à rédiger les fichiers de préférences (paramètres, réglages), à stocker des données dans les bases de données NoSQL, à regrouper les informations issues des logs, ou encore comme format intermédiaire dans les scénarios d’exportation et d’importation de données.
La syntaxe JSON
Le cœur de la structure JSON est constitué de paires clé-valeur, placées entre accolades. Les clés sont des chaînes entre guillemets, uniques au document et généralement écrites avec des caractères de soulignement plutôt que des espaces. Les valeurs sont des chaînes de caractères, des nombres, des booléens, des objets (entre accolades), des tableaux (entre parenthèses) ou des valeurs nulles.
Les fichiers JSON ont généralement l’extension .json. Les fichiers JSON ne comportent pas de commentaires, ce qui peut rendre les paramètres difficiles à comprendre. Cela dit, le format clé-valeur de JSON est censé aider la lisibilité. Considérez les paires suivantes :
appName: App1
appVersion: 1.2.3
Cet exemple utilise des valeurs booléennes pour activer ou désactiver des fonctions :
logging: true
Enfin, considérons cette série d’instructions relatives à la base de données :
"host": "localhost",
"port": "5000",
"username": "dbadmin",
"password": "Pa$$w0rd",
La syntaxe HCL
Le HCL définit des blocs avec des accolades. Ces blocs sont des éléments de configuration. Comme JSON, HCL utilise des paires clé-valeur dans chaque bloc. Cette capacité permet au langage HCL de définir des ressources et des configurations similaires, qui sont identifiées par des chaînes, des nombres, des booléens et d’autres types de données.
HCL utilise l’extension de fichier .hcl ou .tf. Il supporte les commentaires avec des délimiteurs JavaScript. Les commentaires d’une seule ligne commencent par deux barres obliques. Les commentaires multilignes commencent par /* et se terminent par */.
HCL est compatible avec JSON, puisqu’ils utilisent tous deux des paires clé-valeur similaires, mais HCL en possède quelques-unes qui sont absentes de JSON. Le format est aussi différent : HCL utilise le signe égal, tandis que JSON utilise les deux points. Ces fichiers de configuration sont similaires et répondent généralement aux mêmes objectifs.
Travailler avec des fichiers JSON et HCL
Les documents JSON et HCL sont des fichiers texte, de sorte que presque tous les outils d’édition fonctionnent avec eux. Même les éditeurs simples, comme Vim, disposent d’options pour les plug-ins JSON. En revanche, n’utilisez pas de traitements de texte.
Les outils dédiés améliorent les capacités avec des fonctionnalités telles que la coloration syntaxique, la vérification des erreurs et le formatage. Les outils d’édition à envisager pour JSON sont les suivants :
– Jq. Un outil de ligne de commande léger et flexible qui traite les fichiers JSON, y compris la structuration, la création et la recherche avec des fonctionnalités Linux familières.
– JSON Editor Online. Un éditeur qui inclut des capacités de validation.
– JSONMate. Un éditeur JSON en ligne puissant et convivial.
Les outils d’édition pour HCL sont les suivants :
– Atom. Un éditeur HCL qui offre une mise en évidence de la syntaxe.
– Hcledit. Un éditeur de ligne de commande pour les fichiers HCL.
Certains outils peuvent éditer des documents JSON et HCL. D’autres nécessitent des plug-ins ou des extensions pour fonctionner avec HCL. Les outils compatibles avec les deux fichiers de configuration sont les suivants :
– IntelliJ IDEA.
– Notepad++.
– Sublime Text.
– Visual Studio Code.
Bon nombre de ces outils de création comprennent des fonctions de validation. Réfléchissez bien avant de placer du code JSON sensible dans des valideurs en ligne.
Les éditeurs ci-dessus alertent souvent les utilisateurs sur les erreurs de syntaxe et de structure. Si le fichier n’est pas original, utilisez les valideurs JSON – ou Terraform for HCL – pour vérifier la syntaxe et la structure des fichiers existants et identifier les erreurs avant qu’elles ne se retrouvent dans le code de production. Parmi les valideurs gratuits en ligne, citons les suivants :
– JSON Formatter & Validator.
– JSONLint.
– Scaler's JSON Validator.
Sécurité des fichiers
Ni HCL ni JSON n’intègrent de sécurité des fichiers. Les meilleures pratiques en matière de sécurité des fichiers sont les suivantes :
- Utilisez des fichiers HCL ou JSON provenant de sources fiables.
- Évaluez le contenu des fichiers de configuration pour vous assurer de connaître l’effet de chaque paramètre.
- Utilisez le contrôle de version pour conserver les paramètres actuels.
- Testez soigneusement les fichiers de configuration.
- Utilisez le chiffrement pour protéger les fichiers.
Avantages et inconvénients
La structure simple du format JSON et la taille réduite des fichiers permettent un transfert plus rapide des systèmes. JSON est donc plus utile pour les échanges de données et les configurations simples que pour les fichiers de configuration complexes et étendus, tels que YAML et XML.
JSON implique moins de codage et est souvent plus facile à dépanner que d’autres formats. Il utilise la syntaxe JavaScript avec quelques considérations notables. JSON ne prend pas en charge les commentaires, contrairement à HCL. JSON ignore également les espaces blancs, alors que des formats tels que YAML les utilisent. L’adhésion stricte de JSON aux règles syntaxiques peut le rendre difficile à créer et à dépanner. Toutefois, les personnes déjà familiarisées avec JavaScript se sentiront probablement à l’aise avec JSON.
Les administrateurs dédiés aux outils HashiCorp, tels que Terraform et Vault, se familiariseront rapidement avec HCL. HCL s’adapte bien à JSON, ce qui rend les conversions de fichiers simples et fiables.
Utilisez JSON pour gérer les données ou transmettre des informations entre les serveurs et les applications web. Utilisez HCL, YAML ou XML pour gérer des environnements multicloud ou hybrides étendus.