ansible elastic搜索安装版本不匹配失败

时间:2018-06-13 15:13:40

标签: elasticsearch ansible

我们正在尝试安装弹性搜索,并且ansible任务失败,因为次要版本不匹配。

我们使用的变量是:

es_major_version: "5.x"
es_version: "5.5.1"

这是我们的任务def

name: RedHat - Install Elasticsearch
  yum: name=elasticsearch{% if es_version is defined and es_version != ""  %}-{{ es_version }}{% endif %} state=present update_cache=yes
  when: es_use_repository
  register: redhat_elasticsearch_install_from_repo
  notify: restart elasticsearch
  until: '"failed" not in redhat_elasticsearch_install_from_repo'
  retries: 5
  delay: 10

我们得到的错误是:

TASK [elastic.elasticsearch : RedHat - Install Elasticsearch] **********************************************************************************************************************************************
FAILED - RETRYING: RedHat - Install Elasticsearch (5 retries left).
FAILED - RETRYING: RedHat - Install Elasticsearch (4 retries left).
FAILED - RETRYING: RedHat - Install Elasticsearch (3 retries left).
FAILED - RETRYING: RedHat - Install Elasticsearch (2 retries left).
FAILED - RETRYING: RedHat - Install Elasticsearch (1 retries left).
fatal: [ip-10-0-11-xxx]: FAILED! => {"attempts": 5, "changed": false, "msg": "", "rc": 0, "results": ["elasticsearch-5.5.1-1.noarch providing elasticsearch-5.5.1-1 is already installed"]}

是否有一种方法可以指定是否存在次要版本不匹配不会使任务失败。

由于

1 个答案:

答案 0 :(得分:1)

您指定的重试条件的逻辑存在一些问题。如果您运行没有until子句的任务,您将在failed变量中看到redhat_elasticsearch_install_from_repo属性。我相信你应该通过另一种方式来改进它,但看起来很棘手/耗时我不得不承认

但是如果您的代码已经足够好了,并且您只想修复:

  

是否有一种方法可以指定是否存在次要版本不匹配不会使任务失败。

您可以添加此failed_when指令:

failed_when: redhat_elasticsearch_install_from_repo.rc != 0

因为您可以看到rc在您的情况下为0。

基于以上所述,这是一个任务及其输出:

  - name: yum install
    yum: name=screen state=present update_cache=yes
    register: redhat_elasticsearch_install_from_repo
    until: '"failed" not in redhat_elasticsearch_install_from_repo'
    failed_when: redhat_elasticsearch_install_from_repo.rc != 0
    retries: 1
    delay: 5


  - name: output
    debug: 
      var: redhat_elasticsearch_install_from_repo

输出:

TASK [yum install] *****************************************************************************************************************************************************************************************************
FAILED - RETRYING: yum install (1 retries left).
ok: [rhel-green]

TASK [output] **********************************************************************************************************************************************************************************************************
ok: [rhel-green] => {
    "redhat_elasticsearch_install_from_repo": {
        "attempts": 1, 
        "changed": false, 
        "failed": true, 
        "failed_when_result": false, 
        "msg": "", 
        "rc": 0, 
        "results": [
            "screen-4.1.0-0.25.20120314git3c2946.el7.x86_64 providing screen is already installed"
        ]
    }
}

PLAY RECAP *************************************************************************************************************************************************************************************************************
rhel-green                 : ok=2    changed=0    unreachable=0    failed=0

上述输出中的failed来自until条件,而不是来自yum任务本身。 failed_when来自failed_when,您可以看到它被视为未失败。

希望有所帮助