我需要在剧本中创建一个剧本,当满足条件时剧本会失败。
更具体地说,如果用户尝试重新安装目标服务器上已安装的 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