Ansible
滿足條件時停止劇本的 Ansible 播放
我需要在劇本中創建一個劇本,當滿足條件時劇本失敗。
更具體地說,如果使用者嘗試重新安裝目標伺服器上已經安裝的openjdk版本,則播放將進行此檢查並失敗,任務列表中的其餘播放將被取消。
到目前為止,我嘗試了以下游戲:
- name: Checking the old version shell: java -version 2> openjdk_version.txt ; grep -i "openjdk version" openjdk_version.txt > java_version_used.txt ; cut -d " " -f 3 java_version_used.txt | tr -d '"' register: jdk_old_vers - name: Comparing the new version with the older version fail: msg: The version selected for installation already exists on the server. Make sure you are selecting a different version! The play will now be stopped. when: "{{ jdk_new_version }} == {{ jdk_old_vers.stdout }}"
播放結果錯誤:
“msg”: “條件檢查 ‘{{ jdk_new_version }} != {{ jdk_old_vers.stdout }}’ 失敗。錯誤是:檢測到無效條件:無效語法
試過:
when: "{{ jdk_new_version }} = {{ jdk_old_vers.stdout }}"
但仍然失敗並出現同樣的錯誤。
jdk_new_version 的值=1.8.0_332。
似乎無法理解我的錯誤在哪裡……我做錯了什麼?
在條件中,不要關閉雙括號中的變數
"{{ }}"
。預設情況下,變數在條件中展開。例如,測試它- debug: msg: Fail when: jdk_new_version == jdk_old_vers.stdout vars: jdk_new_version: 1.8.0_332 jdk_old_vers: stdout: 1.8.0_332
給
msg: Fail
有關高級選項,請參閱比較版本。例如測試新版本不低於或等於舊版本
- debug: msg: Fail when: jdk_new_version is version(jdk_old_vers.stdout, '<=')
如果您想在條件滿足時結束劇本
- meta: end_play when: - jdk_new_version == jdk_old_vers.stdout vars: jdk_new_version: 1.8.0_332 jdk_old_vers: stdout: 1.8.0_332