Aggiornamento di uno stack a una versione successiva di Terraform
Eseguire l'upgrade di uno stack in Resource Manager a una versione successiva di Terraform.
Queste istruzioni non si applicano agli stack di Resource Manager creati tramite Marketplace.
Questi passi vengono completati nella riga di comando e nella console.
Per informazioni sulle versioni Terraform supportate da Resource Manager, vedere Versioni Terraform supportate.
Informazioni preliminari
Per eseguire correttamente l'upgrade dello stack, è necessario disporre dei seguenti requisiti:
-
Un computer MacOS, Linux o Windows per l'esecuzione di strumenti della riga di comando
-
Software per creare e decomprimere archivi
.zip
, ad esempio 7-ZIP
Upgrade automatico
Per supportare l'obsolescenza delle versioni Terraform precedenti alla versione 1.5.x, Resource Manager tenterà di eseguire un upgrade automatico della versione Terraform. Questo upgrade automatico verrà tentato ogni volta che si esegue un job di applicazione riuscito (lo stato del job è riuscito) in uno stack configurato per una versione Terraform precedente.
La versione di destinazione per l'upgrade tentato dipende dalla versione Terraform attualmente configurata dello stack. Gli aggiornamenti automatici intermedi spostano lo stack verso 1.5.x in uno o più tentativi di aggiornamento riusciti. L'utilizzo di aggiornamenti intermedi ruota attorno alle differenze nella sintassi HCL, nelle definizioni dei blocchi dei provider e nelle differenze tra i file di stato, come descritto nelle istruzioni di aggiornamento manuale. La versione di destinazione di un aggiornamento è selezionata come indicato di seguito.
- La versione di destinazione per l'aggiornamento 0.12.x è 0.13.x.
- La versione di destinazione per l'aggiornamento 0.13.x è 0.14.x.
- La versione di destinazione per l'aggiornamento 0.14.x, 1.0.x, 1.1.x o 1.2.x è 1.5.x.
Il tentativo di aggiornamento si verifica solo dopo che un job di applicazione ha esito positivo (lo stato del job è riuscito).
- Se l'upgrade riesce, la versione e il file di stato Terraform dello stack vengono aggiornati alla versione 1.5.x (o alla versione intermedia). Non sono richieste altre azioni.
- Se l'upgrade non riesce, la versione Terraform dello stack rimane invariata e le risorse non sono interessate. Viene visualizzato un messaggio di errore di aggiornamento nella pagina dei dettagli dello stack. In questa situazione, ottenere i log per il job di applicazione (selezionare Mostra log di aggiornamento di terraform per informazioni sull'errore), quindi aggiornare la configurazione Terraform. Il successivo job di applicazione riuscito eseguito su questo stack attiverà il processo di upgrade automatico da parte di Resource Manager.Nota
Anche se l'aggiornamento non riesce, lo stato del job è comunque riuscito.
Percorsi di aggiornamento
Di seguito sono riportati i percorsi di aggiornamento supportati dalla versione iniziale.
Versione di Terraform iniziale | Percorso di aggiornamento |
---|---|
0,12 | Eseguire l'aggiornamento in sequenza a tutte le versioni supportate: 0.13, 0.14, 1.0 (consigliato), 1.1, 1.2, 1.5. |
0,13 | Eseguire l'aggiornamento in sequenza a tutte le versioni supportate: 0.14, 1.0 (consigliato), 1.1, 1.2, 1.5. |
0,14 | Eseguire l'aggiornamento a ciascuna versione supportata: 1.0 (consigliato), 1.1, 1.2, 1.5. |
1 | Eseguire l'aggiornamento a ciascuna versione supportata: 1.1, 1.2, 1.5. |
1,1 | In sequenza, eseguire l'aggiornamento a ciascuna versione supportata: 1.2, 1.5. |
1,2 | Aggiorna a 1.5. |
Consulta le guide ufficiali per l'upgrade di Terraform:
Task 1: Conferma infrastruttura aggiornata
Questo task utilizza la console. Per istruzioni sull'interfaccia CLI e sull'interfaccia API relative a un passo, vedere il collegamento associato.
Task 2: Scarica configurazione e stato
Se la configurazione Terraform dello stack è memorizzata in un sistema di controllo del codice sorgente, ad esempio GitLab, eseguire il check-out e scaricare la configurazione Terraform da tale sistema.
Se la configurazione Terraform dello stack è memorizzata in un bucket, scaricare la configurazione Terraform da tale posizione.
Questo task utilizza la console. Per istruzioni sull'interfaccia CLI e sull'interfaccia API relative a un passo, vedere il collegamento associato.
Task 3: aggiornare la configurazione
Task 4: Aggiorna lo stack
Task 5: Importa lo stato
Task 6: Controlla problemi
Questo task utilizza la console. Per istruzioni sull'interfaccia CLI e sull'interfaccia API relative a un passo, vedere il collegamento associato.
Risoluzione dei problemi relativi ai log durante un aggiornamento
Errore: installazione dei provider non riuscita
Il log mostra un messaggio di errore simile al seguente.
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 configurazione non soddisfa i requisiti per la versione Terraform specificata. La versione 0.13.x e successive non utilizza questa sintassi per i provider. Configurazione di esempio che causa questo errore:
provider "gitlab" {
token = "glpat-_abcd"
}
# Add a project owned by the user
resource "gitlab_project" "sample_project" {
name = "example"
}
Aggiungere un blocco required_providers
e menzionare esplicitamente le informazioni di origine per il provider. Per ulteriori informazioni, vedere Fornitori obbligatori. Aggiornamento di esempio:
terraform {
required_providers {
oci = {
source = "oracle/oci"
version = "5.46"
}
gitlab = {
source = "gitlabhq/gitlab"
version = "17.8.0"
}
}
}
Errore: vincoli tipo citato non validi
Il log mostra un messaggio di errore simile al seguente.
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 configurazione non soddisfa i requisiti per la versione Terraform specificata. Le versioni 1.0.x e successive non utilizzano le virgolette per le dichiarazioni di tipo delle variabili. Configurazione di esempio che causa questo errore:
variable "vcn_dns_label" {
type = "string"
default = "vcn"
}
Rimuovere le virgolette dalle dichiarazioni di tipo delle variabili. Aggiornamento di esempio:
variable "vcn_dns_label" {
type = string
default = "vcn"
}
Errore: errore nella chiamata di funzione (mappa)
Il log mostra un messaggio di errore simile al seguente.
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 configurazione non soddisfa i requisiti per la versione Terraform specificata. La versione 1.0.x e successive non utilizza questa sintassi per le mappe. Configurazione di esempio che causa questo errore:
resource "oci_core_subnet" "this" {
...
...
vcn_id = lookup(map("a", 1, "b", 2), "a", "default")
...
...
}
Correggere la sintassi della mappa per utilizzare tomap()
. Aggiornamento di esempio:
resource "oci_core_subnet" "this" {
...
...
vcn_id = lookup(tomap({"a" = 1, "b" = 2}), "a", "default")
...
...
}
Errore: errore nella chiamata di funzione (elenco)
Il log mostra un messaggio di errore simile al seguente.
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 configurazione non soddisfa i requisiti per la versione Terraform specificata. La versione 1.0.x e successive non utilizza questa sintassi per gli elenchi. Configurazione di esempio che causa questo errore:
resource "oci_core_subnet" "this" {
count = length(list("phx-ad-1", "phx-ad-2"))
...
...
}
Correggere la sintassi dell'elenco per utilizzare tolist()
. Aggiornamento di esempio:
resource "oci_core_subnet" "this" {
count = length(tolist(["phx-ad-1", "phx-ad-2"]))
...
...
}
Errore: il formato ["*"] del carattere jolly ignore_changes non è più valido
Il log mostra un messaggio di errore simile al seguente.
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 configurazione non soddisfa i requisiti per la versione Terraform specificata. La versione 1.0.x e successive non utilizza questa sintassi per i caratteri jolly ignore_changes
. Configurazione di esempio che causa questo errore:
resource "oci_core_subnet" "this" {
...
...
lifecycle {
ignore_changes = ["*"]
}
}
Utilizzare ignore_changes = all
. Aggiornamento di esempio:
resource "oci_core_subnet" "this" {
...
...
lifecycle {
ignore_changes = all
}
}
Problema: sintassi HCL non più valida
Il log indica l'esistenza di una sintassi HCL non più valida.
La configurazione non soddisfa i requisiti per la versione Terraform specificata.
Aggiornare la configurazione per omettere la sintassi HCL non più valida.