Ansible中如何打印set_fact最后递增的dbsuccescount值?
解决方案
1. 错误原因
你用{{ dbsuccescount }} | last的写法是错误的——dbsuccescount是单一的数值/字符串变量,并非列表、数组这类可迭代对象,而last过滤器仅用于从可迭代对象中取最后一个元素,对单值变量使用会导致逻辑错误。
2. 正确的Debug输出写法
直接引用最终的dbsuccescount变量即可实现你要的格式化输出,修改debug任务如下:
- debug: msg: "the dbsucesscount is {{ dbsuccescount }} ---> which is the last incremented value"
3. 可选优化:初始化变量避免潜在报错
如果剧本未提前初始化dbsuccescount,第一次执行时可能因变量不存在抛出异常,建议在计数任务前添加初始化步骤:
- name: Initialize dbsuccescount set_fact: dbsuccescount: 0 tags: dbstatus_success
4. 完整优化后剧本片段
- name: Initialize dbsuccescount set_fact: dbsuccescount: 0 tags: dbstatus_success - name: Count lines containing both OPEN and ALLOWED set_fact: dbsuccescount: "{{ dbsuccescount | int + 1 }}" when: item | regex_search('OPEN') and item | regex_search('ALLOWED') with_items: "{{ file_check.stdout_lines }}" tags: dbstatus_success - debug: msg: "the dbsucesscount is {{ dbsuccescount }} ---> which is the last incremented value"
预期执行效果
运行后会输出类似内容:
ok: [localhost] => { "msg": "the dbsucesscount is 107 ---> which is the last incremented value" }
内容的提问来源于stack exchange,提问作者sravya vellanki
相关产品推荐
相关产品推荐

