从Ansible变量中删除重复行

3

我需要实现两个目标。

  1. 从名为install_loc的ansible变量中删除重复条目。

  2. 从install_loc中删除任何空白行。

下面是构建install_loc变量的方式。

   - set_fact:
       install_loc: "{{ install_loc | default('') + item.split( )[4] | dirname + '\n' }}"
     loop: "{{ fdet }}"

下面是将install_loc写入文件后的内容。
/app/logs/scripts
/app/logs/mrt
/app/logs/com
/app/logs/exe

/app/logs/scripts
/app/logs/mrt
/app/logs/com
/app/logs/exe

/app/logs/scripts
/app/logs/mrt
/app/logs/com
/app/logs/exe

如您所见,该变量包含换行符和重复条目。

期望的输出应如下所示。注意:顺序无关紧要:

/app/logs/scripts
/app/logs/mrt
/app/logs/com
/app/logs/exe

我尝试了

   - set_fact:
       install_loc: "{{ install_loc | unique }}"  

但是我得到的文字是扭曲的,如下所示:
set([u'\n', u'/', u'.', u'1', u'0', u'3', u'2', u'C', u'E', u'G', u'F', u'I', u'N', u'a', u'c', u'e', u't', u'i', u'm', u'o', u'o', u'n', u's', u's', u'r', u'u', u't', u'x'])

请您给出建议?
1个回答

3
解决方案:
- set_fact:
    install_loc: "{{ install_loc.split('\n') | unique | select | list }}"

说明:

  • install_loc.split('\n') - 将install_loc按照换行符拆分成列表
  • unique - 去除重复项
  • select - 丢弃空值或 null 值
  • list - 从 Python 的 "generator" 转换为列表

如果您想要一个单一的字符串(作为输入),请将 list 替换为 join('\n')


这将把install_loc作为列表而不是字符串,写入文件时看起来像这样:['/app/logs/scripts','/app/logs/mrt','/app/logs/com','/app/logs/exe']而我希望它看起来像/app/logs/scripts /app/logs/mrt /app/logs/com /app/logs/exe - Ashar
如果我从命令中删除列表,它会在带有内联模块的文件中打印<generator object _select_or_reject at 0x7fd724de7460>。 - Ashar
请看我回答的最后一行。 - mhutter
感谢@mhurter,这回答了我的问题。但是我无法在不同的play中读取此变量。我在此发布了一个新查询,如果您能帮助:https://stackoverflow.com/questions/58959397/unable-to-read-set-fact-variable-in-different-ansible-play - Ashar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接