正确的 YAML 文件是否足以用于正确的 ansible playbook,除了语法错误?
Is a correct YAML file enough for a correct ansible playbook, syntax errors aside?
我有一个 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
有问题的行是我在本手册和其他手册中的其他行的典型行:
# 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
该文件由三个在线检查器验证,因此没有 YAML 错误。 这个事实足以让文件成为正确的 ansible 剧本吗?
我想了解的是,一个正确的 YAML 文件是否只给我留下了明显的语法错误(例如一个不存在的模块),或者是一个 playbook 是 YAML 的扩展(从某种意义上说,一行- name: blah blah blah
从 YAMl 的角度来看是可以的,但会被 ansible 拒绝,因为(我正在编一个例子)它有两个以上的词。
换句话说,我正在检查以下内容是否为真:YAML 语法没问题,ansible 关键字没问题,但 ansible 不完全符合 YAML 语法,因为有一些限制。
编辑:康斯坦丁在他的回答中发现了一个错误。
我将把这个问题留在原地,因为它帮助我理解 ansible 不会对 YAML 文件本身施加约束,所以当出现错误并且验证进行时,我确实留下了特定的 ansible 语法错误(或逻辑错误,例如就我而言)。
不,有效的 YAML 不一定会给你一个有效的 Ansible 剧本。
错误信息是unexpected parameter type in action
。
所以 Ansible 无法解释你想要什么。具体来说:
lineinfile:
- create: yes
- dest: /etc/rsyslog.d/expose-42000.conf
- line: "*.* @127.0.0.1:42000"
create
、dest
和 line
是 lineinfile
操作的参数,但您尝试提供一个 list三个 dicts 到 lineinfile 中,因为您在每个参数前加上了破折号。从 YAML 语法的角度来看这是正确的,但 Ansible 无法解析它,因为您不应该将列表提供给操作。
要更正错误,请删除这些参数前的破折号。
我有一个 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
有问题的行是我在本手册和其他手册中的其他行的典型行:
# 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
该文件由三个在线检查器验证,因此没有 YAML 错误。 这个事实足以让文件成为正确的 ansible 剧本吗?
我想了解的是,一个正确的 YAML 文件是否只给我留下了明显的语法错误(例如一个不存在的模块),或者是一个 playbook 是 YAML 的扩展(从某种意义上说,一行- name: blah blah blah
从 YAMl 的角度来看是可以的,但会被 ansible 拒绝,因为(我正在编一个例子)它有两个以上的词。
换句话说,我正在检查以下内容是否为真:YAML 语法没问题,ansible 关键字没问题,但 ansible 不完全符合 YAML 语法,因为有一些限制。
编辑:康斯坦丁在他的回答中发现了一个错误。 我将把这个问题留在原地,因为它帮助我理解 ansible 不会对 YAML 文件本身施加约束,所以当出现错误并且验证进行时,我确实留下了特定的 ansible 语法错误(或逻辑错误,例如就我而言)。
不,有效的 YAML 不一定会给你一个有效的 Ansible 剧本。
错误信息是unexpected parameter type in action
。
所以 Ansible 无法解释你想要什么。具体来说:
lineinfile:
- create: yes
- dest: /etc/rsyslog.d/expose-42000.conf
- line: "*.* @127.0.0.1:42000"
create
、dest
和 line
是 lineinfile
操作的参数,但您尝试提供一个 list三个 dicts 到 lineinfile 中,因为您在每个参数前加上了破折号。从 YAML 语法的角度来看这是正确的,但 Ansible 无法解析它,因为您不应该将列表提供给操作。
要更正错误,请删除这些参数前的破折号。