harbor api v2.0
harbor api v2.0
- v2.0
v2.0
“harbor api v2.0”与原来区别较大,此处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
相关文章:
harbor api v2.0
harbor api v2.0 v2.0 v2.0 “harbor api v2.0”与原来区别较大,此处harbor也做了https。另外,通过接口拿到的数据也是只能默认1页10个,所以脚本根据实际情况一页页的抓取数据 脚本主要用于统计repo、image,以及所有镜像的tag数&…...
Vue 表单数据双向绑定 v-mode
每一个Vue项目,每一个系统,肯定涉及到表单的双向数据绑定问题,这一部分是 vue 的重中之重,不是因为知识点复杂,而是因为只要参与 vue 项目的开发,那么就必不可少。 单项绑定 :数据变࿰…...
tab切换组件,可横向自适应滑动
示例图: 注:需要引入Jquery <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.tabs-box {width: 100%;height: auto;}.tab-header-box {display: flex;overflow: hidden…...
设计模式---单例模式
目录 一、五种单例模式的实现方式 1.饿汉模式 2.饿汉枚举类型 3.懒汉式 4.双检锁懒汉式 5.内部类懒汉式 二、JDK 中单例的体现 一、五种单例模式的实现方式 1.饿汉模式 public class Singleton1 implements Serializable {private Singleton1() {if (INSTANCE ! null) {thro…...
HarmonyOS 应用开发之启动/停止本地PageAbility
启动本地PageAbility PageAbility相关的能力通过featureAbility提供,启动本地Ability通过featureAbility中的startAbility接口实现。 表1 featureAbility接口说明 接口名接口描述startAbility(parameter: StartAbilityParameter)启动Ability。startAbilityForRes…...
BaseDao封装增删改查
文章目录 什么是BaseDao操作代码增删改查询单个数据查询多个数据 总结 什么是BaseDao BaseDao是: 数据库里负责增加,删除,修改,查询 具体来说是一种接口代码,公共方法的接口类。 在dao层新建basedao,其他dao层接口继承basedao 相…...
Redis入门到实战-第十三弹
Redis入门到实战 Redis中JSON数据类型常见操作官网地址Redis概述JSON常见操作更新计划 Redis中JSON数据类型常见操作 完整命令参考官网 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://redis.io/Redis概述 Redis是…...
深度学习InputStreamReader类
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…...
2023年后端面试总结
备注:这篇文章是我在2023年年初在自己的网站上写的,最近在迁移技术文章,我感觉这个也是和咱程序员相关,所以今天就决定把它迁移过来。 .......................................................................分割线..........…...
axios实现前后端通信报错Unsupported Media
使用axios向SpringBoot的后端使用post请求发送数据,发现报错Unsupported Media,最终解决方案如下: 检查变量名字是否一样,即前端传给后端的json数据键名要与后端接收的对象的成员变量名字一致检查Content-Type,post请…...
网络套接字补充——TCP网络编程
六、TCP网络编程 6.1IP地址字符串和整数之间的转换接口 //字符串转整数接口 #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int inet_aton(const char *cp, struct in_addr *inp); int inet_pton(int af, const char *strptr, …...
Nginx-记
Nginx是一个高性能的web服务器和反向代理服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。 (1)更快 这表现在两个方面:一方面,在正常情况下&…...
JS面试题:call,apply,bind区别
1. 共同点 三者共同点都是改变函数内部this指向的方法 2. call用法 ini 复制代码 var a 2; var b 2; function func() { console.log(this.a, this.b) } let obj { a: 1, b: 1 } func.call(obj) func.call() 输出结果: 复制代码 1 1 2 2 解析࿱…...
Charles抓包配置代理手机连接
Charles下载地址: Charles_100519.zip官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供Charles_100519.zip最新版正式版官方版绿色版下载,Charles_100519.zip安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装https://www.123pan.com…...
NA555、NE555、SA555和SE555系列精密定时器
这份文件是关于德州仪器(Texas Instruments)生产的NA555、NE555、SA555和SE555系列精密定时器(Precision Timers)的数据手册。以下是该文件的核心内容概述: 产品特性: 德州仪器的NA555、NE555、SA555和SE55…...
黑马鸿蒙笔记2
1.图片设置: 1 加载网络图片,申请权限。 申请权限:entry - src - resources - module.json5 2 加载本地图片 ,两种加载方式 API 鼠标悬停在Image, 点击show in API Reference interpolation:看起来更加清晰 resou…...
微信小程序uniapp+vue3+ts+pinia的环境搭建
一.创建uniapp项目 通过vue-cli创建 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project二.安装依赖: 1.pnpm i 2.运行项目: 将package.json的 "dev:mp-weixin": "uni -p mp-weixin",改为 "serve": "u…...
MongoDB聚合运算符:$let
文章目录 MongoDB聚合运算符:$let语法使用举例 MongoDB聚合运算符:$let $let聚合运算符绑定用于表示计算的变量,并返回表达式的结果。 语法 {$let:{vars: { <var1>: <expression>, ... },in: <expression>} }vars 用于在…...
HarmonyOS像素转换-如何使用像素单位设置组件的尺寸。
1 卡片介绍 基于像素单位,展示了像素单位的基本知识与像素转换API的使用。 2 标题 像素转换(ArkTS) 3 介绍 本篇Codelab介绍像素单位的基本知识与像素单位转换API的使用。通过像素转换案例,向开发者讲解了如何使用像素单位设…...
【前端面试3+1】05v-if和v-show的区别、v-if和v-for能同时使用吗、Vuex是什么?【合并两个有序链表】
一、v-if和v-show的区别 v-if 和 v-show 是 Vue.js 中用来控制元素显示与隐藏的指令。 1.v-if: v-if 是根据表达式的真假值来决定是否渲染元素。当表达式为真时,元素会被渲染到 DOM 中;当表达式为假时,元素不会被渲染到 DOM 中。每…...
【网络】Wireshark实战:TCP连接异常之RST报文深度解析
1. 认识TCP的RST报文:网络世界的紧急刹车 第一次在Wireshark里看到RST标志位时,我正盯着满屏的TCP握手包发呆。那个鲜红的[RST, ACK]就像交通信号灯突然变红,让原本流畅的数据传输戛然而止。简单来说,RST(Reset&#x…...
TypeScript——tsconfig.json
tsconfig.json1、使用配置文件1.1、自动搜索配置文件1.2、指定配置文件2、编译选项列表3、编译文件列表3.1、--listFiles编译选项3.2、 默认编译文件列表3.3、files属性3.4、include属性3.5、 exclude属性4、声明文件列表4.1、--typeRoots编译选项4.2、--types编译选项5、继承…...
Vivado项目文件太多分不清?这份FPGA开发必备的“文件后缀速查手册”请收好
Vivado项目文件管理实战指南:从混乱到有序的FPGA开发进阶 每次打开Vivado项目文件夹,看到满屏的.bat、.dcp、.xci文件是不是感觉像走进了一个迷宫?作为FPGA开发者,我们经常需要在这些看似杂乱的文件海洋中寻找特定的配置或输出结果…...
智能客服原型开发:OpenClaw+Qwen3-32B搭建对话系统
智能客服原型开发:OpenClawQwen3-32B搭建对话系统 1. 为什么选择这个技术栈? 去年我接手了一个智能客服系统的预研项目,客户要求两周内交付可演示的原型。传统方案需要前后端开发、对话引擎集成、工单系统对接,时间根本不够。最…...
Windows Cleaner:智能存储管理解决方案让C盘空间释放效率提升60%
Windows Cleaner:智能存储管理解决方案让C盘空间释放效率提升60% 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 当系统频繁弹出"磁盘空间不足&q…...
从Markdown到清晰语音:我是如何用ttsfrd + CosyVoice模型搞定技术文档朗读的
从Markdown到清晰语音:技术文档朗读的工程化实践 每天早上七点,我都要挤进这座城市最拥挤的地铁线。作为开发者,通勤时间曾是知识更新的黑洞——直到我发现将技术文档转为语音的解决方案。这不仅改变了我的学习方式,更为视障程序员…...
5分钟搞定!用PySide2+Python快速搭建串口助手(附完整源码)
5分钟搞定!用PySide2Python快速搭建串口助手(附完整源码) 1. 为什么选择PySide2开发串口工具? 在嵌入式开发和物联网项目中,串口调试工具就像工程师的"瑞士军刀"。传统方案如C/QT开发周期长,而Py…...
Windows持久化核心战术:系统服务植入实战教程
前言技术背景:在网络攻击的生命周期(Cyber Kill Chain)中,持久化(Persistence) 是攻击者在失陷主机上维持长期访问权限的关键阶段。在众多持久化技术中,将恶意程序注册为系统服务(Sy…...
Exo分布式AI集群架构深度解析:多节点选举与容错机制实现原理
Exo分布式AI集群架构深度解析:多节点选举与容错机制实现原理 【免费下载链接】exo Run your own AI cluster at home with everyday devices 📱💻 🖥️⌚ 项目地址: https://gitcode.com/GitHub_Trending/exo8/exo Exo是一…...
Ubuntu22.04桌面版root登录避坑指南:从密码设置到SSH远程连接完整流程
Ubuntu 22.04桌面版root权限全流程实战:从密码安全到SSH调优 刚接触Ubuntu桌面环境时,很多开发者会遇到这样的困境:图形界面操作需要频繁输入sudo密码,而某些系统级配置又必须使用root账户。本文将带你用工程师思维解决这个痛点&a…...
