Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CLOUDSTACK-8854: Apple Mac OS/X VM get created without USB controller in ESXi hypervisors #828

Merged
merged 1 commit into from Dec 2, 2016

Conversation

sureshanaparti
Copy link
Contributor

CLOUDSTACK-8854: Apple Mac OS/X VM get created without USB controller in ESXi hypervisors

Problem Description: CloudStack doesn’t add a USB controller to the Apple Mac OS X VMs created in ESXi hypervisors. But, vSphere Client, by default, adds a USB Controller to the Mac OS VMs. Mac OS X machines require USB Controller for USB mouse and keyboard access.

Root Cause: The Guest OS details are specified in the Virtual Machine Configuration Spec for creating the VM (using the SDK API) in the EXSi hypervisor. No USB Controller is added to the Virtual Machine Configuration Spec. As the guest OS Identification details are specified in the VM Configuration Spec, It is assumed that the Create VM SDK API would create the defaults in the VM same as vSphere Client. But, as per the observation, USB Controller is not added to the Guest OS - Mac OS VM created through the SDK API.

Resolution: When the Guest OS is Apple Mac OS, Add the USB Controller (EHCI+UHCI - Mac supported) to the Virtual Machine Configuration Spec before Creating or Starting the VM. For any existing Mac OS VMs, Stop and Start to add the USB Controller. For new VMs with Mac OS, USB Controller is added automatically.

@sateesh-chodapuneedi
Copy link
Member

LGTM.
Can you please share more details on testing you have performed?

@sureshanaparti
Copy link
Contributor Author

@sateesh-chodapuneedi These changes were successfully tested on Apple hardware. When a VM is created with guest OS as Apple Mac OS, the USB controller (EHCI+UHCI) is added to the VM and enables the USB mouse and keyboard access.

@sateesh-chodapuneedi
Copy link
Member

@sureshanaparti that sounds good.
Thanks for the patch.

@@ -598,6 +601,19 @@ public static void setBasicVmConfig(VirtualMachineConfigSpec vmConfig, int cpuCo
vmConfig.setGuestId(guestOsIdentifier);
}

public static void addUSBController(VirtualMachineConfigSpec vmConfigSpec) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While it's alright, you can make this method addUSBController return something rather than modify the passed in VirtualMachineConfigSpec, and add a small unit test.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, I'd second that idea.
let the method construct the spec of tyep VirtualDeviceConfigSpec for usb controller for us that could be added to vmConfig object at caller.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sateesh-chodapuneedi all the prepareXyzDevice() methods in VmwareHelper class returns VirtualDevice. So to be consistent, i think it is better to return a VirtualDevice when preparing USB controller and this device is added to the device config spec same as other devices.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sureshanaparti if other methods are like and you're simply follow those conventions, then it's fine though it becomes easier to test methods functionally if they return objects instead of modifying them. In either case, can you add a simple unit test for this. Thanks.

@sureshanaparti
Copy link
Contributor Author

@bhaisaab @sateesh-chodapuneedi Update code as per the existing conventions. Please check. Working on the unit test. Thanks.

@asfbot
Copy link

asfbot commented Sep 18, 2015

cloudstack-pull-rats #651 SUCCESS
This pull request looks good

@asfbot
Copy link

asfbot commented Sep 18, 2015

cloudstack-pull-analysis #600 ABORTED

@rohityadavcloud
Copy link
Member

@sureshanaparti LGTM, can you add a unit test for the new methods and rebase against latest master

@rohityadavcloud
Copy link
Member

@sureshanaparti please rebase against latest master and push -f, update on status of your PR

@rohityadavcloud
Copy link
Member

tag:vmware-pickup

@sureshanaparti sureshanaparti force-pushed the CLOUDSTACK-8854 branch 2 times, most recently from fd055b4 to 6929ac7 Compare November 30, 2016 22:55
@sureshanaparti
Copy link
Contributor Author

sureshanaparti commented Nov 30, 2016

@rhtyd Rebased against latest master

@serg38
Copy link

serg38 commented Nov 30, 2016

LGTM. This patch has been working well in production for over a year now.

@rohityadavcloud
Copy link
Member

LGTM.
@blueorangutan package

@blueorangutan
Copy link

@rhtyd a Jenkins job has been kicked to build packages. I'll keep you posted as I make progress.

@sateesh-chodapuneedi
Copy link
Member

LGTM. Verified manually in my VMware setup.

@rohityadavcloud
Copy link
Member

@sureshanaparti @sateesh-chodapuneedi this looks like a useful patch, can you change the base branch of your PR to 4.9?

@blueorangutan
Copy link

Packaging result: ✔centos6 ✔centos7 ✔debian. JID-292

@sureshanaparti sureshanaparti changed the base branch from master to 4.9 December 1, 2016 08:52
@sureshanaparti
Copy link
Contributor Author

@rhtyd Changed base branch to 4.9.

@karuturi
Copy link
Member

karuturi commented Dec 1, 2016

@blueorangutan help

@blueorangutan
Copy link

@karuturi I understand these words: "help", "hello", "thanks", "package", "test"
Test command usage: test [mgmt os] [hypervisor] [additional tests]
Mgmt OS options: ['centos6', 'centos7', 'ubuntu']
Hypervisor options: ['kvm-centos6', 'kvm-centos7', 'kvm-ubuntu', 'xenserver-65sp1', 'xenserver-62sp1', 'vmware-60u2', 'vmware-55u3', 'vmware-51u1', 'vmware-50u1']
Additional tests: list of comma separated tests with paths relative to the test/integration directory, for example: component/test_acl_listvm.py, component/test_volumes.py
Note: when additional tests are passed, you need to specify mgmt server os and hypervisor or use the matrix command.

Blessed contributors for kicking Trillian test jobs: ['rhtyd', 'jburwell', 'murali-reddy', 'abhinandanprateek', 'PaulAngus', 'borisstoyanov', 'karuturi']

@karuturi
Copy link
Member

karuturi commented Dec 1, 2016

@blueorangutan test centos6 vmware-55u3

@blueorangutan
Copy link

@karuturi a Trillian-Jenkins test job (centos6 mgmt + vmware-55u3) has been kicked to run smoke tests

@rohityadavcloud
Copy link
Member

Thanks @sureshanaparti

@blueorangutan
Copy link

Trillian test result (tid-520)
Environment: vmware-55u3 (x2), Advanced Networking with Mgmt server 6
Total time taken: 38128 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr828-t520-vmware-55u3.zip
Test completed. 45 look ok, 4 have error(s)

Test Result Time (s) Test File
test_04_rvpc_privategw_static_routes Failure 298.90 test_privategw_acl.py
test_03_vpc_privategw_restart_vpc_cleanup Failure 371.24 test_privategw_acl.py
test_02_vpc_privategw_static_routes Failure 376.41 test_privategw_acl.py
test_isolate_network_password_server Failure 70.23 test_password_server.py
test_01_vpc_site2site_vpn Error 534.15 test_vpc_vpn.py
test_01_redundant_vpc_site2site_vpn Error 759.89 test_vpc_vpn.py
test_02_redundant_VPC_default_routes Error 127.73 test_vpc_redundant.py
test_01_vpc_remote_access_vpn Success 207.34 test_vpc_vpn.py
test_02_VPC_default_routes Success 382.36 test_vpc_router_nics.py
test_01_VPC_nics_after_destroy Success 759.86 test_vpc_router_nics.py
test_05_rvpc_multi_tiers Success 726.30 test_vpc_redundant.py
test_04_rvpc_network_garbage_collector_nics Success 1612.85 test_vpc_redundant.py
test_03_create_redundant_VPC_1tier_2VMs_2IPs_2PF_ACL_reboot_routers Success 772.88 test_vpc_redundant.py
test_01_create_redundant_VPC_2tiers_4VMs_4IPs_4PF_ACL Success 1527.91 test_vpc_redundant.py
test_09_delete_detached_volume Success 30.97 test_volumes.py
test_06_download_detached_volume Success 60.91 test_volumes.py
test_05_detach_volume Success 100.31 test_volumes.py
test_04_delete_attached_volume Success 20.29 test_volumes.py
test_03_download_attached_volume Success 25.44 test_volumes.py
test_02_attach_volume Success 64.27 test_volumes.py
test_01_create_volume Success 522.40 test_volumes.py
test_03_delete_vm_snapshots Success 275.25 test_vm_snapshots.py
test_02_revert_vm_snapshots Success 229.30 test_vm_snapshots.py
test_01_test_vm_volume_snapshot Success 151.42 test_vm_snapshots.py
test_01_create_vm_snapshots Success 161.70 test_vm_snapshots.py
test_deploy_vm_multiple Success 274.10 test_vm_life_cycle.py
test_deploy_vm Success 0.03 test_vm_life_cycle.py
test_advZoneVirtualRouter Success 0.02 test_vm_life_cycle.py
test_10_attachAndDetach_iso Success 26.94 test_vm_life_cycle.py
test_09_expunge_vm Success 125.19 test_vm_life_cycle.py
test_08_migrate_vm Success 76.48 test_vm_life_cycle.py
test_07_restore_vm Success 0.13 test_vm_life_cycle.py
test_06_destroy_vm Success 10.17 test_vm_life_cycle.py
test_03_reboot_vm Success 5.16 test_vm_life_cycle.py
test_02_start_vm Success 20.27 test_vm_life_cycle.py
test_01_stop_vm Success 10.16 test_vm_life_cycle.py
test_CreateTemplateWithDuplicateName Success 372.73 test_templates.py
test_08_list_system_templates Success 0.04 test_templates.py
test_07_list_public_templates Success 0.04 test_templates.py
test_05_template_permissions Success 0.06 test_templates.py
test_04_extract_template Success 15.27 test_templates.py
test_03_delete_template Success 5.14 test_templates.py
test_02_edit_template Success 90.17 test_templates.py
test_01_create_template Success 287.74 test_templates.py
test_10_destroy_cpvm Success 267.25 test_ssvm.py
test_09_destroy_ssvm Success 239.41 test_ssvm.py
test_08_reboot_cpvm Success 156.82 test_ssvm.py
test_07_reboot_ssvm Success 188.99 test_ssvm.py
test_06_stop_cpvm Success 202.25 test_ssvm.py
test_05_stop_ssvm Success 169.08 test_ssvm.py
test_04_cpvm_internals Success 1.38 test_ssvm.py
test_03_ssvm_internals Success 3.78 test_ssvm.py
test_02_list_cpvm_vm Success 0.15 test_ssvm.py
test_01_list_sec_storage_vm Success 0.14 test_ssvm.py
test_01_snapshot_root_disk Success 36.61 test_snapshots.py
test_04_change_offering_small Success 127.21 test_service_offerings.py
test_03_delete_service_offering Success 0.04 test_service_offerings.py
test_02_edit_service_offering Success 0.09 test_service_offerings.py
test_01_create_service_offering Success 0.12 test_service_offerings.py
test_02_sys_template_ready Success 0.14 test_secondary_storage.py
test_01_sys_vm_start Success 0.20 test_secondary_storage.py
test_09_reboot_router Success 146.16 test_routers.py
test_08_start_router Success 141.09 test_routers.py
test_07_stop_router Success 25.39 test_routers.py
test_06_router_advanced Success 0.06 test_routers.py
test_05_router_basic Success 0.05 test_routers.py
test_04_restart_network_wo_cleanup Success 5.72 test_routers.py
test_03_restart_network_cleanup Success 146.22 test_routers.py
test_02_router_internal_adv Success 1.10 test_routers.py
test_01_router_internal_basic Success 0.56 test_routers.py
test_router_dns_guestipquery Success 76.81 test_router_dns.py
test_router_dns_externalipquery Success 0.08 test_router_dns.py
test_router_dhcphosts Success 153.28 test_router_dhcphosts.py
test_router_dhcp_opts Success 22.03 test_router_dhcphosts.py
test_01_updatevolumedetail Success 0.12 test_resource_detail.py
test_01_reset_vm_on_reboot Success 85.78 test_reset_vm_on_reboot.py
test_createRegion Success 0.05 test_regions.py
test_create_pvlan_network Success 5.25 test_pvlan.py
test_dedicatePublicIpRange Success 0.50 test_public_ip_range.py
test_01_vpc_privategw_acl Success 300.53 test_privategw_acl.py
test_01_primary_storage_nfs Success 38.38 test_primary_storage.py
test_createPortablePublicIPRange Success 15.35 test_portable_publicip.py
test_createPortablePublicIPAcquire Success 15.62 test_portable_publicip.py
test_UpdateStorageOverProvisioningFactor Success 0.17 test_over_provisioning.py
test_oobm_zchange_password Success 30.89 test_outofbandmanagement.py
test_oobm_multiple_mgmt_server_ownership Success 16.39 test_outofbandmanagement.py
test_oobm_issue_power_status Success 10.38 test_outofbandmanagement.py
test_oobm_issue_power_soft Success 15.41 test_outofbandmanagement.py
test_oobm_issue_power_reset Success 15.46 test_outofbandmanagement.py
test_oobm_issue_power_on Success 15.50 test_outofbandmanagement.py
test_oobm_issue_power_off Success 15.40 test_outofbandmanagement.py
test_oobm_issue_power_cycle Success 15.39 test_outofbandmanagement.py
test_oobm_enabledisable_across_clusterzones Success 93.02 test_outofbandmanagement.py
test_oobm_enable_feature_valid Success 5.23 test_outofbandmanagement.py
test_oobm_enable_feature_invalid Success 0.17 test_outofbandmanagement.py
test_oobm_disable_feature_valid Success 5.84 test_outofbandmanagement.py
test_oobm_disable_feature_invalid Success 0.12 test_outofbandmanagement.py
test_oobm_configure_invalid_driver Success 0.07 test_outofbandmanagement.py
test_oobm_configure_default_driver Success 0.07 test_outofbandmanagement.py
test_oobm_background_powerstate_sync Success 23.46 test_outofbandmanagement.py
test_extendPhysicalNetworkVlan Success 15.37 test_non_contigiousvlan.py
test_01_nic Success 613.17 test_nic.py
test_releaseIP Success 294.87 test_network.py
test_reboot_router Success 657.12 test_network.py
test_public_ip_user_account Success 10.31 test_network.py
test_public_ip_admin_account Success 40.34 test_network.py
test_network_rules_acquired_public_ip_3_Load_Balancer_Rule Success 77.28 test_network.py
test_network_rules_acquired_public_ip_2_nat_rule Success 61.93 test_network.py
test_network_rules_acquired_public_ip_1_static_nat_rule Success 125.60 test_network.py
test_delete_account Success 299.24 test_network.py
test_02_port_fwd_on_non_src_nat Success 55.86 test_network.py
test_01_port_fwd_on_src_nat Success 112.04 test_network.py
test_nested_virtualization_vmware Success 389.39 test_nested_virtualization.py
test_nic_secondaryip_add_remove Success 264.38 test_multipleips_per_nic.py
login_test_saml_user Success 25.07 test_login.py
test_assign_and_removal_lb Success 148.96 test_loadbalance.py
test_02_create_lb_rule_non_nat Success 208.52 test_loadbalance.py
test_01_create_lb_rule_src_nat Success 214.07 test_loadbalance.py
test_03_list_snapshots Success 0.10 test_list_ids_parameter.py
test_02_list_templates Success 0.06 test_list_ids_parameter.py
test_01_list_volumes Success 0.07 test_list_ids_parameter.py
test_07_list_default_iso Success 0.06 test_iso.py
test_05_iso_permissions Success 0.08 test_iso.py
test_04_extract_Iso Success 5.28 test_iso.py
test_03_delete_iso Success 95.23 test_iso.py
test_02_edit_iso Success 0.10 test_iso.py
test_01_create_iso Success 22.02 test_iso.py
test_04_rvpc_internallb_haproxy_stats_on_all_interfaces Success 678.19 test_internal_lb.py
test_03_vpc_internallb_haproxy_stats_on_all_interfaces Success 456.71 test_internal_lb.py
test_02_internallb_roundrobin_1RVPC_3VM_HTTP_port80 Success 1092.70 test_internal_lb.py
test_01_internallb_roundrobin_1VPC_3VM_HTTP_port80 Success 935.10 test_internal_lb.py
test_dedicateGuestVlanRange Success 10.43 test_guest_vlan_range.py
test_UpdateConfigParamWithScope Success 0.19 test_global_settings.py
test_rolepermission_lifecycle_update Success 7.31 test_dynamicroles.py
test_rolepermission_lifecycle_list Success 8.06 test_dynamicroles.py
test_rolepermission_lifecycle_delete Success 6.90 test_dynamicroles.py
test_rolepermission_lifecycle_create Success 6.91 test_dynamicroles.py
test_rolepermission_lifecycle_concurrent_updates Success 7.05 test_dynamicroles.py
test_role_lifecycle_update_role_inuse Success 7.03 test_dynamicroles.py
test_role_lifecycle_update Success 12.12 test_dynamicroles.py
test_role_lifecycle_list Success 6.93 test_dynamicroles.py
test_role_lifecycle_delete Success 11.95 test_dynamicroles.py
test_role_lifecycle_create Success 6.92 test_dynamicroles.py
test_role_inuse_deletion Success 6.91 test_dynamicroles.py
test_role_account_acls_multiple_mgmt_servers Success 9.59 test_dynamicroles.py
test_role_account_acls Success 10.06 test_dynamicroles.py
test_default_role_deletion Success 7.03 test_dynamicroles.py
test_04_create_fat_type_disk_offering Success 0.10 test_disk_offerings.py
test_03_delete_disk_offering Success 0.05 test_disk_offerings.py
test_02_edit_disk_offering Success 0.07 test_disk_offerings.py
test_02_create_sparse_type_disk_offering Success 0.10 test_disk_offerings.py
test_01_create_disk_offering Success 0.10 test_disk_offerings.py
test_deployvm_userdispersing Success 81.13 test_deploy_vms_with_varied_deploymentplanners.py
test_deployvm_userconcentrated Success 142.20 test_deploy_vms_with_varied_deploymentplanners.py
test_deployvm_firstfit Success 262.31 test_deploy_vms_with_varied_deploymentplanners.py
test_deployvm_userdata_post Success 87.11 test_deploy_vm_with_userdata.py
test_deployvm_userdata Success 297.88 test_deploy_vm_with_userdata.py
test_02_deploy_vm_root_resize Success 6.85 test_deploy_vm_root_resize.py
test_01_deploy_vm_root_resize Success 6.93 test_deploy_vm_root_resize.py
test_00_deploy_vm_root_resize Success 7.10 test_deploy_vm_root_resize.py
test_deploy_vm_from_iso Success 239.53 test_deploy_vm_iso.py
test_3d_gpu_support Success 623.93 test_deploy_vgpu_enabled_vm.py
test_DeployVmAntiAffinityGroup Success 353.98 test_affinity_groups.py
test_08_resize_volume Skipped 5.13 test_volumes.py
test_07_resize_fail Skipped 10.32 test_volumes.py
test_06_copy_template Skipped 0.00 test_templates.py
test_static_role_account_acls Skipped 0.02 test_staticroles.py
test_11_ss_nfs_version_on_ssvm Skipped 0.03 test_ssvm.py
test_01_scale_vm Skipped 66.32 test_scale_vm.py
test_01_primary_storage_iscsi Skipped 0.04 test_primary_storage.py
test_06_copy_iso Skipped 0.00 test_iso.py
test_deploy_vgpu_enabled_vm Skipped 3.09 test_deploy_vgpu_enabled_vm.py

@rohityadavcloud
Copy link
Member

I looked at the failure, all of them are environment related or known intermittent failures. I'll proceed with merging this. LGTM.

@asfgit asfgit merged commit 309da6a into apache:4.9 Dec 2, 2016
asfgit pushed a commit that referenced this pull request Dec 2, 2016
CLOUDSTACK-8854: Apple Mac OS/X VM get created without USB controller in ESXi hypervisorsCLOUDSTACK-8854: Apple Mac OS/X VM get created without USB controller in ESXi hypervisors

Problem Description: CloudStack doesnt add a USB controller to the Apple Mac OS X VMs created in ESXi hypervisors. But, vSphere Client, by default, adds a USB Controller to the Mac OS VMs. Mac OS X machines require USB Controller for USB mouse and keyboard access.

Root Cause: The Guest OS details are specified in the Virtual Machine Configuration Spec for creating the VM (using the SDK API) in the EXSi hypervisor. No USB Controller is added to the Virtual Machine Configuration Spec. As the guest OS Identification details are specified in the VM Configuration Spec, It is assumed that the Create VM SDK API would create the defaults in the VM same as vSphere Client. But, as per the observation, USB Controller is not added to the Guest OS - Mac OS VM created through the SDK API.

Resolution: When the Guest OS is Apple Mac OS, Add the USB Controller (EHCI+UHCI - Mac supported) to the Virtual Machine Configuration Spec before Creating or Starting the VM. For any existing Mac OS VMs, Stop and Start to add the USB Controller. For new VMs with Mac OS, USB Controller is added automatically.

* pr/828:
  CLOUDSTACK-8854: Apple Mac OS/X VM get created without USB controller in ESXi hypervisors

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
rohityadavcloud pushed a commit that referenced this pull request Jan 20, 2021
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

8 participants