terraform:如何使用jsondecode

问题描述 投票:0回答:1

我如何将下面的JSON弄平,有时在那里有权限,有时不能,假设我无法控制JSON并添加一个权限:[]没有提供它。
{
"AVS": { "type": "host" },
"SQL1": {
    "type": "host",
    "permissions": [
        {
            "ad_account": "peter",
            "role": "admin",
            "is_group": false
        }
    ]
},
"SQL2": {
    "type": "host",
    "permissions": [
        {
            "ad_account": "peter",
            "role": "user",
            "is_group": false
        },
        {
            "ad_account": "peter2",
            "role": "admin",
            "is_group": false
        }
    ]
}
}
我这样解析的是:

locals { # Load the default folders from a JSON file. default_folders = jsondecode(file("${path.module}/folders.json")) # flatten ensures that this local value is a flat list of objects, rather # than a list of lists of objects, including the additional_folders from the # datacenter configuration. folders = flatten([ for datacenter_key, datacenter in var.datacenters : [ for folder_key, folder in local.default_folders : { datacenter_key = datacenter_key datacenter_moid = datacenter.datacenter_moid name = folder_key type = folder.type # permissions = try(folder.permissions, tolist([])) # permissions = folder.permissions == null ? tolist([]) : folder.permissions # permissions = can(folder.permissions) ? folder.permissions : tolist([]) # permissions = folder.permissions } ] ]) } resource "vsphere_folder" "folder" { # local.folders is a list, so we must now project it into a map # where each key is unique. We'll combine the datacenter and folder keys to # produce a single unique key per instance. for_each = tomap({ for folder in local.folders : "${folder.datacenter_moid}.${folder.name}" => folder }) datacenter_id = each.value.datacenter_moid path = each.value.name type = each.value.type }
我无法弄清楚如何解析权限,以便它可能是丢失的属性,如果它是分配一个空列表

错误是错误:

│ Error: Invalid function argument │ │ on ../modules/vcenter/folders.tf line 27, in resource "vsphere_folder" "folder": │ 27: for_each = tomap({ │ 28: for folder in local.folders : "${folder.datacenter_moid}.${folder.name}" => folder │ 29: }) │ ├──────────────── │ │ while calling tomap(v) │ │ local.folders is tuple with 73 elements │ │ Invalid value for "v" parameter: cannot convert object to map of any single type.

	
terraform
1个回答
0
投票
try

可以在JSON字符串中没有键

[]
时在数据转换过程中分配空的权限值:
permissions
当键在解码后存在时,这将导致

permissions = try(folder.permissions, [])
值,或者在解码后不存在键时为空。
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.