Module: VBox::WebService
- Defined in:
- lib/virtualbox/savon_fix.rb,
lib/virtualbox/exceptions.rb,
lib/virtualbox/webservice.rb,
lib/virtualbox/configuration.rb
Defined Under Namespace
Classes: ArgumentError, Configuration, ConnectionError, Error, NoWebServiceError, NotImplementedError, UnknownError
Constant Summary collapse
- BROKEN_TAGS =
{ :i_bios_settings_set_acpi_enabled => 'ACPIEnabled', :i_bios_settings_set_ioapic_enabled => 'IOAPICEnabled', :i_bios_settings_set_pxe_debug_enabled => 'PXEDebugEnabled', :i_machine_set_os_type_id => 'OSTypeId', :i_machine_set_cpu_count => 'CPUCount', :i_machine_set_cpu_hot_plug_enabled => 'CPUHotPlugEnabled', :i_machine_set_cpu_execution_cap => 'CPUExecutionCap', :i_machine_set_vram_size => 'VRAMSize', :i_machine_set_hpet_enabled => 'HPETEnabled', :i_machine_set_rtc_use_utc => 'RTCUseUTC', :i_machine_set_io_cache_enabled => 'IOCacheEnabled', :i_machine_set_io_cache_size => 'IOCacheSize', :i_machine_debugger_set_patm_enabled => 'PATMEnabled', :i_machine_debugger_set_csam_enabled => 'CSAMEnabled', :i_nat_engine_set_tftp_prefix => 'TFTPPrefix', :i_nat_engine_set_tftp_boot_file => 'TFTPBootFile', :i_nat_engine_set_tftp_next_server => 'TFTPNextServer', :i_nat_engine_set_dns_pass_domain => 'DNSPassDomain', :i_nat_engine_set_dns_proxy => 'DNSProxy', :i_nat_engine_set_dns_use_host_resolver => 'DNSUseHostResolver', :i_nat_network_set_ipv6_enabled => 'IPv6Enabled', :i_nat_network_set_ipv6_prefix => 'IPv6Prefix', :i_nat_network_set_advertise_default_ipv6_route_enabled => 'advertiseDefaultIPv6RouteEnabled', :i_network_adapter_set_mac_address => 'MACAddress', :i_network_adapter_set_nat_network => 'NATNetwork', :i_parallel_port_set_io_base => 'IOBase', :i_serial_port_set_io_base => 'IOBase', :i_system_properties_set_vrde_aurh_library => 'VRDEAuthLibrary', :i_vrde_server_set_vrde_ext_pack => 'VRDEExtPack', }
- BROKEN_ARRAYS =
[ :i_appliance_get_disks, :i_appliance_get_virtual_system_descriptions, :i_appliance_get_machines, :i_appliance_get_warnings, :i_bandwidth_control_get_all_bandwidth_groups, :i_console_get_usb_devices, :i_console_get_remote_usb_devices, :i_console_get_shared_folders, :i_guest_file_read_event_get_data, :i_guest_multi_touch_event_get_x_positions, :i_guest_multi_touch_event_get_y_positions, :i_guest_multi_touch_event_get_contact_ids, :i_guest_multi_touch_event_get_contact_flags, :i_guest_process_output_event_get_data, :i_veto_event_get_vetos, :i_guest_get_sessions, :i_guest_session_get_processes, :i_guest_session_get_directories, :i_guest_session_get_files, :i_host_get_dvd_drives, :i_host_get_floppy_drives, :i_host_get_usb_devices, :i_host_get_usb_device_filters, :i_host_get_network_interfaces, :i_host_get_name_servers, :i_host_get_search_strings, :i_host_find_host_network_interfaces_of_type, :i_machine_get_groups, :i_machine_get_video_capture_screens, :i_machine_get_usb_controllers, :i_machine_get_usb_device_filter, :i_machine_get_storage_controllers, :i_machine_get_shared_folders, :i_machine_get_extra_data_keys, :i_machine_unregister, :i_medium_get_allowed_types, :i_medium_get_children, :i_medium_get_machine_ids, :i_medium_get_properties, :i_medium_get_snapshot_ids, :i_medium_format_get_capabilities, :i_network_adapter_get_properties, :i_performance_collector_disable_metrics, :i_performance_collector_enable_metrics, :i_performance_collector_get_metrics, :i_performance_collector_query_metics_data, :i_performance_collector_setup_metrics, :i_process_get_arguments, :i_process_get_environment, :i_process_read, :i_system_properties_get_medium_formats, :i_system_properties_get_device_types_for_storage_bus, :i_virtual_box_get_machines, :i_virtual_box_get_machine_groups, :i_virtual_box_get_hard_disks, :i_virtual_box_get_dvd_images, :i_virtual_box_get_floppy_images, :i_virtual_box_get_progress_operations, :i_virtual_box_get_shared_folders, :i_virtual_box_get_dhcp_servers, :i_virtual_box_get_nat_networks, :i_virtual_box_get_internal_networks, :i_virtual_box_get_generic_network_drivers, :i_virtual_box_get_extra_data_keys, :i_virtual_box_get_machine_states, :i_virtual_box_get_machines_by_groups ]
Class Attribute Summary collapse
-
.configuration ⇒ Object
Returns the value of attribute configuration.
Class Method Summary collapse
- .configure {|configuration| ... } ⇒ Object
- .connect ⇒ Object
- .operations ⇒ Object
- .parse_response(response) ⇒ Object
- .parse_soap_fault(message) ⇒ Object
- .send_request(soap_method, soap_message) ⇒ Object
Class Attribute Details
.configuration ⇒ Object
Returns the value of attribute configuration.
26 27 28 |
# File 'lib/virtualbox/configuration.rb', line 26 def configuration @configuration end |
Class Method Details
.configure {|configuration| ... } ⇒ Object
29 30 31 32 |
# File 'lib/virtualbox/configuration.rb', line 29 def self.configure self.configuration ||= Configuration.new yield configuration end |
.connect ⇒ Object
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 |
# File 'lib/virtualbox/webservice.rb', line 6 def connect # Initialize configuration here in case if it was not initialized in client self.configuration ||= Configuration.new host = configuration.vboxweb_host port = configuration.vboxweb_port log_level = configuration.log_level @logger = configuration.logger # Savon XML logging savon_debug = log_level == 'DEBUG' endpoint = "http://#{host}:#{port}" wsdl = endpoint + '/?wsdl' @logger.info("VirtualBox SOAP web service endpoint: #{endpoint}") @logger.info("VirtualBox SOAP web service WSDL: #{wsdl}") # Create web service connection @conn = Savon.client(:wsdl => wsdl, :endpoint => endpoint, :log => savon_debug, :pretty_print_xml => savon_debug) # Check if we really connected to a VirtualBox SOAP web service unless operations.include?(:i_websession_manager_logon) @logger.fatal("Could not connect to VirtualBox SOAP Web Service at #{endpoint}. No VirtualBox SOAP service found") raise NoWebServiceError.new(endpoint) end end |
.operations ⇒ Object
33 34 35 |
# File 'lib/virtualbox/webservice.rb', line 33 def operations @conn.operations end |
.parse_response(response) ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/virtualbox/webservice.rb', line 87 def parse_response(response) @logger.info("Response: #{response.body}") response_struct = response.body[response.body.keys[0]] return if response_struct.nil? if response_struct.keys.length > 1 returnval = response_struct[:returnval].nil? || response_struct[:returnval] response_struct.delete(:returnval) [returnval, response_struct] else response_struct[:returnval] end end |
.parse_soap_fault(message) ⇒ Object
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 |
# File 'lib/virtualbox/webservice.rb', line 60 def parse_soap_fault() error_code = .match(/0x[[:xdigit:]]+/) if error_code.nil? if .match(/Validation constraint violation: data type mismatch in element <\S+>/).nil? raise UnknownError, else argument = .match(/<\S+>/).to_s[1..-2].to_underscore raise ArgumentError, "Argument #{argument} is of invalid data type" end else = .split("(SOAP-ENV:Client) VirtualBox error: rc=#{error_code} ")[1].split(" (#{error_code})")[0] raise UnknownError, if .nil? argument = .match(/\sa[A-Z]\S+\s/) if argument.nil? if .match(/Method \S+ is not implemented/).nil? raise Error, else raise NotImplementedError, end else .gsub!(argument.to_s.strip, argument.to_s.strip[1..-1].to_underscore). gsub!(/\s\(must be .*\)/, '') raise ArgumentError, end end end |
.send_request(soap_method, soap_message) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/virtualbox/webservice.rb', line 37 def send_request(soap_method, ) @logger.info("Request operation: #{soap_method}") # Filter out the password string = .clone if soap_method == :i_websession_manager_logon [:password] = '<filtered>' if .has_key?(:password) end @logger.info("Request message: #{}") begin response = @conn.call(soap_method, :message => ) rescue Savon::SOAPFault => e @logger.debug(e.) parse_soap_fault(e.) rescue Savon::HTTPError => e @logger.error(e.) raise end parse_response(response) end |