2

たとえば、特定のタグを持つすべてのノードを見つけて、それらの IP アドレスを取得し、構成ファイルを生成してそれらのノードに配布したいとします。

ユースケースは、他のすべてのノードについて知る必要があるが、いつでもノードを追加および削除できるデータベースである場合があります。

4

2 に答える 2

1

私はハッキーな解決策を持っているので、うまくいけば他の誰かがより良い答えを見つけることができます.

アプローチはsalt、YAML 出力を取得するために実行される Python スクリプトを作成し、network.ip_addrs eth0それを使用して特定の sls をピラーで呼び出すことです。

まだ実装と調整が必要なプロトタイプの例を作成しました。

#!/usr/bin/env python
import subprocess
import yaml


# Query all db nodes for their ip addresses
data = subprocess.check_output(
    'salt -G "role:db" network.ip_addrs eth0',
    shell=True
)
data = yaml.load(data)

# Parse and reshuffle for pillar input
addrs = []
for a in data.values():
        addrs.append(a[0])
addrs = yaml.dump({'db_peers': addrs})

# Update configuration file on each node
data = subprocess.check_output(
    'salt -G "role:db" state.sls db.configure pillar="{}"'.format(addrs),
    shell=True
)

これにより、次の行に沿って何かが実行されます。

salt -G "role:db" state.sls db.configure pillar="db_peers: [1.2.3.4, 2.3.4.5]"

これはモジュールに入れることができる可能性がありますが、salt-minion にマスターと通信してdb.configure他のノードで実行するようにうまく指示する方法がわかりません。上記のスクリプトと同様のコマンドを実行するだけです。

于 2014-01-03T06:38:15.520 に答える