displayname でマッチさせて id と displayname を出力する実装を書いた。
if /^devopsOkinawa/ =~ item["displayname"]
if item["state"] == "Running"
print item["id"], " ", item["displayname"], "\n"
end
これは一応な確認用でこの出力にさらに
awk '{print $1;}'
なフィルタをかけて id を例えば以下な destroy に渡すというアレ。
while line = gets
line.chomp!
@compute.destroy_virtual_machine({
'id' => line,
})
end
これでリソース破棄は楽になります。
あるいは、GIP なリストを取得して deploy して port forward なオブジェクトも当ててしまうには以下なのかどうか。
deploy 時の戻りが以下らしい。
{"deployvirtualmachineresponse"=>{"jobid"=>736209, "id"=>48866}}
実装が以下ですがこれから試験。
ctr = 1
while line = gets
line.chomp!
ret = @compute.deploy_virtual_machine({
'displayname' => "devopsOkinawa" << ctr.to_s,
'serviceOfferingId' => SERVICE_OFFERING_ID,
'templateId' => TEMPLATE_ID,
'zoneId' => ZONE_ID,
})
@compute.create_port_forwarding_rule ({
'ipaddressid' => line,
'privateport' => "22",
'protocol' => "tcp",
'publicport' => "10022",
'virtualmachineid' => ret["deployvirtualmachineresponse"]["id"],
})
ctr += 1
end
試験
とりあえず一つリソースが生きてるみたいなので破棄から試験。
$ bundle exec ruby list_doo_vm.rb 2>/dev/null | awk '{print $1;}' | bundle exec ruby destroy_doo.rb 2>/dev/null
大丈夫、なのかどうか。リストするソレは state でふるいをかけない方が良さげ。
次は起動か。実行してみると結構時間がかかってビビるなど。一応仮想リソースは kickoff されている模様です。port forward なオブジェクトもきちんと設定されているご様子。すばら。
接続試験もしてみたのですが結果は良好。ただし、これ known_hosts のリセット必要だな。
そして次はリソース破棄なんですが、作ってないな。こちらも IP ベースで
- port forward なオブジェクトを破棄
- 仮想リソースを破棄
という手順か。以下?
key1="listportforwardingrulesresponse"
key2="portforwardingrule"
key3="virtualmachineid"
while line = gets
line.chomp!
ret = @compute.list_port_forwarding_rules({'ipaddressid' => line})
@compute.delete_port_forwarding_rule ({
'id' => ret[key1][key2][0]["id"]
})
@compute.destroy_virtual_machine({
'id' => ret[key1][key2][0][key3],
})
end
諸々削除確認。てよく考えてみるに portforward なソレは削除しなくても良いのか。
とりあえずここまでのソレを以下に置いておきます。