Назад | Перейти на главную страницу

Как я могу заставить salt-ssh запускать локальный скрипт на удаленном узле?

. :: РЕШЕНИЕ ОБНОВЛЕНИЯ ::.

С обязательной формой помощи @wirap теперь она работает. Я связал каталог сценария с /etc/salt/states/scripts и используя это test.sls конфигурация теперь работает.

/root/bin/updater/scripts/pam-setup-access:
    file.managed:
      - name: /tmp/pam-setup-access
      - source: salt://scripts/pam-setup-access
      - mode: 0700
run_script:
   cmd.run:
      - name: /tmp/pam-setup-access
   file.absent:
      - name: /tmp/pam-setup-access

Я новичок в salt-ssh и ищу информацию Вот относительно того, как запустить сценарий, который находится в моем административном ящике (/root/bin/updater/scripts/pam-setup-access) на удаленном узле, к которому у меня тоже есть root-доступ.

Я создал state файл (ниже), но не знаю, где его разместить. Соль-SSH документы только упомянуть /etc/salt/master поэтому я посмотрел это, но эти документы кажутся специфичными для установки бродяг и пакетов.

add script:
    file.managed:
    - name: pam-setup-access
    - source: /root/bin/updater/scripts/pam-setup-access

run script:
    cmd.run:
    - name: pam-setup-access

Наконец, я попытался просто запустить файл состояния из текущего каталога, как показано в первой ссылке, но меня это только раздражало. Что мне не хватает?

# salt-ssh '*' state.apply test.sls 
nod0:
    [CRITICAL] Unable to import msgpack or msgpack_pure python modules
    Function state.apply is not available

nod1:
    [CRITICAL] Unable to import msgpack or msgpack_pure python modules
    Function state.apply is not available

.:: ОБНОВИТЬ ::.

Мне нужно использовать salt-ssh, поскольку несколько «миньонов» находятся в сети отдельно от мастера (DMZ). Насколько я понимаю, традиционная настройка соли требует, чтобы миньоны подключились к мастеру соли.

С момента публикации я установил salt-ssh из репо солончак который, кажется, избавился от msgpack ошибка выше. Я также изменил некоторые примеры из указанной выше ссылки на бродягу, добавив master файл и states каталог под /etc/salt. Я поместил файл состояния (см. Выше) в /etc/salt/states/test.sls. Результаты ниже.

Я добавил подчеркивания между add script и run script, как было предложено @wirap. Это продвинуло меня дальше, как показано ниже. Похоже, есть ошибка, связанная с путем сценария на клиенте или сервере. Пока не уверен. Кажется мне нужно позвонить state.apply с именем .sls только файл (без расширения .sls).

/ и т.д. / соль / мастер:

file_roots:
   base:
      - /etc/salt/states

Теперь, когда я запускаю salt-ssh, я получаю:

# salt-ssh '*' state.apply test
nod0:
----------
          ID: add_script
    Function: file.managed
        Name: pam-setup-access
      Result: False
     Comment: Specified file pam-setup-access is not an absolute path
     Started: 11:53:50.237379
    Duration: 0.602 ms
     Changes:   
----------
          ID: run_script
    Function: cmd.run
        Name: pam-setup-access
      Result: False
     Comment: Command "pam-setup-access" run
     Started: 11:53:50.238629
    Duration: 8.297 ms
     Changes:   
              ----------
              pid:
                  1037
              retcode:
                  127
              stderr:
                  /bin/bash: pam-setup-access: command not found
              stdout:

Summary for nod0
------------
Succeeded: 0 (changed=1)
Failed:    2
------------
Total states run:     2
Total run time:   8.899 ms
nod1:
----------
          ID: add_script
    Function: file.managed
        Name: pam-setup-access
      Result: False
     Comment: Specified file pam-setup-access is not an absolute path
     Started: 11:53:50.476743
    Duration: 0.555 ms
     Changes:   
----------
          ID: run_script
    Function: cmd.run
        Name: pam-setup-access
      Result: False
     Comment: Command "pam-setup-access" run
     Started: 11:53:50.477906
    Duration: 7.5 ms
     Changes:   
              ----------
              pid:
                  30772
              retcode:
                  127
              stderr:
                  /bin/bash: pam-setup-access: command not found
              stdout:

Summary for nod1
------------
Succeeded: 0 (changed=1)
Failed:    2
------------
Total states run:     2
Total run time:   8.055 ms
  1. Вы уверены, что хотите использовать salt-ssh («Выполнять команды и состояния соли по ssh без установки salt-minion.»). Вам нужно сделать это только в том случае, если вы не можете установить соль-миньон на своих миньонов.
  2. Куда вы разместили свои состояния? Обычно в конфигурации / etc / salt / master вы пишете путь, где должны быть ваши файлы состояния
  3. Не используйте дословно состояние, указанное в примере. Я почти уверен, что у вас не может быть места в объявление идентификатора (add script:).
  4. Ваше сообщение об ошибке мне неизвестно. Эта ветка Вот делает следующее предложение: «Ошибка msgpack вводит в заблуждение, так как она совершенно не связана. Кажется, в одном из ваших файлов server.conf есть недопустимый utf-8 для одного миньона, а для другого файла нет?» Я сильно подозреваю, что пробел ('') в вашем идентификаторе состояния. По моему опыту, SaltStack может выдавать довольно вводящие в заблуждение сообщения об ошибках, если у вас есть недопустимые символы в ваших файлах состояния или столбце.

Дополнительные подсказки:

  • Смотреть Вот для получения информации о том, как настроить дерево состояний.
  • Может быть, использовать предустановленную установку SaltStack (docker, Vagrant?), Которая уже работает, чтобы узнать, как она работает. Поскольку Юта Дэйв довольно активен в SaltStack, я бы выбрал его демо (Отказ от ответственности: сам не тестировал!)

Обновить: Когда вы используете file.managed:

  • параметр source из file.managed - это путь к вашему мастеру (относительно вашего пути состояния), а не цель.
  • вам нужно указать путь к цели, поэтому вы получаете сообщение об ошибке: "Указанный файл pam-setup-access не является абсолютным путем"

Пример:

/root/bin/updater/scripts/pam-setup-access
   file.managed:
     - source: salt://files/pam-setup-access

такой же как:

some-arbitrary-id
    file.managed:
    - name: /root/bin/updater/scripts/pam-setup-access
    - source: salt://files/pam-setup-access

https://docs.saltstack.com/en/develop/ref/states/all/salt.states.file.html#module-salt.states.file

То же самое и с cmd.run.

Прочтите Общее Учебник SaltStack. При разработке состояний не имеет значения, используете ли вы salt-ssh или salt. Пусть это вас не смущает.