commit
cfd1e63468
@ -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
|
||||
@ -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()
|
||||
Loading…
Reference in new issue