#/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. C++的set重载运算符

    转载: https://www.cnblogs.com/zhihaospace/p/12843802.html set 容器模版需要3个泛型参数,如下: template<class T, cl ...

  2. AT5760 Manga Market

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

  3. AT2163 [AGC006B] Median Pyramid Easy

    需要一点灵感的题目. 可以发现这样一个事情,当三个数中有两个数相同时,中为数一定是这两个相同的数. 基于这个观察,我们想让每一行都存在这样两个相同的两个数,就一定能保证第一层的值为 \(x\) 了. ...

  4. ==和equeals区别以及使用场景

    定义 ==:基本数据类型比较的是值或地址,引用数据类型比较的是地址. equals:在不重写的情况下,和==没有任何区别,重写,可以自定义比较规则,一般重写之后都让其比较值. Object类中的equ ...

  5. iptables简单使用

    1.安装iptables yum install iptables-services 2.iptables简单使用 iptables防火墙文件路径/etc/sysconfig/iptables sys ...

  6. 报错:java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp

    感谢原文作者:风起云淡- 原文链接:https://blog.csdn.net/shenguan777/article/details/78615521 异常分析: 在使用MySql时,如果数据库中有 ...

  7. NSMutableDictionary基本概念

    1.NSMutableDictionary 基本概念 什么是NSMutableDictionary NSMutableDictionary是NSDictionary的子类 NSDictionary是不 ...

  8. C语言设计ATM存取款界面

    这个虽然很简单,但是我还是弄了一会儿,可见有多菜.练习算. 主要考察switch开关语句.do...while语句,页面的跳转我用的是goto,虽然是弊端,可是还是用了,因为太菜啊.大家有好建议的欢迎 ...

  9. python办公自动化系列之金蝶K3自动登录(二)

    接上一篇博文python办公自动化系列之金蝶K3自动登录(一),我们接着聊聊利用python脚本实现金蝶K3 Wise客户端自动登录这一需求. 如上图所示,自动选择[组织机构]后,我们还需要驱动[当前 ...

  10. LVS-DR群集

    LVS-DR群集 目录 LVS-DR群集 一.LVS-DR的工作原理 1. LVS-DR数据包流向分析 2. IP包头及数据帧头信息的变化 3. DR模式的特点 4.LVS-DR中的ARP问题 (1) ...