#/bin/python
# -*- coding: utf-8 -*-
import requests
from urllib import parse
from requests.auth import HTTPBasicAuth
import time
import json
import re

class HarborAapi(object):
def __init__(self,url,auth):
'''
@Author: xiajinqi
:param url:
'''
self.url = url
self.auth=auth
self.header = {
'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
'Content-Type': 'application/json'
}

def setting(self):
###定义会话保持s并且设置s的auth 属性
self.session=requests.session()
self.session.auth=self.auth

###根据工程名字获取ID
def get_projects(self):
req_url = '%s/api/projects?page=1&page_size=15' % (self.url)
req_dict={
'page': '1',
'page_size': '15'
}
req_data=parse.urlencode(req_dict)
try:
r = self.session.get(req_url, data=req_dict, headers=self.header)
if r.status_code==200:
r.text
return r.text
except:
raise Exception('Input is error')
exit(0)

### 根据输入PEOJECTIC 和版本号查询对应的服务名字
def get_version_image(self,project_id,query):
req_url = '%s/api/repositories?project_id=%s&q=%s'% (self.url,project_id,query)
req_dict = {
'project_id':project_id ,
'q': query
}
req_data = parse.urlencode(req_dict)
print(req_dict)
try:
r = self.session.get(req_url, data=req_dict, headers=self.header)
if r.status_code == 200:
return r.text
except:
raise Exception('Input is error')
exit(0)

####根据服务名字获取最新镜像tag
def get_tags(self,q):
req_url = '%s/api/repositories/%s/tags?' % (self.url, q)
try:
r = self.session.get(req_url, headers=self.header)
if r.status_code == 200:
return r.text
except:
raise Exception('Input is error')
exit(0)

def main(url, auth):
project_name='test' ###工程名字
version='9.6.0' ####版本号
# start = time()
project_id=-1
tag_last=[]
try:
# begin开始
harbor = HarborAapi('xxxxxxxxx', auth)
harbor.setting()

#### 根据传入的project_name 获取 project_id
projects = json.loads(harbor.get_projects())
for i in range(0,len(projects)):
if projects[i]['name'] == project_name :
project_id=projects[i]['project_id']
break

#####
if project_id != -1:
print("根据project_id 和 version查找所需要的服务")
servcie_tags_list=json.loads(harbor.get_version_image(project_id,version))
find_res=''
if len(servcie_tags_list):

for i in range(0,len(servcie_tags_list)):
q=servcie_tags_list[i]['name']
tags_list= json.loads(harbor.get_tags(q))
###排序取最大
aa = []
for j in range(0,len(tags_list)):
tag = tags_list[j]['name']
if tags_list[j]['name'] !='latest':
aa.append(int(tag))

####获取最新版本号
aa.sort()
latest_version=aa[-1]
########## 获取服务名字 获取服务名字
service_name=re.split(r'(\d+)',str.split(q,'/')[1])[0]
tmp_service_latest_version=service_name+"="+str(latest_version)
find_res=find_res + tmp_service_latest_version+'\r\n'
print("""你今天需要发布的版本号:""")
print(find_res)

except:
# end = time()
# allTime = end - start
# traceback.print_exc()
print('输入信息不正确!')

if __name__ == '__main__':
auth = HTTPBasicAuth('admin', 'xxxxx')
url = 'xxxxxx'
main(url, auth)

python 镜像仓库获取最新版本号的更多相关文章

  1. maven设置每次构建获取最新版本号

    build.gradle中的依赖是通过设置maven依赖实现.我们知道,maven可以说是通过一个坐标定位来确定唯一一个包的,所说的坐标定位分别是groupId,artifactId和version三 ...

  2. Docker 镜像&仓库 获取及推送镜像

    docker查看.删除镜像 docker镜像存储位置: /var/lib/docker 查看docker信息也可以查看保存位置 docker info 1.列出镜像 docker images -aa ...

  3. Python爬虫案例-获取最新的中国行政区域划分

    源网页:中国统计局标准 http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/ 打开网页后可以分析出行政区域划分共分为5层 根据传入参数,生成网页 ...

  4. 我了解到的新知识之----如何使用Python获取最新外汇汇率信息

    这个需求本来是来源于公司同事工作中需求,用户需要使用数据分析工具Power BI抓取多页的中国银行官网上当天的外汇数据.但是没能研究出来. 我就开始在网络上找关于使用python来抓取当天汇率的案例分 ...

  5. 【Selenium + Python】之如何获取最新的报告以及os.path.getmtime与os.path.getctime的区别

    import os def new_file(test_dir): #列举test_dir目录下的所有文件(名),结果以列表形式返回. lists=os.listdir(test_dir) #sort ...

  6. k8s kubernetes 核心笔记 镜像仓库 项目k8s改造(含最新k8s v1.16.2版本)

    k8s kubernetes 核心笔记 镜像仓库 项目k8s改造 2019/10/24 Chenxin 一 基本资料 一 参考: https://kubernetes.io/ 官网 https://k ...

  7. Python获取最新电影的信息

    这次将从电影天堂获取最新的电影的详细信息,这里电影的信息罗列的比较详细. 本来只是想获取电影的迅雷链接,然后用迅雷去下载.但看到这里的电影的信息比较完整和详细,忍不住把所有信息都爬取下来了. 下图是& ...

  8. 使用镜像仓库托管自己构建的Docker镜像

    自己构建的Docker镜像,默认存储在本机中,Docker有提供某些方式分享这些镜像,但不是主流的镜像分享方式,也有违于开源社区的共享精神. 本文介绍如何使用GitHub托管Dockerfile:使用 ...

  9. Docker镜像的获取与删除

    Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Dicker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库 ...

随机推荐

  1. 2022年写的香橙派 OrangePi Zero 用python获取dht11温度和湿度

    感谢网上资料和个人的不放弃,终于方便的解决了香橙派 OrangePi Zero用python获取dht11温湿度的问题. 网上关于香橙派的资料比起树莓派真是少之又少,现在香橙派zero能干的活暂时也只 ...

  2. Redis内存满了怎么办(新年快乐)

    Redis内存满了怎么办(新年快乐) 入我相思门,知我相思苦. 长相思兮长相忆,短相思兮无穷极. 一.配置文件 Redis长期使用或者不设置过期时间,导致内存爆满或不足,可以到Redis的配置文件re ...

  3. Spring源码-IOC部分-容器初始化过程【2】

    实验环境:spring-framework-5.0.2.jdk8.gradle4.3.1 Spring源码-IOC部分-容器简介[1] Spring源码-IOC部分-容器初始化过程[2] Spring ...

  4. 洛谷P7814 「小窝 R3」心の記憶

    题意 第一行给定两个数字\(n\) \(m\) \((m \ge n)\)分别代表给定字符串长度以及需要构造出的字符串长度 第二行给定一个长度为\(n\)的字符串 (假设原来的字符串是\(a\) 需要 ...

  5. Git使用教程(超全,看一篇就够了)

    目录 Git介绍 Git安装 Git使用 问题与解决 推荐学习网址 Git介绍 Git是什么? Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别? SVN是集中式版本控制系 ...

  6. AT5760 Manga Market

    首先一个想法就是可以考虑令 \(dp_{i, j}\) 表示当前考虑到了第 \(i\) 个商店,当前到了时刻 \(j\) 能走过最多的商店数量.但是你会发现这个 \(dp\) 转移的顺序并不是简单的从 ...

  7. C程序:年转化天

    突然想算算自己到底活了多少天了,e,就是纯属为了好玩,毕竟咱作为一名C初学者还是要多练练的- 为了好玩,加了个密码登陆的,密码是521,还有就是不太懂时间获取... 具体闰年的判断方法: 代码如下: ...

  8. simpholders 官方网址 https://www.simpholders.com/

    SimPholders可让你快速直接地访问iPhone模拟器应用的app文档.你可以通过SimPholders找到数据库文件.永久存储以及缓存,它是一个非常实用的app debug工具,同时还可以离线 ...

  9. cookie、session、jsession 关系

    感谢大佬:https://www.cnblogs.com/fsjin/articles/3490531.html 在使用CAS的时候,对Cookies.session.jsession 这三者是什么不 ...

  10. 手势仿QQ侧滑---秀清

    // // SlideViewController.h // qqcehua // // Created by 张秀清 on 15/5/25. // Copyright (c) 2015年 张秀清. ...