조건이 충족되면 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, '<=')

답변2

조건이 충족되면 플레이북을 종료하고 싶은 경우


- 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

관련 정보