条件が満たされると、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 の値です。

私のエラーがどこにあるのか理解できないようです。私が何を間違っているのでしょうか?

ベストアンサー1

条件付きで二重括弧で囲まれた変数を閉じないでください"{{ }}"。デフォルトでは、変数は条件で拡張されます。たとえば、テスト

    - 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, '<=')

おすすめ記事