ansible 2.9.2获得跳过的原因:;“条件结果为假”;即使满足条件字符串

ansible 2.9.2获得跳过的原因:;“条件结果为假”;即使满足条件字符串,ansible,Ansible,我正在尝试安装一些RPM,只有在定义了变量之后。 但即使定义了变量,我也会收到跳过消息。 我尝试了三种不同的条件,所有条件都被跳过了 我的任务是: - name: Install elasticsearch packages package: name={{ package.item }} state=installed when: ansible_distribution == item.when with_items: - { package: "logstas

我正在尝试安装一些RPM,只有在定义了变量之后。 但即使定义了变量,我也会收到跳过消息。 我尝试了三种不同的条件,所有条件都被跳过了

我的任务是:

- name: Install elasticsearch packages
  package: name={{ package.item }} state=installed
  when: ansible_distribution == item.when
  with_items:
    - { package: "logstash-{{ logstash_ver }}", when: (logstash_ver is defined) and (logstash_ver|length > 0) }
    - { package: "kibana-{{ kibana_ver }}", when: ( inventory_hostname == kibana_ver ) }
    - { package: "elasticsearch-{{ elasticsearch_ver }}", when: ( host_enviroment == elasticsearch_ver ) }

Here is the message I am getting:
skipping: [host1] => (item={u'when': u'(logstash_ver is defined) and (logstash_ver|length > 0)', u'package': u'logstash-7.9.0-1'}) => {"ansible_loop_var": "item", "changed": false, "item": {"package": "logstash-7.9.0-1", "when": "(logstash_ver is defined) and (logstash_ver|length > 0)"}, "skip_reason": "Conditional result was False"}

skipping: [host1] => (item={u'when': u'( inventory_hostname == kibana_ver )', u'package': u'kibana-7.9.1-1'}) => {"ansible_loop_var": "item", "changed": false, "item": {"package": "kibana-7.9.1-1", "when": "( inventory_hostname == kibana_ver )"}, "skip_reason": "Conditional result was False"}

skipping: [host1] => (item={u'when': u'( host_enviroment == elasticsearch_ver )', u'package': u'elasticsearch-7.8.1-1'}) => {"ansible_loop_var": "item", "changed": false, "item": {"package": "elasticsearch-7.8.1-1", "when": "( host_enviroment == elasticsearch_ver )"}, "skip_reason": "Conditional result was False"}
最后,我应该安装大约15个RPM,所以我真的希望使用带有when条件的_项

你知道怎么做吗


谢谢

您是否真的有名为
'(主机环境==elasticsearch\u ver)
'(定义了logstash\u ver)和(logstash\u ver | length>0)的发行版
?因为这就是你要测试的…是的,我把它添加到了额外的变量中。以下任务在之前运行,并检查变量是否有值且已定义。以下任务在之前运行,并检查变量是否有值且已定义。-shell:echo“变量'logstash_ver'已定义且不为空”时:(logstash_ver已定义)和(logstash_ver | length>0),对于上述每一条“stdout_行”,结果正常:[“变量'logstash_ver'已定义且不为空”]这是一个重复的问题。。。您的
when
子句是
ansible\u distribution==item.when
。您实际上是在将
ansible\u发行版
varialble(其中包含例如“Ubuntu”或“Centos”)的内容与
项目的确切字符串内容进行比较。当
例如
”(主机环境==elasticsearch版本)
时。1) 我认为您不希望
项。当
内容是字符串,但计算变量的结果(在周围添加jinja2标记)2)即使在计算时,我认为您也不希望将结果与当前操作系统名称(不是布尔值)进行比较。为了清晰起见,您需要编辑您的问题。谢谢!这是有益的,我改变了条件,它的工作!