我正在尝试使用ansible获取目标节点的env variale JAVA_HOME值。
- name: Copy JAVA_HOME location to variable
command: bash -c "echo $JAVA_HOME"
sudo: yes
register: java_loc
当我在另一个任务中使用java_loc.stdout值时,它显示空白值。我如何获得该env变量并在另一个任务中使用它?
我需要将文件复制到JAVA目录中的JAVA目录。
答案 0 :(得分:2)
使用非登录shell通过SSH进行Ansible登录。可能你的问题是你在$ HOME / .bash_profile或其他需要登录shell的文件中定义了环境变量,所以你需要添加&#34; -l </ strong>&#34;标记为&#34; / bin / bash &#34;:
---
- name: Copy JAVA_HOME location to variable
command: /bin/bash -l -c "echo $JAVA_HOME"
sudo: no
register: java_loc
- name: show debug
debug: var=java_loc
请试一试,让我知道,
答案 1 :(得分:0)
如果您的Java已经足够使用 jrunscript ,那么您可以从Java安装中获取Java Path,从而避免依赖于您的环境。下面的代码执行此操作,如果没有 jrunscript ,则不会失败。
- name: Detemine Java home
command: 'jrunscript -e java.lang.System.out.println(java.lang.System.getProperty(\"java.home\"));'
changed_when: False
ignore_errors: True
register: locate_java_home
- name: Set a variable for Java home
set_fact:
java_home: "{{ (locate_java_home.rc == 0) | ternary(locate_java_home.stdout, '') }}"
解决方案基于here提出的提案。