Ответ 1
Да, есть более чистый способ. Вы можете установить переменные среды для каждой задачи:
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 vars за игру:
- hosts:
- localhost
gather_facts: no
environment:
JAVA_HOME: /usr/java/jre1.8.0_51
tasks:
...
Теперь он будет доступен для всех задач этой игры.
См. Настройка среды и Часто задаваемые вопросы. Как установить PATH или любую другую переменную среды для задачи или всего playbook? в документах.
Другой пример с задачей script:
tasks:
- script: /tmp/script.sh
environment:
JAVA_HOME: /usr/java/jre1.8.0_51
register: shellout
- debug: var=shellout
Если script просто имеет это содержимое:
#!/bin/sh
echo JAVA_HOME is $JAVA_HOME