class Fog::Proxmox::Compute::Server
Server
model
Public Class Methods
new(new_attributes = {})
click to toggle source
Calls superclass method
# File lib/fog/proxmox/compute/models/server.rb, line 63 def initialize(new_attributes = {}) prepare_service_value(new_attributes) Fog::Proxmox::Attributes.set_attr_and_sym('node_id', attributes, new_attributes) Fog::Proxmox::Attributes.set_attr_and_sym('type', attributes, new_attributes) Fog::Proxmox::Attributes.set_attr_and_sym('vmid', attributes, new_attributes) requires :node_id, :type, :vmid initialize_config(new_attributes) initialize_snapshots initialize_tasks super(new_attributes) end
Public Instance Methods
action(action, options = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 118 def action(action, options = {}) action_known = %w[start stop resume suspend shutdown reset].include? action message = "Action #{action} not implemented" raise Fog::Errors::Error, message unless action_known request(:action_server, options, action: action, vmid: vmid) reload end
attach(disk, options = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 177 def attach(disk, options = {}) disk_hash = Fog::Proxmox::DiskHelper.flatten(disk.merge(options: options)) update(disk_hash) end
backup(options = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 131 def backup(options = {}) request(:create_backup, options.merge(vmid: vmid)) reload end
backups()
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 224 def backups list 'backup' end
clone(newid, options = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 145 def clone(newid, options = {}) request(:clone_server, options.merge(newid: newid), vmid: vmid) reload end
connect_vnc(options = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 218 def connect_vnc(options = {}) path_params = { node: node_id, type: type, vmid: vmid } query_params = { port: options['port'], vncticket: options['ticket'] } service.get_vnc(path_params, query_params) end
container?()
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 75 def container? type == 'lxc' end
create_template(options = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 150 def create_template(options = {}) service.template_server({ node: node_id, type: type, vmid: vmid }, options) reload end
destroy(options = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 114 def destroy(options = {}) request(:delete_server, options, vmid: vmid) end
detach(diskid)
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 182 def detach(diskid) update(delete: diskid) end
extend(disk, size, options = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 159 def extend(disk, size, options = {}) if container? request(:resize_container, options.merge(disk: disk, size: size), vmid: vmid) else service.resize_server({ vmid: vmid, node: node_id }, options.merge(disk: disk, size: size)) end reload end
images()
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 228 def images list 'images' end
list(content)
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 232 def list(content) storages = node.storages.list_by_content_type content volumes = [] storages.each { |storage| volumes += storage.volumes.list_by_content_type_and_by_server(content, identity) } volumes end
migrate(target, options = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 155 def migrate(target, options = {}) request(:migrate_server, options.merge(target: target), vmid: vmid) end
move(volume, storage, options = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 168 def move(volume, storage, options = {}) if container? request(:move_volume, options.merge(volume: volume, storage: storage), vmid: vmid) else request(:move_disk, options.merge(disk: volume, storage: storage), vmid: vmid) end reload end
persisted?()
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 79 def persisted? service.next_vmid(vmid: vmid) false rescue Excon::Error::InternalServerError false rescue Excon::Error::BadRequest true end
ready?()
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 127 def ready? status == 'running' end
request(name, body_params = {}, path_params = {})
click to toggle source
request with async task
# File lib/fog/proxmox/compute/models/server.rb, line 89 def request(name, body_params = {}, path_params = {}) requires :node_id, :type path = path_params.merge(node: node_id, type: type) task_upid = service.send(name, path, body_params) tasks.wait_for(task_upid) end
restore(backup, options = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 136 def restore(backup, options = {}) attr_hash = if container? options.merge(ostemplate: backup.volid, force: 1, restore: 1) else options.merge(archive: backup.volid, force: 1) end save(attr_hash) end
save(new_attributes = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 96 def save(new_attributes = {}) body_params = new_attributes.merge(vmid: vmid) body_params = body_params.merge(config.flatten) unless persisted? request(:create_server, body_params) reload end
start_console(options = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 186 def start_console(options = {}) unless ready? raise ::Fog::Proxmox::Errors::ServiceError, 'Unable to start console because server not running.' end if container? type_console = options[:console] options.delete_if { |option| [:console].include? option } unless type_console raise ::Fog::Proxmox::Errors::ServiceError, 'Unable to start console because console container config is not set or unknown.' end else type_console = config.type_console unless type_console raise ::Fog::Proxmox::Errors::ServiceError, 'Unable to start console because VGA display server config is not set or unknown.' end end requires :vmid, :node_id, :type path_params = { node: node_id, type: type, vmid: vmid } body_params = options data = service.send(('create_' + type_console).to_sym, path_params, body_params) task_upid = data['upid'] if task_upid task = tasks.get(task_upid) task.wait_for { running? } end data end
update(new_attributes = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 103 def update(new_attributes = {}) if container? path_params = { node: node_id, type: type, vmid: vmid } body_params = new_attributes service.update_server(path_params, body_params) else request(:update_server, new_attributes, vmid: vmid) end reload end
Protected Instance Methods
initialize_config(new_attributes = {})
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 241 def initialize_config(new_attributes = {}) options = { service: service, vmid: vmid } attributes[:config] = Fog::Proxmox::Compute::ServerConfig.new(options.merge(new_attributes)) end
Private Instance Methods
initialize_snapshots()
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 248 def initialize_snapshots attributes[:snapshots] = Fog::Proxmox::Compute::Snapshots.new(service: service, server_id: vmid, server_type: type, node_id: node_id) end
initialize_tasks()
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 253 def initialize_tasks attributes[:tasks] = Fog::Proxmox::Compute::Tasks.new(service: service, node_id: node_id).select do |task| task.id == vmid end end
node()
click to toggle source
# File lib/fog/proxmox/compute/models/server.rb, line 259 def node Fog::Proxmox::Compute::Node.new(service: service, node: node_id) end