Skip to content
2 changes: 2 additions & 0 deletions src/azure-cli/azure/cli/command_modules/resource/_params.py
Original file line number Diff line number Diff line change
Expand Up @@ -535,6 +535,8 @@ def load_arguments(self, _):
c.argument('skip_resource_name_params', action='store_true')
c.argument('skip_all_params', action='store_true')
c.argument('resource_ids', nargs='+', options_list='--resource-ids')
c.argument('export_format', arg_type=get_enum_type(['json', 'arm', 'bicep'], default='json'),
help="The format of the exported template.")

with self.argument_context('group create') as c:
c.argument('rg_name', options_list=['--name', '--resource-group', '-n', '-g'],
Expand Down
24 changes: 19 additions & 5 deletions src/azure-cli/azure/cli/command_modules/resource/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -1651,7 +1651,7 @@ def update_resource_group(instance, tags=None):


def export_group_as_template(
cmd, resource_group_name, include_comments=False, include_parameter_default_value=False, resource_ids=None, skip_resource_name_params=False, skip_all_params=False):
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):
"""Captures a resource group as a template.
:param str resource_group_name: the name of the resource group.
:param resource_ids: space-separated resource ids to filter the export by. To export all resources, do not specify this argument or supply "*".
Expand Down Expand Up @@ -1685,12 +1685,26 @@ def export_group_as_template(
options = ','.join(export_options) if export_options else None

ExportTemplateRequest = cmd.get_models('ExportTemplateRequest')
export_template_request = ExportTemplateRequest(resources=resources, options=options)

if export_format is None or export_format.lower() == "json" or export_format.lower() == "arm":
export_template_request = ExportTemplateRequest(resources=resources, options=options, output_format="Json")
elif export_format.lower() == "bicep":
export_template_request = ExportTemplateRequest(resources=resources, options=options, output_format="Bicep")
else:
raise InvalidArgumentValueError('az resource: error: argument --export-format: invalid ExportFormat value: \'%s\'' % export_format)

# Exporting a resource group as a template is async since API version 2019-08-01.
if cmd.supported_api_version(min_api='2019-08-01'):
result_poller = rcf.resource_groups.begin_export_template(resource_group_name,
parameters=export_template_request)
if cmd.supported_api_version(min_api='2024-11-01'):
result_poller = rcf.resource_groups.begin_export_template(resource_group_name,
parameters=export_template_request,
api_version='2024-11-01')
else:
if export_format.lower() == "bicep":
raise CLIError("Bicep export is not supported in API version < 2024-11-01")

result_poller = rcf.resource_groups.begin_export_template(resource_group_name,
parameters=export_template_request)
result = LongRunningOperation(cmd.cli_ctx)(result_poller)
else:
result = rcf.resource_groups.begin_export_template(resource_group_name,
Expand All @@ -1707,7 +1721,7 @@ def export_group_as_template(
for detail in getattr(error, 'details', None) or []:
logger.error(detail.message)

return result.template
return result.output if export_format and export_format.lower() == "bicep" else result.template


def create_application(cmd, resource_group_name,
Expand Down
Loading
Loading