背景:基于ovirt-engine二次开发,为实现软删除功能,对现有的vm接口进行扩展字段,增加判断软删除字段以及软删除的时间字段。
1、首先要再ovirt-engine-api-model工程中,找到对应的资源类型,添加你需要的字段
types.Vm类中新增如下字段,
1
2
3Date softDeletionTime(); Boolean isSoftDeleted();
新增之后编译出包覆盖maven仓库下的model文件例如:model-4.3.31-sources.jar注意对应的sha1文件记得更新对应新的jar包
1sed -i "1c $(sha1sum /home/xx/.m2/repository/org/ovirt/engine/api/model/4.3.31/model-4.3.31-sources.jar |awk -F" " '{print$1}')" /home/xx/.m2/repository/org/ovirt/engine/api/model/4.3.31/model-4.3.31-sources.jar.sha1
2、新增字段
回到ovirt-engine工程中,在packaging/dbscripts/upgrade/04_03_0951_update_soft_delete_to_vm_dynamic.sql新增文件,增加字段
1
2
3select fn_db_add_column('vm_dynamic', 'is_soft_deleted', 'boolean DEFAULT false NOT NULL'); select fn_db_add_column('vm_dynamic', 'soft_deletion_time', 'timestamp with time zone');
packaging/dbscripts/create_views.sql 视图sql function语句补全,Vm_dynamic类涉及的属性都要添加,可以参考其他同类下的属性添加,例如
同理还有数据库接口的实现类org/ovirt/engine/core/dao/VmDynamicDaoImpl.java
更新事务模型,增加数据和set和get方法,org.ovirt.engine.core.common.businessentities.VmDynamic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public Date getSoftDeletionTime() { return this.softDeletionTime; } public void setSoftDeletionTime(Date softDeletionTime) { this.softDeletionTime = softDeletionTime; } public boolean IsSoftDeleted() { return isSoftDeleted; } public void setSoftDeleted(boolean isSoftDeleted) { this.isSoftDeleted = isSoftDeleted; }
同样需要更新org.ovirt.engine.core.common.businessentities.Vm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16public void setSoftDeleted(boolean value){ vmDynamic.setSoftDeleted(value); } public boolean isSoftDeleted(){ return vmDynamic.isSoftDeleted(); } public Date getSoftDeletionTime() { return this.vmDynamic.getSoftDeletionTime(); } public void setSoftDeletionTime(Date value) { this.vmDynamic.setSoftDeletionTime(value); }
到目前为止,查询虚拟机详情接口可以显示两个新增加的字段了。
3、更新接口适配
主要修改这个几个文件
首先PUT api/vms/123 接口到了rest-api后端的BackendVmResource.java中的update方法中,注意这个调用UpdateParametersProvider这个对象中要传入你的新加的数据,这也参数才能传递到数据库后端,实现中涉及org.ovirt.engine.core.common.action.VmManagementParametersBase的修改。
1
2
3
4
5
6Vm vm = performUpdate( incoming, new QueryIdResolver<>(queryType, IdQueryParameters.class), ActionType.UpdateVm, new UpdateParametersProvider() );
到了后端,修改更新命令函数:org.ovirt.engine.core.bll.UpdateVmCommand#executeVmCommand,对应的dal下的数据库接口和实现添加updateVmSoftDeleted方法,最后添加sql function。
1
2
3
4
5
6@Override protected void executeVmCommand() { VM vm = getParameters().getVm(); if(getParameters().isSetIsSoftDeleted()) { vmDynamicDao.updateVmSoftDeleted(vm.getId(), getParameters().isSoftDeleted()); }
1void updateVmSoftDeleted(Guid vmid, boolean isSoftDeleted);
1
2
3
4
5
6
7
8
9@Override public void updateVmSoftDeleted(Guid vmGuid, boolean isSoftDeleted) { MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() .addValue("vm_guid", vmGuid) .addValue("is_soft_deleted", isSoftDeleted) .addValue("soft_deletion_time", new Date()); getCallsHandler().executeModification("UpdateVmSoftDeleted", parameterSource); }
vms_sp.sql添加sql function
1
2
3
4
5
6
7
8
9
10
11
12
13CREATE OR REPLACE FUNCTION UpdateVmSoftDeleted ( v_vm_guid UUID, v_is_soft_deleted BOOLEAN, v_soft_deletion_time TIMESTAMP WITH TIME ZONE ) RETURNS VOID AS $PROCEDURE$ BEGIN UPDATE vm_dynamic SET is_soft_deleted = v_is_soft_deleted, soft_deletion_time = v_soft_deletion_time WHERE vm_guid = v_vm_guid; END;$PROCEDURE$ LANGUAGE plpgsql;
测试接口以实现
最后
以上就是灵巧冬日最近收集整理的关于ovirt-engine平台vm rest-api新增接口字段的全部内容,更多相关ovirt-engine平台vm内容请搜索靠谱客的其他文章。
发表评论 取消回复