我想在主持人劇本執行期間更新主機上的環境變量(本地執行本劇本),因此其餘任務可以使用env變量的更新值,但似乎這是不可能的。Ansible - 在劇本執行過程中更新env變量
讓我給你的就是我試圖完成一個例子:
# Environment variable before changing
- set_fact: env_before="{{ lookup('env', 'ENV_VAR') }}"
# A task that updates the env variable, I tried to make the needed configuration
# into ~/.bashrc, ~/.bash_profile, ~/.profile, /etc/environment
# Environment variable after changing
- set_fact: env_after="{{ lookup('env', 'ENV_VAR') }}"
# Unfortunately env_after = env_before
如果我重新執行劇本,但這次不改變環境變量中,env_before和env_after將具有env變量的更新值。
例子:
- 1st Execution:
- env_before = ENV_VAR = 10
- update_ENV_VAR to 20 and update ~/.bashrc, ~/.bash_profile, ~/.profile, /etc/environment files
with export ENV_VAR=20 etc.
- env_after = ENV_VAR = 20
- 2nd Execution (Do not make any changes just skip the update_ENV_var step
- env_before = ENV_VAR = 20 (new value from previous execution)
所以作爲我的理解,ansible加載僅在劇本開始ENV變量,並保持這些值,直到結束。看起來,這些可靠的任務並沒有更新/採購相應的bash conf文件。所以我無法找到一種方法來更新ENV變量,其新值將在以下任務中可用。
這可能工作的唯一方法是在下一個任務中定義環境:關鍵字,但我想避免這種情況。這個新值將被許多任務使用,所以我正在尋找一種在劇本執行過程中更新其值的方法。
爲什麼你在這裏使用環境變量而不是事實?一般來說,您不能在運行時更改linux中正在運行的進程的環境。 –
@KonstantinSuvorov我正在使用和修改環境變量,因爲更新後的下一個任務正在使用linux環境變量變量來執行它。但我不想使用每個任務的環境關鍵字,所以我正在尋找替代方案。 – PyTzatzi