【问题标题】:Open policy agent define dynamic global variable开放策略代理定义动态全局变量
【发布时间】:2020-06-14 10:01:05
【问题描述】:

我想知道是否有任何方法可以美化我的代码,因为它看起来非常低效且完全不干燥。我想要实现的是从资源列表中提取特定资源(从 terraform 计划中名为“aks”的资源),并针对它运行一些测试。问题是,我使用some 关键字来获取它,这会阻止我配置全局变量,这会导致大量重复,例如:

aks_default_pool_type_vmss {
    some index
    input.planned_values.root_module.resources[index].type == "azurerm_kubernetes_cluster"
    aks := input.planned_values.root_module.resources[index]
    aks.values.default_node_pool[0].type == "VirtualMachineScaleSets"
}

aks_system_assigned_identity {
    some index
    input.planned_values.root_module.resources[index].type == "azurerm_kubernetes_cluster"
    aks := input.planned_values.root_module.resources[index]
    aks.values.identity[_].type == "SystemAssigned"
}

有没有办法创建一个“全局”变量来捕获 aks 资源,以防止所有重新计算?

干杯。

【问题讨论】:

    标签: terraform open-policy-agent rego


    【解决方案1】:

    您可以创建一个规则来创建一组 aks 对象(请参阅生成 sets in the OPA documentation):

    clusters[aks] {
        some index
        input.planned_values.root_module.resources[index].type == "azurerm_kubernetes_cluster"
        aks := input.planned_values.root_module.resources[index]
    }
    

    然后您的规则可以将您的规则改写为以下内容:

    aks_default_pool_type_vmss {
        aks := clusters[_]
        aks.values.default_node_pool[0].type == "VirtualMachineScaleSets"
    }
    
    aks_system_assigned_identity {
        aks := clusters[_]
        aks.values.identity[_].type == "SystemAssigned"
    }
    

    【讨论】:

      猜你喜欢
      • 2019-12-15
      • 1970-01-01
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-03
      相关资源
      最近更新 更多