在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