Class: 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.
Attributes inherited from Server
#private_key, #private_key_path, #public_key, #public_key_path, #username
Attributes inherited from Model
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
Methods inherited from Server
#scp_download, #ssh_port, #sshable?
Methods inherited from Model
#inspect, #reload, #symbolize_keys, #to_json, #wait_for
Methods included from Attributes::ClassMethods
#_load, #aliases, #attribute, #attributes, #identity, #ignore_attributes, #ignored_attributes
Methods included from Attributes::InstanceMethods
#_dump, #attributes, #dup, #identity, #identity=, #merge_attributes, #new_record?, #requires, #requires_one
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
}
47 48 49 50 51 52 53 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 47 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
37 38 39 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 37 def iso_dir @iso_dir end |
#iso_file ⇒ Object
The following attributes are only needed when creating a new vm TODO: Add depreciation warning
37 38 39 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 37 def iso_file @iso_file end |
#network_bridge_name ⇒ Object
Returns the value of attribute network_bridge_name.
38 39 40 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 38 def network_bridge_name @network_bridge_name end |
#network_interface_type ⇒ Object
Returns the value of attribute network_interface_type.
38 39 40 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 38 def network_interface_type @network_interface_type end |
#network_nat_network ⇒ Object
Returns the value of attribute network_nat_network.
38 39 40 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 38 def network_nat_network @network_nat_network end |
#password ⇒ Object
Returns the value of attribute password.
40 41 42 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 40 def password @password end |
#volume_allocation ⇒ Object
Returns the value of attribute volume_allocation.
39 40 41 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 39 def volume_allocation @volume_allocation end |
#volume_capacity ⇒ Object
Returns the value of attribute volume_capacity.
39 40 41 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 39 def volume_capacity @volume_capacity end |
#volume_format_type ⇒ Object
Returns the value of attribute volume_format_type.
39 40 41 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 39 def volume_format_type @volume_format_type end |
#volume_name ⇒ Object
Returns the value of attribute volume_name.
39 40 41 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 39 def volume_name @volume_name end |
#volume_path ⇒ Object
Returns the value of attribute volume_path.
39 40 41 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 39 def volume_path @volume_path end |
#volume_pool_name ⇒ Object
Returns the value of attribute volume_pool_name.
39 40 41 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 39 def volume_pool_name @volume_pool_name end |
#volume_template_name ⇒ Object
Returns the value of attribute volume_template_name.
39 40 41 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 39 def volume_template_name @volume_template_name end |
#xml ⇒ Object (readonly)
Returns the value of attribute xml.
12 13 14 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 12 def xml @xml end |
Instance Method Details
#destroy(options = { :destroy_volumes => false}) ⇒ Object
84 85 86 87 88 89 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 84 def destroy(={ :destroy_volumes => false}) poweroff unless stopped? connection.vm_action(uuid, :undefine) volumes.each { |vol| vol.destroy } if [:destroy_volumes] true end |
#disk_path ⇒ Object
80 81 82 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 80 def disk_path volumes.first.path if volumes and volumes.first end |
#mac ⇒ Object
76 77 78 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 76 def mac nics.first.mac if nics && nics.first end |
#new? ⇒ Boolean
55 56 57 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 55 def new? uuid.nil? end |
#poweroff ⇒ Object Also known as: halt
95 96 97 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 95 def poweroff connection.vm_action(uuid, :destroy) end |
#private_ip_address ⇒ Object
129 130 131 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 129 def private_ip_address ip_address(:private) end |
#public_ip_address ⇒ Object
133 134 135 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 133 def public_ip_address ip_address(:public) end |
#ready? ⇒ Boolean
115 116 117 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 115 def ready? state == "running" end |
#reboot ⇒ Object
91 92 93 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 91 def reboot connection.vm_action(uuid, :reboot) end |
#resume ⇒ Object
103 104 105 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 103 def resume connection.vm_action(uuid, :resume) end |
#save ⇒ Object
59 60 61 62 63 64 65 66 67 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 59 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 ? connection.define_domain(xml) : connection.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
155 156 157 158 159 160 161 162 163 164 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 155 def scp(local_path, remote_path, = {}) requires :public_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(public_ip_address, username, ).upload(local_path, remote_path, ) end |
#setup(credentials = {}) ⇒ Object
Sets up a new key
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 167 def setup(credentials = {}) requires :public_key, :public_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(public_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(public_ip_address, username, credentials).run(commands) end |
#shutdown ⇒ Object Also known as: stop
99 100 101 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 99 def shutdown connection.vm_action(uuid, :shutdown) end |
#ssh(commands) ⇒ Object
137 138 139 140 141 142 143 144 145 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 137 def ssh(commands) requires :public_ip_address, :username ={} [:password] = password unless password.nil? [:proxy]= ssh_proxy unless ssh_proxy.nil? super(commands, ) end |
#ssh_proxy ⇒ Object
147 148 149 150 151 152 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 147 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= connection.uri.user ? "-l #{connection.uri.user}" : "" Net::SSH::Proxy::Command.new("ssh #{user_string} #{connection.uri.host} nc %h %p") end |
#start ⇒ Object
69 70 71 72 73 74 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 69 def start return true if active? connection.vm_action(uuid, :create) reload true end |
#stopped? ⇒ Boolean
111 112 113 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 111 def stopped? state == "shutoff" end |
#suspend ⇒ Object
107 108 109 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 107 def suspend connection.vm_action(uuid, :suspend) end |
#update_display(attrs = {}) ⇒ Object
199 200 201 202 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 199 def update_display attrs = {} connection.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
205 206 207 208 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 205 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
124 125 126 127 |
# File 'lib/fog/libvirt/models/compute/server.rb', line 124 def volumes # lazy loading of volumes @volumes ||= (@volumes_path || []).map{|path| connection.volumes.all(:path => path).first } end |