在ansible条件中计算返回码
我正致力于自动化一项任务,该任务需要将最新版本的软件附加到一个文件中。我不想在同一个版本中多次这样做 它查看以下示例文件:在ansible条件中计算返回码,ansible,Ansible,我正致力于自动化一项任务,该任务需要将最新版本的软件附加到一个文件中。我不想在同一个版本中多次这样做 它查看以下示例文件: 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", ); 默认的main.yml将传入
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",
);
默认的main.yml将传入如下内容
VERSION: 4.16.2
代码
问题:调试消息正在评估当前的_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
正如评论中指出的那样。Ansible然后将此(实际上是shell/command任务中除0以外的任何状态代码)解释为错误,因此立即失败
通过使用,您可以告诉Ansible忽略shell/command任务中的响应代码。尽管使用grep
时,这将忽略实际错误(由返回代码2给出),因此您可能希望这样使用:
- name: register version check
shell: cat /root/versions.js | grep -q {{VERSION}}
register: current_version
failed_when: current_version.rc == 2
你能发布这个剧本的输出吗?你不能进入when语句,因为返回码是1。添加“忽略错误:真”。nikobelia-这解决了我的问题!请随意回答这个问题,如果您愿意,我可以标记它。谢谢。是的,为了完成,您还可以在以下情况下使用:
failed\u:(result.rc不在[0,1])
甚至result.rc>1
…
- name: register version check
shell: cat /root/versions.js | grep -q {{VERSION}}
register: current_version
failed_when: current_version.rc == 2