一、接口测试命令

api接口文档:https://github.com/goharbor/harbor/blob/release-1.7.0/docs/swagger.yaml

登录接口测试

curl  --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/users/current"

1)查看所属项目的信息。根据项目 id 查找

备注:{project_id} 为项目 id
curl -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/projects/{project_id}" curl -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/projects/1"

项目id的查看方式:https://192.168.44.10/harbor/projects/1/repositories

实际操作中

[root@harbar-master ~]# curl  -u  "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/projects/1"
curl: () Unable to communicate securely with peer: requested domain name does not match the server's certificate.
[root@harbar-master ~]# curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/projects/1"
{
"project_id": ,
"owner_id": ,
"name": "library",
"creation_time": "2019-11-24T14:58:43.684818Z",
"update_time": "2019-11-24T14:58:43.684818Z",
"deleted": false,
"owner_name": "",
"togglable": true,
"current_user_role_id": ,
"repo_count": ,
"chart_count": ,
"metadata": {
"public": "true"
}
}[root@harbar-master ~]#

--insecure  忽略不安全的证书

2)查找出所有的项目

[root@harbar-master ~]# curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/projects"
[
{
"project_id": ,
"owner_id": ,
"name": "library",
"creation_time": "2019-11-24T14:58:43.684818Z",
"update_time": "2019-11-24T14:58:43.684818Z",
"deleted": false,
"owner_name": "",
"togglable": true,
"current_user_role_id": ,
"repo_count": ,
"chart_count": ,
"metadata": {
"public": "true"
}
},
{
"project_id": ,
"owner_id": ,
"name": "codo",
"creation_time": "2019-11-28T16:30:19Z",
"update_time": "2019-11-28T16:30:19Z",
"deleted": false,
"owner_name": "",
"togglable": true,
"current_user_role_id": ,
"repo_count": ,
"chart_count": ,
"metadata": {
"public": "false"
}
}
][root@harbar-master ~]#

3)搜索 某个应用的 信息

[root@harbar-master ~]# curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/search?q=myapp"
{
"project": [],
"repository": [
{
"project_id": ,
"project_name": "library",
"project_public": true,
"pull_count": ,
"repository_name": "library/myapp",
"tags_count":
}
],
"Chart": null
}[root@harbar-master ~]#

4)查询应用某个项目下的应用

curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/repositories?project_id={project_id}"

实际操作过程

[root@harbar-master ~]# curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/repositories?project_id=1"
[
{
"id": ,
"name": "library/myapp",
"project_id": ,
"description": "",
"pull_count": ,
"star_count": ,
"tags_count": ,
"labels": [],
"creation_time": "2019-11-24T15:16:09.311411Z",
"update_time": "2019-11-24T15:26:07.408234Z"
}
][root@harbar-master ~]#

或者

[root@harbar-master ~]# curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/repositories?project_id=1&q=library%2Fmyapp"[
{
"id": ,
"name": "library/myapp",
"project_id": ,
"description": "test",
"pull_count": ,
"star_count": ,
"tags_count": ,
"labels": [],
"creation_time": "2019-11-24T15:16:09.311411Z",
"update_time": "2019-11-28T17:36:41.753116Z"
}
][root@harbar-master ~]#

5)根据项目和应用搜索应用的tag名

curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/repositories/{repo_name}/tags"

实际操作

[root@harbar-master ~]# curl --insecure -u "admin:Harbor12345" -X GET -H "Content-Type: application/json" "https://192.168.44.10/api/repositories/library%2Fmyapp/tags"
[
{
"digest": "sha256:9eeca44ba2d410e54fccc54cbe9c021802aa8b9836a0bcf3d3229354e4c8870e",
"name": "v1",
"size": ,
"architecture": "amd64",
"os": "linux",
"docker_version": "17.03.2-ce",
"author": "MageEdu \u003cmage@magedu.com\u003e",
"created": "2018-03-02T03:39:41.482586301Z",
"config": {
"labels": {
"annotation.io.kubernetes.container.hash": "5ddb7a8b",
"annotation.io.kubernetes.container.ports": "[{\"name\":\"http\",\"containerPort\":80,\"protocol\":\"TCP\"}]",
"annotation.io.kubernetes.container.restartCount": "",
"annotation.io.kubernetes.container.terminationMessagePath": "/dev/termination-log",
"annotation.io.kubernetes.container.terminationMessagePolicy": "File",
"annotation.io.kubernetes.pod.terminationGracePeriod": "",
"io.kubernetes.container.logpath": "/var/log/pods/f7b6ba81-1dc0-11e8-9267-000c29ab0f5b/myapp_0.log",
"io.kubernetes.container.name": "myapp",
"io.kubernetes.docker.type": "container",
"io.kubernetes.pod.name": "deploy-myapp-79859f456c-29rqw",
"io.kubernetes.pod.namespace": "default",
"io.kubernetes.pod.uid": "f7b6ba81-1dc0-11e8-9267-000c29ab0f5b",
"io.kubernetes.sandbox.id": "8e322f9ddffb50284081710a6aa77741563272de431416193450c8a65481033d",
"maintainer": "NGINX Docker Maintainers \u003cdocker-maint@nginx.com\u003e"
}
},
"signature": null,
"labels": []
}
][root@harbar-master ~]#

二、脚本清理harbar镜像

#!/bin/bash
ENV=application
URL=https://192.168.1.101
USER=username
PASSWORD=password project_id=`curl -s -u "$USER:$PASSWORD" -X GET -H "Content-Type: application/json" "$URL/api/projects?name=$ENV"|jq .[].project_id`
repo=`curl -s -u "$USER:$PASSWORD" -X GET -H "Content-Type: application/json" "$URL/api/repositories?project_id=$project_id"|jq -r .[].name|sed 's/\"//g'|awk -F '/' '{print $2}'`
echo "项目ID为$project_id" for NAME in $repo
do
tags=`curl -s -u "$USER:$PASSWORD" -X GET -H "Content-Type: application/json" "$URL/api/repositories?project_id=$project_id&q=$ENV/$NAME"|jq .[].tags_count`
echo "准备清理$NAME仓库"
echo "$NAME仓库tag总数:$tags"
if [ -lt $tags ]
then
count_image=`expr $tags - `
echo "$NAME仓库需清理$count_image个镜像"
images_tag=`curl -s -u "$USER:$PASSWORD" -X GET -H "Content-Type: application/json" "$URL/api/repositories/$ENV/$NAME/tags"| jq .[].name |sed 's/\"//g'|sort -n | head -n $count_image`
for i in $images_tag
do
echo "正在删除$NAME tag为$i的镜像"
curl -s -u "$USER:$PASSWORD" -X DELETE -H "Content-Type: application/json" "$URL/api/repositories/$ENV/$NAME/tags/$i"
done
if [ $? -eq ]
then
echo "本次共删除$count_image个镜像"
echo "清理$NAME仓库完成!!!!!"
fi
fi
done

三、python测试接口

import requests

class HarborClient(object):

    def __init__(self, url, username, password):
self.username = username
self.password = password
self.url = url
self.session = requests.Session()
self.api = self.url + '/api'
self.login() def login(self):
login = '/login'
login_url = self.url + login
self.session.post(login_url, params={"principal": self.username, "password": self.password}) class HarborApi(HarborClient):
def projects(self):
''' 获取项目的详细信息,如下
[{
'project_id': ,
'owner_id': ,
'name': 'enos',
......
'current_user_role_id': ,
'repo_count': ,
'chart_count': ,
}]
:return:
'''
projects_url = self.api + "/projects"
projects_info = self.session.get(projects_url).json()
return projects_info def projects_id(self):
projects_info = self.projects()
project_id_list = []
for projects in projects_info:
project_id_list.append(projects['project_id'])
print(project_id_list)
return project_id_list def deployments(self):
''' 获取enos下面的所有项目信息
[{
'id': ,
'name': 'enos/myapp',
'project_id': ,
'description': '',
'pull_count': ,
'star_count': ,
'tags_count': ,
'labels': [],
'creation_time': '2020-05-04T11:50:25.645659Z',
'update_time': '2020-05-04T11:26:48.74488Z'
}]
:return:
'''
pro_id =
repos_url = self.api + "/repositories"
repos_res = self.session.get(repos_url, params={"project_id": pro_id})
deployments_info = repos_res.json()
return deployments_info def tags(self):
deployments_info = self.deployments()
deployment_names = []
for deployment in deployments_info:
deployment_names.append(deployment['name'])
# 选择第一个作为测试
tags_url = self.api + "/repositories" + '/'+ deployment_names[] + "/tags"
tags = self.session.get(tags_url).json()
tags_sort = sorted(tags, key=lambda tags: tags["created"]) # 将 tag 按照创建时间进行排列
del_tag = tags_sort[:][]
return del_tag,tags_url def delele_tag(self):
'''
:return:
'''
# curl -u "admin:Harbor2018" -X DELETE "https://harbor-test1.eniot.io/api/repositories/enos/myapp/tags/v1"
del_tag,tags_url = self.tags()
del_tag_url = tags_url + "/" + del_tag['name']
print(self.session)
params = {
'url': del_tag_url,
'timeout':
}
del_res = self.session.delete(**params)
print(del_res.json()) if __name__ == "__main__":
harbor_url = "https://harbor-test1.eniot.io"
username = "admin"
password = "password"
res = HarborApi(harbor_url,username, password)
res.delele_tag()

1)过滤 tag比较多的项目且时间比较久的项目

import requests

class HarborClient(object):

    def __init__(self, url, username, password):
self.username = username
self.password = password
self.url = url
self.session = requests.Session()
self.api = self.url + '/api'
self.login() def login(self):
login = '/login'
login_url = self.url + login
self.session.post(login_url, params={"principal": self.username, "password": self.password}) class HarborApi(HarborClient):
def projects(self):
projects_url = self.api + "/projects"
projects_info = self.session.get(projects_url).json()
return projects_info def projects_id(self):
projects_info = self.projects()
project_id_list = []
for projects in projects_info:
project_id_list.append(projects['project_id'])
return project_id_list def deployments(self):
projects_id_list = self.projects_id()
max_app = []
for pro_id in projects_id_list:
repos_url = self.api + "/repositories"
# https://harbor-test1.eniot.io/api/repositories
# https://harbor-test1.eniot.io/api/repositories/enos/myapp/tags/v1
repos_res = self.session.get(repos_url, params={"project_id": pro_id})
deployments_info = repos_res.json()
app_list = []
for app in deployments_info:
if app['tags_count'] > :
print(app)
name = app['name']
tags_url = repos_url + "/" + name + "/tags/"
tags = self.session.get(tags_url).json()
tags_sort = sorted(tags, key=lambda tags: tags["created"])
last_time = tags_sort[]["created"]
standards_time = '2019-12-30T17:00:00.000Z'
if last_time < standards_time:
print(name)
app_list.append(name) if __name__ == "__main__":
harbor_url = "https://harbor-test1.eniot.io"
username = "admin"
password = "password"
res = HarborApi(harbor_url,username, password)
res.deployments()

最新文章

  1. VS2013新建MVC5项目,使用nuget更新项目引用后发生Newtonsoft.Json引用冲突的解决办法
  2. 修改Windows Server 2008密码策略,设置简单密码
  3. Linux下用于查看系统当前登录用户信息的4种方法
  4. 【MFC】ID命名和数字约定
  5. ubuntu下搭建nagios
  6. 字符串转Json对象
  7. Expect:100-continue
  8. 浅析Struts1和Struts2的Action线程安全问题 转
  9. Android开发教程AnimationDrawable逐帧播放动画
  10. hrbust 1328 相等的最小公倍数(数论)
  11. FLASK安装--兼收EZ_INSTALL及PIP
  12. SolrCloud初识
  13. Android-------设置TextView同时显示图片和文本,并控制图片大小
  14. unity 打包 windows 运行 紫色 粉红色
  15. CString 与 std::string 相互转化
  16. QTP脚本程序(原创自编)
  17. 【.net 深呼吸】项目中是否有必要删去多余的引用
  18. 员工选票系统-java
  19. django中向用户发送邮件信息
  20. MYSQL如何解决幻读

热门文章

  1. 解决pycharm运行py文件时只有unittest选项的方法
  2. 将Java对象序列化成JSON和XML格式
  3. centos 搭建svn服务器
  4. SOAP、WSDL、 UDDI之间的关系
  5. CSS3 nth-of-type(n)选择器 last-of-type选择器 nth-last-of-type(n)选择器 CSS3 only-child选择器 only-of-type选择器
  6. random模块 os模块
  7. JavaWeb(四):JDBC
  8. 【leetcode】1094. Car Pooling
  9. 在一个div上增加遮罩
  10. simulate 中的一些操作