たとえば、特定のタグを持つすべてのノードを見つけて、それらの IP アドレスを取得し、構成ファイルを生成してそれらのノードに配布したいとします。
ユースケースは、他のすべてのノードについて知る必要があるが、いつでもノードを追加および削除できるデータベースである場合があります。
たとえば、特定のタグを持つすべてのノードを見つけて、それらの IP アドレスを取得し、構成ファイルを生成してそれらのノードに配布したいとします。
ユースケースは、他のすべてのノードについて知る必要があるが、いつでもノードを追加および削除できるデータベースである場合があります。
私はハッキーな解決策を持っているので、うまくいけば他の誰かがより良い答えを見つけることができます.
アプローチは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
他のノードで実行するようにうまく指示する方法がわかりません。上記のスクリプトと同様のコマンドを実行するだけです。