class Kitchen::Driver::Sakuracloud

Public Instance Methods

create(state) click to toggle source
# File lib/kitchen/driver/sakuracloud.rb, line 29
def create(state)
  server = create_server
  state[:id] = server.id
  state[:hostname] = server.interfaces.first["IPAddress"]
end
create_server() click to toggle source
# File lib/kitchen/driver/sakuracloud.rb, line 39
def create_server
  raise Kitchen::ActionFailed "" unless config[:sshkey_id]
  server = compute.servers.create(
    :name  => instance.name,
    :sshkey => config[:sshkey_id],
    :serverplan => config[:serverplan],
    :volume => volume_option,
    :boot => true
  )
  server
end
destroy(state) click to toggle source
# File lib/kitchen/driver/sakuracloud.rb, line 35
def destroy(state)
  destroy_server(state[:id]) if state[:id]
end
destroy_server(id) click to toggle source
# File lib/kitchen/driver/sakuracloud.rb, line 51
def destroy_server(id)
  logger.debug "Trying to delete #{id} ..."
  begin
    server = compute.servers.get(id)
    server.stop(true)
    server.reload

    logger.debug("Waiting #{id} until down ... (in 15 sec)")
    3.times do
      break if server.instance["Status"] == "down"
      sleep 5
      server.reload
    end

    server.delete(true, server.disks.map {|d| d["ID"]})
  rescue Excon::Errors::HTTPStatusError => e
    logger.error JSON.parse(e.response.body)
    raise e unless e.response.status == 404
  end
end

Private Instance Methods

compute() click to toggle source
# File lib/kitchen/driver/sakuracloud.rb, line 73
def compute
  return @compute if @compute
  @compute = Fog::Compute::SakuraCloud.new(
    sakuracloud_api_token: config[:api_token],
    sakuracloud_api_token_secret: config[:api_token_secret],
    api_zone: config[:api_zone]
  )
  @compute
end
volume_option() click to toggle source
# File lib/kitchen/driver/sakuracloud.rb, line 83
def volume_option
    {
      :diskplan => config[:diskplan],
      :size_mb => config[:size_mb],
      :sourcearchive => config[:sourcearchive]
    }
end