我的 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。