0

我发现测试嵌套在此类 ConfigMap 中的 Kong 配置确实有问题(它是此 ConfigMap 的简短版本):

apiVersion: v1
kind: ConfigMap
metadata:
  name: "some_name"
data:
  kong_config.yml: |
    _format_version: "2.1"
    _transform: true

    services:
      - name: health-check
        url: http://localhost/non-existent
        plugins:
          - name: request-termination
            config:
              status_code: 200
              message: ok
        routes:
          - name: admin-status
            paths:
              - /healthz$

我要做的是使用conftest测试这个 ConfigMap,所以我从 ConfigMap 中“取出”Kong 的配置 YML 文件,如下所示:

deny[msg] {
    kong_config := input.data["kong.yml"]
    service_1_name := kong_config.services[0].name

    ....some other code....

    msg := sprintf("Service '%v' failed name validation.", [service_1_name])
}

kong_config变量是字符串类型,我找不到将其转换为类型对象或任何其他允许我引用 YML 键的类型的正确方法。Rego 的内置函数cast_object似乎不起作用。

有没有人已经遇到这个问题并有一些提示?

4

1 回答 1

0

好的,所以我找到了答案;)

解决方案是使用内置函数:yaml.unmarshal.

起初我误解了rego 引用

于 2021-12-20T18:16:44.327 回答