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) にあるスクリプトを、ルートアクセス権を持つリモート ノードで実行する方法について。

ファイルを作成したのですが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

。:: アップデート ::。

マスターとは別のネットワーク (DMZ) に複数の「ミニオン」が存在するため、salt-ssh を使用する必要があります。私の理解では、従来の salt 設定では、ミニオンが salt マスターに接続する必要があります。

投稿後、salt-sshをインストールしましたソルトスタックリポジトリこれにより、上記のエラーは解消されたようですmsgpack。また、上記の Vagrant 固有のリンクの例をいくつか変更し、の下にmasterファイルとstatesディレクトリを追加しました/etc/salt。状態ファイル (上記) を の下に配置しました/etc/salt/states/test.sls。結果は以下のとおりです。

@wirap の提案に従って、add scriptとの間にアンダースコアを追加しました。これにより、以下に示すようにさらに進みました。クライアントまたはサーバーのスクリプト パスに関連するエラーがあるようです。まだわかりません。ファイル名のみ (.sls 拡張子なし) で呼び出す必要があるようです。run scriptstate.apply.sls

/etc/salt/マスター:

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-minion をインストールせずに ssh 経由で salt コマンドと状態を実行します。」) を使用しますか? この方法は、minions に salt-minion をインストールできない場合にのみ実行する必要があります。
  2. 状態はどこに保存しましたか?通常は/etc/salt/masterの設定で次のように記述します。状態ファイルを置くパス
  3. 例で示されている状態をそのまま使用しないでください。ID 宣言add script:)。
  4. エラーメッセージは私には分かりません。このスレッドここ次のような提案をします。「msgpack エラーは、まったく関係がないため、非常に誤解を招きます。1 つのミニオンの server.conf ファイルの 1 つに無効な utf-8 があり、もう 1 つのミニオンにはそのファイルが存在しないようです。」状態 ID にスペース (' ') が含まれている可能性が強く疑われます。私の経験では、状態ファイルまたはピラーに無効な文字が含まれていると、SaltStack は非常に誤解を招くエラー メッセージを表示することがあります。

追加のヒント:

  • 見てここ状態ツリーの設定方法については、こちらをご覧ください。
  • SaltStackのプリインストール版(docker、Vagrant?)を使って、すでに動作しているものを使って、どのように動作するかを学ぶのもいいでしょう。UtahDaveは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 のどちらを使用するかは問題ではありません。混乱しないでください。

関連情報