Class: ForemanOne::One

Inherits:
ComputeResource
  • Object
show all
Defined in:
app/models/foreman_one/one.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.model_nameObject



16
17
18
# File 'app/models/foreman_one/one.rb', line 16

def self.model_name
  ComputeResource.model_name
end

.provider_friendly_nameObject



8
9
10
# File 'app/models/foreman_one/one.rb', line 8

def self.provider_friendly_name
  "OpenNebula"
end

Instance Method Details

#associated_host(vm) ⇒ Object



118
119
120
# File 'app/models/foreman_one/one.rb', line 118

def associated_host(vm)
  associate_by("mac", vm.vm_mac_address)
end

#capabilitiesObject



20
21
22
# File 'app/models/foreman_one/one.rb', line 20

def capabilities
  [:build]
end

#console(uuid) ⇒ Object



95
96
97
98
# File 'app/models/foreman_one/one.rb', line 95

def console(uuid)
  vm = find_vm_by_uuid(uuid)
  vm.console_output.body.merge(:type=>'vnc', :name=>vm.name)
end

#create_vm(args = { }) ⇒ Object



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
79
80
81
82
83
84
85
86
87
88
# File 'app/models/foreman_one/one.rb', line 53

def create_vm args = { }
  args = vm_instance_defaults.merge(args.to_hash.symbolize_keys)
  logger.info "CREATEVM ARGS #{args.inspect}"
  #ARGS: {"name"=>"aaa.example.com", "b0e"=>"foob0e", "foob0e"=>"b0e", "template_id"=>"4", "vcpu"=>"", "memory"=>"", "vminterfaces_attributes"=>{"new_interfaces"=>{"vnetid"=>"0", "_delete"=>"", "model"=>"virtio"}, "new_1398239695352"=>{"vnetid"=>"2", "_delete"=>"", "model"=>"virtio"}, "new_1398239700415"=>{"vnetid"=>"2", "_delete"=>"", "model"=>"virtio"}, "new_1398239705632"=>{"vnetid"=>"0", "_delete"=>"", "model"=>"e1000"}}}

  vm = client.servers.new
  vm.name = args[:name]
  vm.gid = args[:gid] unless args[:gid].empty?
  vm.flavor = client.flavors.get(args[:template_id])

  vm.flavor.vcpu = args[:vcpu] unless args[:vcpu].empty?
  vm.flavor.memory = args[:memory] unless args[:memory].empty?
  vm.flavor.nic = [] unless vm.flavor.nic.is_a? Array

  #INTERFACES {"new_interfaces"=>{"vnetid"=>"0", "_delete"=>"", "model"=>"virtio"}, "new_1398239695352"=>{"vnetid"=>"2", "_delete"=>"", "model"=>"virtio"}, "new_1398239700415"=>{"vnetid"=>"2", "_delete"=>"", "model"=>"virtio"}, "new_1398239705632"=>{"vnetid"=>"0", "_delete"=>"", "model"=>"e1000"}}
  logger.debug "NEW #{args[:interfaces_attributes].inspect}"
  nics = args[:interfaces_attributes].values
  if nics.is_a? Array then
    nics.each do |nic|
      unless (nic["vnetid"].empty? || nic["model"].empty?)
        vm.flavor.nic << client.interfaces.new({ :vnet => client.networks.get(nic["vnetid"]), :model => nic["model"]})
      end
    end
  end

  logger.debug "VM: #{vm.inspect}"
  logger.debug "FLAVOR: #{vm.flavor.inspect}"
  logger.debug "NIC: #{vm.flavor.nic.inspect}"
  logger.debug "FLAVORto_s: #{vm.flavor.to_s}"

  vm.save
rescue ::OpenNebula::Error => e
  logger.debug "OpenNebula error: #{e.message}\n " + e.backtrace.join("\n ")
  errors.add(:base, e.message.to_s)
  false
end

#destroy_vm(uuid) ⇒ Object



100
101
102
103
104
# File 'app/models/foreman_one/one.rb', line 100

def destroy_vm(uuid)
  vm = find_vm_by_uuid(uuid)
  vm.destroy if vm
  true
end

#find_vm_by_uuid(uuid) ⇒ Object



24
25
26
# File 'app/models/foreman_one/one.rb', line 24

def find_vm_by_uuid uuid
  client.servers.get(uuid)
end

#flavorsObject



45
46
47
# File 'app/models/foreman_one/one.rb', line 45

def flavors
  client.flavors
end

#groupsObject



49
50
51
# File 'app/models/foreman_one/one.rb', line 49

def groups
  client.groups
end

#interfacesObject



32
33
34
# File 'app/models/foreman_one/one.rb', line 32

def interfaces
  vm.interfaces
end

#networksObject



40
41
42
# File 'app/models/foreman_one/one.rb', line 40

def networks
  client.networks rescue []
end

#new_vm(attr = { }) ⇒ Object



28
29
30
# File 'app/models/foreman_one/one.rb', line 28

def new_vm attr={ }
  client.servers.new vm_instance_defaults.merge(attr.to_hash.symbolize_keys) if errors.empty?
end

#new_vminterface(attr = {}) ⇒ Object



122
123
124
125
# File 'app/models/foreman_one/one.rb', line 122

def new_vminterface attr={}
  logger.info "new_interface attr #{attr.inspect}"
  client.interfaces.new attr
end

#provided_attributesObject



12
13
14
# File 'app/models/foreman_one/one.rb', line 12

def provided_attributes
  super.merge({ :mac => :mac })
end

#start_vm(uuid) ⇒ Object



106
107
108
109
110
111
# File 'app/models/foreman_one/one.rb', line 106

def start_vm(uuid)
  #vm = find_vm_by_uuid(uuid)
  #logger.info "VM DESTROY: #{vm.class} #{vm.methods}"
  #vm.destroy if vm
  true
end

#test_connection(options = {}) ⇒ Object



90
91
92
93
# File 'app/models/foreman_one/one.rb', line 90

def test_connection options = {}
  super
  errors[:user].empty? and errors[:password].empty? and not client.client.get_version.is_a?(OpenNebula::Error)
end

#update_required?(old_attrs, new_attrs) ⇒ Boolean

not supporting update at the moment

Returns:

  • (Boolean)


114
115
116
# File 'app/models/foreman_one/one.rb', line 114

def update_required?(old_attrs, new_attrs)
  false
end

#vminterfacesObject



36
37
38
# File 'app/models/foreman_one/one.rb', line 36

def vminterfaces
  interfaces
end