如何使用ansible中的循环显示主机服务器的当前java版本

如何使用ansible中的循环显示主机服务器的当前java版本,ansible,Ansible,我需要使用ansible中的循环来显示当前的java版本。目前,我可以在主机服务器上获取并显示相同的值,但当我需要在另一个播放中传递相同的值时,它在那里不起作用。 下面是剧本- 问题是,为了获得java版本的值,在localhost play中到底需要更改什么,并且在将来的情况下,如果我们添加或删除任何主机服务器,那么就不需要更改编码,因为它必须在循环中 Host inventory - [testserver] zlp12037 ansible_ssh_host=zlp12037.vci.

我需要使用ansible中的循环来显示当前的java版本。目前,我可以在主机服务器上获取并显示相同的值,但当我需要在另一个播放中传递相同的值时,它在那里不起作用。 下面是剧本- 问题是,为了获得java版本的值,在localhost play中到底需要更改什么,并且在将来的情况下,如果我们添加或删除任何主机服务器,那么就不需要更改编码,因为它必须在循环中

Host inventory  -

[testserver]
zlp12037 ansible_ssh_host=zlp12037.vci.att.com ansible_ssh_user=abc
zlp12036 ansible_ssh_host=zlp12036.vci.att.com ansible_ssh_user=abc

---
- hosts: testserver
  tasks:
- name: Fetch Java Version
  shell: java -version 2>&1 | grep    version | awk '{print $3}' | sed 's/"//g'
  register: result
- debug: msg="{{item}}:{{result.stdout}}"
  with_items: "{{ inventory_hostname }}"

- hosts: localhost
  tasks:
- debug: var=hostvars['item']['result']['stdout']
  with_items: groups['inventory_hostname']

Result: 

 TASK [Fetch Java Version]  ******************************************************
 changed: [zlp12037]
 changed: [zlp12036]

TASK [debug] *******************************************************************
ok: [zlp12037] => (item=zlp12037) => {
  "item": "zlp12037",
  "msg": "zlp12037:1.8.0_66"
}
ok: [zlp12036] => (item=zlp12036) => {
  "item": "zlp12036",
  "msg": "zlp12036:1.8.0_66"
}


PLAY [localhost] ***************************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [debug] *******************************************************************
ok: [localhost] => (item=groups['inventory_hostname']) => {
    "hostvars['item']['result']['stdout']": "VARIABLE IS NOT DEFINED!",
    "item": "groups['inventory_hostname']"
}

PLAY RECAP *********************************************************************
localhost                  : ok=2    changed=0    unreachable=0        failed=0
zlp12036                   : ok=3    changed=1    unreachable=0    failed=0
zlp12037                   : ok=3    changed=1    unreachable=0    failed=0
  • 必须对带有\u项的
    进行模板化
  • object['item']
    从名为
    item
  • groups[inventory\u hostname]
    将在您的案例中尝试查找名为
    localhost
    的组
  • 我想,你想要:

    - hosts: localhost
      tasks:
        - debug: var=hostvars[item]['result']['stdout']
          with_items: "{{ groups['testserver'] }}"
    

    您可以运行bash脚本来执行Java版本值,并将其存储在一个文件中,您可以在ansible playbook中读取该文件

                if type -p java; then
                    echo found java executable in PATH
                    _java=java
                elif [[ -n "$JAVA_HOME" ]] && [[ -x "$JAVA_HOME/bin/java" ]];  
     then
                    echo found java executable in JAVA_HOME     
                    _java="$JAVA_HOME/bin/java"
                else
                    echo "no java"
                fi
    
                if [[ "$_java" ]]; then
                    version=$("$_java" -version 2>&1 | awk -F '"' '/version/ 
      {print $2}')
                    echo version "$version"
                    if [[ "$version" > "1.5" ]]; then
                        echo version is more than 1.5
                    else         
                        echo version is less than 1.5
                    fi
                fi