ansible在列表中查找第一个未定义的值

时间:2018-06-29 10:06:04

标签: ansible

我在ansible中有一个列表,我想在该列表中找到第一个“未使用”的项目。

示例列表:

std::vector<string> words;
string w;
ifstream file("input");
while(getline(file,w))
    words.push_back(w);
file.close();

项目中的前缀号码最多为999

在上面的示例中,结果应为item001 item002 item004 item005 item100 item101

这是我想要的示例剧本

item003

输出:

---
- name: Test
  connection: local
  hosts: localhost

  vars:
    my_list: []

    list1:
      - item107
      - item002
      - item004
      - item001
      - item007
      - item101
      - item604

  tasks:
    - name: Initialize a dummy list
      set_fact:
        my_list: "{{ my_list|sort }} + [ '{{ item }}' ]"
      with_sequence: start=1 end=19 format=item%.3d

    - name: print first unused value in my_list
      debug:
        msg: "{{ (my_list | difference(list1))[0] }}"

但是,如果我将PLAY [Test] ******************************************************************************************************************************************************************************************************* TASK [Gathering Facts] ******************************************************************************************************************************************************************************************** ok: [localhost] TASK [Initialize a dummy list] ************************************************************************************************************************************************************************************ ok: [localhost] => (item=item001) ok: [localhost] => (item=item002) ok: [localhost] => (item=item003) ok: [localhost] => (item=item004) ok: [localhost] => (item=item005) ok: [localhost] => (item=item006) ok: [localhost] => (item=item007) ok: [localhost] => (item=item008) ok: [localhost] => (item=item009) ok: [localhost] => (item=item010) ok: [localhost] => (item=item011) ok: [localhost] => (item=item012) ok: [localhost] => (item=item013) ok: [localhost] => (item=item014) ok: [localhost] => (item=item015) ok: [localhost] => (item=item016) ok: [localhost] => (item=item017) ok: [localhost] => (item=item018) ok: [localhost] => (item=item019) TASK [print first unused value in my_list] ************************************************************************************************************************************************************************ ok: [localhost] => { "msg": "item003" } PLAY RECAP ******************************************************************************************************************************************************************************************************** localhost : ok=3 changed=0 unreachable=0 failed=0 更改为with_sequence: start=1 end=19,这些任务将花费很长时间,并且还会在输出中打印999行,我真希望看不到。

1 个答案:

答案 0 :(得分:0)

这实际上效果更好,没有打印任何大的输出,而且速度更快:

    - name: Initialize a dummy list
      set_fact:
        my_list: "{{ lookup('sequence', 'start=1 count=999 format=item%.3d', wantlist=True) }}"