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.