web-dev-qa-db-ja.com

saltコマンドのミニオンのホスト名

私は塩にかなり慣れていないので、何かを逃した可能性がありますが、これを理解することはできません。

コマンド実行ツールとしてsaltを使用しています(これまでのところ構成管理はありません)。ミニオンからsaltを使用して構成をフェッチし、それらをgitリポジトリに配置する方法が見つかりませんでした。

私が最終的に達成しようとしているのは、ソルトマスターに次のような構成ファイルのリストを提供することです。

/etc/ssh/ssh_config
/etc/vim/vimrc
etc.

そしてsalt-masterにこれらのファイルのフェッチを実行させ、次のようなフォルダーに入れます

/srv/salt/minions/configs/minion01/etc/ssh/ssh_config
/srv/salt/minions/configs/minion02/etc/ssh/ssh_config

次に、マスターにすべてをgitサーバーにプッシュさせ、すべての構成をバージョン管理することができます。

Saltは状態を処理できることを知っていますが、私が見つけたのは、状態を維持するためにマスターからミニオンにファイルをプッシュすることですが、すべてのサーバーからすべての更新構成を収集し、それらを自動的にバージョン管理したいだけです。

と呼ばれるコマンドがあります

salt \* cp.Push /etc/ssh/ssh_config

これは設定ファイルを/ var/cache/salt/minion/minion01/files/etc/ssh/ssh_configにプッシュします。これは完璧に見えますが、ファイルが変更されるたびにそれを行うようにsaltに指示する方法がわかりません(かなりあります)いくつかのサーバーとバージョンへの多くの構成...)そしてそれが変更された場合にのみそれをフェッチするので、5分ごとにすべてのファイルをフェッチする必要はありません(cron経由)。

誰かが塩でこれを行う方法を知っていますか?

よろしく、Mohrphium

2
mohrphium

あなたはこれを間違った方法で考えています。Saltは、マシンに加えた変更の履歴を提供するようには設計されていませんが、代わりにマシンが置かれるべき「高」状態を指示するように設計されています。 、ローカルで行われた変更をgitに記録し、saltはボックスにgitリポジトリの変更を追跡させます。ミニオンにローカルな変更がある場合は、ハイステートを実行すると表示されます。どちらがスケーリングするか推測できますか?

したがって、これを行う方法の簡単な例を次に示します(これは、gitにbitbucketを使用する場合があります)。

1)ソルトマスター/ etc/salt/masterを次のように設定します。

 file_roots:
 base:
-/ srv/salt 
 
 fileserver_backend:
-git 
-roots 
 
 gitfs_remotes:
[email protected]:user/your-salt-repo.git 
 
 pillar_roots:
ベース:
-/ srv/pillar 

2)gitリポジトリのルートに、単純なtop.slsを作成します。

 base:
 '* .domain.com':
-コア

3)gitリポジトリ内にいくつかの追加のディレクトリを作成します。

 mkdirコア
 mkdirサーバー
 mkdirサーバー/デフォルト
 mkdirサーバー/minion01

4)単純なcore /init.slsファイルを作成します。

/etc/ssh/ssh_config:
 file.managed:
-ソース:
 -salt:// servers/{{grains ['id']} } /ssh_config
-salt://servers/default/ssh_config

5)servers/default/ssh_configの下にデフォルトのssh_configを作成します。

6)servers/minion01/ssh_configの下にミニオン固有のssh_configを作成します

7)変更をコミットしてプッシュしてgitリポジトリ(bitbucket)に戻します。

8)ソルトマスターの実行から:Sudo salt '*' state.highstate test=trueを実行して、適用される変更を確認します。

Minion01がソルトマスターに接続すると、servers/minion01/ssh_configが取得されますが、/ servers/minion.id.whatever /の下にssh_configファイルがない他のミニオン(たとえばminion02)は、リストを次のソース(サーバー)に移動します。 /デフォルト)。 minion_idでこれを行う代わりに、os、fqdn、domainなどの他のグレインに基づいてこれを行うこともできます(salt 'minion-id' grains.itemsを使用してミニオンのグレインのリストを参照してください)。

これらのファイルの初期状態をキャプチャしたら、中央の場所(gitリポジトリ)で変更を加えてから、state.highstateを実行してさらに変更をロールアウトできます。この最初の痛みは努力する価値があります。その一部を自動化することもできますが、実際に実行しようとしているのは、外れ値を見つけることです。これは、定義上、特定するために手動による介入が必要になります。 ssd_configのようなものから始めて、一度に1つのミニオンをstate.highstate test=true実行することをお勧めします。デフォルトからの変更がある場合は、差分が表示され、それがデフォルトの例外を正当化するかどうかを判断できます。

注:gitリポジトリを読み取る権限を取得するには、saltマスターのrootユーザーにsshキーを設定する必要があります(bitbucketはこれらのデプロイメントキーを呼び出します)。

5
notpeter