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,examplesentestsvan dezelfde technologie (bijvoorbeeldstorage_account), met twee spellingen in de tests: het Terraform-testbestand is<module>_test.go(metwindowsenlinuxingekort totwinenlin), 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).