Class: Fog::Compute::Libvirt::Server
- Inherits:
-
Server
- Object
- Server
- Fog::Compute::Libvirt::Server
- Includes:
- Fog::Compute::LibvirtUtil
- Defined in:
- lib/fog/libvirt/models/compute/server.rb
Instance Attribute Summary collapse
-
#iso_dir ⇒ Object
The following attributes are only needed when creating a new vm TODO: Add depreciation warning.
-
#iso_file ⇒ Object
The following attributes are only needed when creating a new vm TODO: Add depreciation warning.
-
#network_bridge_name ⇒ Object
Returns the value of attribute network_bridge_name.
-
#network_interface_type ⇒ Object
Returns the value of attribute network_interface_type.
-
#network_nat_network ⇒ Object
Returns the value of attribute network_nat_network.
-
#password ⇒ Object
Returns the value of attribute password.
-
#volume_allocation ⇒ Object
Returns the value of attribute volume_allocation.
-
#volume_capacity ⇒ Object
Returns the value of attribute volume_capacity.
-
#volume_format_type ⇒ Object
Returns the value of attribute volume_format_type.
-
#volume_name ⇒ Object
Returns the value of attribute volume_name.
-
#volume_path ⇒ Object
Returns the value of attribute volume_path.
-
#volume_pool_name ⇒ Object
Returns the value of attribute volume_pool_name.
-
#volume_template_name ⇒ Object
Returns the value of attribute volume_template_name.
-
#xml ⇒ Object
readonly
Returns the value of attribute xml.
Instance Method Summary collapse
- #destroy(options = { :destroy_volumes => false}) ⇒ Object
- #disk_path ⇒ Object
-
#initialize(attributes = {}) ⇒ Server
constructor
Can be created by passing in :xml => “<xml to create domain/server>” or by providing :template_options => { :name => “”, :cpus => 1, :memory_size => 256 , :volume_template }.
- #mac ⇒ Object
- #new? ⇒ Boolean
- #poweroff ⇒ Object (also: #halt)
- #private_ip_address ⇒ Object
- #public_ip_address ⇒ Object
- #ready? ⇒ Boolean
- #reboot ⇒ Object
- #resume ⇒ Object
- #save ⇒ Object
-
#scp(local_path, remote_path, upload_options = {}) ⇒ Object
Transfers a file.
-
#setup(credentials = {}) ⇒ Object
Sets up a new key.
- #shutdown ⇒ Object (also: #stop)
- #ssh(commands) ⇒ Object
- #ssh_proxy ⇒ Object
- #start ⇒ Object
- #stopped? ⇒ Boolean
- #suspend ⇒ Object
- #update_display(attrs = {}) ⇒ Object
-
#vnc_port ⇒ Object
can’t use deprecate method, as the value is part of the display hash.
- #volumes ⇒ Object
Methods included from Fog::Compute::LibvirtUtil
#randomized_name, #to_xml, #xml_element, #xml_elements
Constructor Details
#initialize(attributes = {}) ⇒ Server
Can be created by passing in :xml => “<xml to create domain/server>” or by providing :template_options => {
:name => "", :cpus => 1, :memory_size => 256 , :volume_template
}
45 46 47 48 49 50 51 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 45 def initialize(attributes={} ) @xml = attributes.delete(:xml) verify_boot_order(attributes[:boot_order]) super defaults.merge(attributes) initialize_nics initialize_volumes end |
Instance Attribute Details
#iso_dir ⇒ Object
The following attributes are only needed when creating a new vm TODO: Add depreciation warning
35 36 37 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 35 def iso_dir @iso_dir end |
#iso_file ⇒ Object
The following attributes are only needed when creating a new vm TODO: Add depreciation warning
35 36 37 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 35 def iso_file @iso_file end |
#network_bridge_name ⇒ Object
Returns the value of attribute network_bridge_name.
36 37 38 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 36 def network_bridge_name @network_bridge_name end |
#network_interface_type ⇒ Object
Returns the value of attribute network_interface_type.
36 37 38 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 36 def network_interface_type @network_interface_type end |
#network_nat_network ⇒ Object
Returns the value of attribute network_nat_network.
36 37 38 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 36 def network_nat_network @network_nat_network end |
#password ⇒ Object
Returns the value of attribute password.
38 39 40 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 38 def password @password end |
#volume_allocation ⇒ Object
Returns the value of attribute volume_allocation.
37 38 39 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 37 def volume_allocation @volume_allocation end |
#volume_capacity ⇒ Object
Returns the value of attribute volume_capacity.
37 38 39 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 37 def volume_capacity @volume_capacity end |
#volume_format_type ⇒ Object
Returns the value of attribute volume_format_type.
37 38 39 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 37 def volume_format_type @volume_format_type end |
#volume_name ⇒ Object
Returns the value of attribute volume_name.
37 38 39 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 37 def volume_name @volume_name end |
#volume_path ⇒ Object
Returns the value of attribute volume_path.
37 38 39 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 37 def volume_path @volume_path end |
#volume_pool_name ⇒ Object
Returns the value of attribute volume_pool_name.
37 38 39 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 37 def volume_pool_name @volume_pool_name end |
#volume_template_name ⇒ Object
Returns the value of attribute volume_template_name.
37 38 39 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 37 def volume_template_name @volume_template_name end |
#xml ⇒ Object (readonly)
Returns the value of attribute xml.
10 11 12 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 10 def xml @xml end |
Instance Method Details
#destroy(options = { :destroy_volumes => false}) ⇒ Object
82 83 84 85 86 87 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 82 def destroy(={ :destroy_volumes => false}) poweroff unless stopped? service.vm_action(uuid, :undefine) volumes.each { |vol| vol.destroy } if [:destroy_volumes] true end |
#disk_path ⇒ Object
78 79 80 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 78 def disk_path volumes.first.path if volumes and volumes.first end |
#mac ⇒ Object
74 75 76 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 74 def mac nics.first.mac if nics && nics.first end |
#new? ⇒ Boolean
53 54 55 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 53 def new? uuid.nil? end |
#poweroff ⇒ Object Also known as: halt
95 96 97 98 99 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 95 def poweroff action_status = service.vm_action(uuid, :destroy) reload action_status end |
#private_ip_address ⇒ Object
137 138 139 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 137 def private_ip_address ip_address(:private) end |
#public_ip_address ⇒ Object
141 142 143 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 141 def public_ip_address ip_address(:public) end |
#ready? ⇒ Boolean
123 124 125 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 123 def ready? state == "running" end |
#reboot ⇒ Object
89 90 91 92 93 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 89 def reboot action_status = service.vm_action(uuid, :reboot) reload action_status end |
#resume ⇒ Object
107 108 109 110 111 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 107 def resume action_status = service.vm_action(uuid, :resume) reload action_status end |
#save ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 57 def save raise Fog::Errors::Error.new('Saving an existing server may create a duplicate') unless new? create_or_clone_volume unless xml or @volumes @xml ||= to_xml self.id = (persistent ? service.define_domain(xml) : service.create_domain(xml)).uuid reload rescue => e raise Fog::Errors::Error.new("Error saving the server: #{e}") end |
#scp(local_path, remote_path, upload_options = {}) ⇒ Object
Transfers a file
163 164 165 166 167 168 169 170 171 172 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 163 def scp(local_path, remote_path, = {}) requires :ssh_ip_address, :username = {} [:password] = password unless self.password.nil? [:key_data] = [private_key] if self.private_key [:proxy]= ssh_proxy unless self.ssh_proxy.nil? Fog::SCP.new(ssh_ip_address, username, ).upload(local_path, remote_path, ) end |
#setup(credentials = {}) ⇒ Object
Sets up a new key
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 175 def setup(credentials = {}) requires :public_key, :ssh_ip_address, :username credentials[:proxy]= ssh_proxy unless ssh_proxy.nil? credentials[:password] = password unless self.password.nil? credentails[:key_data] = [private_key] if self.private_key commands = [ %{mkdir .ssh}, # %{passwd -l #{username}}, #Not sure if we need this here # %{echo "#{Fog::JSON.encode(attributes)}" >> ~/attributes.json} ] if public_key commands << %{echo "#{public_key}" >> ~/.ssh/authorized_keys} end # wait for domain to be ready Timeout::timeout(360) do begin Timeout::timeout(8) do Fog::SSH.new(ssh_ip_address, username, credentials.merge(:timeout => 4)).run('pwd') end rescue Errno::ECONNREFUSED sleep(2) retry rescue Net::SSH::AuthenticationFailed, Timeout::Error retry end end Fog::SSH.new(ssh_ip_address, username, credentials).run(commands) end |
#shutdown ⇒ Object Also known as: stop
101 102 103 104 105 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 101 def shutdown action_status = service.vm_action(uuid, :shutdown) reload action_status end |
#ssh(commands) ⇒ Object
145 146 147 148 149 150 151 152 153 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 145 def ssh(commands) requires :ssh_ip_address, :username ={} [:password] = password unless password.nil? [:proxy]= ssh_proxy unless ssh_proxy.nil? super(commands, ) end |
#ssh_proxy ⇒ Object
155 156 157 158 159 160 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 155 def ssh_proxy # if this is a direct connection, we don't need a proxy to be set. return nil unless connection.uri.ssh_enabled? user_string= service.uri.user ? "-l #{service.uri.user}" : "" Net::SSH::Proxy::Command.new("ssh #{user_string} #{service.uri.host} nc %h %p") end |
#start ⇒ Object
67 68 69 70 71 72 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 67 def start return true if active? action_status = service.vm_action(uuid, :create) reload action_status end |
#stopped? ⇒ Boolean
119 120 121 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 119 def stopped? state == "shutoff" end |
#suspend ⇒ Object
113 114 115 116 117 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 113 def suspend action_status = service.vm_action(uuid, :suspend) reload action_status end |
#update_display(attrs = {}) ⇒ Object
207 208 209 210 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 207 def update_display attrs = {} service.update_display attrs.merge(:uuid => uuid) reload end |
#vnc_port ⇒ Object
can’t use deprecate method, as the value is part of the display hash
213 214 215 216 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 213 def vnc_port Fog::Logger.deprecation("#{self.class} => #vnc_port is deprecated, use #display[:port] instead [light_black](#{caller.first})[/]") display[:port] end |
#volumes ⇒ Object
132 133 134 135 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 132 def volumes # lazy loading of volumes @volumes ||= (@volumes_path || []).map{|path| service.volumes.all(:path => path).first } end |