It looks like cloudstack and gogrid models do something very similar. I would be up for suggestions though.