1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 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
|
module Fission
class Metadata
require 'cfpropertylist'
# Public: Gets/Sets the content (Hash).
attr_accessor :content
# Public: Deletes the Fusion metadata related to a VM. The VM should not be
# running when this method is called. It's highly recommended to call this
# method without the Fusion GUI application running. If the Fusion GUI is
# running this method should succeed, but it's been observed that Fusion
# will recreate the metadata which is deleted. This leads to 'missing' VMs
# in the Fusion GUI.
#
# vm_path - The absolute path to the directory of a VM.
#
# Examples
#
# Fission::Metadata.delete_vm_info '/vms/foo.vmwarevm'
#
# Returns nothing.
def self.delete_vm_info(vm_path)
metadata = new
metadata.load
metadata.delete_vm_restart_document(vm_path)
metadata.delete_vm_favorite_entry(vm_path)
metadata.save
end
# Public: Reads the configured metadata file and populates the content
# variable with native ruby types.
#
# Examples
#
# metadata.load
#
# Returns nothing.
def load
raw_data = CFPropertyList::List.new :file => Fission.config['plist_file']
@content = CFPropertyList.native_types raw_data.value
end
# Public: Saves a new version of the metadata file with the data in the
# content variable.
#
# Examples
#
# metadata.save
#
# Returns nothing.
def save
new_content = CFPropertyList::List.new
new_content.value = CFPropertyList.guess @content
new_content.save Fission.config['plist_file'],
CFPropertyList::List::FORMAT_BINARY
end
# Public: Deletes the VM information from the 'restart document path'
# metadata. The 'restart document path' dictates which GUI consoles to
# display when Fusion starts.
#
# vm_path - The absolute path to the directory of a VM.
#
# Examples
#
# metadata.delete_vm_restart_document 'vms/foo.vmwarevm'
#
# Returns nothing.
def delete_vm_restart_document(vm_path)
if @content.has_key?('PLRestartDocumentPaths')
@content['PLRestartDocumentPaths'].delete_if { |p| p == vm_path }
end
end
# Public: Deletes the VM information from the 'favorites list' metadata.
# The 'favorites list' dictates which VMs are displayed in the Fusion VM
# libarary.
#
# vm_path - The absolute path to the directory of a VM.
#
# Examples
#
# metadata.delete_favorite_entry '/vms/foo.vmwarevm'
#
# Returns nothing.
def delete_vm_favorite_entry(vm_path)
if @content.has_key?('VMFavoritesListDefaults2')
@content['VMFavoritesListDefaults2'].delete_if { |vm| vm['path'] == vm_path }
end
if @content.has_key?('fusionInitialSessions')
@content['fusionInitialSessions'].delete_if {|vm| vm['documentPath'] == vm_path}
end
end
end
end
|