如何判別 Linux 發行版

Task 要依據 Linux 發行版來處理,該怎麼做呢?

這些資訊在 gather_facts 後,會放到 ansible_facts 裡,在寫 task 時,就可以直接使用。

主要的變數有這幾個:

  • ansible_distribution: 發行版名稱,例如 “CentOS”
  • ansible_distribution_major_version: 發行版主要版號,例如 “7”
  • ansible_distribution_version: 發行版版本,例如 “7.5.1804”
  • ansible_os_family: 發行版家族名稱,例如 CentOS 的 ansible_os_family 會是 RedHat

要看 ansible_facts 還有哪些變數可使用,可以參考 Discovering variables: facts and magic variables — Ansible Documentation

舉個例子:

---
- name: Detect distribution example
  hosts: all
  gather_facts: yes
  
  tasks:
    - name: Enable satellite-tools repository
      rhsm_repository:
        name: rhel-7-server-satellite-tools-6.8-rpms
        state: enabled
      when: ansible_distribution == "RedHat" and ansible_distribution_major_version == "7"

    - name: Enable satellite-tools repository
      rhsm_repository:
        name: satellite-tools-6.8-for-rhel-8-x86_64-rpms
        state: enabled
      when: ansible_distribution == "RedHat" and ansible_distribution_major_version == "8"

參考資料