Мой файл 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
Что случилось?
Это:
- 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, отсюда и ошибка.
Как вы обнаружили, вам нужно сделать отступ строк, следующих за буквальным скалярным индикатором (|
), и должно быть очевидно, почему это так: значение для ключа должно иметь больший отступ, чем ключ, иначе вы не узнаете, когда был введен следующий ключ для сопоставления.
Не спрашивайте меня, почему, но это работает.
/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.