我怎么能通过 |作为从 Ansible 库存到 Helm values.yml 的文本

Posted

技术标签:

【中文标题】我怎么能通过 |作为从 Ansible 库存到 Helm values.yml 的文本【英文标题】:How can i pass | as text from Ansible inventory to Helm values.yml 【发布时间】:2021-08-08 20:30:25 【问题描述】:

我想为我的 grafana 入口添加自定义注释,我使用 Ansible 和 Helm 来部署入口。 Helm 值是:

grafana:
  ingress:
    annotations:
      nginx.ingress.kubernetes.io/server-snippet: |
        http2_max_header_size 16k;
        http2_max_field_size 16k;
    enabled: true
    hosts:
    - grafana.XXXX

问题是使用 Ansible 创建此值文件。 我无法按原样传递原始的 sn-p。我得到的结果是:

grafana:
    ingress:
        annotations:
            nginx.ingress.kubernetes.io/server-snippet: 'http2_max_header_size 16k;

                http2_max_field_size 16k;

                '
        enabled: true
        hosts:
        - grafana.XXXXX

(创建我使用 to_nice_yaml 格式的文件)

知道如何按原样传递这些变量吗?

【问题讨论】:

【参考方案1】:

这两种形式是等价的,往返于from_yaml | to_yaml 甚至to_json 会证明:


...
    "annotations": 
      "nginx.ingress.kubernetes.io/server-snippet": "http2_max_header_size 16k;\nhttp2_max_field_size 16k;\n"
    ,
...

The fine manual 正确地声称| to_yaml 尊重all the flags from PyYAML,正如人们所看到的那样:

- debug:
    msg: >-
       awesome | to_yaml(default_style="|") 
  vars:
    awesome:
      has_newlines: "this is awesome;\nso is this;\n"

转换为您想要的: | 样式:

    "has_newlines": |
      this is awesome;
      so is this;

【讨论】:

感谢您的回答:) 我不能使用它,因为我有更多注释,我不想更改它们的默认样式。我也不想把它改成 json-我所有的其他图表都在 yaml 你知道其他方法吗? 在 PyYAML 文档中提到了自定义格式化程序类,但老实说,您正在为一个 机器可读 文件创建虚荣输出而进行艰苦的战斗。计算机不在乎,因此应仔细考虑使用 ansible 处理该文件是否解决了正确的问题

以上是关于我怎么能通过 |作为从 Ansible 库存到 Helm values.yml 的文本的主要内容,如果未能解决你的问题,请参考以下文章

HELP!请问怎么通过ABAP程序查到前几个月的库存数?

Ansible - 在播放期间切换到新的库存文件

为啥 Ansible 无法解析我的 azure 动态库存配置文件?

将剧本运行中的变量保存到 ansible 主机本地文件

Ansible - 在运行时定义库存

我正在尝试操作 ansible 输出 [关闭]