最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python實(shí)現(xiàn)Harbor私有鏡像倉庫垃圾自動(dòng)化清理詳情

 更新時(shí)間:2022年05月24日 17:02:08   作者:鍵客李大白  
這篇文章主要介紹了Python實(shí)現(xiàn)Harbor私有鏡像倉庫垃圾自動(dòng)化清理詳情,文章圍繞主題分享相關(guān)詳細(xì)代碼,需要的小伙伴可以參考一下

一、編寫Python腳本

[root@lidabai ~]# vim harbor_clearimage.py
# -*- coding:utf-8 -*-
import requests
from requests.auth import HTTPBasicAuth
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
import os
import time
import logging
from logging.handlers import RotatingFileHandler

class Harbor(object):
def __init__(self, api_url, api_user, api_passwd, tag_num, proj_exclude):
self.api_url = api_url
self.api_user = api_user
self.api_passwd = api_passwd
self.api_auth = HTTPBasicAuth(self.api_user, self.api_passwd)
self.tag_num = int(tag_num)
self.proj_exclude = proj_exclude
self.proj_url = self.api_url + "/projects"
self.repos_url = self.api_url + "/repositories"
self.header_dict = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.80 Safari/537.36',
'Content-Type': 'application/x-www-form-urlencoded'
}
self.deldata = []
self.session = requests.Session()
self.session.auth = self.api_auth
retry = Retry(connect=3, backoff_factor=1)
adapter = HTTPAdapter(max_retries=retry)
self.session.mount('http://', adapter)
self.session.keep_alive = False

def soft_del_repos(self):
try:
projresp = self.session.get(self.proj_url, headers=self.header_dict)
if projresp.status_code == 200:
projdata = projresp.json()
for proj in projdata:
if proj['name'] not in self.proj_exclude # and proj['name'] == "gxjxhwebtest-28003" :
try:
reporesp = self.session.get(self.repos_url, params={"project_id": proj['project_id']} , headers=self.header_dict)
if reporesp.status_code == 200:
repodata = reporesp.json()
for repo in repodata:
if repo["tags_count"] > self.tag_num:
tag_url = self.repos_url + "/" + repo['name'] + "/tags"
tags = self.session.get(tag_url).json()
tagdata = sorted(tags, key=lambda a: a["created"])
del_tags = tagdata[0:len(tagdata) - self.tag_num]
for tag in del_tags:
del_repo_tag_url = tag_url + "/" + tag['name']
cmd = 'curl -v -X DELETE -u "' + self.api_user + ":" + self.api_passwd + '" -H "accept: application/json" ' + del_repo_tag_url
try:
#del_resp = self.session.delete(del_repo_tag_url,headers=self.header_dict)
ok = os.system(cmd)
if ok == 0 :
logging.info("httpdel:" + del_repo_tag_url )
_deldata = {"project_id":proj['project_id'],"project_name":proj['name'],"repo_name":repo['name'],"tag_name":tag['name']}
self.deldata.append(_deldata)
logging.info("httpdel project_id=" + str(proj['project_id']) + ",project_name=" + proj['name'] + ",repo_name=" + repo['name'] + ",tag_name=" + tag['name'])
else:
logging.error("exec_cmd fail:" + cmd )
except:
logging.error("exec_cmd fail:" + cmd )
except:
logging.error("httpget fail:" + self.repos_url)
else:
logging.error("httpget fail:" + self.proj_url )
except:
logging.error("apilogin fail:" + self.api_url )
return self.deldata

def hard_del_repo(self):
pwd_cmd = "cd /dcos/app/harbor/ " #進(jìn)入到Harbor安裝目錄
stop_cmd = "docker-compose stop" #停止Harbor服務(wù)
del_cmd = "docker run -it --name gc --rm --volumes-from registry goharbor/registry-photon:v2.7.1-patch-2819-v1.8.6 garbage-collect /etc/registryctl/config.yml"
start_cmd = "docker-compose start" #啟動(dòng)Harbor服務(wù)
os.system(pwd_cmd)
ok1 = os.system(stop_cmd)
if ok1 == 0 :
time.sleep(10)
ok2 = os.system(del_cmd)
ok3 = os.system(start_cmd)
if ok3 == 0 :
logging.info("hard_del_repo ok:")
else:
logging.error("hard_del_repo fail:")

if __name__ == "__main__":
Rthandler = RotatingFileHandler('harbor_repo_clear.log', maxBytes=10*1024*1024,backupCount=5)
logging.basicConfig(level=logging.INFO)
formatter = logging.Formatter('%(levelname)s %(asctime)s %(process)d %(thread)d %(pathname)s %(filename)s %(funcName)s[line:%(lineno)d] %(message)s')
Rthandler.setFormatter(formatter)
logging.getLogger('').addHandler(Rthandler)

api_url = "http://192.168,2,66:443/api" #Harbor服務(wù)的API URL
api_user = "admin" #超級(jí)管理員
api_passwd = "Harbor12345" #超級(jí)管理員的用戶密碼
tag_num = 20 #保留的tag數(shù)量
proj_exclude = ["library"]
harborClient = Harbor(api_url,api_user,api_passwd,tag_num,proj_exclude)
data = harborClient.soft_del_repos()
if len(data) > 0 :
#harborClient.hard_del_repos()
logging.info("hard_del_repo:")

二、執(zhí)行Python腳本

[root@lidabai ~]# python harbor_clearimage.py

到此這篇關(guān)于Python實(shí)現(xiàn)Harbor私有鏡像倉庫垃圾自動(dòng)化清理詳情的文章就介紹到這了,更多相關(guān) Harbor垃圾清理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Pytorch 定義MyDatasets實(shí)現(xiàn)多通道分別輸入不同數(shù)據(jù)方式

    Pytorch 定義MyDatasets實(shí)現(xiàn)多通道分別輸入不同數(shù)據(jù)方式

    今天小編就為大家分享一篇Pytorch 定義MyDatasets實(shí)現(xiàn)多通道分別輸入不同數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python列表的循環(huán)遍歷與嵌套使用詳解

    Python列表的循環(huán)遍歷與嵌套使用詳解

    在編程中,遍歷列表的每個(gè)元素是處理數(shù)據(jù)的重要任務(wù)之一,此外,列表的嵌套使用可以幫助我們處理更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),本文將探討列表的循環(huán)遍歷方法及其嵌套使用,并提供具體示例以幫助理解這些高級(jí)用法,需要的朋友可以參考下
    2025-01-01
  • Python調(diào)用.NET庫的方法步驟

    Python調(diào)用.NET庫的方法步驟

    這篇文章主要介紹了Python調(diào)用.NET庫的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • python3.9.1環(huán)境安裝的方法(圖文)

    python3.9.1環(huán)境安裝的方法(圖文)

    這篇文章主要介紹了python3.9.1環(huán)境安裝的方法(圖文),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python動(dòng)態(tài)規(guī)劃之零錢兌換問題詳解

    Python動(dòng)態(tài)規(guī)劃之零錢兌換問題詳解

    這篇文章主要介紹了Python動(dòng)態(tài)規(guī)劃之零錢兌換問題詳解,這次我們就按照套路模板,再來剖析一道經(jīng)典動(dòng)規(guī)題目零錢兌換,計(jì)算并返回可以湊成總金額所需的 最少的硬幣個(gè)數(shù) 如果沒有任何一種硬幣組合能組成總金額,返回-1,需要的朋友可以參考下
    2023-11-11
  • Win7下Python與Tensorflow-CPU版開發(fā)環(huán)境的安裝與配置過程

    Win7下Python與Tensorflow-CPU版開發(fā)環(huán)境的安裝與配置過程

    這篇文章主要介紹了Win7下Python與Tensorflow-CPU版安裝與配置心得,需要的朋友可以參考下
    2018-01-01
  • Django視圖擴(kuò)展類知識(shí)點(diǎn)詳解

    Django視圖擴(kuò)展類知識(shí)點(diǎn)詳解

    這篇文章主要介紹了Django視圖擴(kuò)展類知識(shí)點(diǎn)以及實(shí)例代碼,需要的朋友們可以學(xué)習(xí)下。
    2019-10-10
  • Python-Seaborn熱圖繪制的實(shí)現(xiàn)方法

    Python-Seaborn熱圖繪制的實(shí)現(xiàn)方法

    這篇文章主要介紹了Python-Seaborn熱圖繪制的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python中的getattr、__getattr__、__getattribute__、__get__詳解

    Python中的getattr、__getattr__、__getattribute__、__get__詳解

    這篇文章主要為大家介紹了Python中的getattr,__getattr__,__getattribute__和__get__,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • pytorch 模擬關(guān)系擬合——回歸實(shí)例

    pytorch 模擬關(guān)系擬合——回歸實(shí)例

    今天小編就為大家分享一篇pytorch 模擬關(guān)系擬合——回歸實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01

最新評(píng)論

新化县| 通榆县| 灵川县| 房产| 马尔康县| 乐山市| 宁远县| 通渭县| 镇江市| 会同县| 昭苏县| 筠连县| 灵台县| 富裕县| 邯郸县| 崇义县| 平塘县| 应用必备| 潼关县| 靖宇县| 合山市| 中超| 常州市| 舒兰市| 招远市| 广汉市| 海口市| 广河县| 沙雅县| 镇安县| 赞皇县| 岳西县| 夏津县| 鄂伦春自治旗| 平阳县| 朝阳市| 广宗县| 铜山县| 社会| 八宿县| 方城县|