def revert(self, name=None, destroy=True): """Method to revert node in state from snapshot For external snapshots in libvirt we use restore function. After reverting in this way we get situation when node is connected to original volume disk, without snapshot point. To solve this problem we need to switch it to correct volume. In case of usage external snapshots we clean snapshot disk when revert to snapshot without childs and create new snapshot point when reverting to snapshots with childs. """ if destroy: self.destroy() if self.has_snapshot(name): snapshot = self._get_snapshot(name) if snapshot.get_type == 'external': # EXTERNAL SNAPSHOT self._revert_external_snapshot(name) else: # ORIGINAL SNAPSHOT logger.info("Revert {0} ({1}) to internal snapshot {2}".format( self.name, snapshot.state, name)) self._libvirt_node.revertToSnapshot(snapshot._snapshot, 0) else: raise DevopsError( 'Domain snapshot for {0} node not found: no domain ' 'snapshot with matching' ' name {1}'.format(self.name, name))
def create(cls, name): """Create Environment instance with given name. :rtype: devops.models.Environment """ try: return cls.objects.create(name=name) except IntegrityError: raise DevopsError('Environment with name {!r} already exists' ''.format(name))