Sur un Mac CI distant partagé, terraform init patine souvent à cause du cache plugins, du Registry transfrontalier et des écarts de .terraform.lock.hcl entre postes et Apple Silicon. Ce tutoriel regroupe des seuils simples, une matrice « direct / miroir », des variables copiables et des portes CI pour que la revue de code reste lisible. Article connexe sur pulls OCI : Helm OCI et Chart Registry. Pages ouvertes sans compte : accueil, liste du blog technique.

Trois tensions

  1. Cache partagé : deux init sur le même plugin_cache sans isolation.
  2. Réseau : TLS, proxy, timeouts trop courts vers le Registry.
  3. Lock : plate-forme manquante ou bump Terraform qui fait bouger le lock hors release.

Critères d’évaluation et seuils

Mesurez d’abord p95, taux d’échec init et espace disque du cache ; ajustez ensuite timeouts et parallélisme.

IndicateurSeuilAction
p95 Registry / miroir> 25 s (3 fois)TF_REGISTRY_CLIENT_TIMEOUT 45–60 s ; max 4 retries.
Disque cache< 15 % librePurge planifiée ou cache par job ; blocage si < 10 %.
Lockfilediff hors releaseÉchec CI ; providers lock sur image canonique.
Concurrence2+ init sur même cachePréfixe par CI_JOB_ID ou par dépôt.

Ajustez après deux semaines de métriques sur votre backbone.

Tableau comparatif ou matrice décisionnelle

Compromis agilité / conformité ; le Mac runner reste sensible aux IOPS et aux certificats d’entreprise.

Mode+−Mac CI
directMétadonnées fraîches.POP distant ; TLS.Egress déjà aligné sur le Registry.
network_mirrorACL, logs.Miroir à jour.Peu de domaines autorisés.
filesystem_mirrorOffline, stable.Ops ZIP.NVMe préhydraté darwin_arm64.

Combinez souvent network_mirror + filesystem_mirror sans règles include/exclude contradictoires.

Documentez pour les équipes « quel domaine est autorisé » et « qui valide une nouvelle version de provider » afin d’éviter que le miroir ne devienne une boîte noire ; une revue trimestrielle des bundles filesystem suffit souvent sur les dépôts à faible vélocité.

Commandes exécutables et liste de variables d’environnement

Modèle de script CI ; gardez les jetons dans le secret manager de GitLab, GitHub Actions ou Jenkins. Sur Mac multi-tenant, préfixez toujours le cache par identifiant de job pour limiter les collisions d’écriture pendant les phases d’extraction.

export TF_INPUT=0 export TF_IN_AUTOMATION=1 export TF_CLI_CONFIG_FILE="$PWD/.terraformrc-ci" export TF_PLUGIN_CACHE_DIR="$CI_PROJECT_DIR/.tf-plugin-cache/$CI_JOB_ID" export TF_REGISTRY_CLIENT_TIMEOUT=45 # export TF_LOG=INFO # ponctuel pour diagnostiquer mkdir -p "$TF_PLUGIN_CACHE_DIR" # Exemple minimal .terraformrc-ci (miroir + cache ; délimiteur sans quotes = expansion des variables) cat <<TFRC > "$TF_CLI_CONFIG_FILE" plugin_cache_dir = "${TF_PLUGIN_CACHE_DIR}" provider_installation { network_mirror { url = "https://tf-mirror.example.com/v1/providers/" include = ["registry.terraform.io/hashicorp/*"] } direct { exclude = ["registry.terraform.io/hashicorp/*"] } } TFRC # Init avec retries bornés (2 / 4 / 8 s) for i in 1 2 3 4; do terraform init -input=false -no-color && break sleep $(( i * 2 + (RANDOM % 3) )) done terraform validate -no-color terraform providers lock -platform=darwin_arm64 -platform=linux_amd64

Souvent utiles : TF_CLI_ARGS_init, TF_APPEND_USER_AGENT, SSL_CERT_FILE (AC interne).

Portes CI
  • fmt -check + validate après init.
  • Pas de diff lock sur feature ; init -upgrade réservé aux branches release.
  • Loguer version Terraform + hash du .terraformrc.

Mise en œuvre en six étapes (parcours opérations)

Séquence reproductible pour la revue.

  1. Figez Terraform (asdf, binaire hashé).
  2. Générez .terraformrc depuis le dépôt, pas depuis ~.
  3. TF_PLUGIN_CACHE_DIR par job sur APFS.
  4. Appliquez la matrice : miroir pour namespaces approuvés, direct contrôlé pour le reste.
  5. init avec 3–4 retries (pauses 2/4/8 s).
  6. providers lock sur l’image canonique ; diff lock bloquant hors release.

Informations retenues pour cadrage interne

  • 3–4 retries couvrent la plupart des erreurs transitoires sans saturer la file Mac.
  • 200–500 Mo libres par job réduit les extractions ZIP incomplètes.
  • init -upgrade seulement sur branches release limite le bruit du lock.

FAQ

Git LFS pour les ZIP providers ?

Peu recommandé : le dépôt grossit et les revues se polluent. Préférez un miroir fichier ou un artefact d’entreprise ; Git porte surtout .terraform.lock.hcl et un modèle .terraformrc sans secrets.

Justifier un peu de direct ?

Joignez au runbook la matrice include/exclude, une capture DNS et un curl -I automatisé depuis le runner pour prouver que seuls les hôtes listés sortent du réseau approuvé.

Mac miroir pour Linux ?

Oui pour héberger les artefacts sur NAS ou S3 interne, mais chaque plate-forme doit conserver ses ZIP distincts ; mélanger darwin_arm64 et linux_amd64 dans un seul dossier plat casse la résolution attendue par Terraform.

Synthèse

Cache par job, miroirs explicites, timeouts + retries bornés, lock figé sur image canonique. Pour louer un Mac cloud et stabiliser vos pipelines : achat, tarifs (estimation budget), aide, accueil, blog — sans compte.

Terraform · Mac CI distant

Louez un Mac cloud pour figer vos pipelines IaC

Accédez aux pages publiques accueil, aide, achat, tarifs et blog pour comparer les offres MacPull avant d’industrialiser vos terraform init.

Acheter un Mac distant Tarifs Centre d’aide
Apple Silicon
Sortie réseau maîtrisable
Support 24/7