Агент открытой политики определяет динамическую глобальную переменную

Мне было интересно, есть ли способ приукрасить мой код, поскольку он выглядит ужасно неэффективным и совершенно не СУХИМ. Я пытаюсь вытащить определенный ресурс из списка ресурсов (ресурс с именем "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, чтобы предотвратить все повторные вычисления?

Ура.

1 ответ

Решение

Вы можете создать правило, которое создает набор объектов aks (см. Генерирующие наборы в документации OPA):

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"
}
Другие вопросы по тегам