yaocloud / yao

Yet Another OpenStack API wrapper
MIT License
35 stars 12 forks source link

API versioning #134

Closed hiboma closed 2 years ago

hiboma commented 5 years ago

Hi yao.

API を叩いて OpenStack コンポーネントの API バージョンをとれるようにする実装をあれこれ議論したいので PR を立てました. Yao::Resources::* で API バージョンに応じて振る舞いを変えられるようにするのが目的です

PR の中で詰めたい/議論したいこと

を中心にやりとりをして インタフェースやクラス名が固まったら 実装を詰めていく ( リファクタリング、テスト ) のがいいかと思います

( プロトタイプを考えるための PR なので「実装」部分 についてはあんまり細かいことをつっこまんでくださいな: 例 version を毎回りクエストするのは効率わるいので キャッシュを入れようとか ) )

hiboma commented 5 years ago

Yao::Tenant で keystone API の version をとるメソッドを生やしています

[1] yao(main)> Yao::Tenant.api_version
=> #<Yao::APIVersion:0x00007fd6da225d40
 @id="v3.7",
 @links=[{"href"=>"https://***.com/mitaka/keystone/v3/", "rel"=>"self"}],
 @media_types=[{"base"=>"application/json", "type"=>"application/vnd.openstack.identity-v3+json"}],
 @min_version=nil,
 @status="stable",
 @updated="2016-10-06T00:00:00Z",
 @version=nil>

v2, v3 を判定できるとよい??

[2] yao(main)> Yao::Tenant.api_version.v3?
=> true

supported, deprecated ... なバージョン一覧をとるメソッドも生やしてます

[3] yao(main)> Yao::Tenant.api_versions
=> #<Yao::APIVersions:0x00007fd6d98af770
 @deprecated=
  #<Yao::APIVersion:0x00007fd6d98af7c0
   @id="v2.0",
   @links=
    [{"href"=>"https://***.com/mitaka/admin/keystone/v2.0/", "rel"=>"self"},
     {"href"=>"http://docs.openstack.org/", "type"=>"text/html", "rel"=>"describedby"}],
   @media_types=[{"base"=>"application/json", "type"=>"application/vnd.openstack.identity-v2.0+json"}],
   @min_version=nil,
   @status="deprecated",
   @updated="2016-08-04T00:00:00Z",
   @version=nil>,
 @stable=
  #<Yao::APIVersion:0x00007fd6d98af7e8
   @id="v3.7",
   @links=[{"href"=>"https://***.com/mitaka/admin/keystone/v3/", "rel"=>"self"}],
   @media_types=[{"base"=>"application/json", "type"=>"application/vnd.openstack.identity-v3+json"}],
   @min_version=nil,
   @status="stable",
   @updated="2016-10-06T00:00:00Z",
   @version=nil>>