保留并保留旧保留

时间:2015-03-05 20:11:35

标签: python json backup

我有下面的代码,它会查找2个密钥并删除旧密钥。这意味着我只有一个数据保留

def delete_old_snap(self, volumeid):
    list_snap = self.snapshots()

    def doubles(l):
        keys = [i["volume_id"] for i in l if i["volume_id"] == volumeid]
        keys = {k for k in keys if keys.count(k) > 1}
        return zip([[d for d in l if d["volume_id"] == k] for k in keys])

    for t in doubles(list_snap):
        snap_id_to_delete = t[0][0]['id'] if (
            t[0][0]['created_at'] < t[0][1]['created_at']
        ) else t[0][1]['id']

我的目标是允许例如

等5个数据保留
def delete_old_snap(self, volumeid, retention=5):
    list_snap = self.snapshots()
    #keep retention keys (based on ['created_at'] )
    #loop for deleting the old one if found.

一个数据样本:

[
{u'status': u'available', u'os-extended-snapshot-attributes:progress': u'100%', u'description': u'Daily snapshot',
 u'name': u'snap-DAILY-WEB-OCS_HOME', u'created_at': u'2015-01-22T14:09:30.000000',
 u'id': u'02ee7feb-6919-4732-9eb3-8c6f721dc426', u'volume_id': u'edcaac08-5f6a-4bf7-906c-d6ed9cb20b22', u'size': 2,
 u'os-extended-snapshot-attributes:project_id': u'a0998a6710f84dc78550393119b41721', u'metadata': {}},
 ....]

1 个答案:

答案 0 :(得分:0)

首先创建一个字典,其中每个键都是一个卷id

import dateutil.parser as p
d = {}
for snapshot in snapshots:
    snapshot["created_at"] = p.parse(snapshot["created_at"])
    try:
      d[snapshot["volume_id"]].append(snapshot)
    except KeyError:
      d[snapshot["volume_id"]]=[snapshot]

现在你应该能够更容易地使用它了

from operator import itemgetter
d2 = {}
for volume,data_list in d.items():
    d2[volume] = sorted(data_list,key=itemgetter("created_at"),reverse=True)[:5]

d2现在应该只包含任何给定音量的最近5次snampshot