我们正在尝试安装弹性搜索,并且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"]}
是否有一种方法可以指定是否存在次要版本不匹配不会使任务失败。
由于
答案 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
,您可以看到它被视为未失败。
希望有所帮助