分散環境でのマシンセットアップを支援するようなライブラリが欲しい。
イメージは下のような感じ。
#! /bin/ruby require 'cloud-lib' #プログラム開始までにマシン3台がセットアップされていることを仮定 #DHCP経由でネットワーク回りの設定は行われておりそのアドレスも把握しているとする #各マシンには統一したユーザ名でリモートログインできるものとする user_name = "root" password = "hogehoge" nodes = Array.new(3) nodes[0] = Machine.new("MACアドレス か IPアドレス") nodes[0].set_auth_info(user_name,password) nodes[0].initialize() #コマンド等の発行が可能な通信路を確保 nodes[1] = Machine.new("MACアドレス か IPアドレス") nodes[1].set_auth_info(user_name,password) nodes[1] = Machine.initialize() nodes[2] = Machine.new("MACアドレス か IPアドレス") nodes[2].set_auth_info(user_name,password) nodes[2].initialize() gateway_addr = "192.168.1.254" dns_addr = "192.168.0.1" ipaddr = "192.168.1.1" nodes.each{ |a_node| #連番でIPアドレスを(静的に)設定 a_node.set_ipaddr("") ipaddr.inc_ip() #ゲートウェイのアドレスとDNSのアドレスを設定 a_node.set_gateway(gateway_addr) a_node.set_resolver(dns_addr) #設定ファイル(sshd_config)を編集 sshd_conf = a_node.get_config_file("/etc/sshd_config") sshd_conf.replace("PermitRootLogin yes","PermitRootLogin no") sshd_conf.save() #パッケージをインストール a_node.install_package("openmpi-bin") #各ノード上のネットワーク設定をリロードさせる a_node.exec_command("/etc/init.d/networking restart") } #新しいアドレスを用いて再接続 ipaddr = "192.168.1.1" nodes_ = Array.new(3) nodes_.each{ |a_node| a_node = Machine.new(ipaddr) a_node.set_auth_info(user_name,password) a_node.initialize() #コマンド等の発行が可能な通信路を確保 ipaddr.inc_ip() } #実験を開始 nodes.each{ |a_node| #実験用のスクリプトを転送 a_node.push_a_file("./senario.sh","/home/exp/") #実験用のスクリプトを実行 a_node.exec_command("sh /home/tester/senario.sh") }
(言語問わず)既存のライブラリでこういうのある?
近いことが出来れば、ライブラリだろうが、デーモンだろうが手段は問わないので、あれば使いたい。*1
無ければ簡単なものを作ろうかなと思ってる。
懸念事項
・OS(ディストリビューション)間の差異をどう吸収するか
・操作が失敗した場合に、既に発行済の操作との整合性が。。
-> 対話的なトライ&エラーと共存できるようにしたい
*1:分散環境を持っている組織が珍しくない今日なのだから、こういう類のライブラリは絶対作られていると思うのだけど。仮にあっても外には出していない?