- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个 terraform 模板,该模板使用完美运行的 for_each 循环在存储帐户上创建 3 个文件共享。
我正在尝试使用 for_each 循环分配 RBAC 角色分配,范围仅限于每个文件共享,但是我不断收到以下错误,并且不确定如何实现此目的?
main.tf
###########################
# RESOURCE GROUP CREATION #
###########################
resource "azurerm_resource_group" "rg" {
name = var.rg.name
location = var.rg.location
# tag is a test to see if I can get them to use a variable map
tags = "${var.tags}"
}
############################
# STORAGE ACCOUNT CREATION #
############################
resource "azurerm_storage_account" "storage_account" {
name = var.storage_account.name
resource_group_name = azurerm_resource_group.rg.name
location = azurerm_resource_group.rg.location
account_tier = var.storage_account.account_tier
account_replication_type = var.storage_account.account_replication_type
allow_nested_items_to_be_public = false
azure_files_authentication {
directory_type = var.storage_account.directory_type
active_directory {
storage_sid = var.storage_account.storage_sid
domain_name = var.storage_account.domain_name
domain_sid = var.storage_account.domain_sid
domain_guid = var.storage_account.domain_guid
forest_name = var.storage_account.forest_name
netbios_domain_name = var.storage_account.netbios_domain_name
}
}
}
########################################
# STORAGE ACCOUNT FILE SHARES CREATION #
########################################
resource "azurerm_storage_share" "file_shares" {
for_each = var.file_shares
name = each.value.name
storage_account_name = azurerm_storage_account.storage_account.name
quota = each.value.quota
}
########################
# RBAC ROLE ASSIGNMENT #
########################
resource "azurerm_role_assignment" "rbac" {
for_each = var.rbac
scope = azurerm_storage_share.file_shares.*.id
role_definition_name = each.value.role_definition_name
principal_id = each.value.principal_id
}
变量.tf
#######################################
# STORAGE ACCOUNT FILE SHARE SETTINGS #
#######################################
variable "file_shares" {
description = "storage account file share settings"
default = {
profiles = {
name = "profiles"
quota = "5120"
}
o365 = {
name = "o365"
quota = "5120"
}
msix = {
name = "msix"
quota = "5120"
}
}
}
#################################
# RBAC ROLE ASSIGNMENT SETTINGS #
#################################
variable "rbac" {
description = "rbac assignment to storage account, principal id is the object id of the security group listed in Azure AD"
default = {
back_office = {
role_definition_name = "Storage File Data SMB Share Contributor"
principal_id = "e93a67c7-4bfc-4bbd-a720-b26d9291fa28"
}
front_office = {
role_definition_name = "Storage File Data SMB Share Contributor"
principal_id = "0280b0c9-295a-4d75-b8d0-a092cf52dabc"
}
dev_dev = {
role_definition_name = "Storage File Data SMB Share Contributor"
principal_id = "512be349-5444-45b0-80f5-8e59046a0175"
}
dev_prod = {
role_definition_name = "Storage File Data SMB Share Contributor"
principal_id = "0a676556-cf96-4318-b229-503808da7e1c"
}
admins = {
role_definition_name = "Storage File Data SMB Share Elevated Contributor"
principal_id = "b0bde374-eb5d-4967-9a4f-cdd41fd7bb23"
}
}
}
错误
╵
╷
│ Error: Unsupported attribute
│
│ on storage_account/main.tf line 51, in resource "azurerm_role_assignment" "rbac":
│ 51: scope = azurerm_storage_share.file_shares.*.id
│
│ This object does not have an attribute named "id".
╵
╷
│ Error: Unsupported attribute
│
│ on storage_account/main.tf line 51, in resource "azurerm_role_assignment" "rbac":
│ 51: scope = azurerm_storage_share.file_shares.*.id
│
│ This object does not have an attribute named "id".
╵
╷
│ Error: Unsupported attribute
│
│ on storage_account/main.tf line 51, in resource "azurerm_role_assignment" "rbac":
│ 51: scope = azurerm_storage_share.file_shares.*.id
│
│ This object does not have an attribute named "id".
╵
╷
│ Error: Unsupported attribute
│
│ on storage_account/main.tf line 51, in resource "azurerm_role_assignment" "rbac":
│ 51: scope = azurerm_storage_share.file_shares.*.id
│
│ This object does not have an attribute named "id".
╵
╷
│ Error: Unsupported attribute
│
│ on storage_account/main.tf line 51, in resource "azurerm_role_assignment" "rbac":
│ 51: scope = azurerm_storage_share.file_shares.*.id
│
│ This object does not have an attribute named "id".
╵
##[warning]Can't find loc string for key: TerraformPlanFailed
##[error]Error: TerraformPlanFailed 1
最佳答案
您需要使用flatten功能。将以下代码添加到您的 locals
中:
locals {
rbac_assignment = flatten([
for rbac_key, rbac in var.rbac : [
for file_key, file in azurerm_storage_share.file_shares : {
rbac_key = rbac_key
file_key = file_key
scope = azurerm_storage_share.file_shares[file_key].resource_manager_id
role_definition_name = rbac.role_definition_name
principal_id = rbac.principal_id
}
]
])
}
}
然后在您的 azurerm_role_assignment
资源中,使用以下 for_each
:
resource "azurerm_role_assignment" "rbac" {
for_each = { for rbac_assignment in local.rbac_assignment : "${rbac_assignment.rbac_key}.${rbac_assignment.file_key}" => rbac_assignment }
scope = each.value.scope
role_definition_name = each.value.role_definition_name
principal_id = each.value.principal_id
}
我还更改了文件共享的属性引用,它必须使用resource_manager_id
,而不是使用id。
关于azure - 使用 for_each 将 RAC 角色分配范围限定为文件共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74304556/
这行得通,for_each 传递 vector std::vector v(10, 1); std::vector > vv(10, v); auto vvit = vv.begin(); std::
主要思想是在GitHub存储库中为一个环境(生产和开发)创建多个env_var。。使用这些变量,我可以遍历每个变量。Key键是环境名称。但是,我需要认识到如何迭代嵌套的值。我需要使用什么来代替loca
我正在尝试使用 Terraform 0.12+ 及其新的 for_each 在 Azure 中构建多个 vnet,但遇到了一些麻烦。我希望新功能能够让我创建一个接收复杂变量的通用网络模块,但我可能已经
在升级到更新的编译器并解决编译器错误时,我意识到 boost::fusion::for_each 要求传入的函数对象具有运算符 const。 示例来自 Boost : struct increment
我正在阅读 C++ Concurrency in Action 安东尼·威廉姆斯。在关于设计并发代码的章节中有并行版本的std::for_each。算法。这是本书中略微修改的代码: join_thre
我试图理解为什么在单线程上运行的 std::for_each 比 __gnu_parallel::for_each 快 ~3 倍在下面的示例中: Time =0.478101 milliseconds
我想在模块 block 中使用 count,但由于不支持它,我尝试使用 for 循环编写 for_each 但它给出了 “for_each”参数值不合适 错误。 我无法将计数传递给内部模块,因为它会弄
运行时terraform plan或 terraform apply提供给 for_each 的列表发生错误说 Error: Invalid for_each argument on main.t
我的问题是:如何将类成员函数传递给 for_each 我试图开始工作的代码:(在类外定义函数时有效) 失败的部分被注释掉了——使用for_each函数作为类成员函数的部分 关于如何让它工作有什么建议吗
我不太使用 STL,但我想开始学习它,所以我使用 STL 的 for_each 函数编写了一个非常简单的程序。这是整个程序(减去头文件): class Object { public: int
我现在正在学习 OpenCL,并且正在尝试编写一个“hello world”示例;我创建平台、设备和环境。 现在我想从设备获取设备信息,以便我创建信息并将其保存在 vector 中,然后打印它们。为此
我想弄清楚 for_each() 是如何使用的。首先,我改造了这个循环 for(int i = 0; i < myvector.size(); ++i){ myvector[i].a.b. =
我正在尝试使用 for_each 遍历字符串的每个字母, std::unordered_map dico; std::for_each(str.begin(),str.end(),[&](std::s
我想处理 2 个以某种方式相关的容器,并且我想处理它们之间的元素。 简单的例子:一个容器包含某种总和,另一个等长的容器包含必须从该总和中减去的数字。 std::vector s = {20,56,7,
我遇到了以下代码的问题: #include #include #include #include #include using namespace std; struct Person {
我试图让 myFunction 给我数组中值的总和,但我知道我不能使用返回值,当我用代码运行我的程序时,我得到的只是一个打印输出的值,没有总和,这是为什么? void myFunction (int
我正在尝试使用 STL 算法 (C++11) 重写我的一些代码,但我陷入了“无原始循环”规则。 我的一个函数中有这段代码: for (size_t i = 0; i size(); i++) {
有类和事件结构: struct Foo { Foo(): name("nx"), val(9) {} string name; int val; }; class Base {
我尝试将 for_each 与 boost::trim 一起使用。首先我用错了代码 std::for_each(v.begin(),v.end(),&boost::trim)); // error
我正在尝试函数式编程的一些功能,并尝试为 vector 中的每个对象调用一个成员函数。到目前为止,这是我的代码。 emplace.cc #include #include #include #i
我是一名优秀的程序员,十分优秀!