class VagrantPlugins::OpenNebulaProvider::Helpers::FogApi

Attributes

config[RW]

Public Class Methods

new() click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 9
def initialize
  @logger = Log4r::Logger.new('vagrant::provider::opennebula::helpers::fog')
end

Public Instance Methods

compute() click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 38
def compute
  @logger.info 'compute!'
  newvm = @fog_client.servers.new
  if @provider_config.template_id
    newvm.flavor = @fog_client.flavors.get @provider_config.template_id
  elsif @provider_config.template_name
    flavors = @fog_client.flavors.get_by_filter({name: @provider_config.template_name})
    if flavors.nil?
      fail Errors::ComputeError, error: I18n.t('opennebula_provider.compute.template_missing', template: @provider_config.template_name)
    end
    newvm.flavor = flavors.last
  end
  if newvm.flavor.nil?
    fail Errors::ComputeError, error: I18n.t('opennebula_provider.compute.template_missing', template: @provider_config.template)
  end

  newvm.name = @provider_config.title if @provider_config.title
  if @config.vm.hostname != nil
    newvm.flavor.context = (newvm.flavor.context).merge({ 'SET_HOSTNAME' => @config.vm.hostname })
  end
  newvm.flavor.memory = @provider_config.memory unless @provider_config.memory.nil?
  newvm.flavor.cpu = @provider_config.cpu unless @provider_config.cpu.nil?
  newvm.flavor.vcpu = @provider_config.vcpu unless @provider_config.vcpu.nil?

  if newvm.flavor.disk.instance_of? Array
    fail Errors::AllocateError, error: I18n.t(
        'opennebula_provider.errors.allocate',
        error: 'Template has more than one disk attached and `disk_size` ' +
               'feature is supported only for templates with only one')
  end

  if @provider_config.disk_size != nil
    newvm.flavor.disk["SIZE"] = @provider_config.disk_size
  end
  @logger.warn "Deploying VM with options #{newvm.flavor.inspect}"
  vm = newvm.save
  vm.id
rescue RuntimeError => e
  raise Errors::ComputeError, error: e
end
connect() click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 23
def connect
  @logger = Log4r::Logger.new('vagrant::provider::opennebula::helpers::fog')
  @logger.info 'Connect to OpenNebula RPC'
  @fog_client = Fog::Compute.new(@options)
  rc = @fog_client.client.get_version
  if rc.is_a?(OpenNebula::Error)
    case rc.errno
    when 256
        raise Errors::AuthError, error: rc.message
    when 4369
        raise Errors::ConnectError, error: rc.message
    end
  end
end
delete(id) click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 89
def delete(id)
  @logger.info 'delete!'
  @fog_client.servers.get(id).destroy
end
machine_state(id) click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 104
def machine_state(id)
  if id
    begin
      desc = @fog_client.servers.get(id)  #state LCM_INIT & RUNNING  status 7 && UNDEPLOYED
    rescue ArgumentError => e
      raise Errors::ResourceError, error: e
    end
    return :not_created if desc.nil?

    return get_pretty_status(desc.state, desc.status)
  else
    return :not_created
  end
end
provider_config=(provider_config) click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 13
def provider_config=(provider_config)
  @provider_config = provider_config
  @options = {
    provider: 'OpenNebula',
    opennebula_endpoint: provider_config.endpoint,
    opennebula_username: provider_config.username,
    opennebula_password: provider_config.password
  }
end
resume(id) click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 99
def resume(id)
  @logger.info 'resume!'
  @fog_client.servers.get(id).resume
end
ssh_info(id) click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 119
def ssh_info(id)
  desc = @fog_client.servers.get(id)
  desc.ip unless desc.nil?
end
start(id) click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 84
def start(id)
  @logger.info 'start!'
  @fog_client.servers.get(id).start
end
stop(id) click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 79
def stop(id)
  @logger.info 'stop!'
  @fog_client.servers.get(id).stop
end
suspend(id) click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 94
def suspend(id)
  @logger.info 'suspend!'
  @fog_client.servers.get(id).suspend
end

Private Instance Methods

get_pretty_status(state, status) click to toggle source
# File lib/opennebula-provider/helpers/fog.rb, line 125
def get_pretty_status(state, status)
  pretty = "#{state}_#{status}"
  case state
  when 'LCM_INIT'
    case status
    when 1, 3
      pretty = 'pending'
    when 4
      pretty = 'stopped'
    when 5
      pretty = 'suspended'
    when 7
      pretty = 'error'
    end
  when 'PROLOG', 'PROLOG_RESUME'
    case status
    when 3
      pretty = 'prolog'
    end
  when 'BOOT'
    case status
    when 3
      pretty = 'boot'
    end
  when 'RUNNING'
    case status
    when 3
      pretty = 'active'
    end
  when 'BOOT_STOPPED'
    case status
    when 3
      pretty = 'boot'
    end
  when 'BOOT_STOPPED_FAILURE'
    case status
    when 3
      pretty = 'error'
    end
  end
  pretty.to_sym
end