class Fog::Compute::Vmfusion::Server
Attributes
Public Instance Methods
Fussion doesn't have the concept of templates so one just clones regular VMs.
# File lib/fog/compute/vmfusion/server.rb, line 24 def clone(name) requires :raw ::Fission::VM.clone(@raw[:fission].name,name) return service.servers.get(name) end
Destroy, deletes the VM from the local disk but only hard stops the VM before doing so if you set :force to true.
# File lib/fog/compute/vmfusion/server.rb, line 33 def destroy(options = { :force => false }) requires :raw if ready? if options[:force] stop end end @raw[:fission].delete end
Halt and poweroff are just synonyms for stop.
# File lib/fog/compute/vmfusion/server.rb, line 74 def halt stop end
We obtain the first ipaddress. This should generally be a safe assumption for Fusion. Even if an address is provided via NAT, bridge, or host only it will by accessible from the host machine the VM resides on.
# File lib/fog/compute/vmfusion/server.rb, line 147 def ipaddress requires :raw ip(@raw[:fission]) end
Collecting all #mac_addresses the VM has…mostly just because we are doing the same thing for the vSphere provider.
# File lib/fog/compute/vmfusion/server.rb, line 171 def mac_addresses requires :raw macs(@raw[:fission]) end
Path to the VM's vmx file on the local disk.
# File lib/fog/compute/vmfusion/server.rb, line 138 def path requires :raw @raw[:fission].path end
The power state of the VM is commonly going to be three values; running, not running, or suspended.
# File lib/fog/compute/vmfusion/server.rb, line 127 def power_state requires :raw @raw[:fission].state.data end
# File lib/fog/compute/vmfusion/server.rb, line 78 def poweroff stop end
# File lib/fog/compute/vmfusion/server.rb, line 161 def private_ip_address ipaddress end
Keeping these three methods around for API compatibility reasons. Makes the vmfusion provider function similar to cloud providers and the vsphere provider. Future goal is to add an actual private and public concept. Needs changes to fission and a determination what is a public or private address here; bridge, nat, host-only.
# File lib/fog/compute/vmfusion/server.rb, line 157 def public_ip_address ipaddress end
# File lib/fog/compute/vmfusion/server.rb, line 132 def ready? requires :raw @raw[:fission].running?.data end
Attempt a graceful shutdown, wait for the VM to completely shutdown and then start it again.
# File lib/fog/compute/vmfusion/server.rb, line 97 def reboot if ready? shutdown wait_for { ! ready? } start return true else return false end end
Resuming from suspend is the same thing as start to Fusion.
# File lib/fog/compute/vmfusion/server.rb, line 109 def resume start end
There is currently no documented model of creating VMs from scratch sans Fusion's wizard.
# File lib/fog/compute/vmfusion/server.rb, line 18 def save raise Fog::Errors::Error.new("Creating a new vm is not yet supported") end
SCP something to our VM.
# File lib/fog/compute/vmfusion/server.rb, line 185 def scp(local_path, remote_path, upload_options = {}) requires :ssh_ip_address, :username scp_options = {} scp_options[:password] = password unless self.password.nil? scp_options[:key_data] = [private_key] if self.private_key Fog::SCP.new(ssh_ip_address, username, scp_options).upload(local_path, remote_path, upload_options) end
Sets up a new SSH key on the VM so one doesn't need to use a password ever again.
# File lib/fog/compute/vmfusion/server.rb, line 197 def setup(credentials = {}) requires :public_key, :ssh_ip_address, :username credentials[:password] = password unless self.password.nil? credentails[:key_data] = [private_key] if self.private_key commands = [ %Q{mkdir .ssh}, ] if public_key commands << %Q{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
This is a graceful shutdown but Fusion is only capable of a graceful shutdown if tools are installed. Fusion does the right thing though and if graceful can't be initiated it just does a hard stop.
# File lib/fog/compute/vmfusion/server.rb, line 85 def shutdown requires :raw if ready? @raw[:fission].stop return true else return false end end
Simply spawn an SSH session.
# File lib/fog/compute/vmfusion/server.rb, line 180 def ssh(commands) super(commands, password ? {:password => password} : {}) end
Start is pretty self explanatory…if you pass :headless as true you won't get a console on launch.
# File lib/fog/compute/vmfusion/server.rb, line 47 def start(options = { :headless => false }) requires :raw unless ready? @raw[:fission].start(:headless => options[:headless]) return true else return false end end
# File lib/fog/compute/vmfusion/server.rb, line 165 def state power_state end
Stop is a hard stop, like pulling out the power cord.
# File lib/fog/compute/vmfusion/server.rb, line 62 def stop requires :raw if ready? @raw[:fission].stop(:hard => true) return true else return false end end
# File lib/fog/compute/vmfusion/server.rb, line 113 def suspend requires :raw if ready? @raw[:fission].suspend return true else return false end end
Private Instance Methods
# File lib/fog/compute/vmfusion/server.rb, line 227 def ip(fission) first_int = fission.network_info.data.keys.first fission.network_info.data[first_int]["ip_address"] end
# File lib/fog/compute/vmfusion/server.rb, line 232 def macs(fission) fission.mac_addresses.data end
# File lib/fog/compute/vmfusion/server.rb, line 236 def raw @raw end
# File lib/fog/compute/vmfusion/server.rb, line 240 def raw=(new_raw) @raw = new_raw raw_attributes = { :name => new_raw[:fission].name, :power_state => new_raw[:state], :ipaddress => ip(new_raw[:fission]), :mac_addresses => macs(new_raw[:fission]), :path => new_raw[:fission].path } merge_attributes(raw_attributes) end