Ansible set_facts в зависимости от версии ОС не работает - PullRequest
0 голосов
/ 15 марта 2020

Я хочу установить патч в зависимости от версии ОС. придумал этот playbook в Ansible версии 2.8. но это дает The task includes an option with an undefined variable. сообщение об ошибке в строке отладки.

---
- hosts: all
  gather_facts: yes
  vars:
      patch_name_8: 'centos8-updates'
      patch_name_7: 'centos7-updates'
  tasks:
    - name: Set fact for CentOS 7
      set_fact:
        install_patch_name: "{{ patch_name_7 }}"
      when: ansible_distribution_major_version == 7

    - name: Set fact for CentOS 8
      set_fact:
        install_patch_name: "{{ patch_name_8 }}"
      when: ansible_distribution_major_version == 8

    - name: patch name display
      debug:
        msg: "install {{ install_patch_name }}"

Как установить значение переменной install_patch_name в зависимости от версии ОС?

, добавив сообщение об ошибке:

TASK [patch name display] ************************************************************************************************************
fatal: [host01]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'install_patch_name' is undefined\n\nThe error appears to be in 't.yaml': line 23, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n
- name: patch name display\n      ^ here\n"}

спасибо

1 Ответ

2 голосов
/ 15 марта 2020

TLDR;

Использовать

when: ansible_distribution_major_version == "8"

или

when: ansible_distribution_major_version | int == 8

Пояснение

Примечание: все следующие примеры сыграны против centos:8 docker image.

Факт, за которым вы следите, возвращается в виде строки:

[root@f6408271fc8c ~]# ansible localhost -m setup -a filter=ansible_distribution_major_version
localhost | SUCCESS => {
    "ansible_facts": {
        "ansible_distribution_major_version": "8"
    },
    "changed": false
}

Переменные сохраняют свои типы при использовании сравнения и должны быть правильно преобразованы в случае необходимости, как показано в следующей пьесе.

---
- hosts: localhost

  tasks:
    - name: default compare
      debug:
        msg: Comparison is true
      when: ansible_distribution_major_version == 8

    - name: compare as strings
      debug:
        msg: Comparison is true
      when: ansible_distribution_major_version == "8"

    - name: compare as ints
      debug:
        msg: Comparison is true
      when: ansible_distribution_major_version | int == 8

Что дает

[root@f6408271fc8c ~]# ansible-playbook play.yml 

PLAY [localhost] **************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************************************************************************************************
ok: [localhost]

TASK [default compare] ********************************************************************************************************************************************************************************************
skipping: [localhost]

TASK [compare as strings] *****************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "Comparison is true"
}

TASK [compare as ints] ********************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "Comparison is true"
}

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...