Right, I can reproduce this easily - by reverting this change, the Host will save correctly, but when the User Data script calls /unattended/built I get a conflict, although helpfully it doesn't say what the conflict is. I just get:

    unattended: test40.sapphire.elysium.emeraldreverie.org is Built!
    ... snip sql logs...
    Completed 409 Conflict in 42.3ms (ActiveRecord: 6.6ms)

Trying to call setBuilt on the console is slightly more helpful:

    $ h.setBuild
    $ h.errors
     @messages={:mac=>["is invalid", "can't be blank"]}>

So it seems there's extra validation happening because compute_attributes isn't stored when the host is saved. Thus when we call back to /unattended/built at a later time, compute? returns the wrong answer.

We could change `compute_attributes.present?` to some kind of check on whether the machine is image-backed? What do you think @ohadlevy @domcleal ?