openstack新手开发指南.docx

上传人:b****5 文档编号:3259758 上传时间:2022-11-21 格式:DOCX 页数:29 大小:951.81KB
下载 相关 举报
openstack新手开发指南.docx_第1页
第1页 / 共29页
openstack新手开发指南.docx_第2页
第2页 / 共29页
openstack新手开发指南.docx_第3页
第3页 / 共29页
openstack新手开发指南.docx_第4页
第4页 / 共29页
openstack新手开发指南.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

openstack新手开发指南.docx

《openstack新手开发指南.docx》由会员分享,可在线阅读,更多相关《openstack新手开发指南.docx(29页珍藏版)》请在冰豆网上搜索。

openstack新手开发指南.docx

openstack新手开发指南

OpenStack开发指南

目录

1、nova源码架构介绍2

1.1、源码的获取2

1.2、开发环境的搭建2

1.3、nova模块调用介绍6

1.4、nova源码模块功能介绍7

2、数据库表结构的扩展8

2.1、nova表结构的扩展8

2.2、keystone表结构的扩展10

3、resetful接口服务的扩展12

3.1、nova数据库调用接口服务的扩展12

3.2、compute接口的扩展17

3.3、keystone接口服务的扩展20

3.4、基于openstack服务、配置架构自定义服务模块21

4、dashboard源码介绍25

4.1horizon代码模块介绍26

4.2中文化的功能实现26

4.3页面按钮的添加27

4.4列表中下拉菜单的添加29

4.5列表中文字链接的添加29

 

1、nova源码架构介绍

1.1、源码的获取

openstack的源码可以从安装好的openstack环境上直接copy下来使用,也可以从官网下载(红帽地址:

http:

//repos.fedorapeople.org/repos/openstack/),ubuntu环境下openstack的源码目录为:

/usr/share/pyshared/,这里面的源码安装好后会被外链到/usr/lib/python2.7/dist-packages/,这是python2.7以后的版本的做法,所有的python项目都会采取这种存储方式;centos环境下openstack一般会安装python2.6的环境,所以openstack的源码存储在/usr/lib/python2.6/site-packages/。

1.2、开发环境的搭建

第一步、从官网下载python安装包(http:

//www.python.org/getit/),如果是openstack的环境下开发,可以忽略这一步,因为安装openstack的时候已经自动安装了python环境。

第二步、然后安装开发python程序的IDE,python的程序一般使用PyDev作为开发工具,它可以被集成到eclipse和aptana等IDE中。

PyDev的下载地址:

http:

//pydev.org/download.html,aptana的下载地址:

http:

//aptana.org/,当前发布的是aptana3.0,默认已经集成了PyDev。

当前我使用的是aptana,由于3.0使用的面板背景色是黑色的,我又习惯使用2.0的风格怎么办那,3.0有添加了一个颜色模板的菜单,选择一下“AptanaStudio2.x”就可以了,如下图。

第三步、导入openstack的项目,打开IED,在左边的面板空白处右键,左键点击“import”,如下图:

从弹出的窗口从选择“ExistingFolderAsNewProject”,导入一个文件夹作为一个工程,如下图所示:

然后选择一个openstack项目,比如我当前选择了nova文件夹,起一个工程名,只要自己好记就行,下边的单选框可以不用选,点击完成就行了,如下图:

导入进来的nova目录结构如下图:

1.3、nova模块调用介绍

nova-api:

起到CloudController的作用,主要为所有的API查询提供了一个接口(比如OpenstackAPI,EC2API),引发多数业务流程的活动(如运行一个实例),并实施一些政策(主要是配额检查)。

nova-schedule:

接受一个消息队列的虚拟实例请求,通过算法决定该请求应该在那台主机上运行,这个算法可以由我们指定。

即起到调度器(Scheduler)的作用.

nova-compute:

是一个非常重要的守护进程,负责创建和终止虚拟机实例,即管理着虚拟机实例的生命周期。

该模块内部非常复杂,基本原理是简单的,就是接受来自队列的动作然后执行一些列的系统操作(如启动一个KVM实例),并且更新数据库的状态。

nova-network:

该守护进程跟nova-computeandnova-volume2个模块的功能是相似的。

接受来自队列的任务,然后执行相应的任务对网络进行操作(比如:

安装网桥接口和改变iptable规则)

Queue:

为各个模块之间的通信提供起到一个集线器的作用,即数据交换中心。

目前是采用RabbitMQ,理论上是可以采用任何的基于python ampqlib的AMPQmessagequeue。

SQLdatabase:

存储云基础设施构建时和运行时状态。

包括可用的实例类型,正在使用的实例类型,可用的网络和项目。

理论上,OpenStackCompute是支持所有基于SQL-Alchemy的数据库,但目前广泛使用的数据库主要是Sqlite3,Mysql,PostgreSQL。

Glance:

该项目独立于OpenstackCompute,起到镜像的作用。

在该项目中,主要包括三个部分:

glance-api,glance-registryand镜像存储。

Glance-api接受API调用,glance-registry存储和检索镜像的元数据。

镜像存储Imageblobs。

存储可以选择不同的存储方案,比如用Swift实现存储。

Dashboard:

该项目是一个可选的项目,主要是为开发者等提供API。

1.4、nova源码模块功能介绍

2、数据库表结构的扩展

2.1、nova表结构的扩展

第一步、创建表的数据库结构,创建表结构的文件存在于目录nova.db.sqlalchemy.migrate_repo.versions,当执行nova-managedbsync命令时就会按照这个目录下文件开头的序列号顺序执行。

添加表时只需要实现一个类似的文件,把名字的开头命名为最大序列值加1。

比如我要创建一张表,表名为:

domains,在这个versions下创建一个084_add_domains.py的文件,文件内容如下

#-*-coding:

utf-8-*-

fromsqlalchemyimportBoolean,Column,DateTime,Integer

fromsqlalchemyimportMetaData,String,Table

fromnovaimportlogaslogging

LOG=logging.getLogger(__name__)

defupgrade(migrate_engine):

'''创建表'''

meta=MetaData()

meta.bind=migrate_engine

#生成创建表sql语句

domains=Table('domains',meta,

Column('id',Integer(),primary_key=True,nullable=False),

Column('name',

String(length=255,convert_unicode=False,

assert_unicode=None,

unicode_error=None,_warn_on_bytestring=False)),

Column('ttl',Integer()),

Column('rdtype',

String(length=255,convert_unicode=False,

assert_unicode=None,

unicode_error=None,_warn_on_bytestring=False)),

Column('rdata',

String(length=255,convert_unicode=False,

assert_unicode=None,

unicode_error=None,_warn_on_bytestring=False)),

Column('project_id',

String(length=255,convert_unicode=False,

assert_unicode=None,

unicode_error=None,_warn_on_bytestring=False)),

Column('created_at',DateTime(timezone=False)),

Column('updated_at',DateTime(timezone=False)),

mysql_engine='InnoDB'

try:

domains.create()

exceptException,e:

LOG.exception('Exceptionwhilecreatingdomainstable,error'%str(e))

raise

#构造初始化信息

DOMAINDS={

'NS':

dict(name='',rdata='.',rdtype='NS',ttl=86400),

'SOA':

dict(name='',rdata='..2003091812880072008640028800',rdtype='SOA',ttl=86400)}

try:

#逐行插入初始化信息

domain_insert=domains.insert()

forname,valuesinDOMAINDS.iteritems():

domain_insert.execute({'name':

values["name"],

'rdata':

values["rdata"],

'rdtype':

values["rdtype"],

'ttl':

values["ttl"]})

exceptException,e:

LOG.exception('Exceptionwhileseedingdomainstable,error:

%s'%str(e))

raise

 

defdowngrade(migrate_engine):

'''删除表'''

meta=MetaData()

meta.bind=migrate_engine

domains=Table('domains',meta,autoload=True)

domains.drop()

第二步、生成表结构的模型,nova的表对象模型存在于nova.db.sqlalchemy.migrate_repo.models.py文件中,需要在这里面添加一个实现类,位置无所谓,但一般新添加的都放到文件的最末尾,这里我添加一个domains的模型类,代码如下:

classDomain(BASE,PhysicalBase):

"""虚拟机主机名"""

__tablename__="domains"

id=Column(Integer,primary_key=True)

name=Column(String(255))

ttl=Column(Integer)

rdtype=Column(String(255))

rdata=Column(String(255))

project_id=Column(String(255))

第三步、实现表查询,因为nova使用的事sqlalchemy,所以查询只需要按照它的规则构造就行,数据库查询的方法都在nova.db.sq

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1