日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

教你如何獲取Harbor的帶tag的鏡像清單_docker

作者:農民工老王 ? 更新時間: 2022-06-10 編程語言

最近的工作中,需要批量處理harbor中的一些鏡像,其中關鍵的一步就是獲取harbor中全部鏡像的帶tag的清單。我在網上找了許久,沒有找到可用的。

最后我自己寫了一個java方法,成功實現了這一需求。

本文測試的harbor的版本是V2.3.3。

下列代碼中,使用了一個叫HttpUtils.sendGet的方法。這是我自己實現的一個HTTP請求工具。其代碼參見:Java原生HttpClient使用示例。

public void getImages(String harborHost, String cookieStr) throws Exception {
    HttpResponse catalogResp = 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

欄目分類
最近更新