在ansible-playbook中收到一条错误消息语法错误

时间:2019-01-20 07:21:58

标签: ansible

错误!加载YAML时的语法错误。   找不到预期的密钥

错误似乎出在'/etc/ansible/main.yml'中:第73行第50列,但可能 根据确切的语法问题放在文件的其他位置。

违规行似乎是:

- name: Ensure IP forwarding is disabled
  shell: "sysctl net.ipv4.ip_forward ; grep "net\.ipv4\.ip_forward" /etc/sysctl.conf /etc/sysctl.d/*"
                                             ^ here

我们可能错了,但是这看起来可能是一个问题 不平衡的报价。如果以引号开头的值,请确保 行以相同的引号结束。例如这任意 例如:

我在ansible剧本的shell模块中使用带有“”的grep,并收到一条错误消息,如下所示:“错误!加载YAML时语法错误”。

- name: Ensure IP forwarding is disabled
  shell: "sysctl net.ipv4.ip_forward ; grep "net\.ipv4\.ip_forward" /etc/sysctl.conf /etc/sysctl.d/*"
  register: CIS_3.1.1
  ignore_errors: True

1 个答案:

答案 0 :(得分:1)

用于ansible的配置文件采用YAML格式,而在YAML中,表示字符串的标量可以采用多种格式:

  • 纯文本:无引号,对起始字符和内部字符序列有限制,没有转义符
  • 单引号:可以包含双引号,除了重复单引号外不得转义
  • 双引号:反斜杠在字符串中转义,在字符串中双引号需要转义
  • 字面意思:换行符被保留,没有转义符
  • 折叠:换行符转换为空格,不转义

您使用的是双引号样式,因此您需要转义内部双引号(")和反斜杠(\)。很快就会变得丑陋且难以理解。在这种情况下,使用文字样式会更加有用:

- name: Ensure IP forwarding is disabled
  shell: |-
    sysctl net.ipv4.ip_forward ; grep "net\.ipv4\.ip_forward" /etc/sysctl.conf /etc/sysctl.d/*

即您放置|-(负号是去除下一行的最后一个换行符),然后在下一行放置不带引号或结束引号 indented 的行。