Salt Bundle

1. Salt Bundleの概要

Salt Bundleは、Salt Minion、Python 3、必須のPythonモジュール、およびライブラリが含まれている単一のバイナリパッケージです。

Salt Bundleは、Python 3とSaltが動作するためのすべての要件と共に出荷されます。したがって、Salt Bundleは、クライアントにインストールされているPythonバージョンをシステムソフトウェアとして使用しません。 Salt Bundleは、特定のSaltバージョンの要件を満たさないクライアントにインストールできます。

Salt MinionがSalt Masterに接続されているSUSE Multi-Linux Manager Salt Master以外のシステムでSalt Bundleを使用することも可能です。

2. Salt Bundleを使用してクライアントをMinionとして登録する

Salt Bundleによる登録方法は、推奨される登録方法です。 このセクションでは、現在の実装の利点と制限について説明します。

Salt Bundleは、`venv-salt-minion`パッケージとして提供されており、Salt、Python 3、およびSaltが依存するPythonモジュールで構成されています。

Web UIを使用したブートストラップもSalt Bundleを使用しているため、Web UIを使用したブートストラップはPythonに依存しません。 Salt Bundleを使用することで、クライアントがPythonインタープリターやモジュールを提供する必要がなくなります。

新しいクライアントをブートストラップする場合、Salt Bundleによる登録がデフォルトの方法です。 既存のクライアントをSalt Bundle方式に切り替えることができます。 切り替えると、`salt-minion`パッケージとその依存関係はインストールされたままになります。

2.1. Salt BundleをSalt Minionと共に使用する

Salt Bundleは、SUSE Multi-Linux Managerサーバー以外のSalt Masterによって管理されるSalt Minionと同時に使用できます。 クライアントにSalt Bundleがインストールされている場合、SUSE Multi-Linux ManagerサーバーはSalt Bundleの設定ファイルを管理し、`salt-minion`の設定ファイルはこの場合管理されません。 詳細については、Salt Bundle設定を参照してください。

  • Salt Master(SUSE Multi-Linux Managerサーバ以外)によって管理されているSalt Minionでクライアントを起動するには、ブートストラップスクリプトを生成する際に`mgr-bootstrap` `--force-bundle`を使用するか、ブートストラップスクリプト内で`FORCE_VENV_SALT_MINION`を`1`に設定することをお勧めします。

  • Web UIを`mgr_force_venv_salt_minion`に設定してブートストラップを行うには、`true`ピラーをグローバルに指定できます。 詳細については、Salt States and Pillarsを参照してください。

2.2. Salt MinionからSalt Bundleへの切り替え

Salt状態`util.mgr_switch_to_venv_minion`を使用して、`salt-minion`から`venv-salt-minion`に切り替えることができます。 トラブルを避けるために、2段階で`venv-salt-minion`に切り替えることをお勧めします。

プロシージャ:`util.mgr_switch_to_venv_minion`状態を使用して`venv-salt-minion`に切り替える
  1. 最初にピラーを指定せずに`util.mgr_switch_to_venv_minion`を適用します。 これにより、設定ファイルなどをコピーして`venv-salt-minion`に切り替わります。 元の`salt-minion`の設定やパッケージはクリーンアップされません。

    salt <minion_id> state.apply util.mgr_switch_to_venv_minion
  2. `util.mgr_switch_to_venv_minion`を`mgr_purge_non_venv_salt`に設定して`True`を適用し`salt-minion`を削除し、`mgr_purge_non_venv_salt_files`を`True`に設定して`salt-minion`に関連するすべてのファイルを削除します。 この2番目の手順は、最初の手順が処理されたことを確認し、古い設定ファイルと現在は廃止された`salt-minion`パッケージを削除します。

    salt <minion_id> state.apply util.mgr_switch_to_venv_minion pillar='{"mgr_purge_non_venv_salt_files": True, "mgr_purge_non_venv_salt": True}'

2.3. 追加の懸念事項

  • 最初の手順をスキップして2番目の手順のみを実行すると、クライアント側でコマンドを実行するために使用される`salt-minion`を停止する必要があるため、状態適用プロセスは失敗する可能性があります。

  • Salt Bundleのインストールを避け、代わりに`salt-minion`を使用し続けることも可能です。 この場合、これらのオプションのいずれかを指定します。

    • mgr-bootstrap`を--no-bundle`オプション付きで実行します。

    • 生成されたブートストラップスクリプトで`AVOID_VENV_SALT_MINION`を`1`に設定します。

    • ブートストラップ状態では、`/srv/pillar/salt_bundle_config.sls`内で`mgr_avoid_venv_salt_minion`ピラーを`True`に設定します。

3. Salt BundleによるSSH Push

Salt Bundleは、クライアントに対してSSH Pushアクションを実行するときにも使用されます。

シェルスクリプトは、`venv-salt-minion`をインストールすることなく、Saltコマンドが実行される前にSalt Bundleをターゲットシステムにデプロイします。Salt Bundleは全体のSaltコードベースを含むため、`salt-thin`はデプロイされません。 SSH Push(Web UIを使用したブートストラップを含む)は、バンドル内のPython 3インタープリタを使用します。 ターゲットシステムには、他のPythonインタープリタをインストールする必要はありません。

Salt BundleでデプロイされたPython 3は、クライアントでSSH Pushセッションを処理するために使用されるため、SSH Push(Web UIを使用したブートストラップを含む)は、システムにインストールされているPythonに依存しません。

`salt-thin`を使用することはフォールバックメソッドとして有効にできますが、クライアントにPython 3がインストールされている必要があります。 この方法は推奨されず、サポートもされておらず、開発目的のためだけに存在します。 `/etc/rhn/rhn.conf`の設定ファイルで`web.ssh_use_salt_thin`を`true`に設定します。

  • クライアントをWeb UIでブートストラップする前に、ブートストラップリポジトリを作成する必要があります。 SSH Pushは、検出されたターゲットオペレーティングシステムに基づいてブートストラップリポジトリから取得したSalt Bundleを使用しています。 詳細については、client-configuration:bootstrap-repository.adoc#_prepare_to_create_a_bootstrap_repositoryを参照してください。

  • SSH Pushは、バンドルされたPythonを使用して、Salt Bundleをデプロイし、クライアント上でSaltコマンドを実行するために`/var/tmp`を使用しています。 したがって、`/var/tmp`を`noexec`オプションでマウントしてはいけません。 `/var/tmp`が`noexec`オプションでマウントされているクライアントをWeb UIで起動することはできません。なぜなら、起動プロセスはSSH Pushを使用してクライアントに到達するからです。

4. `pip`を使用してPythonパッケージでSalt Bundleを拡張します

Salt Bundleには`pip`が含まれており、バンドルされているSalt Minionの機能を追加のPythonパッケージで拡張できます。

デフォルトでは、salt <minion_id> pip.install <package-name>`は<package_name>`で指定されたPythonパッケージを`/var/lib/venv-salt-minion/local`にインストールします。

必要に応じて、venv-salt-minion.service`の`VENV_PIP_TARGET`環境変数を設定することで、パス/var/lib/venv-salt-minion/local`を上書きできます。 サービスにはsystemdドロップイン設定ファイルを使用することをお勧めします。 これは`/etc/systemd/system/venv-salt-minion.service.d/10-pip-destination.conf`の設定ファイルで行うことができます。

[Service]
Environment=VENV_PIP_TARGET=/new/path/local/venv-salt-minion/pip

`pip`を通じてインストールされたPythonパッケージは、Salt Bundleの更新時に変更されません。 そのようなパッケージが更新後も利用可能で機能することを保証するために、Salt Bundleの更新後に適用されるSaltステートでインストールすることをお勧めします。