保留并保留旧保留(keep n retention and delete old one)

编程入门 行业动态 更新时间:2024-10-08 22:48:34
保留并保留旧保留(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

更多推荐

本文发布于:2023-08-04 21:38:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1422322.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:retention   delete

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!