2018年5月18日金曜日

OpenStack API v3 を Ruby からコールしてみた

概要

OpenStack Queens は API のバージョンが v3 になっています
今回は Ruby SDK を使ってコールしてみました

環境

  • CentOS 7.4 64bit
  • packstack 12.0.0
  • OpenStack Queens (API v3.10)
  • Ruby 2.4.1p111
  • openstack 3.3.17 (gem)

インスタンスの一覧を取得する

require 'openstack'

compute = OpenStack::Connection.create({
  :username => "demo",
  :api_key=> "b44ae9c293214e6d",
  :auth_method=> "password",
  :auth_url => "http://192.168.100.1:5000/v3",
  :authtenant_name => "demo",
  :service_type=> "compute",
  :is_debug => false,
  :project_name => "demo",
  :project_domain_name => "default"
})

p compute.servers

前半は認証になります
ID/PW での認証ですが、それ以外に認証用の URL やテナント名サービスタイプなどが必要になります
インスタンスの一覧を取得する場合は compute を設定します
他には compute, ec2, identity, image, network, or volume が指定できるようです

ポイントはパラメータの以下 2 つ :project_name, :project_domain_name です
この 2 つを付与しないと Password authentication with scoped authorization と呼ばれる scope パラメータ付きのレスポンスが返ってこないため認証エラーとなってしまいます

インスタンスの作成

認証部分に関しては上記を同じです

ret = compute.create_server(
  :name => "test2",
  :imageRef => compute.images.first[:id],
  :flavorRef => compute.flavors.first[:id],
  :security_groups => [ compute.security_groups.flatten.first ]
)
pp ret

各パラメータはとりあえず先頭のものを使っています
必要であれば配列 or ハッシュを探索してください

インスタンスの削除

server = compute.get_server "33f686df-ce67-4779-aefd-a6ff8fae3598"
puts server.delete!

id の部分はインスタンスの一覧で取得できる id を使ってください
openstack の場合インスタンスが起動していても削除できます

最後に

OpenStack の API を Ruby から試してみました
とりあえずインスタンス関係の API をコールしましたが他にも機能ごとに API があるので興味があれば試してみてください

参考サイト

0 件のコメント:

コメントを投稿