ironic db alembic
来源:互联网 发布:唐氏筛查自动计算软件 编辑:程序博客网 时间:2024/06/05 08:58
前面说nova的时候说过数据库的部分,nova用的是oslo.db中的类用来更新和迁移数据库,在nova/db/sqlalchemy/migrate_repo/versions中按序号由小到大编号,进行改动,
复写upgrade和downgrade来在不同版本的数据库之间进行变动。前面也说过ironic作为新的openstack模块,在快速搭建的过程中,用到了更多开源的东西,除了好用,最主
要的我认为还是快速,比较突出的一个是用了pecan的框架迅速架起了rest api的框子,同时对比较麻烦的数据库部分则用了alembic!没有和其他模块一样用oslo.db。
在nova等模块中db中的version是按照xxxx_yyy的形式出现的,其中xxxx表示的是改动的版本,nova的基准是215,之后每回有改动则依次递增。
在ironic中由于引入了alembic,一定程度上配置的部分多了,但变动似乎更简便了,可以参见mark link 1中简单的介绍,因此在ironic中,db的部分目录结构为:
/db
/sqlalchemy
alembic
versions #放置各种版本的script文件
xxxxxxx.py #生成的scripy文件
env.py
script.py.mako #scripy的模板
alembic.ini #alembic的配置文件,最主要的是指定了script目录
api.py #和其他模块一致
migration.py #和其他模块一致
models.py #DB的model,和nova等模块一样(backend还是sqlalchemy)
特别需要指出的是,nova中是自己编号数据库的更新版本,而在ironic中,使用了alemic后,版本之间的关系在script中,由:
revision = '21b331f883ef'
down_revision = '2581ebaf0cb2'
像这样的定义出现在alembic/versions/xxxx.py中,而在执行 “
ironic-dbsync --config-file /etc/ironic/ironic.conf create_schema”
时发生的动作:
1. 找到script的位置(alembic.ini中指定);
2.根据传进来的revision版本,找到执行script的过程,不传时默认为“head”(最新版本),然后从current的version一直执行到dest(目标版本)的
所有脚本;
btw:openstack的ironic封装了alembic的调用,主要是目录alemic放入openstack之后目录结构变了,其他的改动不多。
在alembic框架下对数据库做修改也很简单:
1. 修改ironic/db/sqlalchemy/models.py,添加自己的table
2. 执行:ironic-dbsync --config-file /etc/ironic/ironic.conf revision --autogenerate -m "description of your action"
INFO [alembic.migration] Context impl MySQLImpl.
INFO [alembic.migration] Will assume non-transactional DDL.
INFO [alembic.autogenerate.compare] Detected added table 'xxx' (这里xxx和yyy均为在models.py中添加的table)
INFO [alembic.autogenerate.compare] Detected added table 'yyyy'
Generating /usr/lib/python2.7/site-packages/ironic/db/sqlalchemy/alembic/versions/1800276bacaa_addxxxx.py ... done
注意的是:生成的script的描述是执行命令时"-m" 参数添加的注释所得
这时打开生成的script文件,比如我生成的1800276bacaa_addxxxx.py就能看到自动生成了upgrade和downgrade两个方法了,
生成的模板就是前面提到的“script.py.mako”。
3.执行: ironic-dbsync --config-file /etc/ironic/ironic.conf upgrade
INFO [alembic.migration] Context impl MySQLImpl.
INFO [alembic.migration] Will assume non-transactional DDL.
INFO [alembic.migration] Running upgrade 2fb93ffd2af1 -> 1800276bacaa, add xxx
btw:这里我添加表之后upgrade,默认是升级到head,即最新的version,也可以自己制定
4. 进到mysql数据库,就发现表格已经创建,使用show create table xxx就能看到生成的表格是按照我们预想的得到的。
5. 在ironic/db/api.py以及ironic/db/sqlalchemy/api.py中添加抽象类和具体实现类,具体操作可以参照任意openstack模块的写法。
至此,修改ironic的db已经没有可以了。
mark link:
1. http://windrocblog.sinaapp.com/?p=940
- ironic db alembic
- Heroku Postgres, db migrate fail: alembic.util.exc.CommandError: Can't locate revision identified by
- alembic 使用
- build alembic
- alembic 使用
- 【ironic】ironic 部署
- 【ironic】ironic 命令
- ironic简介
- ironic objects
- ironic pxe
- ironic部署
- ironic简介
- 【ironic】ironic介绍与原理
- 【ironic】ironic / neutron / nova 配置文件
- Alembic 简明教程
- Maya Standalone & Alembic tips
- Alembic 简明教程
- 【转】 Alembic 简明教程
- Div+css简介
- bat 文件 复制 删除命令cmd
- TCP/IP四层模型和OSI七层模型的概念
- 【学习笔记】JavaScript编码规范-比较运算符&相等
- stm8 软件模拟IIC驱动PCF8563T,NOKIA5110液晶显示
- ironic db alembic
- Linux下启动oracle服务器
- Linux命令学习
- 字符串string转整数int 实现自己的atoi函数
- 设计模式C++实现十八:桥接模式
- JAVA JNI Demo
- 径向基核函数 (Radial Basis Function)--RBF
- 改变word的语言字典
- MyAlertViewActionSheet