我的 ansible 角色执行以下操作:
weblogic
的用户,以 bash
作为其 shell、主目录和组的一部分 weblogic
oracle_home
目录中,由 weblogic
用户拥有最后:
- name: Set
become: true
become_user: weblogic
set_fact:
newpath: "{{JAVA_HOME}}/bin:{{lookup('ansible.builitin.env', 'PATH')}}"
所以
newpath
是
"/opt/oracle/jdk1.8.0_431/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
我的问题是这个任务:
- name : Validate Java
become: true
become_user: weblogic
command: "java -version"
environment:
JAVA_HOME: "{{JAVA_HOME}}"
PATH: "{{newpath}}"
register: javaver
/usr/bin/java
我直接以用户身份检查了两台主机上的
weblogic
:
export JAVA_HOME=/opt/oracle/jdk1.8.0_431
export PATH="/opt/oracle/jdk1.8.0_431/bin:$PATH"
java -version
bash: /opt/oracle/jdk1.8.0_431/bin/java: No such file or directory
java version "1.8.0_431"
查找为您提供来自控制器而不是受管节点的信息。
允许您在调用 Ansible 时查询控制器上可用的环境变量。
来源:ansible.builtin.env概要,重点,我的。
在这里,您需要受管节点信息,假设您在剧本中收集了事实,
ansible_env.PATH
。
所以,你实际上应该设置
newpath: "{{ JAVA_HOME }}/bin:{{ ansible_env.PATH }}"