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”,最后求值的值获胜。
实现此目的的另一种方法,确保为相应的发行版设置适当的版本(CentOS
和 Ubuntu
)是使用 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
我正在编写用于安装的 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”,最后求值的值获胜。
实现此目的的另一种方法,确保为相应的发行版设置适当的版本(CentOS
和 Ubuntu
)是使用 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