Remarques :

Création d'un pipeline de validation Terraform à l'aide de la structure de test Terraform et d'Oracle Cloud Infrastructure DevOps

Introduction

Les entreprises utilisent fréquemment les modules Terraform pour gérer le provisionnement complexe des ressources et offrent une interface simple permettant aux développeurs de saisir les paramètres nécessaires au déploiement de l'infrastructure souhaitée. Les modules facilitent la réutilisation du code et fournissent aux entreprises un moyen de standardiser le déploiement de charges de travail courantes, telles qu'une application Web à trois niveaux, un environnement de réseau cloud ou un pipeline d'analyse de données. Lors du développement de modules Terraform, les auteurs commencent généralement par des tests manuels. Cela implique l'utilisation de commandes telles que la validation terraform pour la validation de la syntaxe, le plan terraform pour prévisualiser le plan d'exécution et l'application terraform, puis l'inspection manuelle des configurations de ressources dans la console Oracle Cloud Infrastructure (OCI). Les tests manuels, cependant, sont sujets à des erreurs humaines, non évolutives, et peuvent entraîner des problèmes involontaires. Comme les modules sont utilisés par plusieurs équipes au sein d'une organisation, il est essentiel de tester minutieusement les modifications avant leur publication.

Le test Terraform est une nouvelle structure de test conçue pour que les auteurs de module effectuent des tests d'unité et d'intégration pour les modules Terraform. Il permet la création de l'infrastructure telle que définie dans le module, effectue des contrôles de validation sur l'infrastructure et détruit les ressources de test, que les tests réussissent ou échouent. En outre, le test Terraform fournit des avertissements si des ressources ne peuvent pas être détruites. En utilisant la même syntaxe HashiCorp Configuration Language (HCL) que les modules Terraform, les auteurs n'ont pas besoin d'apprendre d'autres outils ou langages de programmation.

Chaque test Terraform se trouve dans un fichier de test. Terraform repère les fichiers de test en fonction de leur extension de fichier : .tftest.hcl ou .tftest.json. Chaque fichier de test est composé d'attributs et de blocs de niveau racine, comme suit :

Terraform exécute les blocs run de manière séquentielle, en imitant une séquence de commandes Terraform en cours d'exécution dans le répertoire de configuration. L'ordre dans lequel les blocs variables et provider sont organisés n'a pas d'importance, car Terraform évalue toutes les valeurs de ces blocs au début du processus de test. Pour plus de clarté, il est conseillé de placer vos blocs variables et provider au début du fichier de test.

Objectifs

Prérequis

Tâche 1 : écrire un test Terraform pour valider la création de ressource

  1. Nous avons abordé la structure fondamentale d'un fichier de test Terraform. Ecrivons quelques tests de base pour vérifier les fonctionnalités de la configuration Terraform suivante. La configuration Terraform suivante créera un bucket OCI Object Storage de niveau Standard.

    #main.tf
    
    resource "oci_objectstorage_bucket" "test_bucket" {
    
        compartment_id = var.compartment_id
        name = var.bucket_name
        namespace = var.bucket_namespace
        storage_tier = var.bucket_storage_tier
        versioning = var.bucket_versioning
    }
    
  2. Créez le fichier var.tf avec les variables requises.

    variable compartment_id { default = "<compartment-ocid>" }
    variable region { default = "<region>" }
    variable bucket_name { default = "<bucket-name>"}
    variable bucket_namespace { default = "<object-storage-namespace>"}
    variable bucket_access_type { default = "ObjectRead"}
    variable bucket_storage_tier { default = "Standard"}
    variable bucket_versioning {default = "Enabled"}
    
  3. Configurez le fournisseur OCI Terraform avec l'autorisation de principal de ressource, ce qui lui permet d'effectuer des appels d'API sans avoir à fournir d'informations d'identification dans la définition de fournisseur. Afin de configurer l'autorisation de principal de ressource pour le fournisseur OCI, reportez-vous à Autorisation de principal de ressource.

  4. Créez un fichier test Terraform dans le répertoire tests. Voici un exemple de structure de répertoires :

    ├── main.tf 
    └── tests 
    └── test.tftest.hcl
    
  5. Mettez à jour le fichier test.tftest.hcl, qui vérifie si le niveau du bucket créé est Standard ou non.

    # test.tftest.hcl
    
    run "valid_bucket_tier" {
    
      command = plan
    
      assert {
        condition     = oci_objectstorage_bucket.test_bucket.storage_tier == "Standard"
        error_message = "bucket tier is not standard"
      }
    
    }
    

    Remarque : si le niveau de stockage du bucket n'est pas standard, le test échoue.

  6. Poussez les fichiers terraform ci-dessus vers le référentiel de code OCI. Nous utiliserons ce référentiel de code avec notre pipeline d'intégration continue et de déploiement continu.

Tâche 2 : création du pipeline de build OCI DevOps pour la validation de la configuration Terraform

Dans le fichier build_spec.yaml, les commandes terraform init et terraform validate sont utilisées pour initialiser Terraform et vérifier que la configuration est valide. Ensuite, la commande de test terraform exécute les tests configurés. Si des tests terraform échouent, le pipeline échoue également.

version: 0.1
component: build
timeoutInSeconds: 10000
shell: bash      
failImmediatelyOnError: true

steps:
  - type: Command
    name: "Initialize Terraform"
    command: |
      terraform init
      terraform validate
  - type: Command
    name: "Test Terraform"
    command: |
      terraform test 

Etapes suivantes

Nous avons effectué un test d'assertion simple dans notre configuration Terraform. Vous pouvez effectuer différents types de test, tels que les tests d'intégration, les tests unitaires, les tests de bout en bout, etc. Pour plus d'informations, reportez-vous aux tests Terraform.

Ce pipeline de validation Terraform peut être intégré au pipeline d'intégration continue et de déploiement continu d'application. Le pipeline de validation Terraform extrait les artefacts des phases précédentes et teste la configuration avant d'implémenter les modifications.

Remerciements

Ressources de formation supplémentaires

Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.