保留并保留旧保留(keep n retention and delete old one)
我有下面的代码,它会查找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': {}}, ....]I have the code below which looks for 2 keys and deletes the old one. That means I only have one data-retention
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']My goal is to allow for exemple 5 data-retentions like
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.one sample of data:
[ {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': {}}, ....]最满意答案
首先创建一个字典,其中每个键都是一个卷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次snampshots
start by creating a dictionary where each key is a volume 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]now you should be able to work with it much easier
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 should now contain only the 5 most recent snampshots for any given volume
更多推荐
发布评论