第一階段使用python實現,大致步驟如下:
#! /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):
# 獲取所有項目名稱
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):
# 獲取所有項目ID
self.pros_id = []
pro_res = self.__fetch_pros_obj()
for i in pro_res:
self.pros_id.append(i[project_id])
print("所有項目ID:",self.pros_id)
return self.pros_id
def fetch_del_repos_name(self, pro_id):
# 鏡像tag數量大于self.num的鏡像倉庫名稱
self.del_repos_name = []
repos_res = self.client.session.get(self.repos_url, params={"project_id": pro_id})
#print("項目信息:",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"
# 項目鏡像倉庫的所有tags,按創建時間排序
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個,其他的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 刪除狀態: %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()
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129429.html
摘要:私有倉庫是,并在中運行。不要使用或為主機名注冊表服務需要由外部客戶端訪問或,默認為用于訪問和令牌通知服務的協議。打開或關閉,默認打開打開此屬性時,準備腳本創建私鑰和根證書,用于生成驗證注冊表令牌。 上一篇文章搭建了一個具有基礎功能,權限認證、TLS 的私有倉庫,但是Docker Registry 作為鏡像倉庫,連管理界面都沒有,甚至連一些運維必備的功能都是缺失的,還有什么 Docker...
摘要:的每個組件都是以容器的形式構建的,使用來對它進行部署。登錄輸入用戶名,默認密碼或已修改密碼登錄系統。 showImg(https://segmentfault.com/img/remote/1460000012261129?w=1280&h=786); 什么是 Harbor? 第一次使用這個的時候是剛進公司處理的第一個任務的時候,發現 Harbor 就是一個用于存儲和分發 Docker...
摘要:架構介紹主要組件在架構上主要由五個組件構成的等服務,通過一個前置的反向代理統一接收瀏覽器客戶端的請求,并將請求轉發給后端不同的服務。目前不支持功能已提交。 前言 對于 Harbor 這樣一個優秀的 Docker Registry 管理開源項目,以下內容基本上來自前人已有的研究,我只是將其在實踐中進行了測試,并整理匯集了相關資料供大家參考,同時針對 Harbor 與 Rancher產品的...
摘要:在年的月號之后,的版本命名開始發生變化,同時將版本和版本進行分開,表示年月發布。離線安裝命名前安裝我們可以使用來對多個容器進行管理。離線安裝安裝公司開源的企業級的管理項目。 以下環境皆為ubuntu16.04,主要安裝docker,docker-compose,docker倉庫等。 Docker安裝 參考官方 A: 有源安裝 sudo apt-get remove docker doc...
摘要:輸入鏡像地址后,在自建鏡像倉庫欄,輸入自建鏡像倉庫詳細信息,字段說明如下,當前只支持基于同一主賬號下云主機搭建的鏡像倉庫。自建鏡像倉庫支持容器鏡像封裝了應用代碼,是用戶的重要資產之一,出于強安全性的考慮,部分用戶在容器應用的使用過程中有使用自建鏡像倉庫的需求。Cube 支持拉取同一 VPC 下的自建鏡像倉庫,豐富了使用場景,確保用戶鏡像和代碼安全。控制臺創建 / 修改 Cube 實例在控制臺...
摘要:正好我們在使用作為的倉庫,同時提供了等諸多類型的倉庫功能。值得一提的是,我們可以使用這個倉庫從和下載鏡像,但是我們不能通過這個倉庫推送鏡像到遠程倉庫。 背景 我們一直使用 harbor 作為docker的鏡像倉庫,但Harbor只能作為私有倉庫,當需要Docker Hub 或 Google Cloud Containers 上的鏡像時,我們只能自己手動pull,重新打tag,再push...
閱讀 1347·2023-01-11 13:20
閱讀 1685·2023-01-11 13:20
閱讀 1133·2023-01-11 13:20
閱讀 1860·2023-01-11 13:20
閱讀 4101·2023-01-11 13:20
閱讀 2705·2023-01-11 13:20
閱讀 1386·2023-01-11 13:20
閱讀 3598·2023-01-11 13:20