导航:首页 > 源码编译 > openstack源码量

openstack源码量

发布时间:2022-08-17 07:42:46

❶ 如何优雅的阅读openstack源代码

OpenStack 本身用 python 语言编写,虽然我一直觉得自己的 python 功底已经不错了,但在看源码的过程中,还总是觉得自己掌握的东西太少了,所以,首要的一点,如果你在看 OpenStack 源码,请一定要打牢你的 python 基础,不然有些技巧性的代码可能让你停滞不前。看源码,如果能一气呵成最好。什么叫一气呵成.我先讲个每个人生活中都可能遇到的一些情况:你在做 A 事,但是突然 B 打电话,让你帮着解决 C 事,然后你就去做 C 事了,等你做完 C 事,发现家里有 D 事必须要做,然后你又去做 D 事……这样的结果就是,你把 A 事给遗忘了,即便你空闲时候想起来了,但是再去做的时候,发现没有第一次那样熟悉 A 事了,你需要重新花费一些时间来熟悉它。试想,如果一开始你就把 A 事做到底,会怎样。

看源码其实是一个很漫长的过程,特别对一个大型项目而言,如果你要看完它的源码,过程是很曲折的,这里的看完不仅仅是过目了一遍,脑子里还要能把逻辑关系理顺。你可能有疑问了,要看源码,一天两天解决不了,但是又要保证一气呵成,这根本就是无稽之谈嘛!事情也的确是这样,鱼与熊掌不可兼得!这里就有一个技巧的问题了,你不妨想象,这么大一个项目,它是怎么开发出来的难道一开始,项目就已经策划好了。需要多少个源文件,每个文件里面的源码是什么也都做好了。有点经验的程序员都知道,这是不可能的。项目的开发是慢慢细化的,一开始只是核心,然后是骨架,然后有血肉,然后有做 A 事的工具……到这里,或许你知道我要说什么了,源码怎么一步步写出来的,我们就怎么一步步的去看它。先研究核心,再研究骨架,然后血肉,其它工具。还有一个问题,就算我知道怎么看这些源码,我怎么去一气呵成。这就好比你要完成一件大事情,但是你发现给自己定这么宏大的目标对自己来说比登天还难,所以你就想到用小目标来不断激励自己,最终不断接近大目标。这里的一气呵成既然不能一气把所有源码呵成,那就分段吧。

❷ 全面认识openstack,它到底是什么包含什么

(1)官方的解释相信大家都已经了解了,不了解也没有关系。现在从常识的角度来给大家解释和说明。
OpenStack是一个云平台管理的项目,它不是一个软件。这个项目由几个主要的组件组合起来完成一些具体的工作。
OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目,OpenStack被公认作为基础设施即服务(简称IaaS)资源的通用前端。
如果这些还不明白,那么从另外的角度给大家介绍:
首先让大家看下面两个图就很简单明了了:
此图为openstack的登录界面

下面是openstack的一个管理界面

从这两个图,相信有一定开发经验,就能看出openstack是什么了。可以说他是一个框架,甚至可以从软件的角度来理解它。如果不明白,就从传统开发来讲解。不知道你是否了解oa,erp等系统,如果不了解可以到网上去找,资料一大把。他和oa,erp有什么不同。很简单就是openstack是用做云计算的一个平台,或则一个解决方案。它是云计算一个重要组成部分。
上面对openstack有了一个感性的认识。
(2)openstack能干什么。
大家都知道阿里云平台,网络云平台,而阿里云平台据传说就是对openstack的二次开发。对于二次开发相信只要接触过软件的都会明白这个概念。不明白的自己网上去查一下。也就是说openstack,可以搭建云平台,什么云平台,公有云,私有云。现在网络在招聘的私有云工程师,应该就是这方面的人才。
(3)openstack自身都包含什么
以下是5个OpenStack的重要构成部分:
l Nova – 计算服务
l Swift – 存储服务
l Glance – 镜像服务
l Keystone – 认证服务
l Horizon – UI服务

图1 OpenStack基本构架

下图展示了Keystone、Dashboard二者与其它OpenStack部分的交互。

下面详细介绍每一个服务:
(一)OpenStack计算设施—-Nova Nova是OpenStack计算的弹性控制器。OpenStack云实例生命期所需的各种动作都将由Nova进行处理和支撑,这就意味着Nova以管理平台的身份登场,负责管理整个云的计算资源、网络、授权及测度。虽然Nova本身并不提供任何虚拟能力,但是它将使用libvirt API与虚拟机的宿主机进行交互。Nova通过Web服务API来对外提供处理接口,而且这些接口与Amazon的Web服务接口是兼容的。

功能及特点
l 实例生命周期管理
l 计算资源管理
l 网络与授权管理
l 基于REST的API
l 异步连续通信
l 支持各种宿主:Xen、XenServer/XCP、KVM、UML、VMware vSphere及Hyper-V

OpenStack计算部件
l Nova弹性云包含以下主要部分:
l API Server(nova-api)
l 消息队列(rabbit-mq server)
l 运算工作站(nova-compute)
l 网络控制器(nova-network)
l 卷管理(nova-volume)
l 调度器(nova-scheler)

API服务器(nova-api)
API服务器提供了云设施与外界交互的接口,它是外界用户对云实施管理的唯一通道。通过使用web服务来调用各种EC2的API,接着API服务器便通过消息队列把请求送达至云内目标设施进行处理。作为对EC2-api的替代,用户也可以使用OpenStack的原生API,我们把它叫做“OpenStack API”。

消息队列(Rabbit MQ Server)
OpenStack内部在遵循AMQP(高级消息队列协议)的基础上采用消息队列进行通信。Nova对请求应答进行异步调用,当请求接收后便则立即触发一个回调。由于使用了异步通信,不会有用户的动作被长置于等待状态。例如,启动一个实例或上传一份镜像的过程较为耗时,API调用就将等待返回结果而不影响其它操作,在此异步通信起到了很大作用,使整个系统变得更加高效。

运算工作站(nova-compute)
运算工作站的主要任务是管理实例的整个生命周期。他们通过消息队列接收请求并执行,从而对实例进行各种操作。在典型实际生产环境下,会架设许多运算工作站,根据调度算法,一个实例可以在可用的任意一台运算工作站上部署。

网络控制器(nova-network)
网络控制器处理主机的网络配置,例如IP地址分配,配置项目VLAN,设定安全群组以及为计算节点配置网络。

卷工作站(nova-volume)
卷工作站管理基于LVM的实例卷,它能够为一个实例创建、删除、附加卷,也可以从一个实例中分离卷。卷管理为何如此重要?因为它提供了一种保持实例持续存储的手段,比如当结束一个实例后,根分区如果是非持续化的,那么对其的任何改变都将丢失。可是,如果从一个实例中将卷分离出来,或者为这个实例附加上卷的话,即使实例被关闭,数据仍然保存其中。这些数据可以通过将卷附加到原实例或其他实例的方式而重新访问。
因此,为了日后访问,重要数据务必要写入卷中。这种应用对于数据服务器实例的存储而言,尤为重要。

调度器(nova-scheler)
调度器负责把nova-API调用送达给目标。调度器以名为“nova-schele”的守护进程方式运行,并根据调度算法从可用资源池中恰当地选择运算服务器。有很多因素都可以影响调度结果,比如负载、内存、子节点的远近、CPU架构等等。强大的是nova调度器采用的是可插入式架构。
目前nova调度器使用了几种基本的调度算法:
随机化:主机随机选择可用节点;
可用化:与随机相似,只是随机选择的范围被指定;
简单化:应用这种方式,主机选择负载最小者来运行实例。负载数据可以从别处获得,如负载均衡服务器。

(二)OpenStack镜像服务器—-GlanceOpenStack镜像服务器是一套虚拟机镜像发现、注册、检索系统,我们可以将镜像存储到以下任意一种存储中:
本地文件系统(默认)
l OpenStack对象存储
l S3直接存储
l S3对象存储(作为S3访问的中间渠道)
l HTTP(只读)

功能及特点
提供镜像相关服务

Glance构件
l Glance控制器
l Glance注册器

(三)OpenStack存储设施—-Swift
Swift为OpenStack提供一种分布式、持续虚拟对象存储,它类似于Amazon Web Service的S3简单存储服务。Swift具有跨节点百级对象的存储能力。Swift内建冗余和失效备援管理,也能够处理归档和媒体流,特别是对大数据(千兆字节)和大容量(多对象数量)的测度非常高效。

功能及特点
l 海量对象存储
l 大文件(对象)存储
l 数据冗余管理
l 归档能力—–处理大数据集
l 为虚拟机和云应用提供数据容器
l 处理流媒体
l 对象安全存储
l 备份与归档
l 良好的可伸缩性

Swift组件
l Swift账户
l Swift容器
l Swift对象
l Swift代理
l Swift RING

Swift代理服务器
用户都是通过Swift-API与代理服务器进行交互,代理服务器正是接收外界请求的门卫,它检测合法的实体位置并路由它们的请求。
此外,代理服务器也同时处理实体失效而转移时,故障切换的实体重复路由请求。

Swift对象服务器
对象服务器是一种二进制存储,它负责处理本地存储中的对象数据的存储、检索和删除。对象都是文件系统中存放的典型的二进制文件,具有扩展文件属性的元数据(xattr)。
注意:xattr格式被linux中的ext3/4,XFS,Btrfs,JFS和ReiserFS所支持,但是并没有有效测试证明在XFS,JFS,ReiserFS,Reiser4和ZFS下也同样能运行良好。不过,XFS被认为是当前最好的选择。

Swift容器服务器
容器服务器将列出一个容器中的所有对象,默认对象列表将存储为SQLite文件(译者注:也可以修改为MySQL,安装中就是以MySQL为例)。容器服务器也会统计容器中包含的对象数量及容器的存储空间耗费。

Swift账户服务器
账户服务器与容器服务器类似,将列出容器中的对象。

Ring(索引环)
Ring容器记录着Swift中物理存储对象的位置信息,它是真实物理存储位置的实体名的虚拟映射,类似于查找及定位不同集群的实体真实物理位置的索引服务。这里所谓的实体指账户、容器、对象,它们都拥有属于自己的不同的Rings。

(四)OpenStack认证服务(Keystone)
Keystone为所有的OpenStack组件提供认证和访问策略服务,它依赖自身REST(基于Identity API)系统进行工作,主要对(但不限于)Swift、Glance、Nova等进行认证与授权。事实上,授权通过对动作消息来源者请求的合法性进行鉴定。如下图所示:

Keystone采用两种授权方式,一种基于用户名/密码,另一种基于令牌(Token)。除此之外,Keystone提供以下三种服务:
l 令牌服务:含有授权用户的授权信息
l 目录服务:含有用户合法操作的可用服务列表
l 策略服务:利用Keystone具体指定用户或群组某些访问权限

认证服务组件
服务入口:如Nova、Swift和Glance一样每个OpenStack服务都拥有一个指定的端口和专属的URL,我们称其为入口(endpoints)。

l 区位:在某个数据中心,一个区位具体指定了一处物理位置。在典型的云架构中,如果不是所有的服务都访问分布式数据中心或服务器的话,则也称其为区位。

l 用户:Keystone授权使用者
译者注:代表一个个体,OpenStack以用户的形式来授权服务给它们。用户拥有证书(credentials),且可能分配给一个或多个租户。经过验证后,会为每个单独的租户提供一个特定的令牌。[来源:http://blog.sina.com.cn/s/blog_70064f190100undy.html]

l 服务:总体而言,任何通过Keystone进行连接或管理的组件都被称为服务。举个例子,我们可以称Glance为Keystone的服务。

l 角色:为了维护安全限定,就云内特定用户可执行的操作而言,该用户关联的角色是非常重要的。
译者注:一个角色是应用于某个租户的使用权限集合,以允许某个指定用户访问或使用特定操作。角色是使用权限的逻辑分组,它使得通用的权限可以简单地分组并绑定到与某个指定租户相关的用户。

l 租间:租间指的是具有全部服务入口并配有特定成员角色的一个项目。
译者注:一个租间映射到一个Nova的“project-id”,在对象存储中,一个租间可以有多个容器。根据不同的安装方式,一个租间可以代表一个客户、帐号、组织或项目。

(五)OpenStack管理的Web接口—-Horizon
Horizon是一个用以管理、控制OpenStack服务的Web控制面板,它可以管理实例、镜像、创建密匙对,对实例添加卷、操作Swift容器等。除此之外,用户还可以在控制面板中使用终端(console)或VNC直接访问实例。总之,Horizon具有如下一些特点:
l 实例管理:创建、终止实例,查看终端日志,VNC连接,添加卷等
l 访问与安全管理:创建安全群组,管理密匙对,设置浮动IP等
l 偏好设定:对虚拟硬件模板可以进行不同偏好设定
l 镜像管理:编辑或删除镜像
l 查看服务目录
l 管理用户、配额及项目用途
l 用户管理:创建用户等
l 卷管理:创建卷和快照
l 对象存储处理:创建、删除容器和对象
l 为项目下载环境变量

❸ 怎样调试OpenStack

OpenStack的从安装使用到开发是一件极富有挑战性的事情。其中,从源码调试和开发OpenStack是其中最为困难的部分。本文主要根据自己的开发经验,讲解怎样在OpenStack上搭建开发环境。

系统环境准备

操作系统

在OpenStack老的官网上提供了在mac下利用虚拟环境调试OpenStack的方法,本人经过实验,极其复杂,故不推荐在mac上直接使用,而推荐使用虚拟机的方法安装。对于开发者而言,推荐使用fedora xface版本进行开发,界面简单快速。当然使用xubantu也可以。不推荐使用ubuntu,应为Unity在虚拟机环境下运行效果不好。

为了省去之后的麻烦,注意将用户名直接设为 stack 。

安装系统完成后最好升级系统

sudo yum update
sudo yum upgrade

sudo apt-get update
sudo apt-get upgrade
网络设置

OpenStack的网卡设置很重要,尽量使用传统的eth0命名网卡。在fedora下使用修改网卡名称。

ifrename -i 原网卡名 -n eth0
在ubuntu下通过配置udev来更改网卡名称,这方面教程很多。

网卡使用固定的IP配置

配置python源

由于国内使用pypi经常无法访问,所以使用豆瓣源加速python包的安装

mkdir ~/.pip
cat > ~/.pip/pip.conf << EOF
[global]
index-url =
EOF
配置防火墙和selinux

对于开发环境而言,最好的办法,关了

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
sudo setenforce 0
sudo service iptables stop
sudo chkconfig iptables off
安装软件包

安装git

sudo yum install git
sudo apt-get install git
安装eclipse

sudo yum install eclipse
sudo apt-get install eclipse

❹ openstack 是用什么语言开发的

使用的是Python和C++。

❺ 怎么在OpenStack源码社区贡献代码

1、签署ICLA
注意一定要把信息填全,特别是settings/contact里下面那几个,如果之前没有在OpenStack Foundation注册,会提示注册。如果是代表公司,邮箱最好是公司(huawei)邮箱。
2、上传自己的SSH Key
用于通过SSH向gerrit push代码,方法参见:
3、配置Git Bash
git config --global user.name "XXX"
git config --global user.email "[email protected]"
注意跟gerrit账户一致。
4、安装git-review
5、修改代码
下载代码
配置工程感知gerrit:
cd nova
git review -s
首先会确保能使用你的ssh key登录gerrit,默认使用当前git环境变量配置的用户,否则,会提示输入gerrit用户名,可以通过这个链接查看gerrit用户名。
成功后,会在nova目录下生成一个.gitreview目录
先确保代码是最新的:
git checkout master
git pull
新建分支,如果是blueprint,分支名是“bp/BP-NAME”,其中的BP-NAME是在launchpad上bp的名称;如果是修复bug,分支明是“bug/BUG-NUMBER”,其中BUG-NUMBER可以在bug页面上找到:
git checkout -b BRANTCH-NAME
6、提交代码
在单独的一行中写summary(小于50个字符),然后第二段进行详细的描述。如果是实现bp或修复bug,需注明:
blueprint BP-NAME
bug BUG-NUMBER
一个示例:
Adds some summary less than 50 characters ...Long multiline description of the change... Implements: blueprint authentication Fixes: bug #123456

修改完代码后,记得跑通UT测试。
然后提交代码,申请review
git commit -a
git review
7、review
提交review之后,可以查看状态和信息,自动跑CI,然后代码检视专家就可以进行代码检视。
如果jenkins报了failure,可以查看日志排错。如果确认不是自己的patch导致,可以在comment里留言“recheck no bug”,重新跑test。
8、修改
如果review过程中,发现代码需要修改,再次提交时直接使用已存在的Change-Id:
git commit -a --amend
git review

❻ 如何获取openstack nova各版本源码

如果你想获取该算法的源码,请到launchpad上下载F版本之前(比如E版本)的nova源码

[python] view plain
# vim: tabstop=4 shiftwidth=4 softtabstop=4

# Copyright (c) 2010 Openstack, LLC.
# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.

"""
Simple Scheler
"""

from nova import db
from nova import flags
from nova import exception
from nova.scheler import driver
from nova.scheler import chance

FLAGS = flags.FLAGS
flags.DEFINE_integer("max_cores", 16,
"maximum number of instance cores to allow per host")
flags.DEFINE_integer("max_gigabytes", 10000,
"maximum number of volume gigabytes to allow per host")
flags.DEFINE_integer("max_networks", 1000,
"maximum number of networks to allow per host")

class SimpleScheler(chance.ChanceScheler):
"""Implements Naive Scheler that tries to find least loaded host."""

def _schele_instance(self, context, instance_opts, *_args, **_kwargs):
"""Picks a host that is up and has the fewest running instances."""
elevated = context.elevated()

availability_zone = instance_opts.get('availability_zone')

zone, host = None, None
if availability_zone:
zone, _x, host = availability_zone.partition(':')

if host and context.is_admin:
service = db.service_get_by_args(elevated, host, 'nova-compute')
if not self.service_is_up(service):
raise exception.WillNotSchele(host=host)
return host

results = db.service_get_all_compute_sorted(elevated)
if zone:
results = [(service, cores) for (service, cores) in results
if service['availability_zone'] == zone]
for result in results:
(service, instance_cores) = result
if instance_cores + instance_opts['vcpus'] > FLAGS.max_cores:
msg = _("All hosts have too many cores")
raise exception.NoValidHost(reason=msg)
if self.service_is_up(service):
return service['host']
msg = _("Is the appropriate service running?")
raise exception.NoValidHost(reason=msg)

def schele_run_instance(self, context, request_spec, *_args, **_kwargs):
num_instances = request_spec.get('num_instances', 1)
instances = []
for num in xrange(num_instances):
host = self._schele_instance(context,
request_spec['instance_properties'], *_args, **_kwargs)
instance_ref = self.create_instance_db_entry(context,
request_spec)
driver.cast_to_compute_host(context, host, 'run_instance',
instance_id=instance_ref['id'], **_kwargs)
instances.append(driver.encode_instance(instance_ref))
return instances

def schele_start_instance(self, context, instance_id, *_args, **_kwargs):
instance_ref = db.instance_get(context, instance_id)
host = self._schele_instance(context, instance_ref,
*_args, **_kwargs)
driver.cast_to_compute_host(context, host, 'start_instance',
instance_id=instance_id, **_kwargs)

def schele_create_volume(self, context, volume_id, *_args, **_kwargs):
"""Picks a host that is up and has the fewest volumes."""
elevated = context.elevated()

volume_ref = db.volume_get(context, volume_id)
availability_zone = volume_ref.get('availability_zone')

zone, host = None, None
if availability_zone:
zone, _x, host = availability_zone.partition(':')
if host and context.is_admin:
service = db.service_get_by_args(elevated, host, 'nova-volume')
if not self.service_is_up(service):
raise exception.WillNotSchele(host=host)
driver.cast_to_volume_host(context, host, 'create_volume',
volume_id=volume_id, **_kwargs)
return None

results = db.service_get_all_volume_sorted(elevated)
if zone:
results = [(service, gigs) for (service, gigs) in results
if service['availability_zone'] == zone]
for result in results:
(service, volume_gigabytes) = result
if volume_gigabytes + volume_ref['size'] > FLAGS.max_gigabytes:
msg = _("All hosts have too many gigabytes")
raise exception.NoValidHost(reason=msg)
if self.service_is_up(service):
driver.cast_to_volume_host(context, service['host'],
'create_volume', volume_id=volume_id, **_kwargs)
return None
msg = _("Is the appropriate service running?")
raise exception.NoValidHost(reason=msg)

def schele_set_network_host(self, context, *_args, **_kwargs):
"""Picks a host that is up and has the fewest networks."""
elevated = context.elevated()

results = db.service_get_all_network_sorted(elevated)
for result in results:
(service, instance_count) = result
if instance_count >= FLAGS.max_networks:
msg = _("All hosts have too many networks")
raise exception.NoValidHost(reason=msg)
if self.service_is_up(service):
driver.cast_to_network_host(context, service['host'],
'set_network_host', **_kwargs)
return None
msg = _("Is the appropriate service running?")
raise exception.NoValidHost(reason=msg)

❼ 在linux中git获取openstack源码要多久

OpenStack 是一种基础架构即服务 (IaaS) 云计算项目。
资源通过一个仪表板来管理,该仪表板向管理员提供了控制权,并通过一个 Web 接口为用户提供了配置资源的权利。本文将介绍如何设置帐户、设置开发环境以及如何开始为 OpenStack 做贡献。
第 1 步:通过在线注册和密钥配置来设置帐户

设置您的 Launchpad 帐户。Launchpad 是 OpenStack 用来托管其所有项目的位置。请访问 Launchpad 登录页面,使用您的电子邮件地址进行注册,并为自己选择一个便于记忆的 Launchpad ID。然后访问 https://launchpad.net/~LaunchpadID,设置您的 OpenPGP 密钥,并使用该页上的说明上传您的 SSH 公钥。例如,我的 Launchpad id 是 houshengbo,因此我将访问 https://launchpad.net/~houshengbo,如图 1 所示。

图 1. 设置 OpenPGP 密钥

为 Gerrit 设置您的 SSH 帐户。OpenStack 应用了一个代码评审过程来保证代码质量。请访问 OpenStack 代码审查 页面,并使用您的 Launchpad 帐户进行登录。然后访问 https://review.openstack.org/#/settings/ssh-keys 并上传您的 SSH 公钥。

图 2. 上传 SSH 公钥

第 2 步:签署 CLA 协议
请加入 OpenStack Foundation(如果您尚未加入)。使用您计划用于贡献代码的电子邮件地址。foundation profile 中的主要电子邮件地址需要与您稍后在 Gerrit 联系信息中设置的首选电子邮件相匹配。
请访问 Code Review 页面。单击位于该页面右上角的 Sign In 链接。使用您的 Launchpad ID 登录 Launchpad。
除非您是美国政府雇员(参见以下内容),否则请同意 Indivial Contributor License Agreement 并提供联系信息。您的所有姓名和电子邮件地址都是公开的。如果需要的话,可以稍后 更新 此联系信息,但确保主要电子邮件地址始终与为您的 OpenStack Foundation 会员身份设置的电子邮件地址相匹配。
加入 OpenStack Contributors 组。需要以会员身份提交代码更改。

如果您以个人贡献者的身份工作,那么执行上述步骤就足够了。如果您代表公司或美国政府工作,那么您可能需要关注其他一些内部审批过程,这些过程因公司而异。有关的详细信息,请参阅 贡献者许可协议。

第 3 步:设置本地开发环境
设置 Eclipse 环境:

在 Eclipse 窗口上,单击 Help > Install New Software。
在 Work with 字段中,输入 http://download.eclipse.org/egit/updates 并单击 Add。
选中位于 Eclipse Git Team Provider 下面的 Eclipse EGit。
单击 Next,直到您找到 Review Licences 窗口。接受许可条款并单击 Finish。

在 Eclipse 窗口上,单击 Help > Install New Software。
配置 Eclipse 的 python interpreter。在 Work with 字段中,输入 http://pydev.org/updates并单击 Add。
选中 PyDev。
单击 Next,直到您找到 Review Licences 窗口。接受许可条款并单击 Finish。

安装附带 python 的 Ubuntu 11.10 或 11.10+。
安装 git:sudo apt-get install git。
安装 Eclipse。
安装 Eclipse 的 PyDev 插件。

安装 Eclipse 的 EGit 插件。

设置代码库。

打开一个终端,转到目标目录(例如,/opt/stack)并运行以下命令以获得 keystone 代码:
git clone https://github.com/openstack/keystone.git
将项目导入 Eclipse:运行 Eclipse 并将工作区设置为保存所有项目 (/opt/stack) 的目录。
创建 PyDev 项目:单击 File > New > PyDev project。使其名称与该项目相同,如 keystone,然后单击Finish。
将该项目与 Egit 同步:在 Eclipse 中,右键单击该项目 (keystone),单击 Team > Share project,然后单击 Next 和 Finish。
完成上述步骤之后,应该会在 Eclipse 中看到位于您的项目名称后面的 [keystone master]。

打开一个终端,转到目标目录,并运行以下命令获得 devstack 代码:
git clone git://github.com/openstack-dev/devstack.git
在刚刚创建的 devstack 目录下创建一个名为 localrc 的文件。可以在 DevStack 网站上查找关于如何 配置 localrc 的信息。
运行 ./stack.sh。默认工作目录是 /opt/stack,可以手动更改它。当初次运行 devstack 获得成功之后,可以在 /opt/stack 下找到所有代码。

使用 devstack:

另一个方法是下载特定项目,而不是克隆所有项目。以 Keystone 项目为例:

运行单元测试
对某个项目运行所有单元测试:

打开一个终端并转到项目目录,例如 keystone。
运行 ./run_tests.sh 命令。当询问您是否想创建一个虚拟环境时,选择 Y 或 N。

测试一个示例:

打开一个终端并转到项目目录,例如 keystone。
运行 ./run_tests.sh <file path> 命令,例如 ./run_tests.sh /opt/stack/keystone/tests/test_backend.py。

测试一个示例:

打开一个终端并转到项目目录,例如 keystone。
运行 ./run_tests.sh <file path>:<class name> 命令,例如 ./run_tests.sh /opt/stack/keystone/tests/test_backend.py:CommonHelperTests。

测试一个方法:

打开一个终端并转到项目目录,例如 keystone。
运行 ./run_tests.sh <file path>:<class name>.<method name> 命令,例如 ./run_tests.sh /opt/stack/keystone/tests/test_backend.py:CommonHelperTests.test_format_helper_raises_malformed_on_incomplete_format。

运行 OpenStack 服务
运行 Devstack 的所有服务:

打开一个终端并转到 devstack 目录。
运行 ./stack.sh 命令。在 localrc 中,指定要运行的服务,例如 ENABLED_SERVICES=key,c-api,c-vol,c-sch,mysql,rabbit。
运行 ./unstack.sh 关闭所有服务。
首次运行 ./stack.sh 获得成功之后,您还可以运行 ./rejoin-stack.sh 来运行所有指定的服务。

在 Eclipse 中运行服务。以 Keystone 为例:

在 Eclipse 中设置 keystone 的调试配置。右键单击脚本 keystone—bin 下的所有内容,然后单击Debug as > Debug Configurations,如图 3 所示。

图 3. 调试配置

设置调试配置。单击 Arguments 选项卡,选择 Other 作为工作目录,然后输入 ${workspace_loc:keystone},如图 4 和图 5 所示。

图 4. Main 选项卡配置

图 5. Arguments 选项卡配置

启动 Keystone:单击 Debug Configuration 窗口上的 Debug 按钮,或从 Debug/Run 下拉工具栏按钮中运行它,如图 6 所示。

图 6. 启动 Keystone 服务

第 4 步:设置本地计算机配置
设置 git 全局配置:

打开一个终端。
运行 git config --global user.name "Firstname Lastname" 命令。
运行 git config --global user.email "[email protected]" 命令。

安装 git-review 工具:

对于 Ubuntu 12.04 或更高版本,在一个终端中运行 sudo apt-get install git-review 命令。
对于 Ubunu 12.04 之前的版本,则运行 sudo pip install git-review 命令。

配置您的项目以了解 Gerrit:

打开一个终端并转到项目目录,例如 keystone。
运行 git review -s 命令。系统会要求您输入您的 gerrit 用户名。请键入您的 Launchpad id 并按下 Enter 键。

第 5 步:OpenStack 工作流程演示
如果您发现了一个 OpenStack 问题,请将它注册为一个 bug。如果想添加新功能,那么请将它注册为蓝图。您将要添加的修改应位于分支版本而不是主版本中。此外,不要在一个分支版本中混合多个 bug 修复或蓝图开发。下面的工作流程显示了 Keystone 中 bug 修复的一个示例。
提交 Keystone 的 bug:

图 7. 提交 Keystone 的 bug

访问 https://launchpad.net/keystone。
单击 Report a bug,然后输入概要信息和所需的信息。
单击 Submit bug report 按钮。此 bug 具有一个链接:https://bugs.launchpad.net/keystone/+bug/1087674 和一个 bug 号:1087674。
在 Assigned to 列中将这个 bug 分配给你自己。

在 keystone 中为此 bug 创建一个分支(分支名称 Bug1087674):

打开一个终端并转到 keystone 目录。
通过 git checkout master 确保 keystone 位于主版本中。
运行 git checkout -b Bug1087674 命令。

在分支 Bug1087674 中修改 keystone 代码。
将该代码提交给 Gerrit:

打开一个终端并转到 keystone 目录。
运行 git commit -a 命令。
输入一些注释。第一段应该是一句话的简介;第二段可以是详细说明(可选);如果此分支修复一个 bug 或一个蓝图,则添加 Fixes Bug1087674 或 Blueprint XXXX 作为最后一段。
运行 ctrl+o 命令,按下 Enter 键,然后运行 ctrl+x。
运行 git review。

检查提交的修补程序:

图 8. 已提交的修补程序的 Review 页面

转到 https://review.openstack.org 并使用您的 Launchpad 帐户登录。
从顶部水平导航器中,单击 My > Changes,然后您可以找到您已提交的修补程序。
在此演示中,链接为 https://review.openstack.org/#/c/17673/。任何用户都可以查看此修补程序。任何开发人员都可以给出注释。

通常,这是提交修补程序的过程。但是如果某些开发人员添加了注释并且您决定更改此分支,又该如何做呢?下面是一个选项:
打开一个终端并转到 keystone 目录。
通过 git checkout Bug1087674 转到分支 Bug1087674。
对此分支进行进一步修改。
转到 keystone 目录。
运行 git commit -a –amend 命令。(不要运行 git commit -a,否则会有多个注释提交给 Gerrit,建议不要这样做。)
可能的话,请修改注释。
运行 ctrl+o 命令,然后按 Enter 键并运行 ctrl+x。
运行 git review。

第二次提交此修补程序之后,链接 https://review.openstack.org/#/c/17673/ 中有两个修补程序集,如图 9 所示。

图 9. 修补程序集的历史记录

此外,如果在您使用分支 Bug1087674 时主分支进行了更改,又会怎样呢?下面是您可以执行的操作:
打开一个终端,并通过 git checkout master 转到主分支。
使用 git pull origin master 更新该代码。
通过 git checkout Bug1087674 切换回此分支。
通过 git rebase -i master 重构该代码。
如果没有冲突,则运行 git commit -a –amend 命令并运行 git review。
如果发生冲突,那么终端会显示有冲突的文件。
您还可以在 Eclipse 中查找冲突,因为有冲突的文件都标有红色标记。
手动修复这些冲突。
继续重构,git rebase —continue。
重构成功之后,运行 git commit -a –amend 命令和 git review。

❽ openstack指的是什么包含什么

OpenStack是一个云平台管理的项目,它不是一个软件。这个项目由几个主要的组件组合起来完成一些具体的工作。

OpenStack是一个旨在为公共及私有云的建设与管理提供软件的开源项目,OpenStack被公认作为基础设施即服务(简称IaaS)资源的通用前端。

openstack自身都包含什么

以下是5个OpenStack的重要构成部分:

l Nova – 计算服务

l Swift – 存储服务

l Glance – 镜像服务

l Keystone – 认证服务

l Horizon – UI服务

❾ 谁有openstack的java API源代码

如果你用eclipse或者MyEclipse,在程序里写比如split()... 按住ctrl键,再单击split(),就可以了。 第一次会让你连接源代码,你选第二个,“外部的文件”,然后找到jdk下的src那个压缩文件,就 可以了

阅读全文

与openstack源码量相关的资料

热点内容
压缩图片压缩 浏览:74
美国发明解压魔方 浏览:300
电脑怎么备案网上服务器 浏览:513
旅行商问题Python写法 浏览:951
解压破坏王里面的所有兑换码 浏览:859
文件夹如何拖拽还保留原来的 浏览:21
职业生涯pdf 浏览:954
ubuntu安装软件php 浏览:159
黑马程序员退学流程 浏览:362
网页服务器崩溃怎么回事 浏览:651
cnc编程前景怎么样 浏览:320
lniux命令详解 浏览:494
linuxmysql查询日志 浏览:369
老捷达伙伴压缩比 浏览:94
改后缀加密 浏览:433
邮局选址问题算法 浏览:15
河北服务器内存云主机 浏览:13
在电脑上怎么找到加密狗图标 浏览:438
电脑的浏览器怎么打开pdf文件怎么打开 浏览:145
pdf卡片库下载 浏览:14