WoJ*_*WoJ 6 yaml ansible ansible-playbook
我有一个ansible剧本引发了一个错误(像往常一样有可怕的消息):
ERROR! unexpected parameter type in action: <class 'ansible.parsing.yaml.objects.AnsibleSequence'>
The error appears to have been in '/root/myplaybook.yml': line 17, column 7, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
# configure rsyslog
- name: configure rsyslog to expose events on port 42000
^ here
Run Code Online (Sandbox Code Playgroud)
有问题的一行是我在本剧本和其他剧本中的其他专栏:
# prepare environment
# configure rsyslog
- name: configure rsyslog to expose events on port 42000
lineinfile:
- create: yes
- dest: /etc/rsyslog.d/expose-42000.conf
- line: "*.* @127.0.0.1:42000"
notify:
- restart rsyslog
Run Code Online (Sandbox Code Playgroud)
该文件由三个在线检查程序验证,因此没有YAML错误.这个事实足以让文件成为一个正确的ansible剧本吗?
我想要了解的是,正确的YAML文件是否只留下了ansible语法错误(例如,一个不存在的模块),或者是- name: blah blah blah一个Playbook是YAML的扩展(在某种意义上说,YAML的行是正常的)透视,但将被ansible拒绝,因为(我正在编写一个例子)它有两个以上的单词.
换句话说,我正在检查以下是否可以:YAML语法没问题,ansible关键字是正常的但是ansible通过一些限制完全不符合YAML语法.
编辑:康斯坦丁在他的回答中发现了一个错误.我将保留这个问题,因为它帮助我理解ansible没有对YAML文件本身施加约束,所以当出现错误并且验证时,我确实留下了特定的ansible语法错误(或者逻辑上,如同在我的情况下).
Kon*_*rov 11
不,有效的YAML不一定会给你一个有效的Ansible剧本.
错误消息是unexpected parameter type in action.
所以Ansible无法解释你想要的东西.特别:
lineinfile:
- create: yes
- dest: /etc/rsyslog.d/expose-42000.conf
- line: "*.* @127.0.0.1:42000"
Run Code Online (Sandbox Code Playgroud)
create,dest并且line是参数lineinfile的动作,但你尝试喂列表三种类型的字典到lineinfile,因为你在前面加上一个破折号每个参数.从YAML语法的角度来看,这是正确的,但是Ansible无法解析它,因为您不应该将列表提供给操作.
要更正错误,请在这些参数之前删除破折号.
| 归档时间: |
|
| 查看次数: |
5738 次 |
| 最近记录: |