如何从下面的Terraform代码获取Azure VM的公共IP

时间:2019-01-02 07:08:01

标签: azure-devops terraform terraform-provider-azure

我有一个Terraform代码,需要检索vm的公共IP,这是我的代码

<div className="d-flex col-sm-6">
  <div className="" style={{backgroundColor: 'white', borderRadius: 5, border: '1px solid #EAE8E8'}}>
    <div className="row">
      <div className="d-flex col-xs-8">
        <div className="row" style={{paddingTop: 20, paddingBottom: 20, paddingLeft: 40}}>
          <h4>
            <b>{this.props.restaurant.name}</b>&nbsp;
            {this.props.restaurant.dietaryRestrictions.map(function(dietaryRestriction, index) {
              return(<div key={index}><span className="badge-sm badge-secondary" style={{color: 'white', backgroundColor: '#DA9550', fontSize: 9}}>{dietaryRestriction}</span>&nbsp;&nbsp;&nbsp;</div>);
            })}
          </h4>
         {this.props.restaurant.description}
          <br /><br />
         <span className="munchtime pointer"><i className="fas fa-check"></i> <b>Add to Cart</b></span><br /><br />
            <b><s>${this.props.restaurant.price}</s></b> <span className="discount"><b>${this.props.restaurant.price * this.props.restaurant.restaurant.discount}</b></span>
          </div>
        </div>
        <div className="d-flex col-xs-4">
            <img src={this.props.restaurant.images[0]} style={{width: '100%', height: 250, objectFit: 'cover'}} />
        </div>
    </div>
  </div>
</div>

这里使用的是NIC id,它将默认提供公共ip,有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

您将为此使用数据模块:

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}"
}

您显然必须将资源ID解析为资源组\资源名称,但这可以通过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

答案 1 :(得分:0)

我尝试了此操作,但无法检索公共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。有了它之后,就可以使用/检索fqdn。

output "AzurePage" {
value = "${azurerm_public_ip.CSpublicip.fqdn}"