Python实现Harbor私有镜像仓库垃圾自动化清理详情

目录
  • 一、编写Python脚本
  • 二、执行Python脚本

一、编写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/ " #进入到Harbor安装目录
stop_cmd = "docker-compose stop" #停止Harbor服务
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" #启动Harbor服务
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服务的API URL
api_user = "admin" #超级管理员
api_passwd = "Harbor12345" #超级管理员的用户密码
tag_num = 20 #保留的tag数量
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:")

二、执行Python脚本

[root@lidabai ~]# python harbor_clearimage.py

到此这篇关于Python实现Harbor私有镜像仓库垃圾自动化清理详情的文章就介绍到这了,更多相关 Harbor垃圾清理内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 磁盘垃圾文件清理器python代码实现

    本文假设某些特定类型的文件和大小为0的文件为垃圾文件,可以自由扩展代码的列表,也就是垃圾文件的类型. from os.path import isdir, join, splitext from os import remove, listdir, chmod, stat import sys #指定要删除的文件类型 filetypes = ['.tmp', '.log', '.obj', '.txt'] def delCertainFiles(directory): for filename

  • 用Python自动清理系统垃圾的实现

    用Python自动清理系统垃圾,再也不用360安全卫士了 在Windows在安装和使用过程中都会产生相当多的垃圾文件,包括临时文件(如:.tmp.._mp)日志文件(.log).临时帮助文件(.gid).磁盘检查文件(.chk).临时备份文件(如:.old.*.bak)以及其他临时文件.特别是如果一段时间不清理IE的临时文件夹"Temporary Internet Files",其中的缓存文件有时会占用上百MB的磁盘空间.这些LJ文件不仅仅浪费了宝贵的磁盘空间,严重时还会使系统运行慢如

  • Python实现自动清理电脑垃圾文件详解

    经常存在在我们的电脑中的垃圾文件主要是指系统在运行过程中产生的tmp临时文件.日志文件.临时备份文件等.垃圾清理器的作用其实也是对这些文件进行清理,不会影响到我们使用产生的数据文件.如果是手动删除的话要一个一个的找出来去删除就比较麻烦了,用python写一个脚本直接启动就大功告成了. 在这个脚本的实现过程中使用到的内置库就是os库,没有通过其他的三方插件进行实现.所以也不用下载其他的python模块,直接调用内置库就OK了. import os 因为我们使用界面化的处理,这里导入一下pyqt5的

  • 利用python程序帮大家清理windows垃圾

    前言 大家应该都有所体会,在windows系统使用久了就会产生一些"垃圾"文件.这些文件有的是程序的临时文件,有的是操作记录或日志等.垃圾随着时间越积越多,导致可用空间减少,文件碎片过多,使得系统的运行速度受到一定影响. 而Mac系统和Linux系统并不存在这类问题,所以只适用于windows 知识概要 某些缓存文件可以提高程序的执行速度,比如缓存 cookie.使用记录 recent.预读取 prefetch 等.所以清理临时文件并不代表系统运行就会变快,有时也可能变慢. windo

  • Python实现Harbor私有镜像仓库垃圾自动化清理详情

    目录 一.编写Python脚本 二.执行Python脚本 一.编写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 im

  • harbor可视化私有镜像仓库环境及服务部署示例

    目录 harbor 简介 Harbor 和 Registry 的比较 harbor 案例演示 环境准备 服务部署 上传本地镜像至harbor 拉去 harbor 上的 tomcat 镜像至本地 harbor 简介 在实际生产运维中,往往需要把镜像发布到几十.上百或更多的节点上.这时单台 Docker 主机上镜像已无法满足,项目越来越多,镜像越来越多,都放到一台 Docker 主机上是不行的,我们需要一个镜像Git仓库一样系统来统一管理镜像.这里介绍的是一个企业级镜像仓库Harbor,将作为我们容

  • Docker搭建私有镜像仓库的方法

    和Mavan的管理一样,Dockers不仅提供了一个中央仓库,同时也允许我们使用registry搭建本地私有仓库. 使用私有仓库有许多优点: 节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可: 提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用. 现在Docker用处越来越多了,所以今天就想着搭建一个私有镜像仓库来维护内部我们自己的镜像. 环境 CentOS 7.x Docker 1.12.6 安装 docker-

  • CentOS7.2服务器上搭建Docker私有镜像仓库操作示例

    本文实例讲述了CentOS7.2服务器上搭建Docker私有镜像仓库操作.分享给大家供大家参考,具体如下: 鉴于国内pull镜像的速度较慢,很有必要搭建docker私有或者本地镜像仓库. 安装docker # yum -y install docker # systemctl start docker && systemctl enable docker 使用自签名进行安全认证 创建存放证书和密钥的certs目录 # mkdir -p /docker/certs # chcon -Rt s

  • Docker registry私有镜像仓库服务部署案例演示

    目录 简介 registry 案例演示 环境准备 服务部署 简介 docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库,仓库默认会被创建在/var/lib/registry目录下(容器中的目录) registry 案例演示 环境准备 主机名 服务 IP docker-client 客户端(用于上传镜像) 192.168.117.130 docker-server 服务端(用于存储镜像) 192.168.117.131 服务部署 docker-server 运行 regis

  • 阿里云部署Docker私有镜像仓库的实现步骤

    目录 一.访问阿里云容器镜像服务地址 二.选择实例 三.创建命名空间 四.创建镜像仓库 五.上传镜像 六.查看推送好的镜像 参考: 一.访问阿里云容器镜像服务地址 地址:https://cr.console.aliyun.com/cn-beijing/instances 提示开通->设置密码(为Docker仓库密码) 二.选择实例 三.创建命名空间 四.创建镜像仓库 五.上传镜像 选择对应的仓库 这里显示了具体的操作方法. # 登录 [root@node01 ~]# docker login -

  • 详解基于Harbor搭建Docker私有镜像仓库

    什么是 Harbor? 第一次使用这个的时候是刚进公司处理的第一个任务的时候,发现 Harbor 就是一个用于存储和分发 Docker 镜像的企业级Registry 服务器. 网上找到一个 Harbor 的架构图: Harbor 是 VMware 公司开源的企业级 DockerRegistry 项目,项目地址为 https://github.com/vmware/harbor.其目标是帮助用户迅速搭建一个企业级的 Docker registry 服务.它以 Docker 公司开源的 regist

  • Docker Registry搭建私有镜像仓库的实现方法

    微服务的镜像会上传到Docker仓库保存,常用的公网Docker仓库有阿里云,网易云等,在企业局域网也可以搭建自己的Docker私有仓库,本教程使用Docker提供的私有仓库registry. 1.拉取私有仓库镜像 docker pull registry 2.创建启动私有仓库容器 docker run -dit -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name docker-registry reg

  • docker使用registry搭建本地镜像仓库实例详解

    目录 一.系统环境 二.前言 三.使用registry搭建私有镜像仓库 3.1 环境介绍 3.2 k8smaster节点配置镜像仓库 3.3 k8sworker1节点配置从私有仓库上传和拉取镜像 3.3.1 上传镜像到私有仓库 3.3.2 从私有仓库里拉取镜像 四.附录:删除私有仓库镜像的Python脚本 一.系统环境 服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_6

  • DockerHub 镜像仓库的使用详解

    之前我们使用的镜像都是从 DockerHub 公共仓库拉取的,我们也学习了如何制作自己的镜像,但是通过 tar 包的方式实现镜像的备份恢复迁移对于团队协作开发并不是特别友好,我们也可以将镜像推送至 DockerHub 仓库方便使用. 温馨提示:如果构建的镜像内携带了项目数据,建议还是使用私有仓库比较好. 注册账号 官网:https://hub.docker.com/ 登录账号 通过 docker login 命令输入账号密码登录 DockerHub. 推送镜像至仓库 为了方便测试,我们将 hel

随机推荐