in src/TemplateRefGenerator/Generators/MarkdownGenerator.cs [505:604]
private static string GetTerraformZone(ConfigLoader configLoader, ResourceMetadata resource, ImmutableArray<NamedType> namedTypes, RemarksFile remarks, int anchorIndex)
{
var sb = new StringBuilder();
sb.Append($"""
::: zone pivot="deployment-language-terraform"
## Terraform (AzAPI provider) resource definition
The {resource.UnqualifiedResourceType} resource type can be deployed with operations that target:
""");
if (resource.Type.ScopeType.HasFlag(ScopeType.Tenant))
{
sb.Append($"""
* **Tenant**
""");
}
if (resource.Type.ScopeType.HasFlag(ScopeType.ManagementGroup))
{
sb.Append($"""
* **Management groups**
""");
}
if (resource.Type.ScopeType.HasFlag(ScopeType.Subscription))
{
sb.Append($"""
* **Subscription**
""");
}
if (resource.Type.ScopeType.HasFlag(ScopeType.ResourceGroup))
{
sb.Append($"""
* **Resource groups**
""");
}
var samples = CodeSampleGenerator.GetExample(resource, namedTypes, CodeSampleGenerator.Flavor.Terraform);
sb.Append($"""
For a list of changed properties in each API version, see [change log](~/{resource.Provider.ToLowerInvariant()}/change-log/{resource.UnqualifiedResourceType.ToLowerInvariant()}.md).
## Resource format
To create a {resource.ResourceType} resource, add the following Terraform to your template.
```terraform
{samples.MainSample}
```
""");
sb.Append(GetDeploymentRemarks(resource, remarks, DeploymentType.Terraform));
foreach (var (discObjectType, discSamples) in samples.DiscrimatedSamples)
{
sb.Append($"""
### {discObjectType.Name} objects
Set the **{discObjectType.Discriminator}** property to specify the type of object.
""");
foreach (var discSample in discSamples)
{
sb.Append($"""
For **{discSample.DiscriminatorValue}**, use:
```terraform
{discSample.Sample}
```
""");
}
}
sb.Append(GenerateOptionalSection("Property Values", [
GetPropertyValues(resource, DeploymentType.Terraform, namedTypes, remarks, anchorIndex),
]));
sb.Append(GenerateOptionalSection("Usage Examples", [
GetAvmSection(configLoader.GetSamples(), AvmLinkType.Terraform, resource),
]));
sb.Append($"""
::: zone-end
""");
return sb.ToString();
}