diff --git a/src/Resources/ResourceManager/Entities/ResourceGroup/ExportTemplateParameters.cs b/src/Resources/ResourceManager/Entities/ResourceGroup/ExportTemplateParameters.cs
index 10de0a2ab114..644d109684e3 100644
--- a/src/Resources/ResourceManager/Entities/ResourceGroup/ExportTemplateParameters.cs
+++ b/src/Resources/ResourceManager/Entities/ResourceGroup/ExportTemplateParameters.cs
@@ -32,5 +32,10 @@ public class ExportTemplateParameters
///
[JsonProperty(Required = Required.Always)]
public string[] Resources { get; set; }
+
+ ///
+ /// Gets or sets the output format.
+ ///
+ public string OutputFormat { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Resources/ResourceManager/Implementation/ResourceGroups/ExportAzureResourceGroupCmdlet.cs b/src/Resources/ResourceManager/Implementation/ResourceGroups/ExportAzureResourceGroupCmdlet.cs
index 10ebfc6b8a02..61e3b39c9aaf 100644
--- a/src/Resources/ResourceManager/Implementation/ResourceGroups/ExportAzureResourceGroupCmdlet.cs
+++ b/src/Resources/ResourceManager/Implementation/ResourceGroups/ExportAzureResourceGroupCmdlet.cs
@@ -96,6 +96,13 @@ public class ExportAzureResourceGroupCmdlet : ResourceManagerCmdletBaseWithApiVe
[ValidateNotNullOrEmpty]
public override string ApiVersion { get; set; }
+ ///
+ /// Gets or sets the output format.
+ ///
+ [Parameter(Mandatory = false, HelpMessage = "The output format of the template. Allowed values are 'Json', 'Bicep'.")]
+ [ValidateSet(ExportTemplateOutputFormat.Json, ExportTemplateOutputFormat.Bicep, IgnoreCase = true)]
+ public string OutputFormat { get; set; } = ExportTemplateOutputFormat.Json;
+
///
/// Executes the cmdlet.
///
@@ -106,7 +113,6 @@ protected override void OnProcessRecord()
if (ShouldProcess(ResourceGroupName, VerbsData.Export))
{
-
var resourceGroupId = this.GetResourceGroupId();
if (! this.IsParameterBound(c => c.ApiVersion))
@@ -115,6 +121,7 @@ protected override void OnProcessRecord()
{
Resources = this.GetResourcesFilter(resourceGroupId: resourceGroupId),
Options = this.GetExportOptions(),
+ OutputFormat = this.OutputFormat
};
var exportedTemplate = NewResourceManagerSdkClient.ExportResourceGroup(ResourceGroupName, parameters);
@@ -139,6 +146,7 @@ protected override void OnProcessRecord()
{
Resources = this.GetResourcesFilter(resourceGroupId: resourceGroupId),
Options = this.GetExportOptions(),
+ OutputFormat = this.OutputFormat
};
var apiVersion = this.ApiVersion;
var operationResult = this.GetResourcesClient()
diff --git a/src/Resources/Resources.Test/ScenarioTests/ResourceGroupTests.cs b/src/Resources/Resources.Test/ScenarioTests/ResourceGroupTests.cs
index f26bfa135603..32a8ead83cb1 100644
--- a/src/Resources/Resources.Test/ScenarioTests/ResourceGroupTests.cs
+++ b/src/Resources/Resources.Test/ScenarioTests/ResourceGroupTests.cs
@@ -81,6 +81,13 @@ public void TestExportResourceGroup()
TestRunner.RunTestScript("Test-ExportResourceGroup");
}
+ [Fact]
+ [Trait(Category.AcceptanceType, Category.CheckIn)]
+ public void TestExportResourceGroupBicep()
+ {
+ TestRunner.RunTestScript("Test-ExportResourceGroupBicep");
+ }
+
[Fact]
[Trait(Category.AcceptanceType, Category.CheckIn)]
public void TestExportResourceGroupAsyncRoute()
diff --git a/src/Resources/Resources.Test/ScenarioTests/ResourceGroupTests.ps1 b/src/Resources/Resources.Test/ScenarioTests/ResourceGroupTests.ps1
index 7a4ccc8abf23..bbb00d399f21 100644
--- a/src/Resources/Resources.Test/ScenarioTests/ResourceGroupTests.ps1
+++ b/src/Resources/Resources.Test/ScenarioTests/ResourceGroupTests.ps1
@@ -392,6 +392,38 @@ function Test-ExportResourceGroup
}
}
+<#
+.SYNOPSIS
+Tests export resource group template file as bicep.
+#>
+function Test-ExportResourceGroupBicep
+{
+ # Setup
+ $rgname = Get-ResourceGroupName
+ $rname = Get-ResourceName
+ $rglocation = Get-Location "Microsoft.Resources" "resourceGroups" "West US"
+ $apiversion = "2014-04-01"
+ $resourceType = "Providers.Test/statefulResources"
+
+ try {
+ # Test
+ New-AzResourceGroup -Name $rgname -Location $rglocation
+
+ $r = New-AzResource -Name $rname -Location "centralus" -Tags @{ testtag = "testval" } -ResourceGroupName $rgname -ResourceType $resourceType -SkuObject @{ Name = "A0" } -ApiVersion $apiversion -Force
+ Assert-AreEqual $r.ResourceGroupName $rgname
+
+ $exportOutput = Export-AzResourceGroup -ResourceGroupName $rgname -OutputFormat Bicep -Force
+ Assert-NotNull $exportOutput
+ Assert-True { $exportOutput.Path.Contains($rgname + ".bicep") }
+ }
+ finally {
+ # Cleanup
+ Clean-ResourceGroup $rgname
+ }
+ }
+}
+
+
<#
.SYNOPSIS
Tests async export to export resource group template file.