Libvirt reports this as internal error (VIR_ERR_INTERNAL_ERROR = 1 (0x1)) and only the error message gives a hint that the fault is due to running out of PCI slots. However I don't like the idea to parse the libvirt error message in nova. I suggest instead to reach out to the libvirt community to either remove this limit or at least return a specific error code so nova can differentiate other libvirt internal errors from reaching this slot limit.
I can reproduce the problem.
Libvirt reports this as internal error (VIR_ERR_ INTERNAL_ ERROR = 1 (0x1)) and only the error message gives a hint that the fault is due to running out of PCI slots. However I don't like the idea to parse the libvirt error message in nova. I suggest instead to reach out to the libvirt community to either remove this limit or at least return a specific error code so nova can differentiate other libvirt internal errors from reaching this slot limit.