@tony-yin
2017-11-02T16:44:21.000000Z
字数 7576
阅读 881
Magicloud
Sharing
license
,一个节点对应一个license
,一个集群多个节点不能共用一个license
html
, js
, css
, Language
, img
, 还有与前端交互的所有后端controller
层的python
代码API Service
代码,项目中后端主要功能实现都在这个文件夹下的py
文件中cluster
, disk
, cpu
等所有metric
API
build
脚本,可以通过cat README
了解使用方法build
时候需要的脚本,大部分是为build debian
服务scaler
, controller
, company
等等,由于build
脚本中有专门操作oem
,所以更改这些文件夹中的内容,之后打包好的ISO
也会呈现不同的样式,比如替换公司名称, logo
等等ceph
源码,都是binary
,如果需要看源码,需要去github
上面clone
/root/magicloud/license/src/make_key.py
[root@tony src]# cd /root/magicloud/license/src/
[root@tony src]# ls
create_osd.py deb decode_key.cpp licobj.cpp licobj.hpp Makefile make_key.py mcvl.cpp
[root@tony src]# ./make_key.py --help
Usage: make_key.py [options] <License ID> <Node ID>
Options:
-h, --help show this help message and exit
-g With GW feature
-r With RRS feature
-p PRODUCT 0=VirtualStor Controller; 1=VirtualStor Scaler; 2=VirtualStor
Converger
-d DURATION Valid duration (days) of the license key
-g
: 是否拥有网关的功能,如果没有之后就不可以启用网关-r
: 是否拥有RRS
的功能,即远程复制服务器(Remote Replication Server)-p
: 选择产品类型,一般我们开发都是选择scaler
-d
: license
有效期配置,如果不配置默认是永久开发过程中,可以默认所有feature
都启用,选择产品类型为scaler
,有效期永久
[root@tony src]# ./make_key.py -gr -p 1
Usage: make_key.py [options] <License ID> <Node ID>
make_key.py: error: expected <license ID> <node ID>
结果显示脚本还需要两个参数: license ID
和node ID
,这两个参数的作用就是区别不同集群的license
和不同节点
ok, 正确姿势:
[root@tony src]# ./make_key.py -gr -p 1 1 1
CLAUSR-97O64G-1G6C20-BD9U37-7TV5R6-AYHAY5-854L13
[root@tony src]# ./make_key.py -gr -p 1 1 2
CLB118-ZT105C-7QQETJ-44OQR4-7I45BE-100R2E-WUJTSQ
[root@tony src]# ./make_key.py -gr -p 1 2 1
CLAUST-88S83K-1GBT4R-CBES2T-58CCRU-E3PKOP-QUWAJ3
[root@tony src]# ./make_key.py -gr -p 1 3 1
CLAUSV-79WA2O-1E6LAV-GAPLQI-0VDO9L-Y5G1OP-Y9217W
[root@tony src]# ./make_key.py -gr -p 1 3 2
CLB11C-XV943K-4S44OE-AJAW0O-6Z3OK4-GYPW5G-14TWHD9
[root@tony src]# ./make_key.py -gr -p 1 3 3
CLB79U-OGLY4G-4YKY3L-NQBAP3-80KV7U-KFEU6S-1UCHVXJ
/root/magicloud/build
/root/magicloud/README
[root@tony magicloud]# cat README
1. Run 'BUILD_NUMBER=xxx ./build config' to configure the build environment
2. Run 'BUILD_NUMBER=xxx ./build oem putian' to configure the build environment to build PtBus ISO
3. Run 'BUILD_NUMBER=xxx ./build kernel' to build Linux kernel
4. Run 'BUILD_NUMBER=xxx ./build debs' to build the debian packages
This will build PtBus's deb packages and put them into 'output' directory.
5. Run 'BUILD_NUMBER=xxx ./build iso' to build the Installation CD
This will build the ISO image and put it into 'output' directory.
6. Run './build clean' to clean up the build environment
BUILD_NUMBER=666 ./build config
BUILD_NUMBER=666 ./build oem putian
BUILD_NUMBER=666 ./build kernel
BUILD_NUMBER=666 ./build debs
BUILD_NUMBER=666 ./build iso
编译过程中如果某一步出错了,希望重新编译那一步操作,那么需要把
jobnr
文件删除,然后运行./build clean
清理一下环境
Magicloud
前端运用了gulp
和webpack
工具构建,技术栈涉猎jQuery
,angular
,bootstrap
,flatUI
前端构建工具我们分别用了gulp
和webpack
,gulp
主要负责前端JS
,HTML
,CSS
的uglify
工作;webpack
主要负责启动服务或者代理工作
使用这两个工具,需要根据package.json
文件安装相应的软件包
/root/magicloud/mcs3-ui/src
npm build
or
gulp default
具体请参考
/root/magicloud/mcs3-ui/src/gulpfile.js
/root/magicloud/mcs3-ui/src
npm start
or
webpack-dev-server
具体请参考
/root/magicloud/mcs3-ui/src/webpack.config.js
,该文件可以由模板文件webpack.config.js.sample
拷贝修改生成
/root/magicloud/mcs3-ui/src/web // common html
/root/magicloud/mcs3-ui/src/web/component // component html
index.html
作为页面入口,导入了需要的所有js
和css
的包
html
文件数量较多,具体根据文件名找到对应文件查看源代码,就不一一赘述
/root/magicloud/mcs3-ui/src/web/js // common js
/root/magicloud/mcs3-ui/src/web/component/js // component js
common.js
: 一些公共方法的集合base_component.js
: 所有component
的基类translator
: 语言翻译
js
文件数量较多,具体根据文件名找到对应文件查看源代码,就不一一赘述
/root/magicloud/mcs3-ui/src/web/css
custom-ui.css
: 这里面是定制化的style
,我们改版的样式代码都在这里面
/root/magicloud/mcs3-ui/src/web/image
/root/magicloud/mcs3-ui/src/web/L10N
分为三类:api
,notification
,ui
,然后又分三种语言:英文,中文简体,台湾繁体
/root/magicloud/mcs3-ui/src/cgi-src
Magicloud
用了两种路由,一种是Restful API
的方式,另一种是Ajax
的方式
项目中Restful API
是基于Angular $resource
服务构建的,所以还得稍微介绍一下Angular resource
。。。
$http
服务提供的实现极为简单和低级,可以用来发送XHR
请求,同时它还为你提供了很大的可控性和灵活性。但是,在大多数情况下,我们需要处理对象,以及封装了特定属性和方法的对象模型,例如一个person
对象(带有详细信息),或者一个信用卡对象。
$resource
就是为这一功能而设计的。AngularJS
中的resource
(资源)允许我们用描述性的方式来定义对象模型,它可以描述以下内容:
/cgi-bin/mcs3/json/:api
)GET
, POST
, PUT
, DELETE
)get
、save
、query
、remove
和delete
方法),这些方法为对象模型包装了特定的功能和业务逻辑(例如信用卡对象的charge()
方法)。(这五种默认的方法是为了CURD
而生的,其中get
和query
稍有区别,前者返回所有entry
,后者返回单个,最重要的是可以自定义扩展,这也是我们项目中的主要应用)isArray
参数配置)headers
参数配置)obj
表示请求服务器指定url
地址后返回的$resource
对象,该对象中就包含了与服务端进行数据交互的全部API。
参数url
表示请求服务器的地址,其中允许占位符变量,该变量必须以:
为前缀,例如:
var obj=$resource('url?action=:act');
obj.$save{act:'save'}
那么,在执行save
动作时,向服务端发送的实际地址就为url?action=save
。
此外,可选参数paramsDefaults
是一个对象,用于设置请求时的默认参数值,在发送请求时,该对象中的全部值将自动进行序列化,如遇占位符变量自动替换(也可以通过第三个参数替换),并将结果添加到url
请求之后,代码如下:
var obj=`$resource`('url?action=:act',{
act:'save',
a:'1',
b:'2'
});
执行上述代码后,向服务器发送的实际地址是url?action=save&a=1&b=2
。
另外一个可选参数actions
的功能是扩展默认资源动作,例如,可以在该对象中自定义新的方法:
var boj=$resource('url?action=:act',{
...
},{
a:{
method:'get'
}
}
);
然后就可以在$resource
对象中直接调用在可选参数actions
中自定义的方法a
,即obj.$a()
参考链接:
var url = "/cgi-bin/mcs3/json/:api"; // 请求url,:api为占位符
...
return $resource(url, {}, {
host_nic_list : {
method: "GET",
params: { api : "host_nic_list" },
// :api占位符替换字段为host_nic_list,所以最后的请求url为/cgi-bin/mcs3/json/host_nic_list
transformResponse: [check_api_error_and_transform, transform_host_nic_list]
},
...
);
目前项目中主要使用了三种语言,分别是英文,中文简体和台湾繁体,以后的开发中,我们将舍弃台湾繁体,仅兼容英文和中文简体
语言类型指的是根据项目中语言的应用场景进行的分类,分为api
,notification
和ui
三种方式
即声明语言字符串和语言变量的map
绑定关系
在html
中,通过在任意标签中声明data-translate
这个属性,调用前文声明的变量,例如footer
:
<footer class="mc-footer" data-translate="COMPANY">
PS:具体实现需要查看上文提到的
translator.js
,里面做了一系列的封装工作
Log在手,天下我有
logging
模块中主要由四个部分组成:
apache
的相关信息udev
等ceph.log
,ceph.aduit.log
,ceph-osd.log
,ceph-mon.log
等等,ceph
内部相关的日志rpc
异步处理信息(应用较多)task
和更新task
的两个API
ganglia
相关的信息,比如ganglia
向每台主机分发信息等monitor
相关的信息,比如后端监控各种metrics
,集群信息,磁盘,内存,IOPS
等等config file
/root/magicloud/mcs3-deploy/src/mcs3/log.py
然后你可以在MCLog.init_handler()
方法中添加或者修改handler
,filter
和formatter
,log level
就在handler
里面设置
上面提到了许多mcs3admin.log
,mcrpc.log
等众多日志,这些日志存在的意义就是让不同进程的业务日志打印到不同文件中,达到日志业务分离的目的,每天系统会针对每个日志进行压缩备份,生成空的日志文件,定期清除备份归档文件
log
的文件指定和初始化都是在众多守护进程的文件代码中,例如下面的mcarpc daemon
:
模块查找
debian
打包路径查看python
交互式命令行使用help
命令查看module
(这个不局限于某个项目,针对python
)
>>> help('mcs3.utils')
daemon
相关的代码后,需要重启守护进程才会生效py
文件并不是都是以py
结尾/etc/ceph/ceph.conf
达到重新创建集群的目的恩。。用过的都说好
CLI
方式批量创建OSD
和启用OSD
,Profile
装饰器优雅使用)