Ga naar inhoud

Repositorystructuur van de templatebibliotheek

De bibliotheek is één repository (een monorepo) voor alle modules en beide technologieën. De structuur is bewust voorspelbaar: de automatisering (tests, documentatie, versiebeheer) vindt alles op zijn plek. De beslissing staat in Samenvattingen van beslissingen.

Indeling

managed-templates/
├── README.md              Overview and the generated template index (a table of all modules)
├── .terraform-docs.yml    Configuration of the documentation generator for Terraform
├── dependencies/          Shared resources for the tests (virtual network, Log Analytics workspace, Key Vault, ...)
├── docs/                  Manual documentation: user guide, ambassador guide, pull request template
├── examples/              Examples of how to call each module. Also used for the integration tests.
│   ├── bicep/
│   │   └── <module>/main.bicep
│   └── terraform/
│       └── <module>/main.tf
├── iac_accelerator/       The example project for consumers (Terraform and Bicep)
├── modules/               The code of the shared modules
│   ├── bicep/
│   │   └── <module>/
│   └── terraform/
│       └── <module>/
├── pipelines/             Pipeline definitions
│   └── templates/
├── scripts/               PowerShell scripts for documentation, releases and publishing
│   └── helper/
├── tests/                 Definitions of the test process
│   ├── bicep/
│   ├── terraform/
│   └── Get-PolicyResult.ps1
├── utils/bicep/types/     Shared Bicep type definitions
└── .github/, .devcontainer/, .vscode/    Repository automation and the developer environment
Map Bevat Opmerkingen
modules/<technology>/<module> De modulecode, de version.json, de changelog en de gegenereerde documentatie Eén map per module. De versie en de documentatie van de module staan naast de code. Zie In een modulemap.
examples/<technology>/<module> Een aanroep van de module met realistische waarden De integratietest deployt het voorbeeld. Houd het minimaal en werkend.
tests/<technology> De tests (Terratest voor Terraform, Pester voor Bicep) Zie Testen. Het script Get-PolicyResult.ps1 wordt door beide gedeeld.
dependencies/ Terraform-code voor de gedeelde resources die veel modules nodig hebben Door de pipeline aangemaakt als ze nog niet bestaan, en door alle tests hergebruikt. Het storage account voor de state is de uitzondering: een klein Bicep-template maakt het aan. Zie Gedeelde resources tijdens tests.
pipelines/ De pipelines voor testen, documentatie, release en handmatige deployment Zie Pipelines en scripts.
scripts/ Scripts die documentatie en de template-index genereren, versies berekenen, tags maken en Bicep-modules publiceren Zie Pipelines en scripts.
iac_accelerator/ Een end-to-end voorbeeldproject met pipelines en Renovate-configuratie Voor afnemers. Zie IaC Accelerator. Het heeft een eigen Renovate-configuratie in .github/.
docs/ Handmatig geschreven documentatie: de gebruikersgids, de ambassadorgids en het pull request-sjabloon De referentiedocumentatie van modules wordt gegenereerd en niet met de hand geschreven.
utils/bicep/types Typedefinities die meerdere Bicep-modules importeren
.devcontainer/ Een development container met Terraform, terraform-docs, Azure CLI met Bicep, PowerShell, Go en Git Geeft bijdragers dezelfde tools.

De structuur kan groeien. Een wijziging ervan is een beslissing: leg die vast (Samenvattingen van beslissingen).

In een modulemap

Een modulemap bevat alles wat bij de module hoort. De gegenereerde bestanden zijn gemarkeerd.

Bestand of map Terraform Bicep
Code main.tf, variables*.tf, outputs.tf (of output.tf), locals.tf, terraform.tf main.bicep, en child templates in submappen voor hulpfuncties
Gecompileerd template - main.json (gegenereerd uit main.bicep)
Versie en releasefilter version.json version.json
Changelog CHANGELOG.md CHANGELOG.md
Documentatie _header.md (met de hand geschreven inleiding en notities), README.md (gegenereerd) README.md (gegenereerd)
Voorbeeld voor de documentatie docs_examples/defaults/main.example.tf docs_examples/defaults/main.example.bicep
Upgrade notes upgrade/notes-v<major>.md, als een major versie stappen van jou vraagt Hetzelfde

De _header.md is de plek voor notities die niet worden gegenereerd: functies, beperkingen en policynotities (Bekende bevindingen). Pas de gegenereerde README niet met de hand aan.

Waarom deze structuur

  • De code is verdeeld naar functionaliteit, technologie en module. Een module, zijn voorbeeld, zijn tests en zijn versie zijn vanuit elkaar makkelijk te vinden.
  • Ze volgt de mapconventie van het Azure Verified Modules-project, met een kleine toevoeging: een niveau voor de technologie (Bicep en Terraform), zodat meerdere technologieën en veel modules in één repository passen.
  • Ze houdt wijzigingen in een vroeg stadium goedkoop: de structuur is eenvoudig genoeg om te veranderen.

Naamgeving

  • De modulemap heeft dezelfde naam in modules, examples en tests van dezelfde technologie (bijvoorbeeld storage_account), met twee spellingen in de tests: het Terraform-testbestand is <module>_test.go (met windows en linux ingekort tot win en lin), en het Bicep-testbestand is de modulenaam in camel case met het achtervoegsel .Tests.ps1.
  • Een nieuwe module heeft een map nodig op alle drie de plekken: de module, zijn voorbeeld en zijn tests (Modules maken en bijdragen).