Ansible

滿足條件時停止劇本的 Ansible 播放

  • July 21, 2022

我需要在劇本中創建一個劇本,當滿足條件時劇本失敗。

更具體地說,如果使用者嘗試重新安裝目標伺服器上已經安裝的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

引用自:https://unix.stackexchange.com/questions/710627