Setting PXE boot via Python API

--Apple-Mail=_8ECE0118-DEA3-4CED-9A39-9461CF227A27 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hello, I=E2=80=99m currently playing with scripted VM creation and have an = issue getting the newly created VM to PXE boot. My objective is to port = some creation scripts from the environment this will eventually replace = and worry about making this more =E2=80=9COvirt-ey=E2=80=9D later. Skipping the details, everything is happy through creation, and when I = boot it, it attempts to boot from a =E2=80=98disk' and fails, and I = don=E2=80=99t understand why. Following the creation of the VM, creation/attachment of the disk and = net, boot_dev =3D params.Boot(dev=3D'network') vm.os.set_boot([boot_dev]) vm.set_os(params.OperatingSystem(cmdline=3Dkernel_cmd)) vm.update() kernel_cmd there evaluates to a fairly typical PXEboot string that works = with our legacy setup - there isn=E2=80=99t really anything exotic going = on. The BIOS doesn=E2=80=99t show any attempt at a PXE boot - it goes = straight to the disk, declares it unbootable (because it was just = created and is blank), and halts. It feels like the set_boot line is = wrong or ignored, but this is new to me. Anyone have a hint? Thanks, -j= --Apple-Mail=_8ECE0118-DEA3-4CED-9A39-9461CF227A27 Content-Disposition: attachment; filename=smime.p7s Content-Type: application/pkcs7-signature; name=smime.p7s Content-Transfer-Encoding: base64 MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIHejCCB3Yw ggVeoAMCAQICE1QAABNFH2NktVR+MW0AAAAAE0UwDQYJKoZIhvcNAQEFBQAwYDETMBEGCgmSJomT 8ixkARkWA2NvbTEbMBkGCgmSJomT8ixkARkWC3NxdWFyZXRyYWRlMRQwEgYKCZImiZPyLGQBGRYE Y29ycDEWMBQGA1UEAxMNY29ycC1TVUJDQS1DQTAeFw0xNTA5MjgxNjA1MDVaFw0xNjA4MTMyMjA3 NDJaMIGsMRMwEQYKCZImiZPyLGQBGRYDY29tMRswGQYKCZImiZPyLGQBGRYLc3F1YXJldHJhZGUx FDASBgoJkiaJk/IsZAEZFgRjb3JwMRIwEAYDVQQLEwlFbXBsb3llZXMxCzAJBgNVBAsTAklUMRcw FQYDVQQDEw5KYW1pZSBMYXdyZW5jZTEoMCYGCSqGSIb3DQEJARYZamxhd3JlbmNlQHNxdWFyZXRy YWRlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJKcbsIRNOtf5dPVSwBJPfmu SwaS3lsqO4k/GyptrL70oxJHcsFWu1er4Qne2LwL4pvWzG3ID8QCPzBNMaijhgmOqf5lCS66t5bt XqqKDUWw+JYW8qKNLxEFpXYJMnoRJ6GAwsD+R/TL9qB6tSZa/ElWm3u+Q+B6PsOPTJR0FcPy6jzD DeoLMcN/MgKBsUGYmJSBcqoBrd/7ugZancX5ZsIMtDpjGG9zYfT3r3deMRFFksfkUf2BakUoFYRP hVl2IUAsarZ8oWGOkkm6NoV8AQrCsFtJNlfrBWFjaJDgSU/7waVpaFwNbE3y5vKfsydkHCfuatdt gmTCIMXX8QU3mBkCAwEAAaOCAtowggLWMB0GA1UdDgQWBBSidwBvd8Keglu5uZyaGnDa0tfFBzAf BgNVHSMEGDAWgBSsU98vE8JHTC7TGa8VLHCSZCOFSTCB1QYDVR0fBIHNMIHKMIHHoIHEoIHBhoG+ bGRhcDovLy9DTj1jb3JwLVNVQkNBLUNBLENOPXN1YmNhLENOPUNEUCxDTj1QdWJsaWMlMjBLZXkl MjBTZXJ2aWNlcyxDTj1TZXJ2aWNlcyxDTj1Db25maWd1cmF0aW9uLERDPWNvcnAsREM9c3F1YXJl dHJhZGUsREM9Y29tP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RDbGFzcz1j UkxEaXN0cmlidXRpb25Qb2ludDCBywYIKwYBBQUHAQEEgb4wgbswgbgGCCsGAQUFBzAChoGrbGRh cDovLy9DTj1jb3JwLVNVQkNBLUNBLENOPUFJQSxDTj1QdWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxD Tj1TZXJ2aWNlcyxDTj1Db25maWd1cmF0aW9uLERDPWNvcnAsREM9c3F1YXJldHJhZGUsREM9Y29t P2NBQ2VydGlmaWNhdGU/YmFzZT9vYmplY3RDbGFzcz1jZXJ0aWZpY2F0aW9uQXV0aG9yaXR5MBcG CSsGAQQBgjcUAgQKHggAVQBzAGUAcjAOBgNVHQ8BAf8EBAMCBaAwKQYDVR0lBCIwIAYKKwYBBAGC NwoDBAYIKwYBBQUHAwQGCCsGAQUFBwMCMFQGA1UdEQRNMEugLgYKKwYBBAGCNxQCA6AgDB5qbGF3 cmVuY2VAY29ycC5zcXVhcmV0cmFkZS5jb22BGWpsYXdyZW5jZUBzcXVhcmV0cmFkZS5jb20wRAYJ KoZIhvcNAQkPBDcwNTAOBggqhkiG9w0DAgICAIAwDgYIKoZIhvcNAwQCAgCAMAcGBSsOAwIHMAoG CCqGSIb3DQMHMA0GCSqGSIb3DQEBBQUAA4ICAQBwdFGJ18Dzg6eQoQU2oJ8PaoxTgOccXQNNcEZG wP0yk9ldV2BmqAw3yr0lUnhdk/ChkF9duSmWTHXrt8nAbyO8XVTwhIR6EcJEqS/MneudUsKbwClq yweMqsr/J9jz8Xl/IsbS0mWG9rb3o4stowNycrk2+t68DNMANQa4HGqh7Rz3XcrDtZOIRe33CPSc 552FgT1yJHBcNCkJHJQdZ6pXb0voP59eGIbrqOwhxfdorbb6lqYjSmOlUoQk5x0Gn25Z+B5q8a6o UTf1G5vMNups9133xuc1DeyFmjJVt6Xbs+BIIkAeL543iPWrr03vLclFRF+rwHBGkwklRY2eP/Qv oNOLBeuY85SiVdPKFlOSQc/U1kcpDani9UuQmQ1IZz3gea8WHDUyY2jSyAMZYFPNMQq+26eEo+HP +Gz7+F5IWRO1OL01EGsjCv/cdugqOsH/aIEc9XP4b/BUyWnxJxgI0d0j8BDfGiKcV+sCvkW4sO0p Oggj0b0SYnTB87hvjciZ4E8PHxaYlTyU95fdTQYLT6XjNMSQC3cIO4klbsObGRaIq5V4YbGiq91Z CkPCQjmBezFM7aLI9qb28gAT1NL2HZ0y5i8CDQWasE5RGyjqAhI6z+pl5RCUtUXimuo2KoA09eC6 RZllX/dT1f6+xGQu8DHMx+TSkYtuc2gzPFeFtjGCAxMwggMPAgEBMHcwYDETMBEGCgmSJomT8ixk ARkWA2NvbTEbMBkGCgmSJomT8ixkARkWC3NxdWFyZXRyYWRlMRQwEgYKCZImiZPyLGQBGRYEY29y cDEWMBQGA1UEAxMNY29ycC1TVUJDQS1DQQITVAAAE0UfY2S1VH4xbQAAAAATRTAJBgUrDgMCGgUA oIIBcTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xNTEyMDMyMTU5 MzRaMCMGCSqGSIb3DQEJBDEWBBSSoCNtpkmO63vwjattp26H+EReUjCBhgYJKwYBBAGCNxAEMXkw dzBgMRMwEQYKCZImiZPyLGQBGRYDY29tMRswGQYKCZImiZPyLGQBGRYLc3F1YXJldHJhZGUxFDAS BgoJkiaJk/IsZAEZFgRjb3JwMRYwFAYDVQQDEw1jb3JwLVNVQkNBLUNBAhNUAAATRR9jZLVUfjFt AAAAABNFMIGIBgsqhkiG9w0BCRACCzF5oHcwYDETMBEGCgmSJomT8ixkARkWA2NvbTEbMBkGCgmS JomT8ixkARkWC3NxdWFyZXRyYWRlMRQwEgYKCZImiZPyLGQBGRYEY29ycDEWMBQGA1UEAxMNY29y cC1TVUJDQS1DQQITVAAAE0UfY2S1VH4xbQAAAAATRTANBgkqhkiG9w0BAQEFAASCAQAxJFq2qh0j WLja986PuK0E+XhS01wbbmNrcdOxhRfifyFjFTn7pzSlNTM1R84LOPVBnry/KwC9BBdMKHb4UYxo Ym6TDGR5FGf+LwcQtPGBQvt/QhqDRv6DMO9BcLjp7DVf1cnsCawS9j1HNlNjR87nXG/4fOd8fCWv Lb5VjkO/AGnQrEQDLPO2hMnsSgW/763arBgEvJoHLj0gnRGLjxal2yXw+xW8ZLxxDkLkhp5KHjFt nk33/Fw6xWUM2IKWVXzQIbBK3TrGVztKcZBljqvRqTmCTQwZ5spX+BS2e6tUUaorO/6+PK2+76Ne lO3JsMbYtEP7qPh550WIJI7y6ePfAAAAAAAA --Apple-Mail=_8ECE0118-DEA3-4CED-9A39-9461CF227A27--

On 03 Dec 2015, at 22:59, Jamie Lawrence <jlawrence@squaretrade.com> wrote:
Hello,
I’m currently playing with scripted VM creation and have an issue getting the newly created VM to PXE boot. My objective is to port some creation scripts from the environment this will eventually replace and worry about making this more “Ovirt-ey” later.
Skipping the details, everything is happy through creation, and when I boot it, it attempts to boot from a ‘disk' and fails, and I don’t understand why.
Following the creation of the VM, creation/attachment of the disk and net,
boot_dev = params.Boot(dev='network') vm.os.set_boot([boot_dev]) vm.set_os(params.OperatingSystem(cmdline=kernel_cmd)) vm.update()
kernel_cmd there evaluates to a fairly typical PXEboot string that works with our legacy setup - there isn’t really anything exotic going on. The BIOS doesn’t show any attempt at a PXE boot - it goes straight to the disk, declares it unbootable (because it was just created and is blank), and halts. It feels like the set_boot line is wrong or ignored, but this is new to me.
Hi, if you look for a one-time boot off PXE, and then from hdd after installation finishes (which is the most frequent use case), you can use “Run Once” to override the “default” boot order. Instead of modifying the VM configuration twice. Nevertheless, the above should work, so I would start checking if the VM is indeed configured correctly (bug on ovirt side) or we create it ok but there’s a bug in lower layers (libvirt, qemu, ipxe). If you can check the VM in UI there is a “VM Devices” subtab new in 3.6 which can tell you if it even has a NIC attached; and there is the final libvirt domain xml being logged in /var/log/vdsm/vdsm.log when you launch the VM - there you can doublecheck the VM is started as expected Thanks, michal
Anyone have a hint?
Thanks,
-j_______________________________________________ Users mailing list Users@ovirt.org http://lists.ovirt.org/mailman/listinfo/users

On 12/03/2015 10:59 PM, Jamie Lawrence wrote:
Hello,
I’m currently playing with scripted VM creation and have an issue getting the newly created VM to PXE boot. My objective is to port some creation scripts from the environment this will eventually replace and worry about making this more “Ovirt-ey” later.
Skipping the details, everything is happy through creation, and when I boot it, it attempts to boot from a ‘disk' and fails, and I don’t understand why.
Following the creation of the VM, creation/attachment of the disk and net,
boot_dev = params.Boot(dev='network') vm.os.set_boot([boot_dev]) vm.set_os(params.OperatingSystem(cmdline=kernel_cmd))
This line ^ is overwriting the complete OS configuration that you set before, so the change to the boot device is lost. If you enable the debug output of the SDK (with debug=True in the constructor of the API object) you will see that this is what is sent: <os> <cmdline>your command line</cmdline> </os> Try this instead: vm.set_os( params.OperatingSystem( boot=[ params.Boot(dev="network") ], cmdline=kernel_cmd ) ) It should result in sending this: <os> <boot dev="network"/> <cmdline>your command line</cmdline> </os> Not also that I believe that the kernel command line won't have any effect for the PXE boot, as it is used only for direct kernel boot.
vm.update()
kernel_cmd there evaluates to a fairly typical PXEboot string that works with our legacy setup - there isn’t really anything exotic going on. The BIOS doesn’t show any attempt at a PXE boot - it goes straight to the disk, declares it unbootable (because it was just created and is blank), and halts. It feels like the set_boot line is wrong or ignored, but this is new to me.
Anyone have a hint?
Thanks,
-j
_______________________________________________ Users mailing list Users@ovirt.org http://lists.ovirt.org/mailman/listinfo/users
-- Dirección Comercial: C/Jose Bardasano Baos, 9, Edif. Gorbea 3, planta 3ºD, 28016 Madrid, Spain Inscrita en el Reg. Mercantil de Madrid – C.I.F. B82657941 - Red Hat S.L.

--Apple-Mail=_CFF9C8DD-ED31-4BDE-BC40-23D3327AA3FD Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=windows-1252
On Dec 4, 2015, at 12:50 AM, Juan Hern=E1ndez <jhernand@redhat.com> = wrote: =20 On 12/03/2015 10:59 PM, Jamie Lawrence wrote:
vm.set_os(params.OperatingSystem(cmdline=3Dkernel_cmd))
=20 This line ^ is overwriting the complete OS configuration that you set before, so the change to the boot device is lost. If you enable the debug output of the SDK (with debug=3DTrue in the constructor of the = API object) you will see that this is what is sent:
Oh, thank you. That=92s what I was missing. (Also, debug=3DTrue will = make life nicer.) -j --=20 Jamie Lawrence | jlawrence@squaretrade.com --Apple-Mail=_CFF9C8DD-ED31-4BDE-BC40-23D3327AA3FD Content-Disposition: attachment; filename=smime.p7s Content-Type: application/pkcs7-signature; name=smime.p7s Content-Transfer-Encoding: base64 MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIHejCCB3Yw ggVeoAMCAQICE1QAABNFH2NktVR+MW0AAAAAE0UwDQYJKoZIhvcNAQEFBQAwYDETMBEGCgmSJomT 8ixkARkWA2NvbTEbMBkGCgmSJomT8ixkARkWC3NxdWFyZXRyYWRlMRQwEgYKCZImiZPyLGQBGRYE Y29ycDEWMBQGA1UEAxMNY29ycC1TVUJDQS1DQTAeFw0xNTA5MjgxNjA1MDVaFw0xNjA4MTMyMjA3 NDJaMIGsMRMwEQYKCZImiZPyLGQBGRYDY29tMRswGQYKCZImiZPyLGQBGRYLc3F1YXJldHJhZGUx FDASBgoJkiaJk/IsZAEZFgRjb3JwMRIwEAYDVQQLEwlFbXBsb3llZXMxCzAJBgNVBAsTAklUMRcw FQYDVQQDEw5KYW1pZSBMYXdyZW5jZTEoMCYGCSqGSIb3DQEJARYZamxhd3JlbmNlQHNxdWFyZXRy YWRlLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJKcbsIRNOtf5dPVSwBJPfmu SwaS3lsqO4k/GyptrL70oxJHcsFWu1er4Qne2LwL4pvWzG3ID8QCPzBNMaijhgmOqf5lCS66t5bt XqqKDUWw+JYW8qKNLxEFpXYJMnoRJ6GAwsD+R/TL9qB6tSZa/ElWm3u+Q+B6PsOPTJR0FcPy6jzD DeoLMcN/MgKBsUGYmJSBcqoBrd/7ugZancX5ZsIMtDpjGG9zYfT3r3deMRFFksfkUf2BakUoFYRP hVl2IUAsarZ8oWGOkkm6NoV8AQrCsFtJNlfrBWFjaJDgSU/7waVpaFwNbE3y5vKfsydkHCfuatdt gmTCIMXX8QU3mBkCAwEAAaOCAtowggLWMB0GA1UdDgQWBBSidwBvd8Keglu5uZyaGnDa0tfFBzAf BgNVHSMEGDAWgBSsU98vE8JHTC7TGa8VLHCSZCOFSTCB1QYDVR0fBIHNMIHKMIHHoIHEoIHBhoG+ bGRhcDovLy9DTj1jb3JwLVNVQkNBLUNBLENOPXN1YmNhLENOPUNEUCxDTj1QdWJsaWMlMjBLZXkl MjBTZXJ2aWNlcyxDTj1TZXJ2aWNlcyxDTj1Db25maWd1cmF0aW9uLERDPWNvcnAsREM9c3F1YXJl dHJhZGUsREM9Y29tP2NlcnRpZmljYXRlUmV2b2NhdGlvbkxpc3Q/YmFzZT9vYmplY3RDbGFzcz1j UkxEaXN0cmlidXRpb25Qb2ludDCBywYIKwYBBQUHAQEEgb4wgbswgbgGCCsGAQUFBzAChoGrbGRh cDovLy9DTj1jb3JwLVNVQkNBLUNBLENOPUFJQSxDTj1QdWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxD Tj1TZXJ2aWNlcyxDTj1Db25maWd1cmF0aW9uLERDPWNvcnAsREM9c3F1YXJldHJhZGUsREM9Y29t P2NBQ2VydGlmaWNhdGU/YmFzZT9vYmplY3RDbGFzcz1jZXJ0aWZpY2F0aW9uQXV0aG9yaXR5MBcG CSsGAQQBgjcUAgQKHggAVQBzAGUAcjAOBgNVHQ8BAf8EBAMCBaAwKQYDVR0lBCIwIAYKKwYBBAGC NwoDBAYIKwYBBQUHAwQGCCsGAQUFBwMCMFQGA1UdEQRNMEugLgYKKwYBBAGCNxQCA6AgDB5qbGF3 cmVuY2VAY29ycC5zcXVhcmV0cmFkZS5jb22BGWpsYXdyZW5jZUBzcXVhcmV0cmFkZS5jb20wRAYJ KoZIhvcNAQkPBDcwNTAOBggqhkiG9w0DAgICAIAwDgYIKoZIhvcNAwQCAgCAMAcGBSsOAwIHMAoG CCqGSIb3DQMHMA0GCSqGSIb3DQEBBQUAA4ICAQBwdFGJ18Dzg6eQoQU2oJ8PaoxTgOccXQNNcEZG wP0yk9ldV2BmqAw3yr0lUnhdk/ChkF9duSmWTHXrt8nAbyO8XVTwhIR6EcJEqS/MneudUsKbwClq yweMqsr/J9jz8Xl/IsbS0mWG9rb3o4stowNycrk2+t68DNMANQa4HGqh7Rz3XcrDtZOIRe33CPSc 552FgT1yJHBcNCkJHJQdZ6pXb0voP59eGIbrqOwhxfdorbb6lqYjSmOlUoQk5x0Gn25Z+B5q8a6o UTf1G5vMNups9133xuc1DeyFmjJVt6Xbs+BIIkAeL543iPWrr03vLclFRF+rwHBGkwklRY2eP/Qv oNOLBeuY85SiVdPKFlOSQc/U1kcpDani9UuQmQ1IZz3gea8WHDUyY2jSyAMZYFPNMQq+26eEo+HP +Gz7+F5IWRO1OL01EGsjCv/cdugqOsH/aIEc9XP4b/BUyWnxJxgI0d0j8BDfGiKcV+sCvkW4sO0p Oggj0b0SYnTB87hvjciZ4E8PHxaYlTyU95fdTQYLT6XjNMSQC3cIO4klbsObGRaIq5V4YbGiq91Z CkPCQjmBezFM7aLI9qb28gAT1NL2HZ0y5i8CDQWasE5RGyjqAhI6z+pl5RCUtUXimuo2KoA09eC6 RZllX/dT1f6+xGQu8DHMx+TSkYtuc2gzPFeFtjGCAxMwggMPAgEBMHcwYDETMBEGCgmSJomT8ixk ARkWA2NvbTEbMBkGCgmSJomT8ixkARkWC3NxdWFyZXRyYWRlMRQwEgYKCZImiZPyLGQBGRYEY29y cDEWMBQGA1UEAxMNY29ycC1TVUJDQS1DQQITVAAAE0UfY2S1VH4xbQAAAAATRTAJBgUrDgMCGgUA oIIBcTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3DQEJBTEPFw0xNTEyMDQxODAy MDVaMCMGCSqGSIb3DQEJBDEWBBQYnTglJUk4W3BadjH4VNicUxR1WDCBhgYJKwYBBAGCNxAEMXkw dzBgMRMwEQYKCZImiZPyLGQBGRYDY29tMRswGQYKCZImiZPyLGQBGRYLc3F1YXJldHJhZGUxFDAS BgoJkiaJk/IsZAEZFgRjb3JwMRYwFAYDVQQDEw1jb3JwLVNVQkNBLUNBAhNUAAATRR9jZLVUfjFt AAAAABNFMIGIBgsqhkiG9w0BCRACCzF5oHcwYDETMBEGCgmSJomT8ixkARkWA2NvbTEbMBkGCgmS JomT8ixkARkWC3NxdWFyZXRyYWRlMRQwEgYKCZImiZPyLGQBGRYEY29ycDEWMBQGA1UEAxMNY29y cC1TVUJDQS1DQQITVAAAE0UfY2S1VH4xbQAAAAATRTANBgkqhkiG9w0BAQEFAASCAQAba8HBbUw3 VDgUB4eZVSNo5WduXbh09aJN/W++nBVv1TcVe2JFuUsEmyKOknj3snbIHyyljN0u7N14+HYESgYs tHH9QXCIbHcdsbGWiSO++TlO1qfMiuVLi7VbK2F61jkmrwJzjYj2OyY2wwzMYTu12usmmRcvCJai i71ES+UiacesXJF50C71zYjQnS7tGE5/Y9I2NTwLM6Se5WYEh4RrUYw9mrqekxrQ3HeisLhrZMWb gFli8Ok0gY/RzsV+OrDqGID8o8JDoec51EZIrHki04aNSJQJbaAfbOuqh38ZlU/NGyGOqP92E6B/ ccvuXYWPVsToy93WrfoSeyVUC4aXAAAAAAAA --Apple-Mail=_CFF9C8DD-ED31-4BDE-BC40-23D3327AA3FD--
participants (3)
-
Jamie Lawrence
-
Juan Hernández
-
Michal Skrivanek