如何在ansible中将字典或列表转换为字符串
Posted
技术标签:
【中文标题】如何在ansible中将字典或列表转换为字符串【英文标题】:How to convert dict or list to string in ansible 【发布时间】:2021-01-10 19:26:25 【问题描述】:播放:
- set_fact:
irules: " rule | json_query('[*].definition') "
- debug:
msg: " irules "
输出:
"msg": [
"when HTTP_REQUEST \n switch -glob [HTTP::uri] \n \"*HAC*\" pool char.hr.cal.ed.ABC.pool \n \n \n"
]
我希望输出采用以下格式。
预期输出:
"when HTTP_REQUEST
switch -glob [HTTP::uri]
"*HAC*" pool char.hr.cal.ed.ABC.pool
我曾尝试将“from_json”解析为上述播放,结果报错:
"( rule | json_query('[*].definition') | from_json ): the JSON object must be str, bytes or ``bytearray, not 'list'""
有没有办法在 ansibe 中将列表转换为字符串? 如果没有,任何其他建议将不胜感激以实现“预期输出”`
【问题讨论】:
您能否准确指出您在definition
变量的实际内容中看到列表/字典的 yaml 或 json 表示的位置?从我所看到的最好的情况来看,您可以将该字符串拆分为新行,以将其输出为应该更具可读性的行列表:msg: " irules.split('\n') "
。除非您找到能够解析特定语言/表示的模块/过滤器。
感谢您的回复 "msg": [ "definition": "when HTTP_REQUEST \n switch -glob [HTTP::uri] \n \"*HAC*\" 池 char.hr.cal.ed.HAC.pool \n \n \n", ]
我尝试使用 msg: " irules.split('\n') " 进行拆分,结果出现错误。该任务包括一个带有未定义变量的选项。错误是:“列表对象”没有属性“拆分”\n\n
好的,知道了。那么它应该是msg: " irules[0].split('\n') "
.... 或者您必须使用能够理解该语言/表示的过滤器来解析每个列表元素。
【参考方案1】:
Ansible 的模块debug
无法打印回车。它总是逃避它们(将它们转换为\n
)。这就是为什么您的调试打印消息中有许多 \n
。
我知道输出多行变量的唯一选择是使用pause
模块:
- pause:
seconds: 1
prompt: " irules[0] "
更详细的答案here可以提供帮助。
【讨论】:
非常感谢吉恩。我能够以预期的格式打印。有没有办法将打印的内容存储在变量中。我必须将该内容复制到一个文件中并在该文件中添加几行额外的行,并且必须将该配置内容应用于防火墙。如果您需要任何信息,请立即告诉我 你的变量内容已经很好了。它包含您想要的回车。您已经可以将变量内容写入文件。 我使用了 split msg: " irules[0].split('\n') " 并复制到文件中,文件中存储的内容为:["when HTTP_REQUEST ", " switch -glob [HTTP::uri] ", " \"*HAC*\" pool char.hr.cal.ed.HAC.pool ", " ", " ", ""]我想从文件中删除字符 [ 和 " 和 \ 并将其格式设置为类似于预期的输出..以上是关于如何在ansible中将字典或列表转换为字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何将afnetworking json字典转换为字符串,然后在IOS中将字符串转换为字典?