SaltStack:发现冲突的 ID

SaltStack:发现冲突的 ID

我的 sls 文件:

/etc/sudoers.d/foo:
  file.managed:
    - contents: |
      foo ALL = NOPASSWD: /usr/bin/systemctl restart minio_storage-foo.service
      foo ALL = NOPASSWD: /bin/systemctl restart minio_storage-foo.service
    - template: jinja
    - mode: 0440

错误信息:

salt:/srv # salt-ssh aptguettler state.sls minio_storage

[CRITICAL] Rendering SLS 'base:minio_storage.django' failed: while constructing a mapping
  in "<unicode string>", line 29, column 7
found conflicting ID 'foo ALL = NOPASSWD'
  in "<unicode string>", line 31, column 7
aptguettler:
    - Rendering SLS 'base:minio_storage.django' failed: while constructing a mapping
        in "<unicode string>", line 29, column 7
      found conflicting ID 'foo ALL = NOPASSWD'
        in "<unicode string>", line 31, column 7

怎么了?

答案1

这:

- contents: |

引入一个值为 ,contents该值为块样式文字标量,用于所有后续缩进行。缩进必须大于键的缩进contents。由于下一行

  foo ALL = NOPASSWD: /usr/bin/systemctl restart minio_storage-foo.service

未进一步缩进,它终止块样式文字标量(为空字符串),然后引入下一个键foo ALL = NOPASSWD作为/usr/bin/systemctl restart minio_storage-foo.service映射的值,该映射是序列的第一项。但是下一行具有相同的键,因为该映射和映射键在 YAML 中必须是唯一的,因此出现错误。

正如您所发现的,您需要缩进文字标量指示符()后面的行|,原因显而易见:键的值需要比键缩进更多,否则您将不知道何时引入映射的下一个键。

答案2

别问我为什么,但是这确实有效。

/etc/sudoers.d/foo:
  file.managed:
    - contents: |
       foo ALL = NOPASSWD: /usr/bin/systemctl restart minio_storage-foo.service
       foo ALL = NOPASSWD: /bin/systemctl restart minio_storage-foo.service
    - template: jinja
    - mode: 0440

你发现不同了吗?

“foo ALL” 之前还有一个空格。Grrrr YAML。

相关内容