设为首页 收藏本站
查看: 697|回复: 0

[经验分享] 建立局域网内使用的CentOS7-OpenStack源

[复制链接]

尚未签到

发表于 2017-6-27 08:05:33 | 显示全部楼层 |阅读模式
  by 无若
  1. 先建立局域网内使用的CentOS7源
  这个参看 http://www.cnblogs.com/gleaners/p/5735472.html
  2. 抓取所有OpenStack的包,文件夹完全对应。
这里专门写了一个snatch_repo.py
代码如下:



#coding=utf-8
import requests
import re
import string
import urllib2 as url
import urllib
import Queue
import os
import sys
from contextlib import closing
class ProgressBar(object):  
def __init__(self, title, count=0.0, run_status=None, fin_status=None, total=100.0,    unit='', sep='/', chunk_size=1.0):  
super(ProgressBar, self).__init__()  
self.info = '[%s] %s %.2f %s %s %.2f %s'  
self.title = title  
self.total = total  
self.count = count  
self.chunk_size = chunk_size  
self.status = run_status or ''  
self.fin_status = fin_status or ' ' * len(self.statue)  
self.unit = unit  
self.seq = sep  
def __get_info(self):  
# [名称]状态 进度 单位 分割线 总数 单位  
_info = self.info % (self.title, self.status, self.count/self.chunk_size, self.unit, self.seq, self.total/self.chunk_size, self.unit)  
return _info  
def refresh(self, count=1, status=None):  
self.count += count  
# if status is not None:  
self.status = status or self.status  
end_str = '\r'  
if self.count >= self.total:  
end_str = '\n'  
self.status = status or self.fin_status  
sys.stdout.flush()
sys.stdout.write(self.__get_info()+end_str)  
sys.stdout.flush()
def get_regex_outcome_list(text, regex):
"""
获取文本的正则表达式截取
"""
lst = []
reobj = re.compile(regex)
for match in reobj.finditer(text):
#match.start()
#match.end()
        lst.append(match.group())
return lst
def wget_file(url, file_name):
"""
下载文件
"""
#r = requests.get(url)
#with open(file_name, 'wb') as code:
#    code.write(r.content)
   
with closing(requests.get(url, stream=True)) as response:  
chunk_size = 1024  
content_size = float(response.headers['content-length'])  
'''
需要根据 response.status_code 的不同添加不同的异常处理
'''  
print('content_size', content_size,response.status_code ,  )  
progress = ProgressBar('processing:'  
, total=content_size  
, unit='KB'  
, chunk_size=chunk_size  
, run_status='download...'  
, fin_status='download ok!')  
# chunk_size = chunk_size < content_size and chunk_size or content_size  
with open(file_name, 'wb') as file:  
for data in response.iter_content(chunk_size=chunk_size):  
file.write(data)  
progress.refresh(count=len(data))  
print('download ok!', )
def page_to_url(url, html):
"""
解析页面上的html,提取href中的url
"""
lst = get_regex_outcome_list(html, 'href=".*"')
context = ''
path_lst = []
for item in lst:
item = item.replace('"','')
item = item.replace('href=', '')
path_lst.append((url+item, item))
return path_lst
def parser_path_list(init_url, path_lst, deep_queue):
"""
解析路径列表,对路径做对应处理
"""
for item in path_lst:
url = item[0]
file_name = item[1]
if file_name[-1] == '/' and file_name != '../':
deep_queue.put(url)
dir_name = url[len(init_url):-1]
try:
os.mkdir(dir_name)
except Exception, e:
print e
else:
#pass
file_path = url[len(init_url):-1]
print file_path
try:
wget_file(url, file_path)
except Exception, e:
print e               
def visit_all_path(init_url):
"""
遍历所有路径
"""
r = requests.get(init_url)
path_lst = page_to_url(init_url, r.text)
deep_queue = Queue.Queue()
parser_path_list(init_url, path_lst, deep_queue)
while not deep_queue.empty():
print deep_queue.qsize()
url = deep_queue.get()
r = requests.get(url)
path_lst = page_to_url(url, r.text)
parser_path_list(init_url, path_lst, deep_queue)

return path_lst

if __name__ == '__main__':
init_url = 'http://mirrors.aliyun.com/centos/7.2.1511/cloud/x86_64/openstack-liberty/'
visit_all_path(init_url)
  # 代码里面使用的是阿里云的openstack-liberty。
  # 在做源的服务器(192.168.29.94)上建立对应的目录
  mkdir -p /var/ftp/pub/cloud/openstack-liberty
  # 将此代码(snatch_repo.py)拷贝至/var/ftp/pub/cloud/openstack-liberty/目录下
  cp snatch_repo.py /var/ftp/pub/cloud/openstack-liberty/
  # 由于snatch_repo.py中使用了requests模块,所以需要先安装requests模块
  pip install requests
  # 执行此脚本,下载,静静等待所有下载完毕
  python snatch_repo.py
  3. 清除老的repodata,生成新的repodata
  cp /var/ftp/pub/cloud/openstack-liberty/repodata/repomd.xml /tmp/
  yum -y install createrepo
  cd /var/ftp/pub/cloud/openstack-liberty/
  createrepo -g /tmp/repomd.xml .
  4. 配置客户机(假设:192.168.29.80)的源设置
  cd /etc/yum.repos.d/
nano loacl_network_openstack_liberty.repo
  # 编辑如下内容



[loacl_network_openstack_liberty]
name=ftpyum
baseurl=ftp://192.168.29.94/pub/cloud/openstack-liberty
enabled=1
gpgcheck=1
gpgkey=ftp://192.168.29.94/pub/centos7/RPM-GPG-KEY-CentOS-7
  # 重新设定repo
  yum clean all
yum makecache
  5. 客户机(假设:192.168.29.80)验证
  yum install openstack-keystone

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-388499-1-1.html 上篇帖子: Openstack的镜像上传原理 下篇帖子: OpenStack with Opendaylight Part 1: Intro to Pipeline
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表