Ansible debug输出results.stdout报VARIABLE IS NOT DEFINED错误
报错原因
该报错由两处问题导致:
- YAML缩进错误,sysctl模块参数未被正确识别
原playbook中state: present、sysctl_set: true、reload: true均为sysctl模块的合法参数,但编写时缩进层级和模块声明sysctl:同级,没有缩进至sysctl:的子层级下。Ansible解析任务时,仅会将缩进在sysctl:下的name、value识别为模块入参,其余三个参数会被直接忽略,导致任务执行逻辑异常。
注:
register: results是任务级关键字,当前缩进位置正确,无需缩进至模块内部。
- 引用了sysctl模块不存在的返回字段
即便修正缩进让任务正常执行,访问results.stdout仍会触发变量未定义报错。stdout字段仅存在于command、shell、script这类直接调用系统命令的模块返回结果中,用于存储命令执行的标准输出。sysctl是Ansible封装的原生配置类模块,返回结构化执行结果,不存在stdout字段,其常用返回字段包括:changed:布尔值,标记系统配置是否发生变更failed:布尔值,标记任务是否执行失败before:字符串,存储修改前的内核参数值after:字符串,存储修改后的内核参数值msg:字符串,存储执行结果的文本说明
修正后可正常运行的Playbook
--- - hosts: "{{ target }}" become: yes vars: sysctl_name: "vm.swappiness" sysctl_value: "6" tasks: - name: 'set VM swap setting' sysctl: name: "{{ sysctl_name }}" value: "{{ sysctl_value }}" state: present sysctl_set: true reload: true register: results - name: 输出完整任务执行结果 debug: var: results
如果仅需要查看配置生效的最终值,可将debug模块的var参数改为results.after。
内容的提问来源于stack exchange,提问作者user19137493
相关产品推荐
相关产品推荐

