最近、PlanetLabの使用の複雑さを詳しく調べる必要があったため、ノードを自動的に追加および削除するためのサンプルスクリプトを共有することにしました。 おそらくこれは将来誰かの時間を短縮するでしょう。

危機にwhatしているものについて簡単に説明します。 PlanetLabは、新しいネットワークサービスのテストや既存のサービスの変更に広く使用されているネットワークです。 PlanetLabノード(約1024個あります)はさまざまな国で配布されており、PlanetLabノードをホストしている機関の従業員のみがアクセスできます。 PlanetLabに関する詳細な記事は
こちらです。
分散アプリケーションを開発している場合、PlanetLabなしで行うことは困難です。 分散アプリケーションをテストする場合、多くのノード(ノード)を処理する必要があります。 問題は、PlanetLabでは、ノードがしばしばオフラインになることです。 したがって、これらのノードをアカウント(スライス)から削除し、接続して新しいノードと置き換える必要があります。 Webインターフェースでも同様にこれを行うことができます。 ただし、プロセスは退屈なので、スクリプトを使用するのが最善です。 また、このスクリプトをあなたと共有したいと思います。 Pythonで書かれています。
すべてのPlanetLab APIメソッドの説明は、
www.planet-lab.eu / doc / apiにあります。 スクリプト自体は、何が起こっているのかが明確になるように、十分な数のコメントを提供しようとしました。
#!/ usr / bin / env pythonxmlrpclibを
インポートする
インポートシステムplc_host =
'www.planet-lab.eu'auth =
{
'AuthMethod' :
'gpg' 、
「名前」 :
「ユーザー名」 、
'signature' :
'GnuPG署名' 、
}
slice_name =
'tudresdenple_backup'api_url = "
%s :443 / PLCAPI /"%plc_host
#api_url = "
%s / PLCAPI "%plc_host
plc_api = xmlrpclib.ServerProxy(api_url、allow_none = True)
#すべてのノードのリストを取得
「スライスノードに接続されているすべてのリストを取得する:」nodes = plc_api.GetNodes(auth、{}、[
'node_id' 、
'hostname' 、
'boot_state' ])
#スライスに既に追加されているノードのIDを取得
attachment_nodes_ids = plc_api.GetSlices(auth、[slice_name]、[
'node_ids' ])[0] [
'node_ids' ]
#{'hostname': ''}のように見えるノードのホスト名を取得します
attachment_nodes = plc_api.GetNodes(auth、attached_nodes_ids、[
'hostname' 、
'boot_state' ])
#ホスト名のみを抽出
have_nodes = []
attach_nodesのノードの場合:
have_nodes.append(ノード[
'ホスト名' ])
have_nodesのノードの場合:
印刷ノード
#ブート状態にないすべてのノードをフィルタリングするため、削除する必要があります
「スライスに接続された非ブートノードの検索:」to_delete = []
attach_nodesのnode_recordの場合:
if node_record [
'boot_state' ]!=
'boot' :
to_delete.append(node_record [
'ホスト名' ])
to_deleteのnode_recordの場合:
node_recordを
印刷#それらのノードを削除
num_of_deleted =
len (to_delete)
num_of_deleted> 0の
場合 :
success = plc_api.DeleteSliceFromNodes(auth、slice_name、to_delete)
成功== 1の
場合 :
「正常に切り離された起動されていないノード」を出力しますその他 :
「ブートされていないノードの削除に失敗しました!」sys.exit()
その他 :
「削除または追加するものはありません」を
印刷しますsys.exit()
#削除されたものとまったく同じ数の新しいものを今すぐ追加
「新しい起動ノードの追加」を 印刷しますto_add = []
ノードのnode_recordの場合:
num_of_deleted> 0の
場合 :
num_of_deleted-= num_of_deleted
その他 :
破る
if (node_record [
'hostname' ]
not have have_nodes)and node_record [
'boot_state' ] ==
'boot' :
to_add.append(node_record [
'ホスト名' ])
len (to_add)> 0の場合:
success = plc_api.AddSliceToNodes(auth、slice_name、to_add)
成功== 1の
場合 :
「正常に接続された新しいnbootedノード」を 印刷しますその他 :
print "起動されたノードのAddintが失敗しました!"sys.exit()
「次のノードが追加されました:」to_addのnode_recordの場合:
node_recordを
印刷