在环境变量 PATH 上使用查找 ansible.builitin.env 不会给出正确的值

问题描述 投票:0回答:1

我的 ansible 角色执行以下操作:

  • 创建一个名为
    weblogic
    的用户,以
    bash
    作为其 shell、主目录和组的一部分
    weblogic 
  • 将 JDK 解压到
    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
  • 在 ubuntu 24 上,我发现 Java 安装在
    /usr/bin/java
  • 在 SUSE SLES15 上我得到了想要的 Java 路径

我直接以用户身份检查了两台主机上的

weblogic

export JAVA_HOME=/opt/oracle/jdk1.8.0_431
export PATH="/opt/oracle/jdk1.8.0_431/bin:$PATH"
java -version
  • 在 ubuntu 主机上:
    bash: /opt/oracle/jdk1.8.0_431/bin/java: No such file or directory
    
  • 在 SUSE 上:
    java version "1.8.0_431"
    
ansible environment-variables
1个回答
0
投票

查找为您提供来自控制器而不是受管节点的信息。

允许您在调用 Ansible 时查询控制器上可用的环境变量。

来源:ansible.builtin.env概要,重点,我的。

在这里,您需要受管节点信息,假设您在剧本中收集了事实,

ansible_env.PATH

所以,你实际上应该设置

newpath: "{{ JAVA_HOME }}/bin:{{ ansible_env.PATH }}"
© www.soinside.com 2019 - 2024. All rights reserved.