Mise à niveau d'une pile vers une version ultérieure de Terraform
Mettez à niveau une pile dans Resource Manager vers une version ultérieure de Terraform.
Ces instructions ne s'appliquent pas aux piles Resource Manager créées via Marketplace.
Ces étapes sont effectuées dans la ligne de commande et dans la console.
Pour plus d'informations sur les versions de Terraform prises en charge par Resource Manager, reportez-vous à Versions Terraform prises en charge.
Avant de commencer
Pour mettre à niveau la pile, vous devez satisfaire aux exigences suivantes :
-
Un ordinateur MacOS, Linux ou Windows pour exécuter des outils de ligne de commande
-
Logiciel permettant de créer et de décompresser des archives
.zip
, telles que 7-ZIP
Mise à niveau automatique
Pour prendre en charge l'abandon des versions antérieures à Terraform (antérieures à 1.5.x), Resource Manager tentera une mise à niveau automatique de la version Terraform. Cette mise à niveau automatique est tentée chaque fois que vous exécutez un travail d'application réussi (état du travail réussi) sur une pile configurée pour une ancienne version de Terraform.
La version cible de la tentative de mise à niveau dépend de la version Terraform actuellement configurée de la pile. Les mises à niveau automatiques intermédiaires déplacent la pile vers la version 1.5.x lors d'une ou plusieurs tentatives de mise à niveau réussies. L'utilisation de mises à niveau intermédiaires permet de contourner les différences de syntaxe HCL, de définitions de bloc de fournisseur et de différences de fichiers d'état, comme indiqué dans les instructions de mise à niveau manuelle. La version cible d'une mise à niveau est sélectionnée comme suit :
- La version cible pour la mise à niveau 0.12.x est 0.13.x.
- La version cible de la mise à niveau 0.13.x est 0.14.x.
- La version cible pour mettre à niveau 0.14.x, 1.0.x, 1.1.x ou 1.2.x est 1.5.x.
La tentative de mise à niveau n'a lieu qu'après la réussite d'un travail d'application (état du travail réussi).
- Si la mise à niveau réussit, la version et le fichier d'état de Terraform de la pile sont mis à niveau vers la version 1.5.x (ou version intermédiaire). Aucune action supplémentaire n'est requise.
- Si la mise à niveau échoue, la version de Terraform de la pile n'est pas modifiée et les ressources ne sont pas affectées. Un message d'échec de mise à niveau apparaît sur la page de détails de la pile. Dans ce cas, obtenez les journaux pour le travail d'application (sélectionnez Afficher les journaux de mise à niveau terraform pour obtenir des informations sur l'échec), puis mettez à jour la configuration Terraform. Le prochain travail d'application réussi que vous exécutez sur cette pile déclenchera le processus de mise à niveau automatique par Resource Manager.Remarque
Même si la mise à niveau échoue, l'état du travail est toujours correct.
Chemins de mise à niveau
Voici les chemins de mise à niveau pris en charge par version initiale.
Version initiale de Terraform | Chemin de mise à niveau |
---|---|
0,12 | Dans l'ordre, effectuez une mise à niveau vers chaque version prise en charge : 0.13, 0.14, 1.0 (recommandé), 1.1, 1.2, 1.5. |
0,13 | Dans l'ordre, effectuez une mise à niveau vers chaque version prise en charge : 0.14, 1.0 (recommandé), 1.1, 1.2, 1.5. |
0,14 | Dans l'ordre, effectuez une mise à niveau vers chaque version prise en charge : 1.0 (recommandé), 1.1, 1.2, 1.5. |
1 | Dans l'ordre, mettez à niveau vers chaque version prise en charge : 1.1, 1.2, 1.5. |
1,1 | Dans l'ordre, mettez à niveau vers chaque version prise en charge : 1.2, 1.5. |
1,2 | Mettre à niveau vers 1.5. |
Reportez-vous aux guides de mise à niveau officiels de Terraform :
Tâche 1 : confirmer l'infrastructure à jour
Cette tâche utilise la console. Pour obtenir des instructions sur l'interface de ligne de commande et l'API pour une étape, reportez-vous au lien associé.
Tâche 2 : téléchargement de la configuration et de l'état
Si la configuration Terraform de la pile est stockée dans un système de contrôle du code source, tel que GitLab, extrayez et téléchargez la configuration Terraform à partir de là.
Si la configuration Terraform de la pile est stockée dans un bucket, téléchargez-la à partir de ce dernier.
Cette tâche utilise la console. Pour obtenir des instructions sur l'interface de ligne de commande et l'API pour une étape, reportez-vous au lien associé.
Tâche 3 : mise à niveau de la configuration
Tâche 4 : mettre à niveau la pile
Tâche 5 : Importer l'état
Tâche 6 : vérifier les problèmes
Cette tâche utilise la console. Pour obtenir des instructions sur l'interface de ligne de commande et l'API pour une étape, reportez-vous au lien associé.
Dépannage des journaux lors d'une mise à niveau
Erreur : échec de l'installation des fournisseurs
Le journal affiche un message d'erreur semblable au suivant.
Error: Failed to install providers
Could not find required providers, but found possible alternatives:
hashicorp/gitlab -> gitlabhq/gitlab
If these suggestions look correct, upgrade your configuration with the following command:
terraform 0.13upgrade .
La configuration ne répond pas aux exigences de la version de Terraform indiquée. Les versions 0.13.x et ultérieures n'utilisent pas cette syntaxe pour les fournisseurs. Exemple de configuration à l'origine de cette erreur :
provider "gitlab" {
token = "glpat-_abcd"
}
# Add a project owned by the user
resource "gitlab_project" "sample_project" {
name = "example"
}
Ajoutez un bloc required_providers
et mentionnez explicitement les informations source pour le fournisseur. Pour plus d'informations, reportez-vous à Fournisseurs requis. Exemple de mise à jour :
terraform {
required_providers {
oci = {
source = "oracle/oci"
version = "5.46"
}
gitlab = {
source = "gitlabhq/gitlab"
version = "17.8.0"
}
}
}
Erreur : contraintes de type entre guillemets non valides
Le journal affiche un message d'erreur semblable au suivant.
Error: Invalid quoted type constraints on variables.tf line 18, in variable "vcn_dns_label"
18: type = "string"
Terraform 0.11 and earlier required type constraints to be given in quotes,
but that form is now deprecated and will be removed in a future version of
Terraform. Remove the quotes around "string".
La configuration ne répond pas aux exigences de la version de Terraform indiquée. Les versions 1.0.x et ultérieures n'utilisent pas de guillemets pour les déclarations de type de variables. Exemple de configuration à l'origine de cette erreur :
variable "vcn_dns_label" {
type = "string"
default = "vcn"
}
Supprimez les guillemets des déclarations de type des variables. Exemple de mise à jour :
variable "vcn_dns_label" {
type = string
default = "vcn"
}
Erreur : Erreur dans l'appel de fonction (mappage)
Le journal affiche un message d'erreur semblable au suivant.
Error: Error in function call
on main.tf line 44, in resource "oci_core_subnet" "this":
44: display_name = lookup(map("a", "b", "c", "d"), "a", "default")
────────────────
while calling map(vals...)
Call to function "map" failed: the "map" function was deprecated in Terraform v0.12 and
is no longer available; use tomap({ ... }) syntax to write a literal map.
La configuration ne répond pas aux exigences de la version de Terraform indiquée. Les versions 1.0.x et ultérieures n'utilisent pas cette syntaxe pour les cartes. Exemple de configuration à l'origine de cette erreur :
resource "oci_core_subnet" "this" {
...
...
vcn_id = lookup(map("a", 1, "b", 2), "a", "default")
...
...
}
Corrigez la syntaxe de la correspondance pour utiliser tomap()
. Exemple de mise à jour :
resource "oci_core_subnet" "this" {
...
...
vcn_id = lookup(tomap({"a" = 1, "b" = 2}), "a", "default")
...
...
}
Erreur : Erreur dans l'appel de fonction (liste)
Le journal affiche un message d'erreur semblable au suivant.
Error: Error in function call
on main.tf line 35, in resource "oci_core_subnet" "this"
35: count = length(list("phx-ad-1"", ""phx-ad-2"))
Call to function "list"" failed: the ""list" function was deprecated in
Terraform v0.12 and is no longer available; use tolist([ ... ]) syntax to
write a literal list.
La configuration ne répond pas aux exigences de la version de Terraform indiquée. Les versions 1.0.x et ultérieures n'utilisent pas cette syntaxe pour les listes. Exemple de configuration à l'origine de cette erreur :
resource "oci_core_subnet" "this" {
count = length(list("phx-ad-1", "phx-ad-2"))
...
...
}
Corrigez la syntaxe de la liste pour utiliser tolist()
. Exemple de mise à jour :
resource "oci_core_subnet" "this" {
count = length(tolist(["phx-ad-1", "phx-ad-2"]))
...
...
}
Erreur : la forme ["*"] du caractère générique ignore_changes est obsolète
Le journal affiche un message d'erreur semblable au suivant.
Getting providers from registry and/or custom terraform providers
resource "oci_core_subnet" "this"
44: ignore_changes = ["*"]
The ["*"] form of ignore_changes wildcard is was deprecated and is now
invalid. Use "ignore_changes = all" to ignore changes to all attributes.
La configuration ne répond pas aux exigences de la version de Terraform indiquée. Les versions 1.0.x et ultérieures n'utilisent pas cette syntaxe pour les caractères génériques ignore_changes
. Exemple de configuration à l'origine de cette erreur :
resource "oci_core_subnet" "this" {
...
...
lifecycle {
ignore_changes = ["*"]
}
}
Utilisez plutôt ignore_changes = all
. Exemple de mise à jour :
resource "oci_core_subnet" "this" {
...
...
lifecycle {
ignore_changes = all
}
}
Problème : Syntaxe HCL en phase d'abandon
Le journal indique l'existence d'une syntaxe HCL obsolète.
La configuration ne répond pas aux exigences de la version de Terraform indiquée.
Mettez à jour la configuration pour omettre la syntaxe HCL obsolète.