The use of transaction.atomic() in there is under the assumption that we're already within a transaction. It should only be creating a savepoint on entry, and rolling back to it if there's an exception on exit. Django defines this behaviour when using atomic() within a transaction, iirc.
Also, claim_static_ip_addresses() *does* allocate addresses for multiple interfaces. Using a savepoint here means we get all-or-nothing behaviour.
The use of transaction. atomic( ) in there is under the assumption that we're already within a transaction. It should only be creating a savepoint on entry, and rolling back to it if there's an exception on exit. Django defines this behaviour when using atomic() within a transaction, iirc.
Also, claim_static_ ip_addresses( ) *does* allocate addresses for multiple interfaces. Using a savepoint here means we get all-or-nothing behaviour.