--server.port={{service_port}}\"" -6ren">
gpt4 book ai didi

json - Ansible - 将环境中的 JSON 字符串传递给 shell 模块

转载 作者:行者123 更新时间:2023-12-03 18:15:43 25 4
gpt4 key购买 nike

我正在尝试在环境中传递 JSON 字符串。

- name: Start {{service_name}}
shell: "<<starting springboot jar>> --server.port={{service_port}}\""
environment:
- SPRING_APPLICATION_JSON: '{"test-host.1":"{{test_host_1}}","test-host.2":"{{test_host_2}}"}'

test_host_1 是 172.31.00.00

test_host_2 是 172.31.00.00

但是在 Spring 日志中,我在打印的地方得到了 JSON 解析异常
Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character (''' (code 39)): was expecting double-quote to start field name
at [Source: {'test-host.1': '172.31.00.00', 'test-host.2': '172.31.00.00'}; line: 1, column: 3]

如图所示,双引号被转换为单引号!!!

我尝试转义双引号,但没有运气。

知道为什么会发生这种情况,或者有什么解决方法吗?

最佳答案

关于 Ansible 模板引擎有一点。
如果一个字符串看起来像一个对象(以 {[ 开头),Ansible 会将其转换为对象。见 code .

为了防止这种情况,您可以使用 STRING_TYPE_FILTERS 之一:

- SPRING_APPLICATION_JSON: "{{ {'test-host.1':test_host_1,'test-host.2':test_host_2} | to_json }}"

附言这就是为什么使用@techraf 的答案中的空格字符进行破解的原因:Ansible 未命中 startswith("{")比较并且不要将字符串转换为对象。

关于json - Ansible - 将环境中的 JSON 字符串传递给 shell 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41144922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com