在 Ansible 中,无效参数错误通常是由于模块参数使用不当或参数值不正确引起的。例如,在使用 ansible.builtin.file 模块创建符号链接时,可能会因为参数错误的问题而导致playbook剧本任务失败。
错误示例
以下是一个包含了无效参数的错误 Ansible Playbook 示例:
---
- name: file module demo
hosts: all
vars:
mylink: "~/example"
mysrc: "/proc/cpuinfo"
tasks:
- name: Creating a symlink
ansible.builtin.file:
path: "{{ mylink }}"
dest: "{{ mysrc }}"
state: link
错误信息
运行上面 Playbook 的时候,可能会发生下面的错误输出:
$ ansible-playbook -i virtualmachines/demo/inventory troubleshooting/invalidargument_error.yml
PLAY [file module demo] ******************************************************
TASK [Gathering Facts] ******************************************************
ok: [demo.example.com]
TASK [Creating a symlink] ****************************************************
fatal: [demo.example.com]: FAILED! => {"changed": false, "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error"}
详细错误信息(使用 -vvv 参数):
$ ansible-playbook -i virtualmachines/demo/inventory troubleshooting/invalidargument_error.yml -vvv
...
OSError: [Errno 22] Invalid argument: b'/proc/cpuinfo'
问题原因
- 参数错误:ansible.builtin.file 模块中,path 参数应指定目标路径,而 src 参数应指定源路径。在错误代码中,path 和 dest 参数都发生错误,没有正确的引用。
- 路径问题:/proc/cpuinfo 它是一个内存文件系统,属于特殊的文件系统,无法直接用于创建符号链接。
修复方法
- 修正参数名称:将 path 替换为 dest,并确保使用正确的参数名称。
- 检查路径有效性:确保playbook中的目标路径和源路径都是有效的路径且可以正常访问。
修复后的 Playbook 如下所示:
---
- name: file module demo
hosts: all
vars:
mylink: "~/example"
mysrc: "/proc/cpuinfo"
tasks:
- name: Creating a symlink
ansible.builtin.file:
src: "{{ mysrc }}"
dest: "{{ mylink }}"
state: link
验证修复
修复问题后,重新运行 Playbook:
$ ansible-playbook -i virtualmachines/demo/inventory troubleshooting/invalidargument_fix.yml
PLAY [file module demo] ******************************************************
TASK [Gathering Facts] ******************************************************
ok: [demo.example.com]
TASK [Creating a symlink] ****************************************************
ok: [demo.example.com]
PLAY RECAP *******************************************************************
demo.example.com : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
总结
Ansible 中的无效参数错误通常是由于以下原因导致的:
- 参数名称错误:使用了错误的参数名称或参数值。
- 路径问题:目标路径或源路径无效或不可访问。