Turns out novaclient already had an instance actions implementation in the contrib package.