harbor api v2.0

文章描述了一个使用bash脚本对HarborAPIv2.0进行操作的过程,包括获取仓库列表、镜像列表,统计tag数量,生成告警并清理过旧tag。脚本涉及的主要功能有数据抓取、格式转换和自动化告警处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

harbor api 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_path


function get_repos_list(){
  mkdir -p $PWD/reposList
  >$PWD/reposList/reposList.txt
  for i in `seq 1 8`;do
    repos_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.txt
  done
}
function get_images_list(){
  mkdir -p $PWD/imagesList
  rm -f $PWD/imagesList/*.txt
  for repo in $(cat $PWD/reposList/reposList.txt);do
	  for j in `seq 1 20`;do
		  images_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}.txt

	  done
  done
}
function conut_tags(){
  >images.txt
  for k in `seq 1 100`;do
    htmlinfo=$(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.txt
  done
  sed -i 's/"//g' images.txt
}

function change_images_txt(){
  >images1.txt
  num=0
  for i in `cat $1`;do
	let num++    #;echo $num
	if [ $((num%2)) -eq 1 ];then
		IMG=$i
	else
		CNT=$i
		echo "$IMG $CNT" >>images1.txt
	fi
  done
  cat images1.txt |sort |awk '{print $2,$1}' > images2.txt
}
function alert(){
    METRIC=$1
    LINE=`cat $METRIC|wc -l`
    if [ $LINE -gt 0 ];then
	MSG=""
	while read line;do
	    MSG="$MSG\n$line"
	done < $METRIC
	#echo -e $MSG
	#MSG=234567890
	CMD="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 文档与使用 Harbor 提供了一套 RESTful 风格的 API 接口用于管理仓库、项目和其他资源。这些接口允许用户通过编程方式访问和操作 Harbor 中的数据。 #### 获取 API 访问令牌 为了安全起见,在调用大多数 HarborAPI 之前,需要先获取一个有效的访问令牌 (token)。可以通过 POST 请求 `/api/v2.0/users/login` 来获得 token: ```bash curl -X 'POST' \ 'https://<harbor_host>/api/v2.0/users/login' \ -H 'accept: application/json' \ -d '{"principal": "<username>", "password": "<password>"}' ``` 成功登录后会返回包含 `jwt` 字段的对象,该字段即为所需的访问令牌[^1]。 #### 查询项目列表 要检索当前 Harbor 实例中的所有项目,可以发送 GET 请求到 `/api/v2.0/projects`: ```bash curl --location --request GET 'https://<harbor_host>/api/v2.0/projects' \ --header 'Authorization: Bearer <your_jwt_token>' ``` 此命令将会列出所有的公开以及私有项目信息[^2]。 #### 创建新项目 如果想要创建一个新的项目,则需向 `/api/v2.0/projects` 发送带有适当负载数据的 POST 请求: ```json { "project_name":"new_project", "metadata":{ "public":"false" } } ``` 完整的请求示例如下所示: ```bash curl --location --request POST 'https://<harbor_host>/api/v2.0/projects' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <your_jwt_token>' \ --data-raw '{ "project_name":"new_project", "metadata":{ "public":"false" } }' ``` 这将在 Harbor 上建立名为 `new_project` 的私人存储库[^3]。 #### 删除指定项目 当不再需要某个特定项目时,可通过 DELETE 方法删除它。注意这一动作不可逆,请谨慎执行! ```bash curl --location --request DELETE 'https://<harbor_host>/api/v2.0/projects/<project_id_or_name>' \ --header 'Authorization: Bearer <your_jwt_token>' ``` 上述命令将移除 ID 或名称匹配的目标项目及其关联的所有镜像和标签[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值