使用ansible检索目标节点的env变量

时间:2015-09-21 21:59:27

标签: bash variables ansible

我正在尝试使用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目录。

2 个答案:

答案 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提出的提案。