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