title: ansible: set fact with multiple values
body: <p>i am writing an ansible role for setting some kind of "hostgroups" based on outputs from commands, path etc..
  thing is one host can be a member of more then one of such groups, and there is the problem. how to i append multiple values to one particular fact, without using a gazillion of different variables for the groups, as this list might get really long.</p>
  
  <p>best would be a list like this:</p>
  
  <p>"itsv_hostgroup": {WBG,LNZ,...} </p>
  
  <hr>
  
  <p>i ended up with the following solution. there are same smart guys over there at the ansible google group and they dont consider themself to good to provide some useful example code.</p>
  
  <pre><code>- set_fact:
          itsv_hostgroup: '{{ itsv_hostgroup | default([]) + ["LNZ"] }}'
          cacheable: true
    when: (itsv_machine_serial.stdout is match "IBM,02781A6BX") or
          (itsv_machine_serial.stdout is match "IBM,02781A6CX") or
          (itsv_machine_serial.stdout is match "IBM,02781A6DX")
  - debug:
      var: itsv_hostgroup
  
  - set_fact:
          itsv_hostgroup: '{{ itsv_hostgroup | default([]) + ["WBG"] }}'
          cacheable: true
    when: (itsv_machine_serial.stdout is match "IBM,022199BF7")
  - debug:
      var: itsv_hostgroup
  
  - set_fact:
          itsv_hostgroup: '{{ itsv_hostgroup | default([]) + ["GBG"] }}'
          cacheable: true
    when: (itsv_machine_serial.stdout is match "IBM,022199BB7")
  - debug:
      var: itsv_hostgroup
  
  - set_fact:
          itsv_hostgroup: '{{ itsv_hostgroup | default([]) + ["VIE"] }}'
          cacheable: true
    when: (itsv_machine_serial.stdout is match "IBM,022199BF7") or
          (itsv_machine_serial.stdout is match "022199BB7") or
          (itsv_machine_serial.stdout is match "IBM,02060CE6R")
  
  - debug:
      var: itsv_hostgroup
  </code></pre>
  
  <p>in this example the WBG value is overwritten by the VIE value in the end.</p>
  
  <pre><code>    - shell: /usr/bin/uname -L | cut -d ' ' -f2
        register: itsv_lparname
  
      - command: /usr/sbin/lsattr -El sys0 -a systemid -F value
        register: itsv_machine_serial
  
      - set_fact:
              itsv_hostgroup: "LNZ"
              cacheable: true
        when: (itsv_machine_serial.stdout is match "IBM,02781A6BX") or
              (itsv_machine_serial.stdout is match "IBM,02781A6CX") or
              (itsv_machine_serial.stdout is match "IBM,02781A6DX")
      - debug:
          var: itsv_hostgroup
  
      - set_fact:
              itsv_hostgroup: "WBG"
              cacheable: true
        when: (itsv_machine_serial.stdout is match "IBM,022199BF7")
      - debug:
          var: itsv_hostgroup
  
      - set_fact:
              itsv_hostgroup: "GBG"
              cacheable: true
        when: (itsv_machine_serial.stdout is match "IBM,022199BB7")
      - debug:
          var: itsv_hostgroup
  
      - set_fact:
              itsv_hostgroup: "VIE"
              cacheable: true
        when: (itsv_machine_serial.stdout is match "IBM,022199BF7") or
              (itsv_machine_serial.stdout is match "022199BB7") or
              (itsv_machine_serial.stdout is match "IBM,02060CE6R")
      - debug:
          var: itsv_hostgroup
  
  
  
  root@lpgaixmgmtlx01:/etc/ansible/aix&gt;ansible-playbook -i AIXWUKIT, testplay.yml
  
  PLAY [run test play] ******************************************************************************************************************************************************************************************
  
  TASK [Gathering Facts] ****************************************************************************************************************************************************************************************
  ok: [AIXWUKIT]
  
  TASK [hostgroups : shell] *************************************************************************************************************************************************************************************
  changed: [AIXWUKIT]
  
  TASK [hostgroups : command] ***********************************************************************************************************************************************************************************
  changed: [AIXWUKIT]
  
  TASK [hostgroups : set_fact] **********************************************************************************************************************************************************************************
  skipping: [AIXWUKIT]
  
  TASK [hostgroups : debug] *************************************************************************************************************************************************************************************
  ok: [AIXWUKIT] =&gt; {
      "itsv_hostgroup": []
  }
  
  TASK [hostgroups : set_fact] **********************************************************************************************************************************************************************************
  ok: [AIXWUKIT]
  
  TASK [hostgroups : debug] *************************************************************************************************************************************************************************************
  ok: [AIXWUKIT] =&gt; {
      "itsv_hostgroup": "WBG"
  }
  
  TASK [hostgroups : set_fact] **********************************************************************************************************************************************************************************
  skipping: [AIXWUKIT]
  
  TASK [hostgroups : debug] *************************************************************************************************************************************************************************************
  ok: [AIXWUKIT] =&gt; {
      "itsv_hostgroup": "WBG"
  }
  
  TASK [hostgroups : set_fact] **********************************************************************************************************************************************************************************
  ok: [AIXWUKIT]
  
  TASK [hostgroups : debug] *************************************************************************************************************************************************************************************
  ok: [AIXWUKIT] =&gt; {
      "itsv_hostgroup": "VIE"
  }
  
  TASK [print out the hostname of target] ***********************************************************************************************************************************************************************
  changed: [AIXWUKIT]
  </code></pre>