从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件
  • 首页
  • 运维
  • docker harbor_2.0_获取项目以及镜像号

docker harbor_2.0_获取项目以及镜像号

发布:蔺要红01-24分类: 运维

# -*- coding: UTF-8 -*-
# author: yaohong.lin
# data: 2022年1月17日

import requests
from requests.auth import HTTPBasicAuth


class HarborApi:
    def __init__(self):
        self.username = "xxxxx"
        self.password = "xxxxx"
        self.harbor_domain = "xxxx.xxxx.com"
        self.harbor_api_url = "http://xxxx.xxxxx.com" + '/api/v2.0'
        self.harbor_project_url = self.harbor_api_url + '/projects'
        self.auth = HTTPBasicAuth(self.username, self.password)

    def fetch_project_name(self):
        """
        获取所有项目
        return: list
        """
        pj_list = []
        req_url = self.harbor_api_url + '/projects'
        req = requests.get(req_url, auth=self.auth)
        if req.status_code == 200:
            for i in req.json():
                pj_list.append(i['name'])
            return pj_list

    def fetch_repository_name(self, pj_name):
        """
        根据项目名称获取项目下的所有镜像仓库
        return: list
        """
        repos_name_list = []
        req_url = self.harbor_api_url + "/projects/" + pj_name + "/repositories"
        req = requests.get(req_url, auth=self.auth)
        if req.status_code == 200:
            for repo in req.json():
                # 官方API的说明里有,要先去除repo里包含的project名称,再使用%252F代替repo里的/
                repo_name = '%252F'.join(repo['name'].split('/')[1:])
                repos_name_list.append(repo_name)
            return repos_name_list

    # 根据project name和repository name,获取这个repo下所有tag。如果只要tag,从artifacts这个ep里就行。
    def fetch_repos_tags(self, pj_name, repo_name):
        full_tags_url_list = []
        req_url = self.harbor_api_url + "/projects/" + pj_name + "/repositories/" + repo_name + "/artifacts"
        req = requests.get(req_url, auth=self.auth)
        for item in req.json():
            for i in item['tags']:
                tags_mame = i['name']
                full_tags_url = self.harbor_domain + "/" + repo_name + ":" + tags_mame
                full_tags_url_list.append(full_tags_url)
        return full_tags_url_list


hb = HarborApi()

project_name_list = hb.fetch_project_name()
for i in project_name_list:
    print(i)
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站