Class: VagrantPlugins::OpenNebulaProvider::Helpers::FogApi

Inherits:
Object
  • Object
show all
Defined in:
lib/opennebula-provider/helpers/fog.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeFogApi

Returns a new instance of FogApi.



9
10
11
# File 'lib/opennebula-provider/helpers/fog.rb', line 9

def initialize
  @logger = Log4r::Logger.new('vagrant::provider::opennebula::helpers::fog')
end

Instance Attribute Details

#configObject

Returns the value of attribute config.



7
8
9
# File 'lib/opennebula-provider/helpers/fog.rb', line 7

def config
  @config
end

Instance Method Details

#computeObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# 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
  newvm.flavor.user_variables = @provider_config.user_variables unless @provider_config.user_variables.nil?
  @logger.warn "Deploying VM with options #{newvm.flavor.inspect}"
  vm = newvm.save
  vm.id
rescue RuntimeError => e
  raise Errors::ComputeError, error: e
end

#connectObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 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) ⇒ Object



90
91
92
93
# File 'lib/opennebula-provider/helpers/fog.rb', line 90

def delete(id)
  @logger.info 'delete!'
  @fog_client.servers.get(id).destroy
end

#machine_state(id) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/opennebula-provider/helpers/fog.rb', line 105

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) ⇒ Object



13
14
15
16
17
18
19
20
21
# 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) ⇒ Object



100
101
102
103
# File 'lib/opennebula-provider/helpers/fog.rb', line 100

def resume(id)
  @logger.info 'resume!'
  @fog_client.servers.get(id).resume
end

#ssh_info(id) ⇒ Object



120
121
122
123
# File 'lib/opennebula-provider/helpers/fog.rb', line 120

def ssh_info(id)
  desc = @fog_client.servers.get(id)
  desc.ip unless desc.nil?
end

#start(id) ⇒ Object



85
86
87
88
# File 'lib/opennebula-provider/helpers/fog.rb', line 85

def start(id)
  @logger.info 'start!'
  @fog_client.servers.get(id).start
end

#stop(id) ⇒ Object



80
81
82
83
# File 'lib/opennebula-provider/helpers/fog.rb', line 80

def stop(id)
  @logger.info 'stop!'
  @fog_client.servers.get(id).stop
end

#suspend(id) ⇒ Object



95
96
97
98
# File 'lib/opennebula-provider/helpers/fog.rb', line 95

def suspend(id)
  @logger.info 'suspend!'
  @fog_client.servers.get(id).suspend
end