harbor自动删除没有使用的pod镜像(更新)

8 篇文章 0 订阅

需求:我需要每天删除没有使用的harbor镜像,就需要判断所有的pod使用的那些镜像,然后把没有使用的删除掉。

harbor 版本v2.4.3-85ef1409

import requests
import base64
from loguru import logger
logger.add("harbro_del.log", rotation="100 MB")
import subprocess

cangku = "dataoke-test"
xiangmu = []
xianshi = 25
Page = 1

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36"
}


def Shell_cmd(dev):
    xhel = """kubectl get pod -o=jsonpath='{range .items[*]}{range .spec.containers[*]}{.image}{\"\\n\"}{end}'"""
    shell_c = f"{xhel} -n {dev}"
    Cmd_run = subprocess.run(shell_c, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.decode(
        "utf-8")
    data_list = Cmd_run.splitlines()
    return data_list




pingjie_id = []


no_del_id = []

ID_list = {}
timct_taim = []

def ijit(xiangmu,id):
    url = f"https://test.com/api/v2.0/projects/dataoke-test/repositories/{xiangmu}/artifacts/{id}/tags?with_signature=true&with_immutable_status=true&page_size=8&page=1"

    payload={}
    headers = {
      'Accept': 'application/json, text/plain, */*',
      'Accept-Language': 'zh-CN,zh;q=0.9',
      'Pragma': 'no-cache',
      'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36'
    }

    response = requests.request("GET", url, headers=headers, data=payload)

    tag = response.json()[0]["name"]
    mess = xiangmu + ":" + tag + "---"+f"{id}"
    pingjie_id.append(mess)





def  xiangmu1():
    for i in range(10):
        url = "https://test.com/api/v2.0/projects/dataoke-test/repositories?page_size=100&page={}".format(i)
        response = requests.get(url, headers=headers)
        dat_sdfji = response.json()
        if len(dat_sdfji) == 0:
            break
        for i in dat_sdfji:
            sss= i["name"]
            oksdf = sss.split('/')
            xiangmu.append(oksdf[1])




def login():
    headers = {"Content-Type": "application/json;charset=UTF-8"}
    """获取token"""
    data = {"principal": "admin",
            "password": "123456"
            }
    url = "https://test.com/c/login"

    r = requests.post(url=url, json=data, headers=headers)
    # 将获取到的token返回
    return r.headers["X-Harbor-Csrf-Token"]



def delete_image(del_xiangmu, del_id):
    username = "admin"
    password = "123546"
    user_info_str = username + ":" + password
    user_info = base64.b64encode(user_info_str.encode())
    header_info = {
        "Authorization" : "Basic " + user_info.decode(),
        "X-Harbor-CSRF-Token": login()
    }
    #
    url = "https://test.com/api/v2.0/projects/dataoke-test/repositories/{}/artifacts/{}".format(del_xiangmu,del_id)

    r = requests.delete(url=url,  headers=header_info)
    print(r.status_code)
    print(url)
    if r.status_code == 200:
        logger.debug("{}-{}删除成功".format(del_xiangmu, del_id))


k8s_image_dev1 = Shell_cmd("dev1")
k8s_image_test1 = Shell_cmd("test1")
k8s_image_huise = Shell_cmd("huise")

k8s_clened = list(set(k8s_image_dev1).union(k8s_image_test1).union(k8s_image_huise))
k8s_image = [item.replace("test.com/dataoke-test/", "") for item in k8s_clened]



xiangmu1()

for oks in xiangmu:
    if oks == "php" or oks == "openresty" or  oks  == "alpine" or oks == "golang":
        print("daolewotuichule")
        continue
    Page +=1
    ID_key = []
    try:
       for i in  range(2,12):
        url = "https://test.com/api/v2.0/projects/{}/repositories/{}/artifacts?with_tag=false&with_scan_overview=true&with_label=true&page_size={}&page={}".format(
          cangku, xiangmu[Page], xianshi, i)
        print(url)
        response = requests.get(url, headers=headers)
        dat_sdfji = response.json()
        # print(dat_sdfji)
        if len(dat_sdfji) != 0:
          for i in dat_sdfji:
            # print(i["digest"])
            creat_time = i["extra_attrs"]["created"]
            timct_taim.append(creat_time)
            # ID_name_list.append(xiangmu[Page])
            ID_key.append(i["digest"])
            # print(ID_key)
            ID_name = xiangmu[Page]
            ID_list[ID_name]= ID_key
    except:
        print('11111')



for i in ID_list:
    for i2 in ID_list[i]:
        try:
            ijit(i, i2)
        except:
            logger.error(f"ijit is error {i,i2}")

for i in pingjie_id:
    sf = i.split("---")
    if sf[0] in k8s_image:
        no_del_id.append(sf[-1])


print(k8s_image,ID_list,pingjie_id,no_del_id)
for i in ID_list:
    for i2 in ID_list[i]:
        if i2 in no_del_id:
            continue
        else:
            delete_image(i, i2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值