harbor api v2.0

harbor api v2.0

  • v2.0

v2.0

“harbor api v2.0”与v1区别较大,此处harbor也做了https。另外,通过接口拿到的数据也是只能默认1页10个,所以脚本根据实际情况一页页的循环抓取数据
脚本主要用于统计repo(仓库)、image,以及所有镜像的tag数,函数change_images_txt用于调整格式,函数alert将tag数大于30的告警出来,最后登录harbor,将告警的镜像中较老的tag手动清理掉(当然也可以通过如下接口拿到所有镜像的tag,根据时间来排序,将较老的部分通过接口自动删除,但是“reference”这个参数获取比较复杂,暂未采用这种方式)
在这里插入图片描述

#!/bin/bash
HARBOR_URL=harbor.example.com
HARBOR_USER=admin
HARBOR_PASSWD=Harbor12345
#OLD_VERSION_NUM=30
script_path=$(dirname $0)
cd $script_pathfunction get_repos_list(){mkdir -p $PWD/reposList>$PWD/reposList/reposList.txtfor i in `seq 1 8`;dorepos_list=$(curl -s -k -u ${HARBOR_USER}:${HARBOR_PASSWD} https://${HARBOR_URL}/api/v2.0/projects?page=$i)echo "${repos_list}" | jq '.[]' | jq -r '.name' >> $PWD/reposList/reposList.txtdone
}
function get_images_list(){mkdir -p $PWD/imagesListrm -f $PWD/imagesList/*.txtfor repo in $(cat $PWD/reposList/reposList.txt);dofor j in `seq 1 20`;doimages_list=$(curl -s -k -u ${HARBOR_USER}:${HARBOR_PASSWD} https://${HARBOR_URL}/api/v2.0/projects/$repo/repositories?page=$j)echo "${images_list}" | jq '.[]' | jq -r '.name' >> $PWD/imagesList/${repo}.txtdonedone
}
function conut_tags(){>images.txtfor k in `seq 1 100`;dohtmlinfo=$(curl -s -k -u ${HARBOR_USER}:${HARBOR_PASSWD} https://${HARBOR_URL}/api/v2.0/repositories?page=$k)echo $htmlinfo |jq '.[]|select(.artifact_count > 30)'|jq '.name, .artifact_count' >> images.txtdonesed -i 's/"//g' images.txt
}function change_images_txt(){>images1.txtnum=0for i in `cat $1`;dolet num++    #;echo $numif [ $((num%2)) -eq 1 ];thenIMG=$ielseCNT=$iecho "$IMG $CNT" >>images1.txtfidonecat images1.txt |sort |awk '{print $2,$1}' > images2.txt
}
function alert(){METRIC=$1LINE=`cat $METRIC|wc -l`if [ $LINE -gt 0 ];thenMSG=""while read line;doMSG="$MSG\n$line"done < $METRIC#echo -e $MSG#MSG=234567890CMD="curl -H \"Content-Type:application/json\" -X POST --data '{\"mobile\":\"13123456789\",\"message\":\"新镜像仓库镜像tag数>30$MSG\",\"priority\":\"2\",\"moserial\":\"1234567\"}' http://xxxxxxxxxxxxxxxx"#echo "$CMD"eval "$CMD"fi
}conut_tags
change_images_txt images.txt
alert images2.txt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/294539.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是智慧公厕?智慧城市下的智慧公厕有什么功能和特点?

随着科技的不断进步和城市化的加快发展&#xff0c;智慧城市已经成为我们生活中的一部分。而在智慧城市的建设中&#xff0c;智慧公厕作为城市基础设施的重要组成部分发挥着重要的作用。那么什么是智慧公厕&#xff1f;智慧公厕是针对公共厕所的日常使用、运行、管理、运营等过…

Python文件操作命令

文件操作 我知道你最近很累&#xff0c;是那种看不见的、身体上和精神上的疲惫感&#xff0c;但是请你一定要坚持下去。就算无人问津也好&#xff0c;技不如人也好&#xff0c;千万别让烦躁和焦虑毁了你的热情和定力。别贪心&#xff0c;我们不可能什么都有&#xff0c;也别灰心…

4月2日 qt密码生成小程序(可选择生成密码的格式),基于Python框架下的pyqt6

4月2日 密码生成小程序 代码展示&#xff1a; import stringfrom PyQt6.QtWidgets import (QApplication, QDialog,QMessageBox ) from untitled import Ui_PasswordGender import sys import string # py模块含有字符 import randomclass MyPasswordGenerate(Ui_Password…

【Vue3源码学习】— CH2.6 effect.ts:详解

effect.ts&#xff1a;详解 1. 理解activeEffect1.1 定义1.2 通过一个例子来说明这个过程a. 副作用函数的初始化b. 执行副作用函数前c. 访问state.countd. get拦截器中的track调用e. 修改state.count时的set拦截器f. trigger函数中的依赖重新执行 1.3 实战应用1.4 activeEffect…

Mysql数据备份与恢复实战

文章目录 备份类型备份内容备份工具mysqldump备份 实战案例&#xff1a;恢复误删除的表准备工作2:30完全备份完全备份后更新数据表10:00误删students表需要恢复还原的状态开始还原恢复 为什么要备份&#xff1f; 备份是为了&#xff1a;灾难恢复&#xff1a;硬件故障、软件故障…

Php_Code_challenge16

题目&#xff1a; 答案&#xff1a; 解析&#xff1a; 所以科学计数法绕过即可。

旅游管理系统|基于Springboot的旅游管理系统设计与实现(源码+数据库+文档)

旅游管理系统目录 目录 基于Springboot的旅游管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户管理 2、景点分类管理 3、景点信息管理 4、酒店信息管理 5、景点信息 6、游记分享管理 四、数据库设计 1、实体ER图 2、具体的表设计如下所示&#xf…

ZKFair 创新之旅,新阶段如何塑造财富前景

在当前区块链技术的发展中&#xff0c;Layer 2&#xff08;L2&#xff09;解决方案已成为提高区块链扩容性、降低交易成本和提升交易速度的关键技术&#xff0c;但它仍面临一些关键问题和挑战&#xff0c;例如用户体验的改进、跨链互操作性、安全性以及去中心化程度。在这些背景…

Python控制安卓模拟器——uiautomator2模块

Python控制安卓模拟器——uiautomator2模块 目录 Python控制安卓模拟器——uiautomator2模块介绍【1】安装 python【2】安装 adb1]下载[adb:[2]配置环境变量 【3】安装uiautomator2【4】连接设备(安卓模拟器)【5】u2指令控制设备常用指令 【6】安装weditor【7】元素操作元素属性…

小白的第一次sql注入实战

前言 当时最初接触安全的时候拿下的第一个shell&#xff0c;还是比较兴奋的&#xff0c;忽略一下文章写的很水。 有id尝试sql注入 找这种sql注入的站用sql检索就行了&#xff0c;但是最好挂代理用谷歌搜索&#xff0c;百度的话搜sql注入的很多被别人打过了&#xff0c;导致链…

钉钉服务端API报错 43008 参数需要multipart类型

钉钉服务端API报错 43008 参数需要multipart类型 problem 使用媒体文件上传接口&#xff0c;按照文档输入参数&#xff0c;结果返回报错 # 参数 {"access_token": "xxx""type": "image","media": "/Users/xxx/xxx/s…

hcia datacom课程学习(5):MAC地址与arp协议

1.MAC地址 1.1 含义与作用 &#xff08;1&#xff09;含义&#xff1a; mac地址也称物理地址&#xff0c;是网卡设备在数据链路层的地址&#xff0c;全世界每一块网卡的mac地址都是唯一的&#xff0c;出厂时烧录在网卡上不可更改 &#xff08;2&#xff09;作用&#xff1a…

constexpr与std::is_same_v碰撞会产生什么火花?

1. 只编译会用到的if分支 示例代码一中&#xff0c;checkType_v1和checkType_v2两个函数的区别就是if的条件里一个加了constexpr一个没加&#xff0c;加与不加从结果来看都一样&#xff0c;那在编译时和运行时各有什么区别呢&#xff1f; 示例代码一&#xff0c;test_01.cpp&…

Linux之实现Apache服务器监控、数据库定时备份及通过使用Shell脚本发送邮件

目录 一、Apache服务器监控 为什么要用到服务监控&#xff1f; 实现Apache服务器监控 二、数据库备份 为什么要用到数据库备份&#xff1f; 实现数据库备份 三、Shell脚本发送邮件 为什么要用使用Shell脚本发送邮件&#xff1f; 实现Shell脚本发送邮件 一、Apache服务器…

大模型日报20240401

大模型实时打《街霸》捉对PK&#xff0c;GPT-4居然不敌3.5&#xff0c;新型Benchmark火了 链接&#xff1a;https://news.miracleplus.com/share_link/22340 让大模型直接操纵格斗游戏《街霸》里的角色&#xff0c;捉对PK&#xff0c;谁更能打&#xff1f;GitHub上一种你没有见…

Windows下配置及使用Git+rsync构建文件同步工具

背景(了解)&#xff1a; 公司的前端项目里有bash脚本&#xff0c;开发人员在开发完&#xff0c;可以跑bash脚本自动发布部署到测试环境。但是windows是没办法直接跑bash脚本的&#xff0c;最便捷的做法就是借用git bash这个终端来跑项目里的bash脚本。但是windows的源里并没有…

conda使用记录

linux 使用conda创建新一个新的python环境过程 conda create -n recommendation_env python3.8.18 # 指定python版本 conda env list # 查看所有的环境 conda activate recommendation_env # 激活创建的新环境 pip install flask # 安装依赖 或者 pip install flask版本号 或者…

Python+requests+Pytest+logging+allure+pymysql框架详解

一、框架目录结构 1&#xff09;tools目录用来放公共方法存储&#xff0c;如发送接口以及读取测试数据的方法&#xff0c;响应断言 数据库断言 前置sql等方法&#xff1b;2&#xff09;datas目录用例存储接口用例的测试数据&#xff0c;我是用excel来存储的数据&#xff0c;文…

简单说清楚什么是SQL Injection?

最近看完了《The Pragmatic Programmer: 20th Anniversary Edition, 2nd Edition: Your Journey to Mastery》&#xff0c;在第7章&#xff1a;While You Are Coding的footnotes中&#xff0c;提到了一幅漫画&#xff1a; 这不仅用简单的方式说清楚了什么是SQL Injection&#…

顶顶通呼叫中心中间件-声音编码自适应配置方法(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-声音编码自适应配置方法讲解(mod_cti基于FreeSWITCH) 声音编码自适应介绍 声音编码自适应&#xff0c;通常在语音通信和音频处理领域中指的是一种能够根据信号特性和传输环境自动调整编码参数的技术。其目的是在不同的网络状况和音质要求下&#xff0c;…