datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), self.xfs_filesystem, self.ebs_volume) ec2.create_snapshot(self.ebs_volume, description) if self.xfs_filesystem: self.run_cmd('xfs_freeze -u %s' % self.xfs_filesystem) # filesystem if paths: self.log('creating archive %s [%s]' % (self.backup_file, ', '.join(paths))) tf = tarfile.open(self.backup_file, 'w:gz') for p in paths: tf.add(p) tf.close() self.s3_upload(self.backup_s3, self.backup_file) def restore(self): # packages self.s3_download(self.dpkg_s3, self.dpkg_file) self.run_cmd('dpkg --set-selections < %s && apt-get -y dselect-upgrade' % self.dpkg_file) # filesystem self.s3_download(self.backup_s3, self.backup_file) self.log('extracting archive %s' % self.backup_file) tf = tarfile.open(self.backup_file) tf.extractall('/') if __name__ == '__main__': run_aws_command(AWSBackup)
# create and attach an EBS device volume = ec2.create_volume(size, zone) available_devices = ['/dev/sdf', '/dev/sdg', '/dev/sdh', '/dev/sdi', '/dev/sdj', '/dev/sdk', '/dev/sdl', '/dev/sdm', '/dev/sdn', '/dev/sdo', '/dev/sdp', ] for dev in available_devices: try: volume.attach(instance, dev) self.log('attached volume at %s' % dev) break except BotoServerError: pass else: volume.delete() raise AWSError('failed to find available device') # wait 5 seconds for EBS device to connect time.sleep(5) # mount EBS device as XFS filesystem self.run_cmd('mkfs.xfs %s' % dev) self.run_cmd('mkdir -p %s' % path) fstab_line = '%s %s xfs defaults 0 0' % (dev, path) self.run_cmd('echo "%s" >> /etc/fstab' % fstab_line) self.run_cmd('mount %s' % path) if __name__ == '__main__': run_aws_command(AddVolume)