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

Как заставить 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файл (ниже), но не уверен, куда его поместить. Salt-sshдокументытолько упоминание /etc/salt/master, поэтому я поискал это, ноэти документыпохоже, они специфичны для Vagrant и установки пакетов.

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, так как несколько "minions" находятся в сети, отдельной от master (DMZ). Насколько я понимаю, традиционная настройка salt требует, чтобы minions подключались к salt master.

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

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

/etc/salt/master:

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

  1. Вы уверены, что хотите использовать salt-ssh («Выполнять команды и состояния salt через ssh без установки salt-minion»). Вам нужно сделать это таким образом, только если вы не можете установить salt-minion на своих minions
  2. Где вы разместили свои состояния? Обычно в конфигурации /etc/salt/master вы пишетепуть, где должны находиться ваши файлы состояния
  3. Не используйте штат, указанный в примере, дословно. Я уверен, что в нем не может быть пробела.декларация идентификатора( add script:).
  4. Ваше сообщение об ошибке мне неизвестно. Эта темаздесьделает следующее предложение:«Ошибка msgpack вводит в заблуждение, поскольку она совершенно не связана с чем-либо. Кажется, один из ваших файлов server.conf имеет недопустимую кодировку utf-8 на одном из миньонов, а на другом файл не существует?»Я сильно подозреваю, что пробел (' ') в вашем идентификаторе штата. По моему опыту, SaltStack может выдавать довольно вводящие в заблуждение сообщения об ошибках, если в ваших файлах штата или столбце есть недопустимые символы.

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

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

Обновлять: При использовании file.managed:

  • Параметр sourcefile.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. Не позволяйте этому сбивать вас с толку.

Связанный контент