Harbor 间通过API实现镜像复制

news2025/6/19 8:30:47

背景:

通过harbor搭建私有镜像仓库时,往往会设计出 研发镜像仓库--》测试镜像仓库--》产品镜像仓库,甚至更多。那个多镜像间的复制将成了一个必须解决的问题。当然可以通过harbor自带的界面操作即可实现需求,也可以通过harbor提供的API来实现。本文将针对通过jenkins来实现不同harbor间的镜像复制。

材料:

Harbor 镜像仓库A,Harbor镜像仓库B,jenkins(可选)

实现:

1、贴脚本:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import requests
import json
import argparse
import re

# 构造函数传参
parser = argparse.ArgumentParser()
parser.add_argument('--url',type=str,default='http://harbor.com:9090')
parser.add_argument('--user',type=str,default='admin')
parser.add_argument('--pwd',type=str,default='Harbor12345')
parser.add_argument('--taskname',type=str,default='')

#获取harbor登录token
def get_user_token(url):

  user_agent = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36'  

  headers = {"Content-Type":"application/json","Cookie":"sid=a2f1c8cffed832cb42e0d718b6339acb","user-agent":user_agent}

  response = requests.get(url+"/c/log_out", headers = headers)

  cookiejar = response.cookies

  cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
  #获得请求结果中的headers信息
  headers = response.headers
  #获得请求结果中的token
  csrf_token = headers.get('X-Harbor-Csrf-Token')
  #X-Request-Id
  requestId = headers.get('X-Request-Id')
  # 获得csrf
  csrf = cookiedict.get("_gorilla_csrf")
  #整合headers
  headers = {"Cookie":"_gorilla_csrf="+csrf,"X-Harbor-Csrf-Token":csrf_token,"Content-Type":"application/json;charset=UTF-8","user-agent":user_agent}
  #print headers
  return headers;

# 初始化用户登录信息
def login_init_user_tokken(url,username,password):
  headers = get_user_token(url)
  params = {"principal":username,"password":password}
  response = requests.post(url+"/c/login", headers = headers,params = params)
  cookiejar = response.cookies
  cookiedict = requests.utils.dict_from_cookiejar(cookiejar)
  sid = cookiedict.get("sid")
  new_headers = {"Cookie":headers['Cookie']+";sid="+sid,"X-Harbor-Csrf-Token":headers['X-Harbor-Csrf-Token'],"Content-Type":"application/json;charset=UTF-8","user-agent":headers['user-agent']}
  return new_headers

# 执行指定的Harbor任务
def run_copy_task_list(url,headers,taskid):
  #初始化登录
  datas= {"policy_id": taskid}
  response = requests.post(url+"/api/v2.0/replication/executions",json = datas,headers=headers)
  returnstr = json.dumps(response.text)
  return response.status_code


#获取Harbor任务复制列表
def get_copy_task_list(url,username,password,taskname):
  #初始化登录
  headers = login_init_user_tokken(url,username,password)
  #print headers1
  response = requests.get(url+"/api/v2.0/replication/policies?page=1&page_size=10&name="+taskname,headers=headers)
  returndata = response.json()
  sid =returndata[0].get("id")
  print run_copy_task_list(url,headers,int(sid))

# main
def main():
  args = parser.parse_args()

  print get_copy_task_list(str(args.url),str(args.user),str(args.pwd),str(args.taskname))

main()

2、调用脚本:python replicatesManager.py --taskname="你的镜像复制任务名" --url="你的镜像地址" --user="admin" --pwd="Harbor12345" 。注:可通过脚本中默认值来减少调用时变量。

3、解说:harbor API的调用官方提供了2中方式进行鉴权,本脚本采用了其中第二种。鉴权思路:a、通过log_out 接口获得Cookie,X-Harbor-Csrf-Token 这2个变量。

 b、通过login接口获得对应授权后的SID(调用该接口需要在请求头添加cookie,X-Harbor-Csrf-Token)

c、通过/api/v2.0/replication/executions 来实现镜像的复制(需要在Header 头中添加Cookie,X-Harbor-Csrf-Token,要强调的是此时的Cookie需要在原有值的后面添加上登录返回的sid否则授权不能成功)

 d、任何Harbor 的API都可以参考c项来实现调用

Jenkins 中调用:

1、在gitlab 中新增一个项目并将如上脚本添加到其中。

1、jenkins中创建任务并通过shell 来执行脚本即可

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解20个常见的模拟电路

桥式整流电路 二极管的单向导电性:二极管的PN结加正向电压,处于导通状态;加反向电压,处于截止状态。其伏安特性曲线,如下图。 理想开关模型和恒压降模型:理想模型指的是在二极管正向偏置时,其管…

乳腺癌预测的黑科技!一起探索 R 语言和随机森林算法的奇妙之处!

一、引言 乳腺癌是全球最常见的女性恶性肿瘤之一,也是导致女性死亡的主要原因之一。根据世界卫生组织的数据,每年有约200万例乳腺癌新病例的发生,导致60多万人死亡。乳腺癌的早期发现和精准治疗对于患者的生存率和预后至关重要。 然而&…

uniapp封装门票等票务样式

先看效果图 ticketpage组件引用后,根据父级背景颜色改变镂空的颜色,空组件只有中间镂空的样式,上面是插槽heaer,下面内容是插槽content,可以自定义自己的内容和样式。我实现的最终效果是用的uview组件,如果复现需要项目引入。可…

pytorch量化库使用(2)

FX Graph Mode量化模式 训练后量化有多种量化类型(仅权重、动态和静态),配置通过qconfig_mapping ( prepare_fx函数的参数)完成。 FXPTQ API 示例: import torch from torch.ao.quantization import (ge…

ACL2023 | 赔了?引入GPT-3大模型到智能客服,竟要赔钱?

作者 | 小戏、Python 关于大模型的商业落地,一个非常容易想到的场景就是智能客服,作为不止是大模型也是 NLP 领域的一个最主要的应用场景,由于人工客服的高昂成本,AI 客服伴随着模型技术的发展也逐步走进我们的生活,在…

vue iview table Tooltip内容过多闪屏解决

vue的项目,框架是iview 客户反应,指令描述的内容有几百个字,鼠标悬浮,浏览器开始闪烁 解决思路是加宽度限制,滚动, 后面发现像是transfer属性的bug,触碰浏览器底部,距离不够造成 …

重新理解 RocketMQ Commit Log 存储协议

最近突然感觉:很多软件、硬件在设计上是有 root reason 的,不是 by desgin 如此,而是解决了那时、那个场景的那个需求。一旦了解后,就会感觉在和设计者对话,了解他们的思路,学习他们的方法,思维…

C#可视化 国产热剧信息查询(具体做法及全部代码)

目录 题目: 做法: 代码部分: DBHelper类 From1主窗体代码 题目: 1. 首次打开页面,展示所有汽车信息列表,如图 1 所示。 2.双击第二行右边内容全部发生改变 数据库设计及内容 做法: 首先设置d…

React hooks文档笔记(五)useEffect——解决异步操作竞争问题

1.开发环境下组件加载两次? 非bug,重新安装组件仅在开发过程中发生,帮助找到需要清理的效果。在生产环境中只会加载一次。 React 将在 Effect 下次运行之前以及卸载期间调用您的清理函数。return () > {}; 2. 🌰订阅事件情况…

Python连接MySQL数据库(简单便捷)

🐒,本文中,使用到的工具有:Pycharm,Anaconda,MySQL 5.5,spyder(Anaconda) 什么是 PyMySQL? PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2 中则…

Java 语言基础练习题

Java 语言基础练习题 Key Point ●包的基本语法 ●Java 语言中的标识符,命名规范 ●八种基本类型 ●基本操作符 ●if 语句和switch 语句 练习 1.(标识符命名)下面几个变量中,那些是对的?那些是错的?错的请…

C++学习 程序控制结构

程序控制结构 以某种顺序执行的一系列动作,用于解决某个问题。包括 顺序结构、选择结构、循环结构。 顺序结构 按照顺序正常执行。前几篇文章的代码都是顺序结构的体现。 选择结构 执行满足条件的语句。 if 结构:if (表达式){} 表达式为真则执行&…

Linux历史及环境搭建(VMware搭建CentOS7环境)

Linux历史及环境搭建 1.Linux历史1.1 UNIX发展的历史1.2 Linux发展历史1.2.1 开源1.2.2 官网1.2.3 发行版本 2.VMware配置CentOS7环境2.1 CentOS下载2.2 配置环境2.3 切换国内阿里源2.4 无图形化界面开机 结语 1.Linux历史 在这里简要介绍Linux的发展史。要说 Linux&#xff0…

机器学习李宏毅学习笔记36

文章目录 前言Meta learning应用总结 前言 Meta learning(二)应用方向 Meta learning应用 回顾gradient descen Θ0(initial的参数)是可以训练的,一个好的初始化参数和普通的是有很大差距的。可以通过一些训练的任务…

Python通过私信消息提取博主的赠书活动地址

文章目录 前言背景设计开发1.引入模块2.获取私信内容3.根据文本提取url的方法4.获取包含‘书’的url5.程序入口 效果总结最后 前言 博主空空star主页空空star的主页 大家好,我是空空star,本篇给大家分享一下《通过私信消息提取博主的赠书活动地址》。 背…

通用策略04丨ORB魔改框架+自适应动量过滤模板

量化策略开发,高质量社群,交易思路分享等相关内容 大家好,今天我们分享2023年度第4期通用策略——ORB魔改框架自适应动量过滤模板。 本期策略是2023年通用系列第4篇。本期主要内容有对ORB原版的逻辑魔改,其次我们将跨日周期均线过…

现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?

停机迁移方案 最 low 的方案,就是很简单,大家伙儿凌晨 12 点开始运维,网站或者 app 挂 个公告,说 0 点到早上 6 点进行运维,无法访问。 接着到 0 点停机,系统停掉,没有流量写入了,…

设计一个高流量高并发的系统需要关注哪些点

1、设计原则 1.1、系统设计原则 在设计一个系统之前,我们先要有一个统一且清晰的认知:不要想着一下就能设计出完美的系统,好的系统是迭代出来的。不要复杂化,要先解决核心问题。但是要有先行的规划,对现有的问题有方…

字符与代表数据的转化

目的 在与设备交互当中,大都以十六进制的数进行交互。 而显示给用户时,是以字符的形式显示。 这中间就需要字符与其所代表的数值的转化,比如: ‘0F’---->0x0F 这怎么实现呢,一个是字符,另一个是数字&a…

Apache seatunnel集群部署

跳转到安装目录 cd /opt/soft/seatunnel 1.设置环境变量 export SEATUNNEL_HOME/opt/soft/seatunnel export PATH$PATH:$SEATUNNEL_HOME/bin 启动服务端 ./bin/seatunnel-cluster.sh -d 启动客户端 ./bin/seatunnel.sh --config ./config/kafka2gbase_udf.conf 这样就启…