ConoHa API를 Ruby에서 호출

8874 단어 코노하루비
전회 Safari용 기능 확장 를 만들었습니다만, 문득 생각해 서 이번은 Ruby로 써 보기로 했습니다.

이번은 세세한 부분은 생략해 코드만.

Token 받기



포인트로서는 http로 통신하는 것입니까.
require 'net/https'
require 'uri'
require 'json'

....

    def GetToken(username, password, region)
      tenantId = username.gsub("gncu","gnct")
      url = "https://identity." + region + ".conoha.io/v2.0/tokens"
      uri = URI.parse(url)
      https = Net::HTTP.new(uri.host, uri.port)
      https.use_ssl = true
      #https.set_debug_output $stderr
      req = Net::HTTP::Post.new(uri.request_uri)
      req["Content-Type"] = "application/json"
      req.body = '{ "auth": { "passwordCredentials": { "username": "'+ username +'", "password": "'+ password + '"}, "tenantName": "'+ tenantId +'" } }'
      res = https.request(req)
      if res.code == "200"
        json = JSON.parse(res.body)
        json["access"]["token"]
      else
        nil
      end
    end

중간당 "#https.set_debug_output $stderr"는 코멘트를 해제하면 통신 상태의 상세가 표시됩니다. 디버깅에 매우 유용합니다.

참고 : ConoHa API 토큰 발급

서버 상태 얻기



취득한 API 토큰을 req[X-Auth-Token]로 전달합니다.
require 'net/https'
require 'uri'
require 'json'

....

    def GetServers(region, token)
      url = "https://compute." + region + ".conoha.io/v2/" + token["tenant"]["id"] + "/servers/detail"
      uri = URI.parse(url)
      https = Net::HTTP.new(uri.host, uri.port)
      https.use_ssl = true
      #https.set_debug_output $stderr
      req = Net::HTTP::Get.new(uri.request_uri)
      req["Accept"] = "application/json"
      req["X-Auth-Token"] = token["id"]
      res = https.request(req)
      if res.code == "200"
          json = JSON.parse(res.body)
          json
      else
          nil
      end
    end

참고 : ConoHa API VM 일람 상세 취득

응용편



한 번 요령을 알고 버리면 API를 괴롭히고 무엇을 할 수 있는지 생각하는 것은 즐겁네요.

그렇다고 해서, 자신 이외에 사용하는 사람이 있는지 의문입니다만 이 코드를 응용해 Alfred2용의 Workflow를 만들어 보았습니다. Conoha와 명령을 치면 서버 목록이 표시됩니다. 선택하면 제어판이 열립니다.



아직 묵직하게 만든 만큼의 테스트 단계입니다만, 흥미가 있는 사람은 부디.

좋은 웹페이지 즐겨찾기