第一階段使用python實(shí)現(xiàn),大致步驟如下:
#! /usr/bin/env python3
# -*- coding:utf-8 -*-
import requests
import os
class HarborRequest(object):
def __init__(self, login_url, username, password):
self.username = username
self.password = password
self.login_url = login_url
self.session = requests.Session()
self.login()
def login(self):
requests.packages.urllib3.disable_warnings()
self.session.get(self.login_url, params={"principal": self.username, "password": self.password}, verify=False)
class CleanHarbor(object):
def __init__(self, harbor_domain, username, password, num, schema="http", ):
self.num = num
self.schema = schema
self.harbor_domain = harbor_domain
self.harbor_url = self.schema + "://" + self.harbor_domain
self.login_url = self.harbor_url + "/login"
self.api_url = self.harbor_url + "/api"
self.pro_url = self.api_url + "/projects"
self.repos_url = self.api_url + "/repositories"
self.username = username
self.password = password
self.client = HarborRequest(self.login_url, self.username, self.password)
def __fetch_pros_obj(self):
# 獲取所有項(xiàng)目名稱
self.pros_obj = self.client.session.get(self.pro_url).json()
for n in self.pros_obj:
print("分組:",n.get("name"))
return self.pros_obj
def fetch_pros_id(self):
# 獲取所有項(xiàng)目ID
self.pros_id = []
pro_res = self.__fetch_pros_obj()
for i in pro_res:
self.pros_id.append(i[project_id])
print("所有項(xiàng)目ID:",self.pros_id)
return self.pros_id
def fetch_del_repos_name(self, pro_id):
# 鏡像tag數(shù)量大于self.num的鏡像倉庫名稱
self.del_repos_name = []
repos_res = self.client.session.get(self.repos_url, params={"project_id": pro_id})
#print("項(xiàng)目信息:",repos_res.json())
for repo in repos_res.json():
if repo["tags_count"] > self.num:
# print("鏡像倉庫名稱:",repo[name])
self.del_repos_name.append(repo[name])
return self.del_repos_name
def fetch_del_repos(self, repo_name):
# 刪除鏡像倉庫tag
self.del_res = []
tag_url = self.repos_url + "/" + repo_name + "/tags"
# 項(xiàng)目鏡像倉庫的所有tags,按創(chuàng)建時(shí)間排序
tags = self.client.session.get(tag_url).json()
tags_sort = sorted(tags, key=lambda a: a["created"])
#print(len(tags_sort),tags_sort)
# 除了最新的self.num個(gè),其他的tag都添加到待刪除列表del_tags
del_tags = tags_sort[0:len(tags_sort) - self.num]
# print(del_tags)
for tag in del_tags:
del_repo_tag_url = tag_url + "/" + tag[name]
print(del_repo_tag_url)
del_res = os.popen(curl -X DELETE -u %s:%s -s -w %s %s % (self.username,self.password,%{http_code},del_repo_tag_url)).readlines()
self.del_res.append("鏡像: %s 刪除狀態(tài): %s" % (del_repo_tag_url,del_res))
return self.del_res
def work(self):
# 遍歷project id
for i in self.fetch_pros_id():
# 獲取所有tag超過self.num的repos
repos = self.fetch_del_repos_name(i)
if repos:
for repo in repos:
del_repos = self.fetch_del_repos(repo)
print(del_repos)
if __name__ == "__main__":
clean = CleanHarbor(harbor_domain="192.168.xx.xxx",
username="harbor",
password="Harbor@123",
num=3)
clean.work()
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/129429.html
摘要:私有倉庫是,并在中運(yùn)行。不要使用或?yàn)橹鳈C(jī)名注冊(cè)表服務(wù)需要由外部客戶端訪問或,默認(rèn)為用于訪問和令牌通知服務(wù)的協(xié)議。打開或關(guān)閉,默認(rèn)打開打開此屬性時(shí),準(zhǔn)備腳本創(chuàng)建私鑰和根證書,用于生成驗(yàn)證注冊(cè)表令牌。 上一篇文章搭建了一個(gè)具有基礎(chǔ)功能,權(quán)限認(rèn)證、TLS 的私有倉庫,但是Docker Registry 作為鏡像倉庫,連管理界面都沒有,甚至連一些運(yùn)維必備的功能都是缺失的,還有什么 Docker...
摘要:的每個(gè)組件都是以容器的形式構(gòu)建的,使用來對(duì)它進(jìn)行部署。登錄輸入用戶名,默認(rèn)密碼或已修改密碼登錄系統(tǒng)。 showImg(https://segmentfault.com/img/remote/1460000012261129?w=1280&h=786); 什么是 Harbor? 第一次使用這個(gè)的時(shí)候是剛進(jìn)公司處理的第一個(gè)任務(wù)的時(shí)候,發(fā)現(xiàn) Harbor 就是一個(gè)用于存儲(chǔ)和分發(fā) Docker...
摘要:架構(gòu)介紹主要組件在架構(gòu)上主要由五個(gè)組件構(gòu)成的等服務(wù),通過一個(gè)前置的反向代理統(tǒng)一接收瀏覽器客戶端的請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)給后端不同的服務(wù)。目前不支持功能已提交。 前言 對(duì)于 Harbor 這樣一個(gè)優(yōu)秀的 Docker Registry 管理開源項(xiàng)目,以下內(nèi)容基本上來自前人已有的研究,我只是將其在實(shí)踐中進(jìn)行了測(cè)試,并整理匯集了相關(guān)資料供大家參考,同時(shí)針對(duì) Harbor 與 Rancher產(chǎn)品的...
摘要:在年的月號(hào)之后,的版本命名開始發(fā)生變化,同時(shí)將版本和版本進(jìn)行分開,表示年月發(fā)布。離線安裝命名前安裝我們可以使用來對(duì)多個(gè)容器進(jìn)行管理。離線安裝安裝公司開源的企業(yè)級(jí)的管理項(xiàng)目。 以下環(huán)境皆為ubuntu16.04,主要安裝docker,docker-compose,docker倉庫等。 Docker安裝 參考官方 A: 有源安裝 sudo apt-get remove docker doc...
摘要:輸入鏡像地址后,在自建鏡像倉庫欄,輸入自建鏡像倉庫詳細(xì)信息,字段說明如下,當(dāng)前只支持基于同一主賬號(hào)下云主機(jī)搭建的鏡像倉庫。自建鏡像倉庫支持容器鏡像封裝了應(yīng)用代碼,是用戶的重要資產(chǎn)之一,出于強(qiáng)安全性的考慮,部分用戶在容器應(yīng)用的使用過程中有使用自建鏡像倉庫的需求。Cube 支持拉取同一 VPC 下的自建鏡像倉庫,豐富了使用場(chǎng)景,確保用戶鏡像和代碼安全??刂婆_(tái)創(chuàng)建 / 修改 Cube 實(shí)例在控制臺(tái)...
摘要:正好我們?cè)谑褂米鳛榈膫}庫,同時(shí)提供了等諸多類型的倉庫功能。值得一提的是,我們可以使用這個(gè)倉庫從和下載鏡像,但是我們不能通過這個(gè)倉庫推送鏡像到遠(yuǎn)程倉庫。 背景 我們一直使用 harbor 作為docker的鏡像倉庫,但Harbor只能作為私有倉庫,當(dāng)需要Docker Hub 或 Google Cloud Containers 上的鏡像時(shí),我們只能自己手動(dòng)pull,重新打tag,再push...
閱讀 1357·2023-01-11 13:20
閱讀 1707·2023-01-11 13:20
閱讀 1215·2023-01-11 13:20
閱讀 1906·2023-01-11 13:20
閱讀 4165·2023-01-11 13:20
閱讀 2757·2023-01-11 13:20
閱讀 1402·2023-01-11 13:20
閱讀 3672·2023-01-11 13:20