Java_HOME
などの変数を設定し、PATH
を更新する必要があります。これを行うには多くの方法があります。 1つの方法は、/etc/environment
変数を更新し、 lineinfile モジュールを使用してJava_HOME
の行を含めてから、ゲストOSでコマンドソース/etc/environment
を直接実行することです(私の場合はCentOS)。
別の方法は、エクスポートコマンドを実行することです.
export Java_HOME=/usr/Java/jre1.8.0_51
export PATH=$PATH:$Java_HOME
これらをすべて実行するには、環境変数を更新するためにOSでファイルを操作し、コマンドを直接実行する必要があるため、よりクリーンな方法がありますか?
はい、よりクリーンな方法があります。タスクごとに環境変数を設定できます。
tasks:
- Shell: echo Java_HOME is $Java_HOME
environment:
Java_HOME: /usr/Java/jre1.8.0_51
register: shellout
- debug: var=shellout
出力:
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": []
}
}
}
タスクで上記のような環境変数を設定した場合、この特定のタスクでのみ使用できます。後続のタスクでは、再度定義しない限り存在しません。
プレイごとにenv変数も定義できますが:
- hosts:
- localhost
gather_facts: no
environment:
Java_HOME: /usr/Java/jre1.8.0_51
tasks:
...
これで、このプレイのすべてのタスクで使用できるようになります。
環境の設定 および FAQ:タスクまたはプレイブック全体のPATHまたはその他の環境変数を設定するにはどうすればよいですか? を参照してください。
スクリプトタスクの別の例:
tasks:
- script: /tmp/script.sh
environment:
Java_HOME: /usr/Java/jre1.8.0_51
register: shellout
- debug: var=shellout
スクリプトが単にこのコンテンツを持っている場合:
#!/bin/sh
echo Java_HOME is $Java_HOME
これを行う回避策は、Ansibleで lineinfile コマンドを使用することであることがわかりました。
- name: Set Java_HOME
lineinfile: dest=/etc/environment state=present regexp='^Java_HOME' >
line='Java_HOME=/opt/jre1.8.0_51/bin'
これは理想的ではありませんが、新しい環境変数を作成できます。もちろん、変数を使用してディレクトリパスを作成する必要があります。例を簡単にするために、明示的なパスを含めました。
Lineinfileアプローチを更新します。 Java_HOME値にはbinディレクトリを含めないでください。以下はcentosで機能しました:
- name: Set Java_HOME
lineinfile:
dest: /etc/environment
state: present
regexp: '^Java_HOME'
line: 'Java_HOME=/usr/lib/jvm/Java-1.8.0-openjdk'