網站首頁 編程語言 正文
最近的工作中,需要批量處理harbor中的一些鏡像,其中關鍵的一步就是獲取harbor中全部鏡像的帶tag的清單。我在網上找了許久,沒有找到可用的。
最后我自己寫了一個java方法,成功實現了這一需求。
本文測試的harbor的版本是V2.3.3。
下列代碼中,使用了一個叫HttpUtils.sendGet的方法。這是我自己實現的一個HTTP請求工具。其代碼參見:Java原生HttpClient使用示例。
public void getImages(String harborHost, String cookieStr) throws Exception { HttpResponsecatalogResp = HttpUtils.sendGet(harborHost + "/v2/_catalog", cookieStr); List strings = JSONObject.parseObject(catalogResp.body()).getJSONArray("repositories").toJavaList(String.class); HashMap > result = new HashMap<>(); for (String image : strings) { ArrayList tagList = new ArrayList<>(); String[] split = image.split("/"); String repositoryName = split[0]; String imageName = split[1]; String urlForImageInfo = harborHost + "/api/v2.0/projects/" + repositoryName + "/repositories/" + imageName; HttpResponse infoResp = HttpUtils.sendGet(urlForImageInfo, cookieStr); Integer artifactCount = JSONObject.parseObject(infoResp.body()).getInteger("artifact_count"); int pageNum = artifactCount / 15; pageNum = pageNum * 15 >= artifactCount ? pageNum : pageNum + 1; for (int i = 1; i <= pageNum; i++) { String urlForTags = urlForImageInfo + "/artifacts?with_tag=true&with_scan_overview=true&with_label=true&page_size=15&page=" + i; HttpResponse tagsResp = HttpUtils.sendGet(urlForTags, cookieStr); JSONArray tagArray = JSONObject.parseArray(tagsResp.body()); for (int j = 0; j < tagArray.size(); j++) { String tagsStr = tagArray.getJSONObject(j).getString("tags"); if (!StrUtils.isEmpty(tagsStr)) { JSONArray tags = tagArray.getJSONObject(j).getJSONArray("tags"); for (int k = 0; k < tags.size(); k++) { tagList.add(tags.getJSONObject(k).getString("name")); } } } } result.put(image, tagList); } for (String key : result.keySet()) { for (String t : result.get(key)) { System.out.println(key + ":" + t); } } }
此方法需要傳入兩個參數。第一個是:harborHost為harbor的URL的字符串,比如:https://harbor.wja.cn
第二個也是一個字符串,需要手動登錄harbor頁面,在首頁中,按F12,彈出開發工具,然后刷新頁面,第一個請求的cookie的值就所需的字符串,如下圖所示:
測試結果如下:
原文鏈接:https://tomcat.blog.csdn.net/article/details/123833300
相關推薦
- 2022-05-20 Modscan和Modsim 兩種Modbus調試工具使用說明
- 2022-09-01 PgSQL條件語句與循環語句示例代碼詳解_PostgreSQL
- 2022-09-04 Python推導式數據處理方式_python
- 2022-08-26 Python實現雙向RNN與堆疊的雙向RNN的示例代碼_python
- 2022-02-09 Linux驅動之platform總線詳解_Linux
- 2022-11-07 react-native?實現漸變色背景過程_React
- 2022-04-09 MFC模擬實現自定義消息發送_C 語言
- 2022-05-06 Matplotlib安裝與配置
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支