Class: VirtualMachineDriver
- Inherits:
-
OpenNebulaDriver
- Object
- ActionManager
- OpenNebulaDriver
- VirtualMachineDriver
- Defined in:
- lib/VirtualMachineDriver.rb
Overview
This class provides basic messaging and logging functionality to implement OpenNebula Drivers. A driver is a program that specialize the OpenNebula behavior by interfacing with specific infrastructure functionalities.
A Driver inherits this class and only has to provide methods for each action it wants to receive. The method must be associated with the action name through the register_action function
Direct Known Subclasses
Constant Summary collapse
- ACTION =
Virtual Machine Driver Protocol constants
{ :deploy => "DEPLOY", :shutdown => "SHUTDOWN", :reboot => "REBOOT", :reset => "RESET", :cancel => "CANCEL", :save => "SAVE", :restore => "RESTORE", :migrate => "MIGRATE", :poll => "POLL", :log => "LOG", :attach_disk => "ATTACHDISK", :detach_disk => "DETACHDISK", :snapshot_create => "SNAPSHOTCREATE", :snapshot_revert => "SNAPSHOTREVERT", :snapshot_delete => "SNAPSHOTDELETE", :cleanup => "CLEANUP", :attach_nic => "ATTACHNIC", :detach_nic => "DETACHNIC", :disk_snapshot_create => "DISKSNAPSHOTCREATE", :resize_disk => "RESIZEDISK", :update_sg => "UPDATESG", :update_conf => "UPDATECONF", :resize => "RESIZE", :backup => "BACKUP", :update_nic => "UPDATENIC" }
- POLL_ATTRIBUTE =
OpenNebula::VirtualMachine::Driver::POLL_ATTRIBUTE
- VM_STATE =
OpenNebula::VirtualMachine::Driver::VM_STATE
- HOST_ARG =
1
Constants included from DriverExecHelper
Instance Attribute Summary
Attributes inherited from OpenNebulaDriver
#local_scripts_base_path, #local_scripts_path, #remote_scripts_base_path, #remote_scripts_path
Instance Method Summary collapse
- #attach_disk(id, drv_message) ⇒ Object
- #attach_nic(id, drv_message) ⇒ Object
- #backup(id, drv_message) ⇒ Object
- #cancel(id, drv_message) ⇒ Object
- #cleanup(id, drv_message) ⇒ Object
-
#decode(drv_message) ⇒ REXML::Element
Decodes the encoded XML driver message received from the core.
-
#deploy(id, drv_message) ⇒ Object
Virtual Machine Manager Protocol Actions (generic implementation).
- #detach_disk(id, drv_message) ⇒ Object
- #detach_nic(id, drv_message) ⇒ Object
- #disk_snapshot_create(id, drv_message) ⇒ Object
-
#initialize(directory, options = {}) ⇒ VirtualMachineDriver
constructor
Register default actions for the protocol.
-
#local_action(command, id, action) ⇒ Object
Execute a command associated to an action and id on localhost.
- #migrate(id, drv_message) ⇒ Object
- #poll(id, drv_message) ⇒ Object
- #reboot(id, drv_message) ⇒ Object
-
#remotes_action(command, id, host, action, remote_dir, std_in = nil) ⇒ Object
Execute a command associated to an action and id in a remote host.
- #reset(id, drv_message) ⇒ Object
- #resize(id, drv_message) ⇒ Object
- #resize_disk(id, drv_message) ⇒ Object
- #restore(id, drv_message) ⇒ Object
- #save(id, drv_message) ⇒ Object
- #shutdown(id, drv_message) ⇒ Object
- #snapshot_create(id, drv_message) ⇒ Object
- #snapshot_delete(id, drv_message) ⇒ Object
- #snapshot_revert(id, drv_message) ⇒ Object
- #update_conf(id, drv_message) ⇒ Object
- #update_nic(id, drv_message) ⇒ Object
- #update_sg(id, drv_message) ⇒ Object
Methods inherited from OpenNebulaDriver
#do_action, parse_actions_list, #start_driver
Methods included from DriverExecHelper
#action_command_line, #action_is_local?, #action_script_name, failed?, #get_info_from_execution, #initialize_helper, #log, #log_method, #read_configuration, #send_message
Methods inherited from ActionManager
#cancel_action, #register_action, #start_listener, #trigger_action
Constructor Details
#initialize(directory, options = {}) ⇒ VirtualMachineDriver
Register default actions for the protocol.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/VirtualMachineDriver.rb', line 73 def initialize(directory, ={}) @options={ :threaded => true, :single_host => true }.merge!() super(directory, @options) @hosts = Array.new register_action(ACTION[:deploy].to_sym, method("deploy")) register_action(ACTION[:shutdown].to_sym, method("shutdown")) register_action(ACTION[:reboot].to_sym, method("reboot")) register_action(ACTION[:reset].to_sym, method("reset")) register_action(ACTION[:cancel].to_sym, method("cancel")) register_action(ACTION[:save].to_sym, method("save")) register_action(ACTION[:restore].to_sym, method("restore")) register_action(ACTION[:migrate].to_sym, method("migrate")) register_action(ACTION[:poll].to_sym, method("poll")) register_action(ACTION[:attach_disk].to_sym, method("attach_disk")) register_action(ACTION[:detach_disk].to_sym, method("detach_disk")) register_action(ACTION[:snapshot_create].to_sym, method("snapshot_create")) register_action(ACTION[:snapshot_revert].to_sym, method("snapshot_revert")) register_action(ACTION[:snapshot_delete].to_sym, method("snapshot_delete")) register_action(ACTION[:cleanup].to_sym, method("cleanup")) register_action(ACTION[:attach_nic].to_sym, method("attach_nic")) register_action(ACTION[:detach_nic].to_sym, method("detach_nic")) register_action(ACTION[:disk_snapshot_create].to_sym, method("disk_snapshot_create")) register_action(ACTION[:resize_disk].to_sym, method("resize_disk")) register_action(ACTION[:update_sg].to_sym, method("update_sg")) register_action(ACTION[:update_conf].to_sym, method("update_conf")) register_action(ACTION[:resize].to_sym, method("resize")) register_action(ACTION[:backup].to_sym, method("backup")) register_action(ACTION[:update_nic].to_sym, method("update_nic")) end |
Instance Method Details
#attach_disk(id, drv_message) ⇒ Object
176 177 178 179 |
# File 'lib/VirtualMachineDriver.rb', line 176 def attach_disk(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:attach_disk],RESULT[:failure],id,error) end |
#attach_nic(id, drv_message) ⇒ Object
186 187 188 189 |
# File 'lib/VirtualMachineDriver.rb', line 186 def attach_nic(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:attach_nic],RESULT[:failure],id,error) end |
#backup(id, drv_message) ⇒ Object
241 242 243 244 |
# File 'lib/VirtualMachineDriver.rb', line 241 def backup(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:backup],RESULT[:failure],id,error) end |
#cancel(id, drv_message) ⇒ Object
151 152 153 154 |
# File 'lib/VirtualMachineDriver.rb', line 151 def cancel(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:cancel],RESULT[:failure],id,error) end |
#cleanup(id, drv_message) ⇒ Object
226 227 228 229 |
# File 'lib/VirtualMachineDriver.rb', line 226 def cleanup(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:cleanup],RESULT[:failure],id,error) end |
#decode(drv_message) ⇒ REXML::Element
Decodes the encoded XML driver message received from the core
113 114 115 116 117 118 |
# File 'lib/VirtualMachineDriver.rb', line 113 def decode() = Base64.decode64() xml_doc = REXML::Document.new() xml_doc.root end |
#deploy(id, drv_message) ⇒ Object
Virtual Machine Manager Protocol Actions (generic implementation)
131 132 133 134 |
# File 'lib/VirtualMachineDriver.rb', line 131 def deploy(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:deploy],RESULT[:failure],id,error) end |
#detach_disk(id, drv_message) ⇒ Object
181 182 183 184 |
# File 'lib/VirtualMachineDriver.rb', line 181 def detach_disk(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:detach_disk],RESULT[:failure],id,error) end |
#detach_nic(id, drv_message) ⇒ Object
191 192 193 194 |
# File 'lib/VirtualMachineDriver.rb', line 191 def detach_nic(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:detach_nic],RESULT[:failure],id,error) end |
#disk_snapshot_create(id, drv_message) ⇒ Object
211 212 213 214 |
# File 'lib/VirtualMachineDriver.rb', line 211 def disk_snapshot_create(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:disk_snapshot_create],RESULT[:failure],id,error) end |
#local_action(command, id, action) ⇒ Object
Execute a command associated to an action and id on localhost
126 127 128 |
# File 'lib/VirtualMachineDriver.rb', line 126 def local_action(command, id, action) super(command,id,ACTION[action]) end |
#migrate(id, drv_message) ⇒ Object
166 167 168 169 |
# File 'lib/VirtualMachineDriver.rb', line 166 def migrate(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:migrate],RESULT[:failure],id,error) end |
#poll(id, drv_message) ⇒ Object
171 172 173 174 |
# File 'lib/VirtualMachineDriver.rb', line 171 def poll(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:poll],RESULT[:failure],id,error) end |
#reboot(id, drv_message) ⇒ Object
141 142 143 144 |
# File 'lib/VirtualMachineDriver.rb', line 141 def reboot(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:reboot],RESULT[:failure],id,error) end |
#remotes_action(command, id, host, action, remote_dir, std_in = nil) ⇒ Object
Execute a command associated to an action and id in a remote host.
121 122 123 |
# File 'lib/VirtualMachineDriver.rb', line 121 def remotes_action(command, id, host, action, remote_dir, std_in=nil) super(command,id,host,ACTION[action],remote_dir,std_in) end |
#reset(id, drv_message) ⇒ Object
146 147 148 149 |
# File 'lib/VirtualMachineDriver.rb', line 146 def reset(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:reset],RESULT[:failure],id,error) end |
#resize(id, drv_message) ⇒ Object
236 237 238 239 |
# File 'lib/VirtualMachineDriver.rb', line 236 def resize(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:resize],RESULT[:failure],id,error) end |
#resize_disk(id, drv_message) ⇒ Object
216 217 218 219 |
# File 'lib/VirtualMachineDriver.rb', line 216 def resize_disk(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:resize_disk],RESULT[:failure],id,error) end |
#restore(id, drv_message) ⇒ Object
161 162 163 164 |
# File 'lib/VirtualMachineDriver.rb', line 161 def restore(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:restore],RESULT[:failure],id,error) end |
#save(id, drv_message) ⇒ Object
156 157 158 159 |
# File 'lib/VirtualMachineDriver.rb', line 156 def save(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:save],RESULT[:failure],id,error) end |
#shutdown(id, drv_message) ⇒ Object
136 137 138 139 |
# File 'lib/VirtualMachineDriver.rb', line 136 def shutdown(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:shutdown],RESULT[:failure],id,error) end |
#snapshot_create(id, drv_message) ⇒ Object
196 197 198 199 |
# File 'lib/VirtualMachineDriver.rb', line 196 def snapshot_create(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:snapshot_create],RESULT[:failure],id,error) end |
#snapshot_delete(id, drv_message) ⇒ Object
206 207 208 209 |
# File 'lib/VirtualMachineDriver.rb', line 206 def snapshot_delete(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:snapshot_delete],RESULT[:failure],id,error) end |
#snapshot_revert(id, drv_message) ⇒ Object
201 202 203 204 |
# File 'lib/VirtualMachineDriver.rb', line 201 def snapshot_revert(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:snapshot_revert],RESULT[:failure],id,error) end |
#update_conf(id, drv_message) ⇒ Object
231 232 233 234 |
# File 'lib/VirtualMachineDriver.rb', line 231 def update_conf(id, ) error = "Action not implemented by driver #{self.class}" (ACTION[:update_conf],RESULT[:failure],id,error) end |