class Fog::Compute::Openvz::Real

Public Class Methods

new(options={}) click to toggle source
# File lib/fog/openvz/compute.rb, line 69
def initialize(options={})
  @openvz_connect_command = options[:openvz_connect_command]
end

Public Instance Methods

compact_server(id,options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/compact_server.rb, line 5
def compact_server(id,options = {})
  vzctl("compact",{:ctid => id}.merge(options))
end
convert_server(id,options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/convert_server.rb, line 5
def convert_server(id,options = {})
  vzctl("convert",{:ctid => id}.merge(options))
end
create_server(options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/create_server.rb, line 5
def create_server(options = {})
  vzctl("create",options)
end
destroy_server(id, options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/destroy_server.rb, line 5
def destroy_server(id, options = {})
  vzctl("destroy",{:ctid => id}.merge(options))
end
exec2_server(id,args) click to toggle source
# File lib/fog/openvz/requests/compute/exec2_server.rb, line 5
def exec2_server(id,args)
  vzctl("exec2",{:ctid => id},args)
end
exec_server(id,args = []) click to toggle source
# File lib/fog/openvz/requests/compute/exec_server.rb, line 5
def exec_server(id,args = [])
  vzctl("exec",{:ctid => id},args)
end
expand_commands(commands, params, args) click to toggle source
# File lib/fog/openvz/compute.rb, line 77
def expand_commands(commands, params, args)
  # For all params unless the ctid
  # pass it to the command
  params.keys.each do |k|
    if (params[k]) && (k.to_s != 'ctid')

      if params[k].is_a?(Array)
        # For arrays we pass the params and key multiple times
        params[k].each do |p|
          commands << "--#{k}"
          commands << "\"#{p}\""
        end
      else
        commands << "--#{k}"
        # For booleans only pass the options
        # We put the values of params between doublequotes
        commands << "\"#{params[k]}\"" unless !!params[k] == params[k]
      end

    end
  end

  # These commands will be passed directly
  args.each do |a|
    commands << a
  end

  # Delete empty commands
  commands.delete("")

  # Now build the full command
  full_command = "#{commands.join(' ')}"

  # If we have a connect command , expand it
  if @openvz_connect_command.nil?
    prefixed_command = "#{full_command}"
  else
    prefixed_command = @openvz_connect_command.sub('@command@',"#{full_command}")
  end
  return prefixed_command
end
get_server_details(id) click to toggle source
# File lib/fog/openvz/requests/compute/get_server_details.rb, line 5
def get_server_details(id)
  vzlist({:ctid => id}).first
end
list_servers(options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/list_servers.rb, line 5
def list_servers(options = {})
  vzlist({})
end
mount_server(id, options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/mount_server.rb, line 5
def mount_server(id, options = {})
  vzctl("mount",{:ctid => id}.merge(options))
end
quotainit_server(id, options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/quotainit_server.rb, line 5
def quotainit_server(id, options = {})
  vzctl("quotainit",{:ctid => id}.merge(options))
end
quotaon_server(id, options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/quotaon_server.rb, line 5
def quotaon_server(id, options = {})
  vzctl("quotaon",{:ctid => id}.merge(options))
end
quotaooff_server(id, options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/quotaoff_server.rb, line 5
def quotaooff_server(id, options = {})
  vzctl("quotaoff",{:ctid => id}.merge(options))
end
reload() click to toggle source
# File lib/fog/openvz/compute.rb, line 73
def reload
  #@connection.reset
end
restart_server(id, options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/restart_server.rb, line 5
def restart_server(id, options = {})
  vzctl("restart",{:ctid => id}.merge(options))
end
resume_server(id, options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/resume_server.rb, line 5
def resume_server(id, options = {})
  vzctl("resume",{:ctid => id}.merge(options))
end
runscript_server(id,args = []) click to toggle source
# File lib/fog/openvz/requests/compute/runscript_server.rb, line 5
def runscript_server(id,args = [])
  vzctl("runscript",{:ctid => id},args)
end
set_server(id,options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/set_server.rb, line 5
def set_server(id,options = {})
  vzctl("set",{:ctid => id}.merge(options))
end
snapshot_delete_server(id,options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/snapshot_delete_server.rb, line 5
def snapshot_delete_server(id,options = {})
  vzctl("snapshot-delete",{:ctid => id}.merge(options))
end
snapshot_list_server(id,options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/snapshot_list_server.rb, line 5
def snapshot_list_server(id,options = {})
  vzctl("snapshot-list",{:ctid => id}.merge(options))
end
snapshot_mount_server(id,options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/snapshot_mount_server.rb, line 5
def snapshot_mount_server(id,options = {})
  vzctl("snapshot-mount",{:ctid => id}.merge(options))
end
snapshot_server(id,options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/snapshot_server.rb, line 5
def snapshot_server(id,options = {})
  vzctl("snapshot",{:ctid => id}.merge(options))
end
snapshot_switch_server(id,options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/snapshot_switch_server.rb, line 5
def snapshot_switch_server(id,options = {})
  vzctl("snapshot-switch",{:ctid => id}.merge(options))
end
snapshot_umount_server(id,options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/snapshot_umount_server.rb, line 5
def snapshot_umount_server(id,options = {})
  vzctl("snapshot-umount",{:ctid => id}.merge(options))
end
start_server(id,options={}) click to toggle source
# File lib/fog/openvz/requests/compute/start_server.rb, line 5
def start_server(id,options={})
  vzctl("start",{:ctid => id}.merge(options))
end
status_server(id, options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/status_server.rb, line 5
def status_server(id, options = {})
  vzctl("status",{:ctid => id}.merge(options))
end
stop_server(id, options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/stop_server.rb, line 5
def stop_server(id, options = {})
  vzctl("stop",{:ctid => id}.merge(options))
end
suspend_server(id, options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/suspend_server.rb, line 5
def suspend_server(id, options = {})
  vzctl("suspend",{:ctid => id}.merge(options))
end
umount_server(id, options = {}) click to toggle source
# File lib/fog/openvz/requests/compute/umount_server.rb, line 5
def umount_server(id, options = {})
  vzctl("umount",{:ctid => id}.merge(options))
end
vzctl(command, params,args = []) click to toggle source
# File lib/fog/openvz/compute.rb, line 119
def vzctl(command, params,args = [])
  commands = [ 'vzctl', command, params['ctid'], params[:ctid] ]
  prefixed_command = expand_commands(commands, params, args)

  result = `#{prefixed_command}`
  exitcode = $?.to_i

  # Tofix - we use backticks to get the exitcode
  # But backticks output stderr
  arg_commands = [ 'exec', 'exec2', 'runscript' ]
  if (arg_commands.include?(command))
    return { :output => result , :exitcode => exitcode }
  else
    raise Fog::Errors::Error.new result unless exitcode == 0
    return result
  end
end
vzlist(params,args = []) click to toggle source
# File lib/fog/openvz/compute.rb, line 137
def vzlist(params,args = [])
  commands = [ 'vzlist', '-a', '-j' , params['ctid'], params[:ctid] ]
  prefixed_command = expand_commands(commands, params, args)

  # We do some wier stuff here:
  # - a simple backtick doesn't capture stderr
  # - popen4 would solve it but would require another external gem dependency
  # - popen3 doesn't capture exitcode (on ruby 1.8) but is a standard call
  # - so we resort to checking the stderr instead
  require 'open3'
  result = ""
  error = ""
  puts prefixed_command
  Open3.popen3("#{prefixed_command}") { |i,o,e,t|
    result = result + o.read
    error = error + e.read
  }

  if (error.length != 0)
    if(error.include?("not found"))
      return []
    else
      raise Fog::Errors::Error.new error
    end
  else
    return Fog::JSON.decode(result)
  end
end