Based on experience with the vSphere and XenServer ZenPacks, I think this suffers from a very repeatable race condition. Even though create_device() was wrapped in @transact, and will have been committed, there's up to a minute lag before zenhub knows about the device. This causes the zenmodeler job created by clusterhost.collectDevice() to fail because zenhub says the device doesn't exist yet.

Have you seen anything like this in your testing?