ironic db alembic

前面说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


考虑柔性负荷的综合能源系统低碳经济优化调度【考虑碳交易机制】(Matlab代码实现)内容概要:本文围绕“考虑柔性负荷的综合能源系统低碳经济优化调度”展开,重点研究在碳交易机制下如何实现综合能源系统的低碳化与经济性协同优化。通过构建包含风电、光伏、储能、柔性负荷等多种能源形式的系统模型,结合碳交易成本与能源调度成本,提出优化调度策略,以降低碳排放并提升系统运行经济性。文中采用Matlab进行仿真代码实现,验证了所提模型在平衡能源供需、平抑可再生能源波动、引导柔性负荷参与调度等方面的有效性,为低碳能源系统的设计与运行提供了技术支撑。; 适合人群:具备一定电力系统、能源系统背景,熟悉Matlab编程,从事能源优化、低碳调度、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究碳交易机制对综合能源系统调度决策的影响;②实现柔性负荷在削峰填谷、促进可再生能源消纳中的作用;③掌握基于Matlab的能源系统建模与优化求解方法;④为实际综合能源项目提供低碳经济调度方案参考。; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解过程,重点关注目标函数设计、约束条件设置及碳交易成本的量化方式,可进一步扩展至多能互补、需求响应等场景进行二次开发与仿真验证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值