ansible - 如何根据 ansible_facts 定义 var 的值

ansible - how to define var's value depending on ansible_facts

我正在编写用于安装的 ansible 剧本 jdk。

如果系统是“Ubuntu”,逻辑是使用版本 8,如果是“CentOS”,则使用 1.8.0。

以下是我的代码:

- hosts: all
  vars:
    - java_open_jdk_version_major: 8
      when: ansible_distribution == 'Ubuntu'
    - java_open_jdk_version_major: 1.8.0
      when: ansible_distribution == 'CentOS'
  roles:
    - name: jdk

这样,“java_open_jdk_version_major”总是变成1.8.0.

这种情况下如何定义变量?

你这样做:

- hosts: all
  vars:
    - java_open_jdk_version_major: "{{ '1.8.0' if ansible_distribution == 'CentOS' else '8' }}"
  roles:
    - name: jdk

你总是以版本“1.8.0”结尾的原因,是因为你的变量定义是一个列表,when条件没有在那里做任何事情。

java_open_jdk_version_major先求值时,它的值为“8”,但在下面找到另一个定义,即“1.8.0”,最后求值的值获胜。

实现此目的的另一种方法,确保为相应的发行版设置适当的版本CentOSUbuntu)是使用 pre_tasks 部分,像这样:

- hosts: all

  pre_tasks:
    - name: set JDK major version for CentOS
      set_fact:
        java_open_jdk_version_major: "1.8.0"
      when: ansible_distribution == 'CentOS'

    - name: set JDK major version for Ubuntu
      set_fact:
        java_open_jdk_version_major: "8"
      when: ansible_distribution == 'Ubuntu'

  roles:
    - name: jdk