Yet Another OpenStack Wrapper in Ruby - YAO 소개
회사(페파보)의 엔지니어로 개발하고 있는 OSS의 Ruby 라이브러리, YAO의 소개를 합니다.
YAO란?
Yet Another Openstack ruby wrapper
의 약자입니다. 로고도 만들었습니다.실은, Ruby 경계에서는 이하와 같은 선행하는 구현이 있었습니다만,
fog는 멀티 클라우드 대응 전제의 라이브러리로 의존이 많고, ruby-openstack는 보수가 되어 있지 않다, 라고 하는 것으로 어느쪽도 미묘하게 가려운 곳에 손이 닿지 않는 상태였습니다.
라는 것으로, 자작해 버렸습니다. 설계 사상은 다음과 같습니다.
이런 식으로 사용합니다.
자원 지향이라고 하는 것으로, 이하와 같은 자원을 표현하는 클래스를 간단한 DSL를 이용해 쓸 수 있습니다. OpenStack의 API는 아름다운 RESTful이므로 할 수있는 기술이라고 생각합니다.
flavor.rb
module Yao::Resources
class Flavor < Base
# JSONのキーのうち、属性のように使ってアクセスしたいものを列挙できる
friendly_attributes :name, :vcpus, :disk, :swap
# 拡張によってはキーの形式が特殊なので、それにも対応
map_attribute_to_attribute "os-flavor-access:is_public" => :public?
map_attribute_to_attribute "OS-FLV-DISABLED:disabled" => :disabled?
# 普通のメソッドは普通に定義する
# self#[] で、元となるJSONのデータを参照できる
def ram(unit='M')
case unit
when 'M'
self["ram"]
when 'G'
self["ram"] / 1024.0
end
end
alias memory ram
# API として使うサービス(compute, network, identity...)を指定
self.service = "compute"
# RESTful URL に出てくるリソース名を指定。複数形が自力なのは要改善...
self.resource_name = "flavor"
self.resources_name = "flavors"
end
end
Yao.configure
블록에서 OpenStack에 필요한 매개 변수를 설정하고,Yao.configure do
auth_url "http://keystone.example.local:8080/v2.0/tokens"
tenant_name "fooproject"
username "udzura"
password "tonk0tsu-r@men"
end
list
이다 create
를 두드리면 해당 API를 두드립니다.Yao::Flavor.list
# => [#<Yao::Resources::Flavor>, #<Yao::Resources::Flavor>, ...]
f = Yao::Flavor.get(10)
# => #<Yao::Resources::Flavor:0x007f9b159828a0 @data={... "id"=>"10"}>
f.name
# => "r1.2xlarge"
이런 사용법
페파보 사내의 OpenStack 기반(
Nyah
이라고 부릅니다)의 운용 주위의 툴을 중심으로, OSS(RubyGems)로서 내고 있는 것은 이런 느낌입니다. 또한 아이와 비슷합니다. 그리고 ls의 AWS 도구 그룹에 매우 영향을 받았습니다 요 ... KeyStone 사용자 관리를 코딩하는 도구
울타리 ... 보안 그룹을 코딩하는 도구
pec ... 인스턴스의 스펙을 YAML로 쓰면, 그대로의 인스턴스를 시작하는 툴.
stackspec ... serverspec 또는 awspec과 같이 OpenStack 리소스가 제대로 서 있는지 확인하는 도구입니다. WIP.
최신 작품 인 stackspec은 조금 흥미 롭고 현재 이러한 테스트 코드를 작성하면 :
server_spec.rb
describe server('stackspec.example.com') do
its(:name) { should eq 'stackspec.example.com' }
its(:key_name) { should eq 'sample001' }
its(:security_groups) { should have(4).security_groups }
it { should have_security_group(name: "https") }
its('flavor.id') { should eq '8' }
end
이런 느낌의 출력을 해줍니다.
$ rspec spec/tenant_name/server_spec.rb
OpenStack server "stackspec.example.com"
should have security group {:name=>"https"}
name
should eq "stackspec.example.com"
key_name
should eq "sample001"
security_groups
should have 4 security_groups
flavor.id
should eq "8"
Finished in 2.36 seconds (files took 0.2018 seconds to load)
5 examples, 0 failures
OpenStack 테넌트 내에서 구축이 잘 되었습니까? 라고 하는 것을 검사하거나, 있어야 할 구성을 먼저 테스트로 써 TDD 하거나... 라고 꿈이 있을 것 같습니다. RSpec을 사용하기 때문에 Ruby 같음도 있습니다. WIP이므로 내년에 노력하겠습니다 ....
참고
실은 이전 기사를 쓰고 있습니다.
타이밍 등 여러가지로, OpenStack Summit등에서는 발표하고 있지 않습니다만, 언젠가는...이라고 생각하고 있거나 합니다.
그렇다고 해서, 꼭 라이브러리, 툴 모두 시험해 주시면 좋겠습니다.
내일은 tmak_tw 씨입니다!
Reference
이 문제에 관하여(Yet Another OpenStack Wrapper in Ruby - YAO 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/udzura/items/d62dc8111bbe737ad2d8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)