# -*- 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)