Я пытаюсь установить соляную шахту, которая будет собирать публичные SSH-ключи от миньонов. Для этого я хочу использовать модуль file.read
и просто получить содержимое ~/.ssh/id_rsa.pub
. Проблема в том, что file.read
завершается ошибкой при запуске из mine.update
(но работает нормально при запуске salt-call file.read ~/.ssh/id_rsa.pub
):
[ERROR ] Function public-ssh-key in mine_functions failed to execute
[DEBUG ] Error: Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/salt/modules/mine.py", line 165, in update
data[func] = __salt__[mine_func](*m_data[func])
File "/usr/lib/python2.7/site-packages/salt/modules/file.py", line 3513, in read
with salt.utils.files.fopen(path, access_mode) as file_obj:
File "/usr/lib/python2.7/site-packages/salt/utils/files.py", line 399, in fopen
f_handle = open(*args, **kwargs) # pylint: disable=resource-leakage
IOError: [Errno 2] No such file or directory: '~/.ssh/id_rsa.pub'
Просто использовать абсолютный путь (например, /root/.ssh/id_rsa.pub
) не вариант, потому что не гарантируется, что он всегда будет пользователем root, который запускает salt-minion (и не всегда в * nix).
Я использую соль 2019.2.0, и моя конфигурация выглядит следующим образом.
# /srv/pillar/top.sls
base:
'*':
- mine.public-ssh-key
# /srv/pillar/mine/public-ssh-key.sls
mine_functions:
public-ssh-key:
- mine_function: file.read
- ~/.ssh/id_rsa.pub