ansible - 仅使用 selectattr 的条件 set_fact?
问题描述
我正在尝试使用 set_fact,但仅限于定义项目时。我很难弄清楚如何做到这一点。
剧本:
---
- hosts: localhost
vars:
apps:
- name: app1
role: "app1-role"
- name: app2
role: "app2-role"
- name: app4
role: "app4-role"
tasks:
- name: "Find a matching app, and print the values"
set_fact:
app: "{{ apps | selectattr('name', 'match', app_name) | first }}"
没有匹配项时任务失败,例如:app_name=app3
,并显示以下消息:
失败的!=> {"msg": "该任务包含一个带有未定义变量的选项。错误是:没有第一项,序列为空。
我尝试了一些不同的条件,但我不太确定如何构建它。
when: (apps | selectattr('name', 'match', app_name)) is undefined
此条件始终评估为 False - skipping: [localhost] => {"changed": false, "skip_reason": "Conditional result was False"}
。
解决方案
我试过这个:
when: "{{ apps | selectattr('name', 'match', app_name) | list }}"
似乎没有list
过滤器,selectattr
返回生成器对象似乎不允许转换为布尔值以进行测试评估。不过,我不是 100% 确定这种解释。
请注意,拥有is defined
或不拥有不会改变任何东西,这将是完全等价的。
推荐阅读
- javascript - vue.js 元素 ui 将布尔数据绑定到选择列
- angularjs - Angular js中的当前路线
- javascript - 在 datepicker PHP 中为周末创建输出
- javascript - 如何获取剃须刀中单选按钮的值以将其作为参数传递给操作?
- uiview - 以编程方式布局视图时 UIViewController 中的前 20px 填充
- visual-studio-2017 - 如何在 vs2017 的包管理器控制台中编写安装包的命令行
- android - 如何在不使屏幕变黑的情况下设置壁纸
- python-3.x - 从不同的输入文件制作输出文件
- java - 创建报告时如何修复错误(jacoco)
- php - 如何让浏览量准确倒计时