diff --git a/Commands/azure-terraform/_export-terraform.md b/Commands/azure-terraform/_export-terraform.md new file mode 100644 index 000000000..767899e7f --- /dev/null +++ b/Commands/azure-terraform/_export-terraform.md @@ -0,0 +1,26 @@ +# [Command] _azure-terraform export-terraform_ + +Exports the Terraform configuration of the specified resource(s) + +## Versions + +### [2023-07-01-preview](/Resources/mgmt-plane/L3N1YnNjcmlwdGlvbnMve30vcHJvdmlkZXJzL21pY3Jvc29mdC5henVyZXRlcnJhZm9ybS9leHBvcnR0ZXJyYWZvcm0=/2023-07-01-preview.xml) **Preview** + + + +#### examples + +- Export a resource group targeting to `azurerm` provider + ```bash + azure-terraform export-terraform --export-resource-group '{resource-group-name:my-rg}' + ``` + +- Export a list of resources targeting to `azapi` provider + ```bash + azure-terraform export-terraform --full-properties false --target-provider azapi --export-resource '{resource-ids:[id1,id2,id3]}' + ``` + +- Export all virtual networks in the current subscription, together with their child resources (e.g. subnets) targeting `azapi` provider + ```bash + azure-terraform export-terraform --full-properties false --target-provider azapi --export-query "{query:'type =~ \"microsoft.network/virtualnetworks\"',recursive:true}" + ``` diff --git a/Commands/azure-terraform/readme.md b/Commands/azure-terraform/readme.md new file mode 100644 index 000000000..74b958d03 --- /dev/null +++ b/Commands/azure-terraform/readme.md @@ -0,0 +1,8 @@ +# [Group] _azure-terraform_ + +Azure Terraform experience + +## Commands + +- [export-terraform](/Commands/azure-terraform/_export-terraform.md) +: Exports the Terraform configuration of the specified resource(s) diff --git a/Commands/readme.md b/Commands/readme.md index 4b42058be..eeb27a564 100644 --- a/Commands/readme.md +++ b/Commands/readme.md @@ -38,6 +38,9 @@ - [automation](/Commands/automation/readme.md) : Manage Automation Account. +- [azure-terraform](/Commands/azure-terraform/readme.md) +: Azure Terraform experience + - [baremetalinstance](/Commands/baremetalinstance/readme.md) : Handle Operations for Compute Azure Bare Instances. diff --git a/Commands/tree.json b/Commands/tree.json index a9f4d35b8..27641391e 100644 --- a/Commands/tree.json +++ b/Commands/tree.json @@ -11113,6 +11113,58 @@ "automation" ] }, + "azure-terraform": { + "commands": { + "export-terraform": { + "help": { + "short": "Exports the Terraform configuration of the specified resource(s)" + }, + "names": [ + "azure-terraform", + "export-terraform" + ], + "versions": [ + { + "examples": [ + { + "commands": [ + "azure-terraform export-terraform --export-resource-group '{resource-group-name:my-rg}'" + ], + "name": "Export a resource group targeting to `azurerm` provider" + }, + { + "commands": [ + "azure-terraform export-terraform --full-properties false --target-provider azapi --export-resource '{resource-ids:[id1,id2,id3]}'" + ], + "name": "Export a list of resources targeting to `azapi` provider" + }, + { + "commands": [ + "azure-terraform export-terraform --full-properties false --target-provider azapi --export-query \"{query:'type =~ \\\"microsoft.network/virtualnetworks\\\"',recursive:true}\"" + ], + "name": "Export all virtual networks in the current subscription, together with their child resources (e.g. subnets) targeting `azapi` provider" + } + ], + "name": "2023-07-01-preview", + "resources": [ + { + "id": "/subscriptions/{}/providers/microsoft.azureterraform/exportterraform", + "plane": "mgmt-plane", + "version": "2023-07-01-preview" + } + ], + "stage": "Preview" + } + ] + } + }, + "help": { + "short": "Azure Terraform experience" + }, + "names": [ + "azure-terraform" + ] + }, "baremetalinstance": { "commands": { "create": { diff --git a/Resources/mgmt-plane/L3N1YnNjcmlwdGlvbnMve30vcHJvdmlkZXJzL21pY3Jvc29mdC5henVyZXRlcnJhZm9ybS9leHBvcnR0ZXJyYWZvcm0=/2023-07-01-preview.json b/Resources/mgmt-plane/L3N1YnNjcmlwdGlvbnMve30vcHJvdmlkZXJzL21pY3Jvc29mdC5henVyZXRlcnJhZm9ybS9leHBvcnR0ZXJyYWZvcm0=/2023-07-01-preview.json new file mode 100644 index 000000000..fda3594f7 --- /dev/null +++ b/Resources/mgmt-plane/L3N1YnNjcmlwdGlvbnMve30vcHJvdmlkZXJzL21pY3Jvc29mdC5henVyZXRlcnJhZm9ybS9leHBvcnR0ZXJyYWZvcm0=/2023-07-01-preview.json @@ -0,0 +1 @@ +{"plane": "mgmt-plane", "resources": [{"id": "/subscriptions/{}/providers/microsoft.azureterraform/exportterraform", "version": "2023-07-01-preview", "swagger": "mgmt-plane/terraform/ResourceProviders/Microsoft.AzureTerraform/Paths/L3N1YnNjcmlwdGlvbnMve3N1YnNjcmlwdGlvbklkfS9wcm92aWRlcnMvTWljcm9zb2Z0LkF6dXJlVGVycmFmb3JtL2V4cG9ydFRlcnJhZm9ybQ==/V/MjAyMy0wNy0wMS1wcmV2aWV3"}], "commandGroups": [{"name": "azure-terraform", "commands": [{"name": "export-terraform", "version": "2023-07-01-preview", "resources": [{"id": "/subscriptions/{}/providers/microsoft.azureterraform/exportterraform", "version": "2023-07-01-preview", "swagger": "mgmt-plane/terraform/ResourceProviders/Microsoft.AzureTerraform/Paths/L3N1YnNjcmlwdGlvbnMve3N1YnNjcmlwdGlvbklkfS9wcm92aWRlcnMvTWljcm9zb2Z0LkF6dXJlVGVycmFmb3JtL2V4cG9ydFRlcnJhZm9ybQ==/V/MjAyMy0wNy0wMS1wcmV2aWV3"}], "argGroups": [{"name": "", "args": [{"type": "SubscriptionId", "var": "$Path.subscriptionId", "options": ["subscription"], "required": true, "idPart": "subscription"}]}, {"name": "ExportParameter", "args": [{"type": "object", "var": "$exportParameter.ExportQuery", "options": ["export-query"], "group": "ExportParameter", "help": {"short": "Export parameter for resources queried by ARG (Azure Resource Graph)."}, "args": [{"type": "string", "var": "$exportParameter.ExportQuery.namePattern", "options": ["name-pattern"], "help": {"short": "The name pattern of the Terraform resources"}, "default": {"value": "res-"}}, {"type": "string", "var": "$exportParameter.ExportQuery.query", "options": ["query"], "required": true, "help": {"short": "The ARG where predicate. Note that you can combine multiple conditions in one `where` predicate, e.g. `resourceGroup =~ \"my-rg\" and type =~ \"microsoft.network/virtualnetworks\"`"}}, {"type": "boolean", "var": "$exportParameter.ExportQuery.recursive", "options": ["recursive"], "help": {"short": "Whether to recursively list child resources of the query result"}, "default": {"value": false}}]}, {"type": "object", "var": "$exportParameter.ExportResource", "options": ["export-resource"], "group": "ExportParameter", "help": {"short": "Export parameter for individual resources."}, "args": [{"type": "string", "var": "$exportParameter.ExportResource.namePattern", "options": ["name-pattern"], "help": {"short": "The name pattern of the Terraform resources"}, "default": {"value": "res-"}}, {"type": "array", "var": "$exportParameter.ExportResource.resourceIds", "options": ["resource-ids"], "required": true, "help": {"short": "The id of the resource to be exported"}, "item": {"type": "string"}}, {"type": "string", "var": "$exportParameter.ExportResource.resourceName", "options": ["resource-name"], "help": {"short": "The Terraform resource name. Only works when `resourceIds` contains only one item."}, "default": {"value": "res-0"}}, {"type": "string", "var": "$exportParameter.ExportResource.resourceType", "options": ["resource-type"], "help": {"short": "The Terraform resource type. Only works when `resourceIds` contains only one item."}}]}, {"type": "object", "var": "$exportParameter.ExportResourceGroup", "options": ["export-resource-group"], "group": "ExportParameter", "help": {"short": "Export parameter for a resource group."}, "args": [{"type": "string", "var": "$exportParameter.ExportResourceGroup.namePattern", "options": ["name-pattern"], "help": {"short": "The name pattern of the Terraform resources"}, "default": {"value": "res-"}}, {"type": "string", "var": "$exportParameter.ExportResourceGroup.resourceGroupName", "options": ["resource-group-name"], "required": true, "help": {"short": "The name of the resource group to be exported"}}]}, {"type": "boolean", "var": "$exportParameter.fullProperties", "options": ["full-properties"], "group": "ExportParameter", "help": {"short": "Whether to output all non-computed properties in the generated Terraform configuration? This probably needs manual modifications to make it valid"}, "default": {"value": true}}, {"type": "boolean", "var": "$exportParameter.maskSensitive", "options": ["mask-sensitive"], "group": "ExportParameter", "help": {"short": "Mask sensitive attributes in the Terraform configuration"}, "default": {"value": true}}, {"type": "string", "var": "$exportParameter.targetProvider", "options": ["target-provider"], "group": "ExportParameter", "help": {"short": "The target Azure Terraform Provider"}, "default": {"value": "azurerm"}, "enum": {"items": [{"name": "azapi", "value": "azapi"}, {"name": "azurerm", "value": "azurerm"}]}}]}], "operations": [{"longRunning": {"finalStateVia": "azure-async-operation"}, "operationId": "ExportTerraform", "http": {"path": "/subscriptions/{subscriptionId}/providers/Microsoft.AzureTerraform/exportTerraform", "request": {"method": "post", "path": {"params": [{"type": "uuid", "name": "subscriptionId", "arg": "$Path.subscriptionId", "required": true}]}, "query": {"consts": [{"readOnly": true, "const": true, "default": {"value": "2023-07-01-preview"}, "type": "string", "name": "api-version", "required": true, "format": {"minLength": 1}}]}, "body": {"json": {"schema": {"type": "object", "name": "exportParameter", "required": true, "props": [{"default": {"value": true}, "type": "boolean", "name": "fullProperties", "arg": "$exportParameter.fullProperties"}, {"default": {"value": true}, "type": "boolean", "name": "maskSensitive", "arg": "$exportParameter.maskSensitive"}, {"default": {"value": "azurerm"}, "type": "string", "name": "targetProvider", "arg": "$exportParameter.targetProvider", "enum": {"items": [{"value": "azapi"}, {"value": "azurerm"}]}}, {"type": "string", "name": "type", "required": true, "enum": {"items": [{"arg": "$exportParameter.ExportQuery", "value": "ExportQuery"}, {"arg": "$exportParameter.ExportResource", "value": "ExportResource"}, {"arg": "$exportParameter.ExportResourceGroup", "value": "ExportResourceGroup"}]}}], "discriminators": [{"property": "type", "value": "ExportQuery", "props": [{"default": {"value": "res-"}, "type": "string", "name": "namePattern", "arg": "$exportParameter.ExportQuery.namePattern"}, {"type": "string", "name": "query", "arg": "$exportParameter.ExportQuery.query", "required": true}, {"default": {"value": false}, "type": "boolean", "name": "recursive", "arg": "$exportParameter.ExportQuery.recursive"}]}, {"property": "type", "value": "ExportResource", "props": [{"default": {"value": "res-"}, "type": "string", "name": "namePattern", "arg": "$exportParameter.ExportResource.namePattern"}, {"type": "array", "name": "resourceIds", "arg": "$exportParameter.ExportResource.resourceIds", "required": true, "item": {"type": "string"}}, {"default": {"value": "res-0"}, "type": "string", "name": "resourceName", "arg": "$exportParameter.ExportResource.resourceName"}, {"type": "string", "name": "resourceType", "arg": "$exportParameter.ExportResource.resourceType"}]}, {"property": "type", "value": "ExportResourceGroup", "props": [{"default": {"value": "res-"}, "type": "string", "name": "namePattern", "arg": "$exportParameter.ExportResourceGroup.namePattern"}, {"type": "string", "name": "resourceGroupName", "arg": "$exportParameter.ExportResourceGroup.resourceGroupName", "required": true}]}], "clientFlatten": true}}}}, "responses": [{"statusCode": [202], "header": {"items": [{"name": "Azure-AsyncOperation"}, {"name": "Location"}, {"name": "Retry-After"}]}}, {"statusCode": [200, 201], "body": {"json": {"var": "$Instance", "schema": {"type": "object", "props": [{"readOnly": true, "type": "dateTime", "name": "endTime"}, {"type": "object", "name": "error", "props": [{"readOnly": true, "type": "array", "name": "additionalInfo", "item": {"type": "object", "props": [{"readOnly": true, "type": "object", "name": "info", "additionalProps": {"readOnly": true, "anyType": true}}, {"readOnly": true, "type": "string", "name": "type"}]}}, {"readOnly": true, "type": "string", "name": "code"}, {"readOnly": true, "type": "array<@ErrorDetail_read>", "name": "details", "item": {"type": "@ErrorDetail_read"}, "identifiers": ["target", "message"]}, {"readOnly": true, "type": "string", "name": "message"}, {"readOnly": true, "type": "string", "name": "target"}], "cls": "ErrorDetail_read"}, {"type": "string", "name": "id"}, {"type": "string", "name": "name"}, {"type": "float64", "name": "percentComplete"}, {"type": "object", "name": "properties", "props": [{"type": "string", "name": "configuration"}, {"type": "array<@ErrorDetail_read>", "name": "errors", "item": {"type": "@ErrorDetail_read"}}, {"type": "array", "name": "skippedResources", "item": {"type": "string"}}]}, {"readOnly": true, "type": "dateTime", "name": "startTime"}, {"type": "string", "name": "status"}]}}}}, {"isError": true, "body": {"json": {"schema": {"type": "@MgmtErrorFormat"}}}}]}}], "outputs": [{"type": "object", "ref": "$Instance", "clientFlatten": true}], "confirmation": ""}]}]} \ No newline at end of file diff --git a/Resources/mgmt-plane/L3N1YnNjcmlwdGlvbnMve30vcHJvdmlkZXJzL21pY3Jvc29mdC5henVyZXRlcnJhZm9ybS9leHBvcnR0ZXJyYWZvcm0=/2023-07-01-preview.xml b/Resources/mgmt-plane/L3N1YnNjcmlwdGlvbnMve30vcHJvdmlkZXJzL21pY3Jvc29mdC5henVyZXRlcnJhZm9ybS9leHBvcnR0ZXJyYWZvcm0=/2023-07-01-preview.xml new file mode 100644 index 000000000..ca07b2cdc --- /dev/null +++ b/Resources/mgmt-plane/L3N1YnNjcmlwdGlvbnMve30vcHJvdmlkZXJzL21pY3Jvc29mdC5henVyZXRlcnJhZm9ybS9leHBvcnR0ZXJyYWZvcm0=/2023-07-01-preview.xml @@ -0,0 +1,195 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+