def decommission(key, access, name, device="/dev/sdf"): def log(message, logging='warning'): "{0}: {1}, {2}".format('Decommission', message, logging) # first get the mountpoint (requires some energy, but we can...) df = subprocess.Popen(["/bin/df", device], stdout=subprocess.PIPE) output = df.communicate()[0] dummy, size, used, available, percent, mountpoint = \ output.split("\n")[1].split() if device != dummy: log("No such device {0}".format(device), 'info') sys.exit() log('start dommissioning', 'info') # make a last snapshot log('and now a snapshot', 'info') snapshot = backup.make_snapshot(key, access, name, 'monthly') administration.add_snapshot(key, access, name, snapshot) # we don't have to get rid any the volume, it is deleted on termination # and empty the cron as well log('empty the cron', 'info') os.system("/bin/echo | /usr/bin/crontab")
def decommission(key, access, cluster, persistence="no"): events = Events(key, access, cluster) node = Host(cluster, events).get_node() def log(message, logging="warning"): events.log(node, "Decommission", message, logging) log("start dommissioning", "info") # make a last backup if "no" != persistence: log("make last backups, first RDB", "info") # take the latest RDB and move it to S3 rdb = backup.put_RDB(key, access, cluster, "monthly") administration.set_RDB(key, access, cluster, rdb) # make a last snapshot log("and now a snapshot", "info") snapshot = backup.make_snapshot(key, access, cluster, "monthly") administration.add_snapshot(key, access, cluster, snapshot) delete_monitor() # we don't have to get rid any the volume, it is deleted on termination # change to the default (no persistence) log("remove redis.conf", "info") os.system("/bin/rm -f /etc/redis/redis.conf") # and empty the cron as well # log('empty the cron', 'info') # os.system("/bin/echo | /usr/bin/crontab") # make sure we make a clean AMI, with all monit checks monitored log("finally, monitor all (monit), but 'redis' and slave", "info") os.system("/usr/bin/monit unmonitor redis") os.system("/usr/bin/monit unmonitor slave")
def decommission(key, access, cluster, persistence="no"): events = Events(key, access, cluster) node = Host(cluster, events).get_node() def log(message, logging='warning'): events.log(node, 'Decommission', message, logging) log('start dommissioning', 'info') # make a last backup if "no" != persistence: log('make last backups, first RDB', 'info') # take the latest RDB and move it to S3 rdb = backup.put_RDB(key, access, cluster, 'monthly') administration.set_RDB(key, access, cluster, rdb) # make a last snapshot log('and now a snapshot', 'info') snapshot = backup.make_snapshot(key, access, cluster, 'monthly') administration.add_snapshot(key, access, cluster, snapshot) delete_monitor() # we don't have to get rid any the volume, it is deleted on termination # change to the default (no persistence) log('remove redis.conf', 'info') os.system("/bin/rm -f /etc/redis/redis.conf") # and empty the cron as well log('empty the cron', 'info') os.system("/bin/echo | /usr/bin/crontab") # make sure we make a clean AMI, with all monit checks monitored log('finally, monitor all (monit), for making AMIs', 'info') os.system("/usr/sbin/monit monitor all")
def snapshot_all(expiration="weekly"): # don't snapshot the WAL or root volume for tablespace in userdata['tablespaces']: backup = make_snapshot(sys.argv[2], sys.argv[3], cluster, tablespace['name'], expiration=expiration, device=tablespace['device']) administration.add_snapshot(sys.argv[2], sys.argv[3], cluster, tablespace['name'], backup) print "created {0} from {1}".format(backup[0], tablespace['name'])
def snapshot_all(expiration="weekly", master=True): # don't snapshot the WAL or root volume for tablespace in userdata['tablespaces']: backup = make_snapshot(sys.argv[2], sys.argv[3], cluster, tablespace['name'], expiration=expiration, device=tablespace['device']) # we use "dummy" to make sure the backups are not used # for restores if not master: administration.add_snapshot(sys.argv[2], sys.argv[3], cluster, "dummy", backup) else: administration.add_snapshot(sys.argv[2], sys.argv[3], cluster, tablespace['name'], backup) print "created {0} from {1}".format(backup[0], tablespace['name'])
os.system("/bin/gzip -df {0}.gz".format(src)) #print os.system("/bin/cat {0}".format(src)) # for convenience we can call this file to make backups directly if __name__ == '__main__': s3 = S3Connection(sys.argv[2],sys.argv[3]) # get the bucket, from the cluster name name = os.environ['REDIS_NAME'].strip() hosted_zone = os.environ['HOSTED_ZONE_NAME'].rstrip('.') cluster = "{0}.{1}".format(name, hosted_zone) bucket = s3.get_bucket( cluster.replace('.', '-')) if "rdb" == sys.argv[1]: create_bucket(sys.argv[2], sys.argv[3], cluster) key = put_RDB(sys.argv[2], sys.argv[3], cluster, sys.argv[4]) administration.set_RDB(sys.argv[2], sys.argv[3], cluster, key) elif "snapshot" == sys.argv[1]: backup = make_snapshot(sys.argv[2], sys.argv[3], cluster, sys.argv[4]) administration.add_snapshot(sys.argv[2], sys.argv[3], cluster, backup) elif "purge" == sys.argv[1]: snapshots = administration.get_expired_snapshots(sys.argv[2], sys.argv[3], cluster) purge_snapshots(sys.argv[2], sys.argv[3], cluster, snapshots) elif "purge-all" == sys.argv[1]: snapshots = administration.get_all_snapshots(sys.argv[2], sys.argv[3], cluster) purge_snapshots(sys.argv[2], sys.argv[3], cluster, snapshots)
ec2 = EC2Connection(key, access, region=region_info) for snapshot in snapshots: if ec2.delete_snapshot(snapshot['snapshot']): print "deleting snapshot: {0}".format(snapshot['snapshot']) administration.delete_snapshot(key, access, name, snapshot['snapshot']) # for convenience we can call this file to make backups directly if __name__ == '__main__': # get the bucket, from the name name = userdata['name'].strip() hosted_zone = os.environ['HOSTED_ZONE_NAME'].rstrip('.') name = "{0}.{1}".format(name, hosted_zone) if "snapshot" == sys.argv[1]: backup = make_snapshot(sys.argv[2], sys.argv[3], name, sys.argv[4]) administration.add_snapshot(sys.argv[2], sys.argv[3], name, backup) elif "purge" == sys.argv[1]: snapshots = administration.get_expired_snapshots(sys.argv[2], sys.argv[3], name) purge_snapshots(sys.argv[2], sys.argv[3], name, snapshots) elif "purge-all" == sys.argv[1]: snapshots = administration.get_all_snapshots(sys.argv[2], sys.argv[3], name) purge_snapshots(sys.argv[2], sys.argv[3], name, snapshots)
expiration=expiration, device=tablespace['device']) administration.add_snapshot(sys.argv[2], sys.argv[3], cluster, tablespace['name'], backup) print "created {0} from {1}".format(backup[0], tablespace['name']) if "latest" == sys.argv[1]: print administration.get_latest_snapshot(sys.argv[2], sys.argv[3], cluster, sys.argv[4]) elif "basebackup" == sys.argv[1]: if not is_in_recovery(): start_backup(sys.argv[4]) snapshot_all() stop_backup() elif "snapshot" == sys.argv[1]: backup = make_snapshot(sys.argv[2], sys.argv[3], cluster, sys.argv[4], sys.argv[5]) administration.add_snapshot(sys.argv[2], sys.argv[3], cluster, sys.argv[4], backup) elif "snapshot-all" == sys.argv[1]: snapshot_all() elif "purge" == sys.argv[1]: snapshots = administration.get_expired_snapshots( sys.argv[2], sys.argv[3], name) purge_snapshots(sys.argv[2], sys.argv[3], name, snapshots) elif "purge-all" == sys.argv[1]: snapshots = administration.get_all_snapshots(sys.argv[2], sys.argv[3], name) purge_snapshots(sys.argv[2], sys.argv[3], name, snapshots)
region_info = RegionInfo(name=region, endpoint="ec2.{0}.amazonaws.com".format(region)) ec2 = EC2Connection(key, access, region=region_info) for snapshot in snapshots: if ec2.delete_snapshot(snapshot['snapshot']): print "deleting snapshot: {0}".format(snapshot['snapshot']) administration.delete_snapshot(key, access, name, snapshot['snapshot']) # for convenience we can call this file to make backups directly if __name__ == '__main__': # get the bucket, from the name name = userdata['name'].strip() hosted_zone = os.environ['HOSTED_ZONE_NAME'].rstrip('.') name = "{0}.{1}".format(name, hosted_zone) if "snapshot" == sys.argv[1]: backup = make_snapshot(sys.argv[2], sys.argv[3], name, sys.argv[4]) administration.add_snapshot(sys.argv[2], sys.argv[3], name, backup) elif "purge" == sys.argv[1]: snapshots = administration.get_expired_snapshots( sys.argv[2], sys.argv[3], name) purge_snapshots(sys.argv[2], sys.argv[3], name, snapshots) elif "purge-all" == sys.argv[1]: snapshots = administration.get_all_snapshots(sys.argv[2], sys.argv[3], name) purge_snapshots(sys.argv[2], sys.argv[3], name, snapshots)