2019独角兽企业重金招聘Python工程师标准>>>

calamari-common

结构图

config.py

此文件定义了CalamariConfig类,用于读取calamari的配置文件,默认是"/etc/calamari/calamari.conf"

salt_wrapper.py

定义了SaltEventSource类,此类用于处理salt服务的 MasterEvent类的关闭和重连接

types.py

此文件里包含一些对ceph概念的对象封装,会将ceph的json数据转成python对象

定义了:SyncObject,OsdMap,MdsMap等类

SyncObject:(VersionedSyncObject,OsdMap,MdsMap等类的基类)

ceph集群的一个对象类,calamari server对ceph集群的一个复制

将json序列化数据对象包在python对象里

-用类似id-to-entry字典的东西来装饰

-此类有个通用方式供查看对象的版本

util.py

此文件定义了一个叫memoize的装饰器,在types.py的OsdMap类里用到

calamari-web

结构图

conf

结构图

Cthulhu

结构图

manager

cluster_monitor.py

SyncObjects: 此类作用->版本化对象的数据

ClusterMonitor: 此类作用->远程管理ceph集群此类会衍生两个线程,一个监听salt事件,另一个监听用户请求

crush_node_request_factory.py

CrushNodeRequestFactory: RequestFactory子类.映射REST API到CLI实现,具体实现增删改操作

crush_request_factory.py

CrushRequestFactory: RequestFactory的子类.实现CRUSH map修改操作,执行osd setcrushmap.

eventer.py

Eventer: gevent.greenlet.Greenlet的子类.监听ClusterMonitor 和 ServerMonitor数据的改变.Manager.py里的Manager类会用到

manager.py

Manager:通过salt服务远程操作ceph命令来管理ceph集群数据.此类是cthulhu组件的主要入口.

osd_request_factory.py

OsdRequestFactory: RequestFactory的子类,对osd进行修改操作

pool_request_factory.py

PoolRequestFactory: RequestFactory的子类.对ceph osd pool进行增删改的操作

request_collection.py

RequestCollection:管理用户请求的集合, 通过salt JID和 request ID索引.

此类包含一个锁

request_factory.py

RequestFactory:  用命令处理UserRequests的C[r]UD 操作,基类. 具体实现在子类处理

rpc.py

RpcInterface: 远程过程调用协议接口类, RpcThread会用到此类

RpcThread:  为用户的请求状态改变提供ZeroRPC API, manager.py里的Manager类会用到

server_monitor.py

ServerMonitor: 此类处理一些server和osd的一些更新的数据,在manager.py里的Manager类会用到

user_request.py

UserRequestBase:  ceph管理对象的request基类

UserRequest:继承自UserRequestBase

RadosRequest: 远程操作librados mon命令的用户请求类, 用于调用salt服务里ceph.rados_commands的方法, 继承自UserRequest

osd_request_factory.py里有用到

SaltRequest:  UserRequest子类,远程操作命令的用户请求,没有指定ceph命令时使用, rpc.py里有用到

OsdMapModifyingRequest: RadosRequest的子类.将执行RADOS命令后的数据同步成OsdMap对象

PoolCreatingRequest:OsdMapModifyingRequest子类,此类与OsdMapModifyingRequest类相似.只是多了对pool的处理

PgProgress:封装PgCreatingRequest用来创建操作 块时的状态。

PgCreatingRequest: OsdMapModifyingRequest子类.

1.发送一个工作到salt,直到反馈jid,则salt执行任务结束

2.得到反馈的数据后,将数据同步成OsdMap对象

3.OsdMap数据更新后,等待被创建PG的离开状态为'creating'

persistence

persister.py

Persister: gevent.greenlet.Greenlet的子类.异步持久化更新的数据的队列

servers.py

Server: 表结构,主机信息表格的定义

Service:表结构,ceph服务信息表格的定义

sync_objects.py

SyncObject:表结构,定义存储ClusterMonitor信息的表格.

测试:

calamari环境搭建完成的前提下

export CALAMARI_CONFIG="/home/zhennan/calamari.conf"

命令:/opt/calamari/venv/bin/python  /usr/bin/nosetests  test_manager.py

由于calamari是在独立的虚拟环境下运行,所以python环境要指定虚拟环境的:/opt/calamari/venv/bin/python

转载于:https://my.oschina.net/jennerlo/blog/711894

calamari项目结构解析相关推荐

  1. 为什么Android项目mainactivity中有一个变量R_安卓4:第一个安卓程序 AS 安卓项目结构解析 手机运行app 模拟器运行app...

    学习于:https://www.bilibili.com/video/av22836860?p=2 首先,要知道AS的一个基本模型,1个Android project可以有多个module,而每个mo ...

  2. A005-AS项目结构解析

    我们先来看1: 我们创建Application的时候,要求我们输入项目名称,1就是我们创建的项目,AndroidDevelopCourse是项目名称,在实际开发中,我们要为我们项目取一个能明确表达产品 ...

  3. boot sprint 项目结构_京淘项目03 08.28

    JSP动态web资源,打war包 ##spring boot整合JSP 创建项目 spring SpringBoot整合web资源,, 在main文件下,新建webapp文件夹,,把WEBINF目录粘 ...

  4. 面试必会系列 - 11.1 一文读懂Maven:Maven工程类型、项目结构、工程关系、常见命令等

    本文已收录至 Github(MD-Notes),若博客中图片模糊或打不开,可以来我的 Github 仓库,包含了完整图文:https://github.com/HanquanHq/MD-Notes,涵 ...

  5. .NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI

    作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天 ...

  6. 基于IDEA搭建JavaWeb入门项目结构(2021版)

    前言:对于很多从eclipse等IDE迁移到IDEA开发工具的小伙伴,对于如何在IDEA上创建JavaWeb入门项目结构不太了解.或者即使创建成功也能勉强使用也不知其所以然.针对于此,写该篇博客予以总 ...

  7. MyBatis深入(2)-项目结构

    概述 本文的目的是让读者能对 MyBatis 的项目结构有一个简单的了解. 另外,在 http://www.mybatis.org 中提供了很不错的 MyBatis 中文文档,如果遇到一些问题可以翻阅 ...

  8. Xcode iOS 工程目录结构解析

    新建一个项目名为"a"的iOS工程,其项目总体结构解析如下:​​​​​​​ ​​​​​​​ 注意:iOS13以后,iOS项目中使用了SenceDelegate进行多窗口管理,目前多 ...

  9. 还不懂vue-cli构建SPA项目和SPA项目结构吗?赶紧看看这一篇

    目录 一,vue-cli构建SPA项目 前提: 搭建好NodeJS环境 1.1 什么是vue-cli? 1.2. 安装vue-cli npm install -g vue-cli   npm inst ...

最新文章

  1. log file sycn 概述
  2. Matlab GUI 设计(4):不同控件之间的数据传递
  3. 从功能测试到性能测试的转型之路
  4. linux 文件与进程
  5. 在南京 学计算机 高职学校,2018南京专科学校有哪些 最新高职院校名单
  6. spring mvc+junit
  7. .NET 5 的重大改变:消失的历史技术
  8. .NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入
  9. 22、mysql主键自增值和偏移量的查看和修改
  10. ParameterizedType应用,利用java反射获取参数化类型的class实例
  11. android 9图片报错,Android2.1加载9Patch图片运行后报错
  12. c语言字母表等腰三角,【原创】CS必修课——C语言基础编程实战26“C语言输出等腰三角形”...
  13. 一只青蛙跳向三个台阶_Java版剑指offer编程题第9题--变态跳台阶
  14. caffe中的 AlexNet,LeNet,CaffeNet
  15. paip.php and or 语句用法作用
  16. Windows PowerShell窗口下长ping+时间戳+记录log
  17. 黑莓7100刷机及修改PIN,完美破解超越输入法
  18. 详解KITTI数据集
  19. latex中页眉怎么去掉_LaTeX页面布局专题——页眉和页脚
  20. EXCEL 利用随机数公式生成随机字母、随机密码

热门文章

  1. CyberArk被评为2020年Gartner特权访问管理魔力象限的领导者
  2. 〖Python 数据库开发实战 - Python与MySQL交互篇⑪〗- 项目实战- 完善新闻管理系统中轮询的交互判断
  3. matlab小车运动轨迹增量式PID控制
  4. 21cn企业邮箱服务器端口号,21cn企业邮箱手机客户端设置--Android
  5. OS学习笔记-17(清华大学慕课)进程的同步和互斥
  6. java网络编程--UDP程序设计
  7. 微信小程序 MinUI 组件库系列之 progress 进度条组件
  8. 求函数最值(模拟退火算法C++实现)
  9. 人牙髓干细胞,多能分化,不只用于牙齿组织再生研究
  10. 智能体:华为给时代炼一炉钢