ansible:使用多个值设置事实

时间:2018-08-01 13:31:35

标签: ansible ansible-2.x ansible-facts

我正在编写一个有趣的角色,用于根据命令,路径等的输出来设置某种“主机组”。 问题是一个主机可以是多个这样的组中的一个的成员,这就是问题所在。我如何将多个值附加到一个特定的事实,而不用为这些组使用大量的不同变量,因为此列表可能会变得很长。

最好是这样的列表:

“ itsv_hostgroup”:{WBG,LNZ,...}


我最终提出了以下解决方案。在ansible的google小组中,也有一些聪明的家伙,他们认为自己不好提供一些有用的示例代码。

- 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

在此示例中,WBG值最后被VIE值覆盖。

    - 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>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] => {
    "itsv_hostgroup": []
}

TASK [hostgroups : set_fact] **********************************************************************************************************************************************************************************
ok: [AIXWUKIT]

TASK [hostgroups : debug] *************************************************************************************************************************************************************************************
ok: [AIXWUKIT] => {
    "itsv_hostgroup": "WBG"
}

TASK [hostgroups : set_fact] **********************************************************************************************************************************************************************************
skipping: [AIXWUKIT]

TASK [hostgroups : debug] *************************************************************************************************************************************************************************************
ok: [AIXWUKIT] => {
    "itsv_hostgroup": "WBG"
}

TASK [hostgroups : set_fact] **********************************************************************************************************************************************************************************
ok: [AIXWUKIT]

TASK [hostgroups : debug] *************************************************************************************************************************************************************************************
ok: [AIXWUKIT] => {
    "itsv_hostgroup": "VIE"
}

TASK [print out the hostname of target] ***********************************************************************************************************************************************************************
changed: [AIXWUKIT]

0 个答案:

没有答案