Aggiornamento a una nuova versione di Terraform

Gli strumenti open source IaC utilizzati da Schematics si evolvono di pari passo con le nuove versioni di Terraform e Helm, nonché con i provider Terraform di supporto. Nel tempo è necessario che gli ambienti di lavoro di lunga durata vengano aggiornati per utilizzare la versione più recente di Terraform poiché le versioni precedenti sono obsolete e non sono più supportate.

Tutti gli utenti di Schematics sono incoraggiati ad eseguire regolarmente l'aggiornamento all'ultima versione di Terraform per assicurare la continuità delle operazioni e del supporto. Schematics segue il modello di supporto Hashicorp per le release Terraform e rende obsolete le versioni in linea con Hashicorp.

Terraform v1.0 è stata una release principale per Terraform, contrassegnando la transizione a una release stabile 1.x. Hashicorp ha fatto promesse di compatibilità per le release 1.x, che per le funzioni principali, non sono richieste ulteriori modifiche per l'aggiornamento tramite le release 1.x.

In breve, mira a rendere gli aggiornamenti tra le release v1.x semplici, senza richiedere modifiche alla configurazione, senza comandi per eseguire i passi di aggiornamento e senza modifiche a qualsiasi automazione che hai configurato intorno a Terraform.

Per eseguire l'aggiornamento alle release 1.x non sono richieste azioni dello spazio di lavoro Schematics specifiche. Esamina le guide di aggiornamento Terraform per le modifiche specifiche della release che potrebbero richiedere gli aggiornamenti del template / configurazione TF.

Aggiornamento del modello Terraform versione 1.x e successive

Da Terraform 1.0, gli spazi di lavoro Schematics possono essere aggiornati alle release 1.x più recenti, attraverso una modifica semplice alla versione dello spazio di lavoro. Per eseguire l'aggiornamento dalle release 0.x, fare riferimento alla sezione Aggiornamento del template Terraform versione 0.x

Schematics supporta Terraform_v1.x e prevede di rendere disponibili le release 45-60 days dopo la disponibilità generale. Si consiglia che i modelli Terraform utilizzino un vincolo di intervallo di versioni, come >, >= o ~> per il parametro required_version nel versions.tf del template Terraform, che consente l'upgrade per le release secondarie e di patch. Ciò consente a Schematics di adottare automaticamente l'ultima patch o release minore della versione Terraform come impostata dalla versione dello spazio di lavoro.

terraform {
required_version = "~> 1.1"
}

Aggiornamento dello spazio di lavoro Terraform 1.x versione

La versione in uso di Terraform per uno spazio di lavoro può essere aggiornata tramite l'API di aggiornamentodello spazio di lavoro Schematics.

Il parametro di versione terraform dello spazio di lavoro è nel formato terraform_v1.4 o terraform_v1.5

  1. Selezionare lo spazio di lavoro da aggiornare e verificare che si trovi nello stato Normal e che un'operazione del piano non generi alcuna modifica della risorsa proposta. Salva workspace_id e prendi nota della regione in cui si trova lo spazio di lavoro.

  2. Aggiorna la versione terraform dello spazio di lavoro utilizzando la CLI e l'API IBM Cloud. Queste operazioni dello spazio di lavoro sono specifiche della regione. Nota la regione dello spazio di lavoro dall'IU come richiesto per i seguenti comandi:

    • Accedi alla CLI IBM Cloud con ibmcloud login
    • Imposta la regione di destinazione della CLI con ibmcloud target -r <region> in modo che sia uguale allo spazio di lavoro che stai aggiornando.
    • Genera un token oauth IAM da utilizzare con l'API Schematics con il comando ibmcloud iam oauth-tokens.
    • Copia i dati del token e inserisci nel seguente testo del comando, sostituendo la stringa <token-data>, imposta <terraform_version> sulla versione di Terraform richiesta e su <workspace_id>:
    • Lo spazio di lavoro viene aggiornato eseguendo un comando cURL per richiamare l'API di aggiornamento Schematics per aggiornare la versione Terraform. Questa operazione è specifica della regione e deve specificare l'endpoint della regione API Schematics desiderato per la regione di destinazione del workspace. Sostituire il testo <schematics-region-endpoint> nel comando con l'endpoint per la regione dello spazio di lavoro di destinazione.
        curl -X PUT https://<schematics-region-endpoint>.cloud.ibm.com/v1/workspaces/<w_id> \
        -H 'Authorization: Bearer <token>' \
        -H 'refresh_token: <token>' \
        -d '{
        "type": [
            "<terraform_version>"
        ],
        "template_data": [
            {
                "folder": ".",
                "type": "<terraform_version>"
            }
        ]
        }'
    
  3. Verificare nella pagina delle impostazioni dello spazio di lavoro che la versione TF sia ora impostata sulla versione desiderata.

  4. Eseguire un'operazione Genera piano rispetto al workspace. Verificare che il comando venga eseguito correttamente senza errori e che non vengano registrati messaggi non previsti. Il piano non dovrebbe comportare alcuna modifica proposta delle risorse.

  5. Eseguire un'operazione Applica piano rispetto allo spazio di lavoro. Verificare che il comando venga eseguito correttamente senza errori e che non vengano registrati messaggi non previsti.

  6. L'aggiornamento è stato completato con successo.

Aggiornamento del modello Terraform versione 0.x a 1.x

Alle release 0.x, l'aggiornamento della versione di Terraform è un processo stepwise, che esegue l'aggiornamento attraverso ogni release. L'aggiornamento non supporta l'aggiornamento tra più release e deve essere eseguito, release per release. Alcuni aggiornamenti richiedono l'esecuzione dei comandi Terraform upgrade per modificare i file di configurazione anche le modifiche al file di stato Terraform. Questi passaggi non possono essere eseguiti in Schematics. I modelli Terraform dello spazio di lavoro devono essere aggiornati utilizzando una copia locale di Terraform. Seguire la procedura per l'aggiornamento delle release 0.x.

Elenco versioni Terraform
Versione Suggerimento
v0.12 Consulta la Guida all'aggiornamento div0.13 e segui le istruzioni Upgrade di uno spazio di lavoro Terraform v0.12 a v0.13. Schematics è obsoleto Terraform v0.12.
v0.13 Per l'aggiornamento Terraform v0.14, è necessario eseguire terraform apply con Terraform v0.14 per completare gli aggiornamenti del formato di stato. Se ricevi degli errori, consulta la Guida all'aggiornamento div0.14. Seguire le istruzioni upgrade-13-to10
v0.14 È possibile eseguire l'upgrade direttamente alla versione Terraform v1.0. Consulta la Guida all'aggiornamento div0.15.
v0.15 È possibile eseguire l'upgrade direttamente alla versione Terraform v1.0. Esamina la Guida all'aggiornamento div1.0.

Aggiornamento di uno spazio di lavoro Terraform v0.12 a v0.13

L'aggiornamento di un workspace v0.12 per utilizzare la versione v0.13 di Terraform è un'attività a più fasi. Devi esaminare attentamente la Guida all'upgrade di Terraform per l'upgrade della versione correlata.

Utilizza la seguente procedura per eseguire l'aggiornamento alla versione Terraform corrente nello workspace Schematics.

  1. Aggiornare i file di configurazione Terraform per utilizzare la sintassi e la semantica più recenti.

  2. Migrare il file di stato Terraform in modo che sia compatibile con la versione più recente. Schematics non supporta la modifica integrata del file di stato Terraform. Pertanto, è necessario seguire questi passi.

    1. Prepara la versione aggiornata dei file di configurazione Terraform e File di stato Terraform nella tua macchina locale.
    2. Crea il nuovo spazio di lavoro Schematics con i nuovi file di configurazione Terraform e il file di stato Terraform.
    3. Eliminare lo spazio di lavoro precedente senza eliminare le risorse.

Di seguito sono riportati i passi dettagliati per l'aggiornamento da 0.12 a 0.13:

  1. Controlla se gli spazi di lavoro Schematics in v0.12 dispongono di risorse, l'ultima applicazione è stata eseguita correttamente e lo spazio di lavoro è nello stato normal. Verificare che i file di configurazione Terraform e il file di stato Terraform siano in uno stato congruente per Terraform v0.12.
  2. Scarica o clona il repository Git utilizzato dal tuo spazio di lavoro Terraform v0.12 Schematics sulla tua macchina locale.
  3. Installa Terraform 0.13 sulla macchina locale.
  4. Passare alla directory del repository clonato e aggiornare i file di configurazione a Terraform v0.13 eseguendo il comando Terraform v0.13upgrade. Per ulteriori informazioni, vedi Aggiornamento alla documentazione di Terraform v0.13. Il comando upgrade genera un file versions.tf con un blocco di configurazione terraform.
  5. Modificare il file di versions.tf per impostare il parametro di origine su source = "IBM-Cloud/ibm" come mostrato nel blocco di codice.

File versions.tf

```terraform {: codeblock}
terraform {
    required_providers {
    ibm = {
      # TF-UPGRADE-TODO
      #
      # No source detected for this provider. You must add a source address
      # in the following format:
      #
      source = "IBM-Cloud/ibm"
      #
      # For more information, see the provider source documentation:
      #
    }
    }
    required_version = ">= 0.13"
}
```
  1. Scarica il file di stato Terraform dallo spazio di lavoro Schematics esistente utilizzando il comando Schematics state pull.

    Quando l'area di lavoro viene creata con l' tfstate, Schematics la considera un file sicuro. Inoltre, non puoi eseguire il pull del file tfstate creato tramite l'IU. Devi utilizzare la riga di comando per eseguire il pull del file di stato e creare lo spazio di lavoro.

    Copiare il file di stato scaricato come terraform.tfstate nella cartella di esecuzione Terraform.

  2. Esegui il comando del provider di sostituzione dello stato nella riga di comando per aggiornare la versione del provider IBM Cloud nel file di stato.

    terraform state replace-provider registry.terraform.io/-/ibm registry.terraform.io/ibm-cloud/ibm.
    
  3. Verifica che gli aggiornamenti siano stati effettuati al file terraform.tfstate con l'aggiornamento della versione Terraform da 1.3 a >= 1.4 e il provider aggiornato come registry.terraform.io/ibm-cloud/ibm.

  4. Invia i file di configurazione TF aggiornati e version.tf al tuo repository Git.

  5. Copiare il contenuto del file terraform.tfstate modificato nel file state.json.

  6. Creare o aggiornare un file workspace.json come mostrato nel blocco di codice.

    {
        "name": "gb",
        "type": [
            "terraform_v1.4"
        ],
        "description": "migration workspace",
        "template_repo": {
            "url": "Provide your Git repository link"
        },
        "workspace_status" : {
            "frozen": false
        },
        "template_data": [{
            "folder": ".",
            "type": "terraform_v1.4"
        }]
    }
    
  7. Eseguire questi comandi da riga di comando per creare un nuovo spazio di lavoro Terraform v0.13:

    • ibmcloud schematics workspace new --file workspace.json --state state.json.

    • ibmcloud schematics workspace get --id  <workspace-id>. Se lo stato dello spazio di lavoro non è inactive, attendere alcuni secondi e ritentare il comando.

    • ibmcloud schematics plan id <workspace id>.

    • ibmcloud schematics job get --id <job-id form plan>. Se lo stato del piano dello spazio di lavoro non è success, attendere alcuni secondi e ritentare il comando.

    • ibmcloud schematics apply --id <workspace id>.

    • ibmcloud schematics job get --id <job-id from apply>.

  8. [Facoltativo] puoi eliminare lo spazio di lavoro Schematics che utilizza Terraform v0.12.

    Non eliminare le risorse utilizzate dal vecchio workspace.

Aggiornare il modello Terraform da v0.13 e versioni successive a v1.0

Le versioni da 0.13 a 0.15 richiedono un aggiornamento graduale, 0.13 to 0.14, 0.14 to 0.15, 0.15 to 1.0.

Il processo è lo stesso per ogni passo di versione. È obbligatorio che Terraform Apply venga eseguito dopo ogni modifica della versione. Questo aggiorna il file di stato Terraform con le modifiche dello schema relative a quella versione e solo a tale versione. Dopo aver aggiornato correttamente una singola versione, è possibile eseguire l'aggiornamento della versione successiva.

  1. Leggi la guida all'aggiornamento di Terraform per la release e implementa tutte le modifiche di configurazione richieste.
  2. Segui il processo descritto in Aggiornamento del modello Terraform versione 1.x e successive per aggiornare una versione singola alla versione di destinazione.
  3. Verificare nella pagina delle impostazioni dello spazio di lavoro che la versione TF sia ora impostata sulla versione desiderata.
  4. Eseguire un'operazione Genera piano rispetto al workspace. Verificare che il comando venga eseguito correttamente senza errori e che non vengano registrati messaggi non previsti. Il piano non dovrebbe comportare alcuna modifica proposta delle risorse.
  5. Eseguire un'operazione Applica piano rispetto allo spazio di lavoro. Questo passaggio Š obbligatorio per eseguire un aggiornamento del file di stato Terraform. Verificare che il comando venga eseguito correttamente senza errori e che non vengano registrati messaggi non previsti.
  6. È stato aggiornato correttamente un singolo passo di versione.