从Ansible变量中删除重复的行

时间:2019-11-20 05:19:17

标签: filter ansible duplicates output

我需要实现两件事。

  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 个答案:

答案 0 :(得分:1)

解决方案:

- set_fact:
    install_loc: "{{ install_loc.split('\n') | unique | select | list }}"

说明:

  • install_loc.split('\n')-用换行符分隔install_loc
  • unique-删除重复项
  • select-删除空值或空值
  • list-从Python“生成器”转换为列表

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