From cfd1e634689a4d7d99444d22f5f2bac7d3695d59 Mon Sep 17 00:00:00 2001 From: dustoair <107600816+dustoair@users.noreply.github.com> Date: Thu, 4 Aug 2022 19:04:54 +0800 Subject: [PATCH] open src --- .gitignore | 12 ++++++++++ clean.py | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ readme.md | 1 + 3 files changed, 83 insertions(+) create mode 100644 .gitignore create mode 100644 clean.py create mode 100644 readme.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f4b7529 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +venv +.idea +big.txt +big.txt.gz +big.txt.gz.gpg +big.txt.gpg +big.txt.lzma +big.txt.lzma.gpg +big.txt.lzma.gpg.gpg +big.txt.lzma.gpg.gpg.gpg +dump.txt +test.txt \ No newline at end of file diff --git a/clean.py b/clean.py new file mode 100644 index 0000000..0644e95 --- /dev/null +++ b/clean.py @@ -0,0 +1,70 @@ +#! /usr/bin/env python3 +# -*- coding:utf-8 -*- +# 基于时间排序后删除 保留最新n个tag + +import requests + +requests.packages.urllib3.disable_warnings() + + +class CleanHarbor: + # haror地址 用户 密码 保留tag数量 + def __init__(self, base_url, user, password, counts): + self.user = user + self.password = password + self.base_url = base_url + self.counts = counts + # harbor 1.8的登录url加了个c + self.login_url = self.base_url + '/c/login' + self.project_url = self.base_url + '/api/projects' + self.repo_url = self.base_url + '/api/repositories' + self.gc_url = self.base_url + '/api/system/gc/schedule' + self.session = requests.Session() + self.session.verify = False + self.session.post(self.login_url, params={"principal": self.user, "password": self.password}) + + def get_project(self): + project_info = [] + harbor_info = self.session.get(self.project_url).json() + for project in harbor_info: + info = {'project_id': project['project_id'], 'project_name': project['name']} + project_info.append(info) + return project_info + + def get_delete_repo(self): + project_info = self.get_project() + delete_reponame = [] + for project_id in project_info: + repo_info = self.session.get(self.repo_url, params={"project_id": project_id['project_id']}).json() + for repo in repo_info: + # 如果该repo的tag数量不大于期望值则略过 + if repo['tags_count'] > self.counts: + delete_reponame.append(repo['name']) + return delete_reponame + + def delete_repo_tag(self): + delete_reponame = self.get_delete_repo() + for repo_name in delete_reponame: + tag_url = self.repo_url + "/" + repo_name + "/tags" + tags = self.session.get(tag_url).json() + tags_sort = sorted(tags, key=lambda tags: tags["created"]) + del_tags = tags_sort[0:len(tags_sort) - self.counts] + for tag in del_tags: + # print(tag) + del_repo_tag_url = tag_url + "/" + tag['name'] + print(del_repo_tag_url) + result = self.session.delete(del_repo_tag_url) + if result.status_code == 200: + print('{}:{} tag删除成功..'.format(repo_name, tag['name'])) + print("所有tag删除完成...") + self.gc() + + def gc(self): + result = self.session.post(self.gc_url, params={"schedule": {"type": "Manual"}}) + if result.status_code == 201: + print("gc成功") + + +if __name__ == "__main__": + Harobr = CleanHarbor('https://hub.my.com', 'admin', 'Harbor12345', 5) + Harobr.delete_repo_tag() diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..f7a2d27 --- /dev/null +++ b/readme.md @@ -0,0 +1 @@ +clean harbor tag by num limit \ No newline at end of file