Как получить IP-адрес недавно созданной виртуальной машины Azure через Powershell - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь автоматизировать некоторые процессы в нашем проекте, который включает в себя некоторые этапы, такие как создание виртуальной машины, подключение к вновь созданной виртуальной машине и удаленное выполнение некоторых команд.

Раньше ранее я выполнял команды по очереди вручную.

1.Создать ВМ

New-AzureRmResourceGroupDeployment -Name VmDeployment -ResourceGroupName XYZ`
  -TemplateFile "C:\Templates\template.json" `
  -TemplateParameterFile "C:\Templates\parameters.json"

2. Подключиться к ВМ.

Set-Item WSMan:\localhost\Client\TrustedHosts -Value  100.9.4.12     
$UserName = "100.9.4.12\admin"
$Password = ConvertTo-SecureString "admin@123" -AsPlainText -Force
$psCred = New-Object System.Management.Automation.PSCredential($UserName, $Password)
$s = New-PSSession -ComputerName 100.9.4.12 -Credential $psCred
Invoke-Command -Session $s -ScriptBlock {Get-Service 'ServiceName'}

В этом IP-адрес используется для добавления этого в доверенные узлы на клиенте. Я использовал для проверки сгенерированного IP-адреса на портале Azure, замените этот IP-адрес в команде и запустите их вручную. Но теперь, так как я автоматизирую, ручного вмешательства в процесс не будет.

Так как мне получить IP-адрес вновь созданной виртуальной машины?

Ответы [ 3 ]

0 голосов
/ 29 августа 2018

Не имеет прямого отношения к вашему вопросу, но задумывались ли вы об использовании Terraform для автоматизации создания ваших ресурсов? http://terraform.io

Terraform очень похож на ARM (только намного лучше). Вот пример создания виртуальной машины и экспорта публичного IP:



    resource "azurerm_resource_group" "main" {
      name     = "test-resources"
      location = "West US 2"
    }

    resource "azurerm_virtual_network" "main" {
      name                = "test-network"
      address_space       = ["10.0.0.0/16"]
      location            = "${azurerm_resource_group.main.location}"
      resource_group_name = "${azurerm_resource_group.main.name}"
    }

    resource "azurerm_subnet" "internal" {
      name                 = "internal"
      resource_group_name  = "${azurerm_resource_group.main.name}"
      virtual_network_name = "${azurerm_virtual_network.main.name}"
      address_prefix       = "10.0.2.0/24"
    }

    resource "azurerm_public_ip" "test" {
      name                         = "test-public-ip"
      location                     = "${azurerm_resource_group.main.location}"
      resource_group_name          = "${azurerm_resource_group.main.name}"
      public_ip_address_allocation = "dynamic"

      tags {
        environment = "production"
      }
    }

    resource "azurerm_network_interface" "main" {
      name                = "test-nic"
      location            = "${azurerm_resource_group.main.location}"
      resource_group_name = "${azurerm_resource_group.main.name}"

      ip_configuration {
        name                          = "testconfiguration1"
        subnet_id                     = "${azurerm_subnet.internal.id}"
        private_ip_address_allocation = "dynamic"
        public_ip_address_id = "${azurerm_public_ip.test.id}"
      }
    }

    resource "azurerm_virtual_machine" "main" {
      name                  = "test-vm"
      location              = "${azurerm_resource_group.main.location}"
      resource_group_name   = "${azurerm_resource_group.main.name}"
      network_interface_ids = ["${azurerm_network_interface.main.id}"]
      vm_size               = "Standard_DS1_v2"

      # Uncomment this line to delete the OS disk automatically when deleting the VM
      # delete_os_disk_on_termination = true


      # Uncomment this line to delete the data disks automatically when deleting the VM
      # delete_data_disks_on_termination = true

      storage_image_reference {
        publisher = "Canonical"
        offer     = "UbuntuServer"
        sku       = "16.04-LTS"
        version   = "latest"
      }

      storage_os_disk {
        name              = "myosdisk1"
        caching           = "ReadWrite"
        create_option     = "FromImage"
        managed_disk_type = "Standard_LRS"
      }

      os_profile {
        computer_name  = "hostname"
        admin_username = "testadmin"
        admin_password = "Password1234!"
      }

      os_profile_linux_config {
        disable_password_authentication = false
      }

      tags {
          environment = "production"
      }
    }

    output "vm-ip" {
        value = "${azurerm_public_ip.test.ip_address}"
    }

0 голосов
/ 29 августа 2018

Вы можете использовать команду Powershell для получения всех частных IP-адресов виртуальных машин. И команда будет такой:

Get-AzureRmNetworkInterface -ResourceGroupName resourceGroupName | Select-Object {$_.IpConfigurations.PrivateIpAddress}

Обновление

Также команда для установки переменной следующим образом:

$vm = Get-AzureRmNetworkInterface -ResourceGroupName charles | Select-Object -Property  @{Name="Ip"; Expression = {$_.IpConfigurations.PrivateIpAddress}}
$vm[0].Ip

Тогда вы получите только IP-адрес.

0 голосов
/ 29 августа 2018

почему вас интересует IP-адрес? просто использовать имя DNS? вы всегда знаете это (поскольку вы определяете его при создании vm, по крайней мере, вы можете это сделать). Другой вариант - вывести IP-адрес как часть шаблона охраны.

или запросите IP-адрес в powershell:

Get-AzureRmVM -ResourceGroupName ‘HSG-ResourceGroup’ -Name ‘HSG-LinuxVM’ | Get-AzureRmPublicIpAddress
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...