【问题标题】:ansible elastic search install version mismatch failureansible弹性搜索安装版本不匹配失败
【发布时间】:2018-06-13 15:13:40
【问题描述】:

我们正在尝试安装弹性搜索,但由于次要版本不匹配,ansible 任务失败。

我们使用的变量是:

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

这是我们的任务定义

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"]}

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

谢谢

【问题讨论】:

    标签: elasticsearch ansible


    【解决方案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,你可以看到它被认为是非失败的。

    希望对你有帮助

    【讨论】:

    • 非常感谢 ilias-sp。这就像一个魅力。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多