Skip to content

Commit a7e596e

Browse files
authored
[ARM] az group export: Add --export-format to specify the format of the exported template (#31667)
1 parent 9de7b98 commit a7e596e

File tree

4 files changed

+494
-5
lines changed

4 files changed

+494
-5
lines changed

src/azure-cli/azure/cli/command_modules/resource/_params.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,8 @@ def load_arguments(self, _):
535535
c.argument('skip_resource_name_params', action='store_true')
536536
c.argument('skip_all_params', action='store_true')
537537
c.argument('resource_ids', nargs='+', options_list='--resource-ids')
538+
c.argument('export_format', arg_type=get_enum_type(['json', 'arm', 'bicep'], default='json'),
539+
help="The format of the exported template.")
538540

539541
with self.argument_context('group create') as c:
540542
c.argument('rg_name', options_list=['--name', '--resource-group', '-n', '-g'],

src/azure-cli/azure/cli/command_modules/resource/custom.py

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1651,7 +1651,7 @@ def update_resource_group(instance, tags=None):
16511651

16521652

16531653
def export_group_as_template(
1654-
cmd, resource_group_name, include_comments=False, include_parameter_default_value=False, resource_ids=None, skip_resource_name_params=False, skip_all_params=False):
1654+
cmd, resource_group_name, include_comments=False, include_parameter_default_value=False, resource_ids=None, skip_resource_name_params=False, skip_all_params=False, export_format=None):
16551655
"""Captures a resource group as a template.
16561656
:param str resource_group_name: the name of the resource group.
16571657
:param resource_ids: space-separated resource ids to filter the export by. To export all resources, do not specify this argument or supply "*".
@@ -1685,12 +1685,26 @@ def export_group_as_template(
16851685
options = ','.join(export_options) if export_options else None
16861686

16871687
ExportTemplateRequest = cmd.get_models('ExportTemplateRequest')
1688-
export_template_request = ExportTemplateRequest(resources=resources, options=options)
1688+
1689+
if export_format is None or export_format.lower() == "json" or export_format.lower() == "arm":
1690+
export_template_request = ExportTemplateRequest(resources=resources, options=options, output_format="Json")
1691+
elif export_format.lower() == "bicep":
1692+
export_template_request = ExportTemplateRequest(resources=resources, options=options, output_format="Bicep")
1693+
else:
1694+
raise InvalidArgumentValueError('az resource: error: argument --export-format: invalid ExportFormat value: \'%s\'' % export_format)
16891695

16901696
# Exporting a resource group as a template is async since API version 2019-08-01.
16911697
if cmd.supported_api_version(min_api='2019-08-01'):
1692-
result_poller = rcf.resource_groups.begin_export_template(resource_group_name,
1693-
parameters=export_template_request)
1698+
if cmd.supported_api_version(min_api='2024-11-01'):
1699+
result_poller = rcf.resource_groups.begin_export_template(resource_group_name,
1700+
parameters=export_template_request,
1701+
api_version='2024-11-01')
1702+
else:
1703+
if export_format.lower() == "bicep":
1704+
raise CLIError("Bicep export is not supported in API version < 2024-11-01")
1705+
1706+
result_poller = rcf.resource_groups.begin_export_template(resource_group_name,
1707+
parameters=export_template_request)
16941708
result = LongRunningOperation(cmd.cli_ctx)(result_poller)
16951709
else:
16961710
result = rcf.resource_groups.begin_export_template(resource_group_name,
@@ -1707,7 +1721,7 @@ def export_group_as_template(
17071721
for detail in getattr(error, 'details', None) or []:
17081722
logger.error(detail.message)
17091723

1710-
return result.template
1724+
return result.output if export_format and export_format.lower() == "bicep" else result.template
17111725

17121726

17131727
def create_application(cmd, resource_group_name,

0 commit comments

Comments
 (0)