Как получить общедоступный IP-адрес лазурной виртуальной машины из приведенного ниже кода Terraform - PullRequest
0 голосов
/ 02 января 2019

У меня есть код terraform, который должен получить публичный IP-адрес виртуальной машины, вот мой код

# Create virtual machine
resource "azurerm_virtual_machine" "myterraformvm" {
    name                  = "myTerraformVM"
    location              = "Central India"
    resource_group_name   = "rg-mpg-devops-poc"
    network_interface_ids = ["/subscriptions/*************/resourceGroups/rg-mpg-devops-poc/providers/Microsoft.Network/networkInterfaces/nic-mpg-devops"]
    vm_size               = "Standard_DS1_v2"

    storage_os_disk {
        name              = "myOsDisk"
        caching           = "ReadWrite"
        create_option     = "FromImage"
        managed_disk_type = "Premium_LRS"
    }

    os_profile {
        computer_name  = "myvm"
        admin_username = "azureuser"
    }

    os_profile_linux_config {
        disable_password_authentication = true
        ssh_keys {
            path     = "/home/azureuser/.ssh/authorized_keys"
            key_data = "ssh-rsa *********************"
        }}
     boot_diagnostics {
        enabled = "true"
        storage_uri = "https://*******.blob.core.windows.net/"
    }}

Здесь я использую идентификатор NIC, который по умолчанию предоставит публичный IP, Может ли кто-нибудь помочь мнена этом?

Ответы [ 2 ]

0 голосов
/ 02 августа 2019

Я попробовал это и не смог получить публичный IP. (более вероятно, ошибка пилота.)

В моем случае мне нужно было получить адрес для установки chef на более позднем этапе, чтобы IP или FQDN работали. Вот как я прошел через это:

При создании публичного ip я добавил метку домена. Используйте это же значение при определении имени машины.

resource "azurerm_public_ip" "CSpublicip" {
    name                         = "myPublicIP"
    location                     = "eastus"
    resource_group_name          = "${azurerm_resource_group.CSgroup.name}"
    allocation_method            = "Dynamic"
    domain_name_label            = "csvm${random_integer.server.result}"

Когда вы добавляете метку домена, Azure создает достижимое полное доменное имя. Когда у вас есть это, вы можете использовать / получить fqdn.

output "AzurePage" {
value = "${azurerm_public_ip.CSpublicip.fqdn}"
0 голосов
/ 02 января 2019

вы бы использовали модуль данных для этого:

data "azurerm_network_interface" "test" {
  name                = "acctest-nic"
  resource_group_name = "networking"
}

, который даст вам NIC-объект, который будет иметь блок ip_configuration, который (в свою очередь) будет иметь параметр public_ip_address_id, и вы будете использоватьчто для получения данных для публичного ip:

data "azurerm_public_ip" "test" {
  name                = "name_of_public_ip"
  resource_group_name = "name_of_resource_group"
}

output "domain_name_label" {
  value = "${data.azurerm_public_ip.test.domain_name_label}"
}

output "public_ip_address" {
  value = "${data.azurerm_public_ip.test.ip_address}"
}

вам, очевидно, придется анализировать идентификатор ресурса в группу ресурсов \ имя ресурса, но это легко сделать с помощью split + array index

https://www.terraform.io/docs/providers/azurerm/d/public_ip.html
https://www.terraform.io/docs/providers/azurerm/d/network_interface.html

...