조건이 충족되면 실패하는 플레이북 내에 플레이북을 만들어야 합니다.
더 구체적으로 말하면, 사용자가 대상 서버에 이미 설치된 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