Как прочитать файл из домашнего каталога пользователя соли в salt-mine - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь установить соляную шахту, которая будет собирать публичные 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

Ответы [ 2 ]

0 голосов
/ 09 июня 2019

Saltstack не расширяется ~, но вы не можете использовать %h вместо этого?

В солевой документации относительно ssh_auth есть пример чего-то похожего на то, чего вы пытаетесь достичь

thatch:
  ssh_auth.present:
    - user: root
    - source: salt://ssh_keys/thatch.id_rsa.pub
    - config: '%h/.ssh/authorized_keys'
0 голосов
/ 17 мая 2019

Соль не расширяется ~ по конструкции.Мне удалось обойти это через:

# /srv/pillar/mine/public-ssh-key.sls
mine_functions:
  public-ssh-key:
    - mine_function: cmd.run
{% if grains['os_family'] == 'Windows' %}
    - {{ grains['shell'] }} /c "if exist %USERPROFILE%\.ssh\id_rsa.pub type %USERPROFILE%\.ssh\id_rsa.pub"
{% else %}
    - {{ grains['shell'] }} -c 'if [ -f ~/.ssh/id_rsa.pub ]; then cat ~/.ssh/id_rsa.pub; else echo ""; fi'
{% endif %}
...