我需要检查变量中是否存在值,并基于此我需要创建资源。如果value_list
没有这些,values('abc','def','ghi')
则不应创建资源。
我在这里尝试的是:
value_list
包含任何一个值,则继续执行后续步骤以创建资源。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
我在一个租户中有一个服务主体,需要访问另一租户中的 Azure 容器注册表。但是,我不确定如何为其创建 azurerm_role_assignment。有没有办法将服务主体配置为多租户,以便它可以在两个租户中相应地进行角色分配?
azure azure-active-directory terraform terraform-provider-azure azure-rm
我有以下 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)}" …
目的:知道何时首次创建资源组。客户组织希望报告资源组创建时间戳并对其采取行动。这将在自动化脚本中使用。
不幸的是,资源组上没有创建时间戳属性。使用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)
已请求此功能,但投票似乎没有很多。
如何检索资源组的创建时间戳?
我已经在网上阅读了这些文章,但它们似乎没有完全涵盖这个主题,希望已经完成的人可以为我提供一些指导。我们正在设置一个复杂的 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 …
从昨晚开始,我在使用 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) 当尝试在我的机器上使用 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
作品。
有任何想法吗?
大家好,我正在尝试开始为 terraform-provider-azurerm 做出贡献。我注意到我已在此处azurerm_firewall_network_rule_collection
报告了一个问题。我想我应该以此为契机,看看我是否可以出力并尝试解决我报告的问题!如果我可以调试提供程序并查看代码如何工作,那么我不仅可以学习 Go,还可以找出并帮助修复错误/功能增强。你们可以为我提供任何帮助并引导我走向正确的方向,我将不胜感激。我知道您的时间很宝贵,在来寻求帮助之前我已经尽力了。
我尝试做的事情总结如下:
terraform-provider-azurerm
存储库。Ubuntu 20.04
我在 WSL 中使用。vscode
版本1.54.3
terraform 0.14.9
,用于tfenv
安装和管理不同版本。golang
及相关go工具。我在go version go1.16.2 linux/amd64
. 用于linuxbrew
安装go。gcc5
。用于linuxbrew
安装。delve
调试器。用于linuxbrew
安装。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
) 以使用调试语句。如何有条件地跳过使用 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) terraform Standard_LRS 和 StandardSSD_LRS 有什么区别?Terraform 文档仅指出,您可以选择这两个中的一个,但没有精确说明有什么区别。Standard_LRS是HHD盘吗?还是SSD盘也可以?