我正在努力自动执行需要将最新版本的软件附加到文件的任务.我不想为同一版本多次这样做.
它查看以下示例文件:
var software releases = new Array(
"4.3.0",
"4.4.0",
"4.5.0",
"4.7.0",
"4.8.0",
"4.11.0",
"4.12.1",
"4.14.0",
"4.15.0",
"4.16.0",
);
Run Code Online (Sandbox Code Playgroud)
默认的main.yml会传递类似的东西
VERSION: 4.16.2
Run Code Online (Sandbox Code Playgroud)
码
- name: register version check
shell: cat /root/versions.js | grep -q {{VERSION}}
register: current_version
- debug: msg="The registered variable output is {{ current_version.rc }}"
- name: append to versions.js
lineinfile:
dest: /root/versions.js
regexp: '^\);'
insertbefore: '^#\);'
line: " \"{{VERSION}}\",\n);"
owner: root
state: present
when: current_version.rc == 1
Run Code Online (Sandbox Code Playgroud)
问题:调试消息正在评估current_version.rc并显示基于grep命令输出的布尔值,但我无法在when
条件中重复使用它来确定是否应该运行任务.
编辑:输出:
PLAY [localhost] **************************************************************
GATHERING FACTS ***************************************************************
ok: [localhost]
TASK: [test | register version check] *****************************************
failed: [localhost] => {"changed": true, "cmd": "cat /root/versions.js | grep -q 3.19.2", "delta": "0:00:00.003570", "end": "2015-12-17 00:24:49.729078", "rc": 1, "start": "2015-12-17 00:24:49.725508", "warnings": []}
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/root/site.retry
localhost : ok=1 changed=0 unreachable=0 failed=1
Run Code Online (Sandbox Code Playgroud)
yda*_*coR 41
正如nikobelia在评论中指出的那样,grep
当它与任何行不匹配时返回退出代码1.Ansible然后将此(实际上是来自shell /命令任务的0以外的任何状态代码)解释为错误,因此立即失败.
您可以通过使用来告诉Ansible忽略shell /命令任务中的响应代码ignore_errors
.虽然grep
这会忽略实际错误(由返回码2给出),所以你可能想要这样使用failed_when
:
- name: register version check
shell: cat /root/versions.js | grep -q {{VERSION}}
register: current_version
failed_when: current_version.rc == 2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
48871 次 |
最近记录: |