/var/log/messages

Nov 22, 2013 - 2 minute read - Comments - Ruby DevOps

ばたばたしてる中での作成

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 なソレは削除しなくても良いのか。

とりあえずここまでのソレを以下に置いておきます。