Note :

Créer un pipeline de validation Terraform à l'aide du cadre de test Terraform et d'Oracle Cloud Infrastructure DevOps

Présentation

Les organisations utilisent fréquemment les modules Terraform pour gérer le provisionnement complexe des ressources et offrent aux développeurs une interface simple pour entrer les paramètres nécessaires au déploiement de l'infrastructure souhaitée. Les modules facilitent la réutilisation de code et fournissent aux organisations un moyen de normaliser le déploiement de charges de travail communes, telles qu'une application Web à trois niveaux, un environnement de réseau en nuage 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, ne sont pas évolutifs et peuvent entraîner des problèmes inattendus. Étant donné que les modules sont utilisés par plusieurs équipes au sein d'une organisation, il est essentiel de tester minutieusement toutes les modifications avant leur publication.

Le test Terraform est un nouveau cadre de test conçu pour que les auteurs de module effectuent des tests d'unité et d'intégration pour les modules Terraform. Il permet la création d'une 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 HCL (Configuration Language) HashiCorp 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 détecte 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. La séquence dans laquelle 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éalables

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

  1. Nous avons traité de la structure fondamentale d'un fichier de test Terraform. Laissez-nous écrire quelques tests de base pour vérifier la fonctionnalité de la configuration Terraform suivante. La configuration Terraform suivante créera un seau de stockage d'objets OCI 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 Terraform pour OCI avec l'autorisation du principal de ressource, permet au fournisseur d'effectuer des appels d'API sans avoir à fournir des données d'identification dans la définition du fournisseur. Pour configurer l'autorisation du principal de ressource pour le fournisseur OCI, voir Autorisation du principal de ressource.

  4. Créez un fichier de 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 seau 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"
      }
    
    }
    

    Note : Si le niveau de stockage du seau n'est pas standard, le test échouera.

  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 et de développement en continu.

Tâche 2 : Créer un pipeline de compilation OCI DevOps pour valider 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 

Étapes suivantes

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

Ce pipeline de validation Terraform peut être intégré au pipeline d'intégration et de développement en continu d'application. Le pipeline de validation Terraform extraira les artefacts des étapes précédentes et testera la configuration avant de mettre en oeuvre les modifications.

Confirmation

Autres ressources d'apprentissage

Explorez d'autres laboratoires sur la page docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal YouTube d'Oracle Learning. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

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