0

Я использую классический портал, и у меня есть Vnet «RGVnet», настроенный с 10.0.0.0/16 Подсети: - 10.0.0.0/24 Настроено.Как создать подсеть в существующем Vnet

Я хочу добавить новую подсеть в тот же Vnet, не используя Get-AzureVNetConfig -ExportToFile c:\NetworkConfig.xml.

Есть ли другой способ добавить подсеть в классический портал, как мы добавляем в RM Vnet?

Цените свою помощь. :)

ответ

1

Вам не нужно ExportToFile создать подсеть в VNET:

New-AzureRmVirtualNetwork -ResourceGroupName TestRG -Name RGVnet` 
    -AddressPrefix 10.0.0.0/16 -Location centralus 
$vnet = Get-AzureRmVirtualNetwork -ResourceGroupName TestRG -Name TestVNet 
Add-AzureRmVirtualNetworkSubnetConfig -Name FrontEnd ` 
    -VirtualNetwork $vnet -AddressPrefix 10.0.0.0/24 
Add-AzureRmVirtualNetworkSubnetConfig -Name BackEnd ` 
    -VirtualNetwork $vnet -AddressPrefix 10.0.1.0/24 
Set-AzureRmVirtualNetwork -VirtualNetwork $vnet 

Последний шаг применяет конфигурацию.

MSDN virtual-networks-create-vnet-arm-ps

+0

Hi Peter, Я предполагаю, что приведенная выше команда предназначена для диспетчера ресурсов, а не для Classic. –

+0

Да, вы правы, я пропустил ваш вопрос. Спасибо за указание. – Peter

+0

Нет проблем Peter :) Оцените, если мы сможем получить его для развертывания Classic. –

1

No.

Там нет такой простой команды PowerShell, который добавит подсеть к классическому VNET. Если вы проверите API ARM REST для Microsoft/ClassicNetwork и Microsoft/Network, вы увидите, что в модели диспетчера ресурсов «подсетей» управляются как как ресурсы в Vnet, так и как свойство в Vnet, а в классической модели - подсетей "является просто свойством в Vnet.

Поскольку «подсети» - это просто свойство Vnet для классической модели, а «подсети» - это массив объектов, вам всегда нужно как минимум 2 запроса на обновление «подсети». Один из них - получение старых подсетей, а другой - размещение подсетей после добавления новых подсетей в старые подсети.

Однако, если вы используете REST API вместо чистого Azure PowerShell, вам не нужно экспортировать XML-файл вообще. Вот сценарий, который я написал.

# Adding the AD library to your PowerShell Session. 
Add-Type -Path 'C:\Program Files\Microsoft Azure Active Directory Connect\Microsoft.IdentityModel.Clients.ActiveDirectory.dll' 

# This is the tenant name of you subscription. You can use tenant id instead if you want. 
$tenantName = "<you tenant name>" 
$authString = "https://login.windows.net/" + $tenantName 

# Create a authentication context with the above authentication string. 
$authenticationContext = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext ($authString, $false) 

# Client Id and key of your AD application. You can create an AD application through Azure 
# Portal or PowerShell. 
$clientId = "<the client id of your AD application>" 
$key = "<the key of your AD application>" 

# Create a client credential with the above client id and key. 
$clientCred = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.ClientCredential ($clientId, $key) 

# The resource URI for your token. If you are using ARM, "https://management.azure.com/" 
# is good too. 
$resource = "https://management.core.windows.net/" 

# Acquire access token from server. 
$authenticationResult = $authenticationContext.AcquireToken($resource, $clientCred); 

# Use the access token to setup headers for your http request. 
$authHeader = $authenticationResult.AccessTokenType + " " + $authenticationResult.AccessToken 
$headers = @{"Authorization"=$authHeader; "Content-Type"="application/json"} 

# Send a request to get the Vnet you want to update. 
$vnet = Invoke-RestMethod -Method GET -Uri "https://management.azure.com/subscriptions/<your subscription id>/resourceGroups/Default-Networking/providers/Microsoft.ClassicNetwork/virtualNetworks/<your vnet>?api-version=2016-04-01" -Headers $headers 

# Create a new subnet from a Json string. and add it to the subnets of your Vnet. 
$newSubnet = ConvertFrom-Json '{"name": "newSubnet","addressPrefix": "10.34.0.0/29"}' 
$vnet.properties.subnets += $newSubnet 

# Convert the Vnet object into a Json string. This will be used as request body in the second http request. 
$body = ConvertTo-Json $vnet -Depth 3 

# Send another http request to update your Vnet. 
Invoke-RestMethod -Method PUT -Uri "https://management.azure.com/subscriptions/<your subscription id>/resourceGroups/Default-Networking/providers/Microsoft.ClassicNetwork/virtualNetworks/<your vnet>?api-version=2016-04-01" -Headers $headers -Body $body 

Примечание: для того, чтобы использовать мой сценарий, вы должны следовать this tutorial создать основной службы.

Смежные вопросы