Add support for AVM references (#2794)
This commit is contained in:
Родитель
9bb5589bd1
Коммит
2ef64f2a0a
|
@ -71,7 +71,8 @@ Rule documentation requires the following annotations for use with PSRule for Az
|
||||||
|
|
||||||
Available severities are:
|
Available severities are:
|
||||||
- `Critical` - A 'must have' if the solution is to be considered 'fit for purpose', secure, well governed and managed inline with the Microsoft Azure [Well-Architected Framework](https://learn.microsoft.com/azure/well-architected/).
|
- `Critical` - A 'must have' if the solution is to be considered 'fit for purpose', secure, well governed and managed inline with the Microsoft Azure [Well-Architected Framework](https://learn.microsoft.com/azure/well-architected/).
|
||||||
- `Important` - A 'to be considered' within the context of the solution and domain. In some cases, can introduce cost or complexity that should be considered as a trade off and explicity documented as a [Key Design Decision](https://learn.microsoft.com/azure/cloud-adoption-framework/decision-guides/).
|
- `Important` - A 'to be considered' within the context of the solution and domain.
|
||||||
|
In some cases, can introduce cost or complexity that should be considered as a trade off and explicitly documented as a [Key Design Decision](https://learn.microsoft.com/azure/cloud-adoption-framework/decision-guides/).
|
||||||
- `Awareness` - A 'good to have' feature, normally reserved for solutions with the highest [non-functional requirements](https://learn.microsoft.com/azure/well-architected/reliability/checklist).
|
- `Awareness` - A 'good to have' feature, normally reserved for solutions with the highest [non-functional requirements](https://learn.microsoft.com/azure/well-architected/reliability/checklist).
|
||||||
|
|
||||||
- `pillar` - A Azure Well-Architected Framework pillar.
|
- `pillar` - A Azure Well-Architected Framework pillar.
|
||||||
|
@ -83,16 +84,21 @@ Rule documentation requires the following annotations for use with PSRule for Az
|
||||||
|
|
||||||
When authoring and improving rule documentation, please follow these guidelines:
|
When authoring and improving rule documentation, please follow these guidelines:
|
||||||
|
|
||||||
- Provide documentation links to the Azure service and Well-Architected Framework pillar.
|
- **Reference the WAF** — by the pillar recommendation.
|
||||||
|
For example if the rule relates to redundancy in the Reliability pillar you could reference [RE:05 Redundancy](https://learn.microsoft.com/azure/well-architected/reliability/redundancy).
|
||||||
|
- **Add relevant links** — to the Azure service documentation.
|
||||||
Examples of good documentation links include:
|
Examples of good documentation links include:
|
||||||
- Best practices for the Azure service.
|
- Best practices for the Azure service.
|
||||||
- Instructions on how to configure the Azure service.
|
- Instructions on how to configure the Azure service.
|
||||||
- [Azure deployment reference](https://learn.microsoft.com/azure/templates/).
|
- [Azure deployment reference](https://learn.microsoft.com/azure/templates/).
|
||||||
- For links to _https://learn.microsoft.com/_ remove culture from path to make it more generic.
|
- **Remove culture** — from links to _https://learn.microsoft.com/_ to make it more generic.
|
||||||
|
This will allow the link to redirect to a language based on the user's settings.
|
||||||
For example _https://learn.microsoft.com/azure/aks/concepts-scale_ instead of _https://learn.microsoft.com/en-us/azure/aks/concepts-scale_.
|
For example _https://learn.microsoft.com/azure/aks/concepts-scale_ instead of _https://learn.microsoft.com/en-us/azure/aks/concepts-scale_.
|
||||||
- Add examples of a Azure resource that would pass the rule.
|
- **Add examples** — of a Azure resource that would pass the rule.
|
||||||
At a minimum where applicable provide an example of a Azure template resource.
|
For rules that apply to pre-flight checks provide an example in Azure Bicep _and_ Azure template format.
|
||||||
Also consider including example Bicep code.
|
- Additionally if a pre-built Azure Verified Module is available, reference after the Bicep example using a short-code.
|
||||||
|
The short-code format is `<!-- external:avm <module_path> <params> -->`.
|
||||||
|
For more information see the [example](https://github.com/Azure/PSRule.Rules.Azure/blob/9bb5589bd1ddb01197866d5199f3954cf6f9206b/docs/en/rules/Azure.ContainerApp.MinReplicas.md?plain=1#L113).
|
||||||
|
|
||||||
[4]: https://microsoft.github.io/PSRule/latest/authoring/writing-rule-help/#writing-markdown-documentation
|
[4]: https://microsoft.github.io/PSRule/latest/authoring/writing-rule-help/#writing-markdown-documentation
|
||||||
|
|
||||||
|
|
|
@ -76,6 +76,8 @@ resource eventGrid 'Microsoft.EventGrid/topics@2022-06-15' = {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<!-- external:avm avm/res/event-grid/topic disableLocalAuth -->
|
||||||
|
|
||||||
### Configure with Azure Policy
|
### Configure with Azure Policy
|
||||||
|
|
||||||
To address this issue at runtime use the following policies:
|
To address this issue at runtime use the following policies:
|
||||||
|
|
|
@ -75,6 +75,8 @@ resource eventGrid 'Microsoft.EventGrid/topics@2022-06-15' = {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<!-- external:avm avm/res/event-grid/topic managedIdentities -->
|
||||||
|
|
||||||
## LINKS
|
## LINKS
|
||||||
|
|
||||||
- [SE:05 Identity and access management](https://learn.microsoft.com/azure/well-architected/security/identity-access)
|
- [SE:05 Identity and access management](https://learn.microsoft.com/azure/well-architected/security/identity-access)
|
||||||
|
|
|
@ -73,6 +73,8 @@ resource eventGrid 'Microsoft.EventGrid/topics@2022-06-15' = {
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<!-- external:avm avm/res/event-grid/topic publicNetworkAccess -->
|
||||||
|
|
||||||
## LINKS
|
## LINKS
|
||||||
|
|
||||||
- [SE:06 Network controls](https://learn.microsoft.com/azure/well-architected/security/networking)
|
- [SE:06 Network controls](https://learn.microsoft.com/azure/well-architected/security/networking)
|
||||||
|
|
|
@ -49,6 +49,24 @@ def module(markdown: str, page: Page, config: MkDocsConfig, files: Files) -> str
|
||||||
replace, markdown, flags = re.I | re.M
|
replace, markdown, flags = re.I | re.M
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def external(markdown: str, page: Page, config: MkDocsConfig, files: Files) -> str:
|
||||||
|
'''Replace external shortcodes in markdown.'''
|
||||||
|
|
||||||
|
# Callback for regular expression replacement.
|
||||||
|
def replace(match: re.Match) -> str:
|
||||||
|
type, args = match.groups()
|
||||||
|
args = args.strip()
|
||||||
|
if type == "avm":
|
||||||
|
return _external_reference_avm(args)
|
||||||
|
|
||||||
|
raise RuntimeError(f"Unknown shortcode external:{type}")
|
||||||
|
|
||||||
|
# Replace external shortcodes.
|
||||||
|
return re.sub(
|
||||||
|
r"<!-- external:(\w+)(.*?) -->",
|
||||||
|
replace, markdown, flags = re.I | re.M
|
||||||
|
)
|
||||||
|
|
||||||
def _relative_uri(path: str, page: Page, files: Files) -> str:
|
def _relative_uri(path: str, page: Page, files: Files) -> str:
|
||||||
'''Get relative URI for a file including anchor.'''
|
'''Get relative URI for a file including anchor.'''
|
||||||
|
|
||||||
|
@ -120,3 +138,20 @@ def _badge_for_configuration(text: str, page: Page, files: Files) -> str:
|
||||||
icon = f"[:{icon}:]({href} 'Applies to configuration setting')",
|
icon = f"[:{icon}:]({href} 'Applies to configuration setting')",
|
||||||
text = f"[{text}]({href})"
|
text = f"[{text}]({href})"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def _reference_block(style: str, title: str, text: str = "") -> str:
|
||||||
|
'''Add an external reference block.'''
|
||||||
|
|
||||||
|
lines = text.replace('\r\n', '\n').replace('\r', '\n').replace('\n', '\n ').strip()
|
||||||
|
return f"!!! {style} \"{title}\"\n {lines}"
|
||||||
|
|
||||||
|
def _external_reference_avm(text: str) -> str:
|
||||||
|
'''Create a reference to AVM.'''
|
||||||
|
|
||||||
|
avm_path = text.split(' ')[0]
|
||||||
|
|
||||||
|
return _reference_block(
|
||||||
|
style = "Example",
|
||||||
|
title = f"Configure with [Azure Verified Modules](https://github.com/Azure/bicep-registry-modules/tree/main/{avm_path})",
|
||||||
|
text = f"A pre-built module is avilable on the Azure Bicep public registry.\nTo reference the module, please use the following syntax: `br/public:{avm_path}:<version>`"
|
||||||
|
)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче