标签: azure-rm

如何使用 terraform 0.13.5 检查列表中是否存在该值?

我需要检查变量中是否存在值,并基于此我需要创建资源。如果value_list没有这些,values('abc','def','ghi')则不应创建资源。

我在这里尝试的是:

  1. 将字符串变量转换为列表
  2. 检查列表是否具有值“abc”或“def”或“ghi”。如果value_list包含任何一个值,则继续执行后续步骤以创建资源。
  3. 如果value_list没有这些,values('abc','def','ghi')则不应创建资源。

变量.tf

variable "value_list" {
    default = "abc,def,ghi"
    type= string
}
Run Code Online (Sandbox Code Playgroud)

资源.tf

resource "azurerm_kubernetes_cluster_node_pool" "user" {
  value_list = ${split(",", var.value_list)}
  count = "${contains(value_list,"abc") ? 1 : 0 || contains(value_list,"def") ? 1 : 0 || contains(value_list,"ghi") ? 1 : 0 
}
Run Code Online (Sandbox Code Playgroud)

错误:

该语言中不使用该字符。预期是表达式的开头,但发现了无效的表达式标记。

如何检查 value_list 是否具有所需的值?

contains azure-resource-manager terraform terraform-provider-azure azure-rm

10
推荐指数
1
解决办法
4万
查看次数

如何使用 Terraform 在 Azure 中创建多租户服务主体

我在一个租户中有一个服务主体,需要访问另一租户中的 Azure 容器注册表。但是,我不确定如何为其创建 azurerm_role_assignment。有没有办法将服务主体配置为多租户,以便它可以在两个租户中相应地进行角色分配?

azure azure-active-directory terraform terraform-provider-azure azure-rm

6
推荐指数
1
解决办法
8911
查看次数

Terraform 将元组展平为字符串集

我有以下 terraform allowed_ips 元组,其中包含 json 的 ip 地址和有关每个 ip 的元数据。我正在尝试展平元组,以获取格式为 ["2.2.2.2", "3.3.3.3"] 的 ip 地址列表,然后将其传递给 ip_rules 变量

多变的

allowed_ips = [
    {
      name       = "ip1"
      ip_address = "3.3.3.3"
    },
    {

      name       = "ip2"
      ip_address = "127.0.0.1"
    }
  ]


Run Code Online (Sandbox Code Playgroud)

资源

variable "allowed_ips" {
  type = list(object({
    name       = string,
    priority   = string,
    ip_address = string
  }))
}

network_acls {
    default_action = "Deny"
    bypass         = "AzureServices"

    ip_rules =  jsonencode(var.allowed_ips.*.ip_address)
  }
Run Code Online (Sandbox Code Playgroud)

当我设置规则时ip_rules = ["2.2.2.2", "3.3.3.3"],创建的规则没有问题,但我想以某种方式从上面的 allowed_ips 中解析变量。

我尝试过各种方法,包括

  • jsonencode(var.allowed_ips.*.ip_address)
  • "${join("\\,", local.subnets.*.id)}" …

string tuples azure terraform azure-rm

6
推荐指数
1
解决办法
2万
查看次数

获取Azure资源组的创建时间

目的:知道何时首次创建资源组。客户组织希望报告资源组创建时间戳并对其采取行动。这将在自动化脚本中使用。

不幸的是,资源组上没有创建时间戳属性。使用Get-AzureRmResourceGroup返回对象是这样的:

ResourceGroupName : eastus2-something-rg
Location          : eastus2
ProvisioningState : Succeeded
Tags              :
ResourceId        : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/eastus2-something-rg
Run Code Online (Sandbox Code Playgroud)

已请求此功能,但投票似乎没有很多。

如何检索资源组的创建时间戳?

azure azure-rm

5
推荐指数
2
解决办法
1871
查看次数

如何使用 Terraform 创建服务主体并在提供程序中使用该主体?

我已经在网上阅读了这些文章,但它们似乎没有完全涵盖这个主题,希望已经完成的人可以为我提供一些指导。我们正在设置一个复杂的 Terraform 模板,以满足与我们的 SaaS 产品相关的 IaC 要求。这样做时,我们希望模板在启动时使用用户的凭据在 Azure AD 中创建新的服务主体(这部分我没有问题)。然后在模板的下一部分中,我们将使用该服务主体作为提供者。问题是它在计划/应用中抛出错误,因为服务主体不存在(也就是由于服务提供者部分尚未运行,id 不存在)。那么有没有办法做到这一点?创建一个服务主体,然后在使用该服务主体而不将其拆分为多个模板的提供程序别名中使用它?

最后,我希望此模板使用本地用户的权限或 MSI 创建服务提供者,将 RBAC 赋予订阅,然后使用该服务提供者在该订阅中创建资产。

main.ts(根)

provider "azurerm" {
    alias               = "ActiveDirectory"
    subscription_id     = "${var.subscriptionNucleus}"
}

provider "azurerm" {
    alias               = "Infrastructure"
    subscription_id     = "${var.subscriptionInfrastructure}"
}
module "activedirectory" {
    providers                       = { azurerm = "azurerm.ActiveDirectory" 
}
    source                          = "./modules/activedirectory"
    subscription_id_infrastructure  = "${var.subscriptionInfrastructure}"
}
module "infrastructure" {
    providers                   = { azurerm = "azurerm.Infrastructure"}
    source                      = "./modules/infrastructure"
    location                    = "${var.location}"
    application_id              = 
 "${module.activedirectory.service_principal_application_id}"
    subscription_id             = "${var.subscriptionInfrastructure}"
    prefix                      = "${var.prefix}"
}
Run Code Online (Sandbox Code Playgroud)

main.ts …

azure terraform azure-rm

5
推荐指数
1
解决办法
6484
查看次数

Terraform:Code="LinkedInvalidPropertyId" Message="Property id '' at path 'properties.hostingEnvironmentProfile.id' 无效

从昨晚开始,我在使用 Terraform 将 Web 应用程序部署到 azure 时遇到错误:

Error creating/updating App Service Plan "test-euw-asp" (Resource Group "test-middle-euw-rg"): web.AppServicePlansClient#CreateOrUpdate: Failure sending request: StatusCode=400 -- Original Error: Code="LinkedInvalidPropertyId" Message="Property id '' at path 'properties.hostingEnvironmentProfile.id' is invalid. Expect fully qualified resource Id that start with '/subscriptions/{subscriptionId}' or '/providers/{resourceProviderNamespace}/'."
Run Code Online (Sandbox Code Playgroud)

看起来它正在“hostingEnvironmentProfile”对象中发送一个空的“id”。

2020-02-25T15:31:56.0433755Z 2020-02-25T15:31:56.041Z [DEBUG] plugin.terraform-provider-azurerm_v1.44.0_x4.exe: {"kind":"Windows","location":"westeurope","properties":{"hostingEnvironmentProfile":{"id":""},"perSiteScaling":false,"maximumElasticWorkerCount":1,"reserved":false,"isXenon":false},"sku":{"name":"S1","tier":"standard","size":"S1","capacity":1},"tags":{}}
Run Code Online (Sandbox Code Playgroud)

我确实将提供程序版本设置为 1.44.0

provider "azurerm" {
  version = "~>1.44.0"
}
Run Code Online (Sandbox Code Playgroud)

我的地形配置

resource "azurerm_resource_group" "rg" {
    name = var.ResourceGroupNameApp
    location = "West europe"
}

resource "azurerm_app_service_plan" "asp" {
    name = var.asp-name
    resource_group_name …
Run Code Online (Sandbox Code Playgroud)

terraform terraform-provider-azure azure-rm

5
推荐指数
1
解决办法
1179
查看次数

terraform azurerm:等待 Azure CLI 时出错:退出状态 1

当尝试在我的机器上使用 azurerm 提供程序在本地运行 terraform 时,我收到此错误:

错误:构建帐户时出错:获取经过身份验证的对象 ID 时出错:从 Azure CLI 解析 json 结果时出错:等待 Azure CLI 时出错:退出状态 1

我跟着这个链接:https : //github.com/terraform-providers/terraform-provider-azurerm/issues/3686#issuecomment-523983734

az account get-access-token作品。

有任何想法吗?

azure azure-cli terraform azure-rm

5
推荐指数
1
解决办法
5861
查看次数

尝试调试 terraform-provider-azurerm 以便我可以为社区做出贡献。但地形计划失败了

介绍

大家好,我正在尝试开始为 terraform-provider-azurerm 做出贡献。我注意到我已在此处azurerm_firewall_network_rule_collection 报告了一个问题。我想我应该以此为契机,看看我是否可以出力并尝试解决我报告的问题!如果我可以调试提供程序并查看代码如何工作,那么我不仅可以学习 Go,还可以找出并帮助修复错误/功能增强。你们可以为我提供任何帮助并引导我走向正确的方向,我将不胜感激。我知道您的时间很宝贵,在来寻求帮助之前我已经尽力了。 我尝试做的事情总结如下:

  • 分叉terraform-provider-azurerm存储库。
  • 将分叉的存储库克隆到我的本地。Ubuntu 20.04我在 WSL 中使用。
  • 运行vscode版本1.54.3
  • using terraform 0.14.9,用于tfenv安装和管理不同版本。
  • 在vscode中安装golang及相关go工具。我在go version go1.16.2 linux/amd64. 用于linuxbrew安装go。
  • 安装gcc5。用于linuxbrew安装。
  • 安装delve调试器。用于linuxbrew安装。
  • 创建一个非常简单的 terraform main.tf,仅将资源组部署到我的 Azure 订阅。
  • 创建一个.terraformrc文件(将其设置在该位置/home/rahul/.terraformrc)以向提供程序提供 dev_overrides 路径。
  • 修改main.go(location /usr/local/go/src/github.com/terraform-providers/terraform-provider-azurerm/main.go) 以使用调试语句。
  • 使用调试代码编译提供程序并创建新的二进制文件。
  • 将无头模式下的 dlv 附加到此二进制文件
  • 使用上一步中的数据将其设置在变量 TF_REATTACH_PROVIDERS 中
  • 运行 Terraform 计划 - 希望计划运行成功。 …

debugging go terraform azure-rm

5
推荐指数
0
解决办法
1052
查看次数

如何有条件地跳过使用 terraform 创建/实现的部分 terraform 资源

如何有条件地跳过使用 terraform 创建/实现的部分 terraform 资源?

# main.tf file
locals {
  vnet_type = (var.vnet_type != "" ? var.vnet_type : "None")
}

data "azurerm_virtual_network" vnet {
  name = "testvnet"
  resource_group_name = "rest1"
}
  
data "azurerm_subnet" subnets {
  name = "testSubnet"
   resource_group_name  = "rest1"
   virtual_network_name = data.azurerm_virtual_network.vnet.name

}


resource "azurerm_api_management" "apim_demo" {
  name                = "test-apim"
  location            = "East US"
  resource_group_name = "rest1"
  publisher_name      = "admin"
  publisher_email     = "admin@gmail.com"

  sku_name = "Developer_1"

  identity {
    type = "SystemAssigned"
  }

 # vnet_Type can be External, None …
Run Code Online (Sandbox Code Playgroud)

azure terraform terraform-provider-azure azure-rm

5
推荐指数
1
解决办法
3877
查看次数

terraform - azurerm。Standard_LRS和StandardSSD_LRS之间的区别

terraform Standard_LRS 和 StandardSSD_LRS 有什么区别?Terraform 文档仅指出,您可以选择这两个中的一个,但没有精确说明有什么区别。Standard_LRS是HHD盘吗?还是SSD盘也可以?

azure-disk azure-rm

4
推荐指数
1
解决办法
3850
查看次数