I have a resource group that contains separately created DevTest lab and Virtual Network (VNet) using Bicep.
I can manually by using the Azure portal attach the VNet to the Devtest lab by:
Is it possible to automate this process using Azure CLI? or any other alternative?
As I am adopting Azure DevOps pipelines to run (Bicep code) and adjust (Azure CLI) the resources automatically.
I am using ARM/Bicep template (Microsoft.Network/virtualNetworks@2021-02-01
) for VNET, and (Microsoft.DevTestLab/labs@2018-09-15
) for DevTest lab
If you are creating Vnet and Devtest lab separately then you can use the below Azure Quickstart Template from Github for creating a Devtestlab with existing vnet :
JSON ARM:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"newLabName": {
"type": "string",
"metadata": {
"description": "The name of the new lab instance to be created."
}
},
"newLabVirtualNetworkName": {
"type": "string",
"metadata": {
"description": "The name of the new lab virtual network instance to be created with the new lab instance being created."
}
},
"existingVirtualNetworkId": {
"type": "string",
"metadata": {
"description": "The resource ID pointing to an existing (compute) virtual network to be referenced by the new lab virtual network instance being created."
}
},
"existingSubnetName": {
"type": "string",
"defaultValue": "default",
"metadata": {
"description": "The name of an existing (compute) subnet instance to be configured for Lab VM creation."
}
}
},
"variables": {
"existingSubnetId": "[concat(parameters('existingVirtualNetworkId'), '/subnets/', parameters('existingSubnetName'))]"
},
"resources": [
{
"apiVersion": "2018-10-15-preview",
"type": "Microsoft.DevTestLab/labs",
"name": "[parameters('newLabName')]",
"location": "[resourceGroup().location]",
"resources": [
{
"apiVersion": "2018-10-15-preview",
"name": "[parameters('newLabVirtualNetworkName')]",
"type": "virtualNetworks",
"dependsOn": [
"[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]"
],
"properties": {
"description": "Existing Compute virtual network associated as part of the lab creation process.",
"externalProviderResourceId": "[parameters('existingVirtualNetworkId')]",
"subnetOverrides": [
{
"name": "[parameters('existingSubnetName')]",
"resourceId": "[variables('existingSubnetId')]",
"useInVmCreationPermission": "Allow",
"usePublicIpAddressPermission": "Allow"
}
]
}
}
]
}
],
"outputs": {
"labId": {
"type": "string",
"value": "[resourceId('Microsoft.DevTestLab/labs', parameters('newLabName'))]"
}
}
}
Outputs: I tested it on my environment and the results are as below:
Note: Unfortuantely, there are no commands to connect vnet and Devtestlabs using Azure CLI or Azure-Powershell.
BICEP ARM:
@description('The name of the new lab instance to be created.')
param newLabName string
@description('The name of the new lab virtual network instance to be created with the new lab instance being created.')
param newLabVirtualNetworkName string
@description('The resource ID pointing to an existing (compute) virtual network to be referenced by the new lab virtual network instance being created.')
param existingVirtualNetworkId string
@description('The name of an existing (compute) subnet instance to be configured for Lab VM creation.')
param existingSubnetName string = 'default'
var existingSubnetId = '${existingVirtualNetworkId}/subnets/${existingSubnetName}'
resource newLabName_resource 'Microsoft.DevTestLab/labs@2018-10-15-preview' = {
name: newLabName
location: resourceGroup().location
}
resource newLabName_newLabVirtualNetworkName 'Microsoft.DevTestLab/labs/virtualNetworks@2018-10-15-preview' = {
parent: newLabName_resource
name: newLabVirtualNetworkName
properties: {
description: 'Existing Compute virtual network associated as part of the lab creation process.'
externalProviderResourceId: existingVirtualNetworkId
subnetOverrides: [
{
name: existingSubnetName
resourceId: existingSubnetId
useInVmCreationPermission: 'Allow'
usePublicIpAddressPermission: 'Allow'
}
]
}
}
output labId string = newLabName_resource.id
Outputs: