Linee guida per gli stack
Oracle consiglia di adottare le best practice generali su Terraform per creare il modello Terraform. Tuttavia, ci sono specifici standard dello stack del Marketplace da seguire per pubblicare uno stack.
Linee guida obbligatorie
Di seguito sono riportate le linee guida obbligatorie per gli stack elencati in Oracle Cloud Infrastructure Marketplace. Ogni linea guida deve essere seguita. Prima di essere pubblicato, ogni artifact dello stack viene convalidato in base a ciascuna di queste linee guida.
- L'artifact dello stack deve essere un file zip che include uno o più file di configurazione Terraform e un file di schema.
- Il file ZIP deve includere almeno un file di configurazione
(.tf)
nella cartella radice. - Il file ZIP deve includere il file di schema
(.yaml)
nella cartella radice. - Il file zip non deve includere un file di stato Terraform nel file zip. I file di stato vengono gestiti da Oracle Resource Manager (ORM). Quando i clienti avviano uno stack, ORM crea e gestisce le risorse e il file di stato diventa disponibile solo per il download.
- Il file ZIP non deve includere la cartella di configurazione runtime Terraform
(.terraform).
- Il file ZIP deve includere almeno un file di configurazione
- La configurazione Terraform deve utilizzare solo immagini dell'istanza approvate o pubblicate (pubbliche o private) del Marketplace. Deve avere un abbonamento al Marketplace a ciascuna di queste immagini. Deve avere riferimenti non modificabili a queste immagini del Marketplace. Per ulteriori dettagli, vedere Configurazione di esempio di Terraform per una sottoscrizione e un utilizzo di immagini del Marketplace.
- I file binari non devono essere scaricati da repository esterni. Tutti i file binari e le dipendenze devono essere inseriti nell'immagine del Marketplace pubblicata.
- Il provisioninger dell'esecutore remoto Terraform deve essere eseguito solo all'interno del dominio Oracle Cloud Infrastructure. Non deve scaricare file su un server remoto.
- Il codice o i file binari di terze parti non devono essere scaricati utilizzando
cloud-init.
cloud-init
è una utility di configurazione di avvio comunemente utilizzata per le istanze di computazione cloud. Accetta la configurazione tramite i meccanismi dati utente specificati come parte della definizione dei metadati nella risorsaoci_core_instance
.- Esistono più formati di dati utente supportati da
cloud-init.
Vedere https://cloudinit.readthedocs.io/en/latest/topics/format.html. - Indipendentemente dal formato utente-dati,
cloud-init
NON DEVE essere utilizzato per il download di qualsiasi codice di terze parti o binario. Tutti i file binari richiesti durante il processo di avvio dell'istanza (bootstrap), se non disponibili nell'immagine, devono essere scaricati da un processo (script) fornito come parte della distribuzione dell'immagine, non iniettato tramitecloud-init
(ad esempio, utilizzandowget).
- È tuttavia possibile che sia stato impostato un modello
cloud-init
per consentire ai clienti di utilizzarlo in alcuni scenari particolari, ad esempio per importare un file chiave di licenza o un file di configurazione. In tal caso, è necessario fornire una variabile nel codice del modello Terraform per consentire ai clienti di immettere alcuni dati nel blocco di creazionecloud-init
, ad esempio utilizzando l'origine datitemplate_file
di Terraform.
- Il provider Terraform deve essere Oracle Cloud Infrastructure. Non sono supportati altri provider cloud o fornitori di applicazioni di terze parti.
- Se si utilizza un modulo Terraform, è necessario caricarlo dai percorsi relativi locali. Impossibile caricarlo da un repository remoto.
- La configurazione Terraform deve utilizzare l'autenticazione del principal dell'istanza.
-
È necessario specificare le versioni Terraform minime e massime supportate su cui è stato eseguito il test dello stack.
- Specificare la versione Terraform minima richiesta nel formato:
~> <major_version>.<minor_version>.<patch_version>
.Dove,
patch_version
è sempre impostato su 0. Quando viene avviato uno stack, Resource Manager controlla il file<major_version>.<minor_version>
definito nel codice e utilizza la versione di patch più recente disponibile. Per questo motivo è necessario utilizzare il segno~>
anziché il segno=>
durante la specifica della versione Terraform minima richiesta.Ad esempio,
~> 0.14.0
indica che le versioni Terraform supportate sono 0.14.0 o successive. - Specificare la versione Terraform massima necessaria nel formato:
< <major_version>.<minor_version>
.Ad esempio,
< 0.15
indica che le versioni Terraform supportate sono precedenti alla 0.15.
L'esempio riportato di seguito mostra come specificare le versioni Terraform supportate minime e massime quando lo stack è stato sottoposto a test solo su Terraform 0.14.
terraform { required_version = "~> 0.14.0, < 0.15" }
- Specificare la versione Terraform minima richiesta nel formato:
Per ulteriori informazioni su Terraform, inclusi il provider Oracle Cloud Infrastructure, l'autenticazione del principal dell'istanza e il provisioninger dell'esecutore remoto, consulta la documentazione di Terraform per Configurazione provider. Per informazioni sulle versioni supportate di Terraform, vedere la Guida introduttiva al provider Terraform nella documentazione di Oracle Cloud Infrastructure.
Linee guida di codifica per le configurazioni Terraform
Le seguenti linee guida sono consigliate per gli stack elencati in Oracle Cloud Infrastructure Marketplace. Ogni linea guida è considerata una buona pratica che dovrebbe essere seguita, se possibile.
- L'artifact stack deve consentire ai clienti di creare tutte le risorse dell'infrastruttura o di puntare a quelle esistenti (rete, storage e così via).
- Le convenzioni di denominazione e la formattazione devono essere seguite:
- Involucro: utilizzare
lower_snake_case
per tutti i nomi. Ciò vale per nomi di variabili, nomi di risorse, nomi di moduli, nomi di file, nomi visualizzati e così via. - Specifica del tipo di risorsa: non includere nel nome la risorsa o il tipo di origine dati. In Terraform, alle risorse e alle origini dati viene sempre fatto riferimento da
<type>.<name>.
Pertanto, non è necessario includere il tipo nel nome stesso. - ID rispetto a OCID: in Oracle Cloud Infrastructure,
id
in genere si riferisce a un campo che accetta un OCID. Pertanto, le variabili devono utilizzareid
quando si fa riferimento ai valori OCID, anziché utilizzareocid
. - Nomi variabili: i nomi delle variabili per le risorse Oracle Cloud Infrastructure in genere devono utilizzare lo stesso nome utilizzato per la risorsa Terraform.
- Nomi visualizzati: i nomi visualizzati per le risorse Oracle Cloud Infrastructure in genere devono utilizzare lo stesso nome utilizzato per la risorsa Terraform.
- Variabili e output del modulo di denominazione: quando si utilizza un modulo, la denominazione dell'input (variabili) e degli output deve essere esposta al chiamante.
terraform fmt
deve essere applicato a tutti i Terraform prima di eseguirne il check-in.
- Involucro: utilizzare