#/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. CaCl2 项目介绍。

    一 是什么? 中国自然语言处理(NLP)研究项目. 二 主要功能? 从互联网获取的大量文本数据,结合自研力量进行分析.将数据重新格式化为大量条目,目录,并根据金融行业分类标准对这些条目进行了分类. 三 ...

  2. Vue+webpack配置实现多页面应用开发

    为什么要配置多页面开发? · 由于单页面应用不利于SEO,对于某些资讯类网站不够友好,而多页面则能够更优的解决此问题. · 传统的多页面开发模式(如java的jsp等) 前后端耦合性大,开发效率低,代 ...

  3. CSS之创意hover效果

    一.发送效果 HTML <div id="send-btn"> <button> // 这里是一个svg的占位 Send </button> & ...

  4. Codeforces Round #739 (Div. 3)

    A. Dislike of Threes 简单的水题,预处理即可 AC_CODE #include <bits/stdc++.h> using namespace std; templat ...

  5. 使用Docker快速搭建Halo个人博客到阿里云服务器上[附加主题和使用域名访问]

    一.前言 小编买了一个服务器也是一直想整个网站,一直在摸索,看了能够快速搭建博客系统的教程.总结了有以下几种方式,大家按照自己喜欢的去搭建: halo wordpress hexo vuepress ...

  6. nested exception is java.lang.NoClassDefFoundError: org/fusesource/hawtbuf/UTF8Buffer

    前言:IDE管理maven项目,总是遇到各种莫名奇妙的问题,有的是导入了依赖,IDE确报包未找到,有的是IDE显示找到,但是控制台确报未找到,有以下几种方法可以解决 第一:确认自己导入的依赖是否有问题 ...

  7. java实现HTTPS单向认证&TLS指定加密套件

    1.HTTPS介绍 由于HTTP是明文传输,会造成安全隐患,所以在一些特定场景中,必须使用HTTPS协议,简单来说HTTPS=HTTP+SSL/TLS.服务端和客户端的信息传输都是通过TLS进行加密. ...

  8. JAVA异常与异常处理详解【转】

    感谢!!!原文地址:https://www.cnblogs.com/knightsu/p/7114914.html 一.异常简介 什么是异常? 异常就是有异于常态,和正常情况不一样,有错误出错.在ja ...

  9. java代码注意点总结(持续更新)

    1. if(username.equals("zxx")){} 这样写的话,如果username是null, 则会报NullPointerException,所以先要判断usern ...

  10. Python--变量和简单数据类型

    Python--变量和简单数据类型 目录 Python--变量和简单数据类型 一.Python脚本运行过程 二.变量 1. 变量的命名和使用 2. Python关键字和内置函数 2.1 Python关 ...