如何在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中将字符串转换为字典?

如何在 Python 中将字典转换为查询字符串?

如何在 Python 中将 JSON 字符串转换为字典?

如何在 Hive 或 Presto 中将以下字典格式列转换为不同的格式?

如何在 PySpark 中将字符串转换为字典 (JSON) 的 ArrayType