爱吃土豆的程序猿

ON A CLEAR DISK YOU CAN SEEK FOREVER

keystone与ldap的集成

以kilo版本的openstack为例 ldap简介 LDAP是轻量目录访问协议(Lightweight Directory Access Protocol)的缩写,LDAP是从X.500目录访问协议的基础上发展过来的。 ldap的特点 LDAP的结构用树来表示,而不是用表格。正因为这样,就不能用SQL语句了 LDAP可以很快地得到查询结果,不过在写方面,就慢得多 LD...

openstack各组件的RBAC(Role Based Access Controll)

以kilo版本的openstack为例 Keystone Role 和 Policy 策略 验证用户username和password以后,用户有没有权限来执行某个操作则取决于 Role 和 基于 Roles 的鉴权。 Keystone API V3 与 V2 相比,对 policy 的支持有很多的增强。V2 的支持和 OpenStack 其它组件比如cinder,nova 等差不多...

python迭代器、生成器与装饰器

可迭代对象与迭代器 可迭代对象 可以直接作用于for循环的对象统称为可迭代对象,代码中可以通过isinstance()判断一个对象是否是Iterable对象 Example: >>> from collections import Iterable >>> isinstance([],Iterable) True >>> isin...

cinder服务状态监控

以kilo版本cinder为例 cinder ServiceController class ServiceController(wsgi.Controller): @wsgi.serializers(xml=ServicesIndexTemplate) def index(self, req): """Return a list of all runni...

nova自定义API

以kilo版本nova为例 创建自定义的API有三种方式: 在原有的资源上增加函数,例如在servers上增加一个接口,查看虚拟机的资源利用情况 添加扩展资源,定义新的扩展资源 添加核心资源,定义新的核心资源 method 1 对于第一种情况,具体可以参照 @wsgi.response(202) @wsgi.action('revertResize'...

cinder创建卷源码分析

本文以kilo版本的cinder为例 代码整体流程如下: 如整体架构图所示,创建卷涉及的大体步骤主要有以下几步: a. Client发送请求,通过RESTFUL接口访问cinder-api。 b. Api解析响应请求,api解析由Client发送来的请求,并通过rpc进一步调用cinder-scheduler。 c. Scheduler对资源进行调度,scheduler选择合适的节点...

nova 挂载卷源码分析

本文以kilo版本的nova为例 nova挂载卷源码分析 nova/api/openstack/compute/contrib/volumes.py 在Nova Client进程中,由VolumeAttachmentController接受挂载请求 nova client ↓ POST /v2.1/servers/c2486c45-5a8f-4028-8cd1-51c0425...

cinder服务启动源码分析

本文以Newton版本的cinder为例 一、cinder api服务 根据setup.cfg找到cinder-api服务的启动入口 #setup.cfg [entry_points] console_scripts = cinder-api = cinder.cmd.api:main #cinder/cmd/api.py def main(): # 加载辅助对象,封...

深入理解nova api服务

一、wsgi简介 在构建 Web 应用时,通常会有 Web Server 和 Application Server 两种角色。其中 Web Server 主要负责接受来自用户的请求,解析 HTTP 协议,并将请求转发给 Application Server,Application Server 主要负责处理用户的请求,并将处理的结果返回给 Web Server,最终 Web Server ...

python fabric详解

简介 Fabirc是基于python实现的SSH命令行工具,非常适合应用的自动化部署,或者执行系统管理任务。 简单的例子: root@openstack:~# cat fabfile.py def hello(): print 'hello world!' root@openstack:~# fab hello hello world! Done. 这个fab简单地导入...