Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
998 views
in Technique[技术] by (71.8m points)

java home - How to set environmental variables using Ansible

I need to set the variables like JAVA_HOME and update PATH. There are a number of ways of doing this. One way is to update the /etc/environment variable and include a line for JAVA_HOME using the lineinfile module and then run the command source /etc/environment directly on the guest OS (CentOS in my case).

Another way is to execute the export command e.g.

export JAVA_HOME=/usr/java/jre1.8.0_51
export PATH=$PATH:$JAVA_HOME

Is there a cleaner way to do this as all these require manipulating files and running commands directly on the OS to update the environment variables?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Yes, there is a cleaner way. You can set environment variables per task:

  tasks:
  - shell: echo JAVA_HOME is $JAVA_HOME
    environment:
      JAVA_HOME: /usr/java/jre1.8.0_51
    register: shellout
  - debug: var=shellout

Output:

TASK: [shell echo JAVA_HOME is $JAVA_HOME] ********************************** 
changed: [localhost]

TASK: [debug var=shellout] **************************************************** 
ok: [localhost] => {
    "var": {
        "shellout": {
            "changed": true, 
            "cmd": "echo JAVA_HOME is "$JAVA_HOME"", 
            "delta": "0:00:00.005797", 
            "end": "2015-08-07 06:32:47.295061", 
            "invocation": {
                "module_args": "echo JAVA_HOME is "$JAVA_HOME"", 
                "module_name": "shell"
            }, 
            "rc": 0, 
            "start": "2015-08-07 06:32:47.289264", 
            "stderr": "", 
            "stdout": "JAVA_HOME is /usr/java/jre1.8.0_51", 
            "stdout_lines": [
                "JAVA_HOME is /usr/java/jre1.8.0_51"
            ], 
            "warnings": []
        }
    }
}

If you set the environment variable like above in a task, it is only available for this specific task. In subsequent tasks it does not exist unless you define it again.

Though you can define env vars per play as well:

- hosts:
  - localhost
  gather_facts: no
  environment:
    JAVA_HOME: /usr/java/jre1.8.0_51
  tasks:
     ...

Now it's gonna be available for all tasks of this play.

See Setting the Environment and FAQ: How can I set the PATH or any other environment variable for a task or entire playbook? in the docs.


Another example with a script task:

  tasks:
  - script: /tmp/script.sh
    environment:
      JAVA_HOME: /usr/java/jre1.8.0_51
    register: shellout
  - debug: var=shellout

Where the script simply has this content:

#!/bin/sh

echo JAVA_HOME is $JAVA_HOME

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...