Openstack Murano(kilo)二次开发之添加Volume
Openstack Murano(kilo)二次开发之添加Volume
欢迎转载,转载请注明出处:http://www.cnblogs.com/fmnisme/p/openstack_murano_add_volume.html
简介
murano是OpenStack的Application Catalog服务,推崇AaaS(Anything-as-a-Service)的概念,通过统一的框架和API实现应用程序快速部署和应用程序生命周期管理的功能,降低应用程序对底层平台(OpenStack层和虚拟化层)的依赖。
可以阅读这边博客了解下murano:Murano环境搭建、使用介绍和思考,具体安装过程则参考官方文档.
需求
现在murano还不支持在实例中添加volume,不过murano是通过heat创建资源的,而heat是可以创建并附加volume的,heat可以做到的事,murano就可以做到(当然还可以做的更多),下面我们就来一步一步的实现这个功能。
修改io.murano
创建Cinder.yaml
murano的核心库放在
murano/meta/io.murano
中,首先在murano/meta/io.murano/manifest.yaml
中注册Cinder类,将下面的内容复制到manifest.yaml中并保存:io.murano.resources.Cinder: resources/Cinder.yaml
创建
murano/meta/io.murano/Class/resources/Cinder.yaml
文件:Namespaces:
=: io.murano.resources # 当前命名空间
std: io.murano Name: Cinder Properties:
# 要创建的Volume大小,单位GB
size:
Contract: $.int().notNull() Methods:
initialize:
Body:
- $._environment: $.find(std:Environment).require() genTemplate:
Arguments:
# volume要附加到的实例
- instance:
Contract: $.class(Instance).notNull()
Body:
# $volumeName表示将要创建的volume名字,$instance.name是实例的名字,同时也是heat模板中instance的名字。
- $volumeName: format('volume-{0}-{1}', $.id(), $instance.name)
- $volumeAttachment: format('volumeAttachment-{0}-{1}', $.id(), $instance.name)
# $template里保存的是标准的heta模板
# 模板首先创建了一个Volume,然后用VolumeAttachment附加到指定的实例上
- $template:
resources:
$volumeName:
type: OS::Cinder::Volume
properties:
size: $.size
$volumeAttachment:
type: OS::Cinder::VolumeAttachment
properties:
volume_id: { get_resource: $volumeName }
instance_uuid: { get_resource: $instance.name }
# 返回创建的模板,改模版会在后面的步骤中合并到一个完整的heat模板中去。
- Return: $template
修改Instance.yaml
修改
murano/meta/io.murano/Class/resources/Instance.yaml
(1) 在
Properties:
块里追加下面的内容:volumeSize:
Contract: $.int()
Default: null
这个是给app传参数进来用的。
(2) 在第99行(也就是
- $.networks.customNetworks.select($this.joinNet($, $securityGroupName))
)后面添加如下内容:- If: $.volumeSize != null
Then:
- $cinder: new(Cinder, size => $.volumeSize)
- $volumeTemplate: $cinder.genTemplate($this)
- $.instanceTemplate: $.instanceTemplate.mergeWith($volumeTemplate)
这几行代码很好理解:如果
$.volumeSize
不为空,则实例化一个Cinder对象,然后将生成的volume模板合并的到$.instanceTemplate
模板中去。
更新io.murano
```
murano-manage --config-file ./etc/murano/murano.conf import-package meta/io.murano/ --update
```
修改murano-app
murano现在可以添加volume了,现在还要修改一个app来让它使用该功能,需要注意的是,Instance.yaml中的volumeSize
参数是可选参数,所以现有的app不修改也不会有问题的。
这里我们用Tomcat
app来测试,Tomcat
可以在https://github.com/openstack/murano-apps.git
下载,下载完后记得git checkout -t origin/stable/kilo
切换到的正确的分支。
编辑murano-apps/Tomcat/package/UI/ui.yaml
:
Version: 2
Application:
?:
type: io.murano.apps.apache.Tomcat
name: $.appConfiguration.name
instance:
?:
type: io.murano.resources.LinuxMuranoInstance
name: generateHostname($.instanceConfiguration.unitNamingPattern, 1)
flavor: $.instanceConfiguration.flavor
image: $.instanceConfiguration.osImage
keyname: $.instanceConfiguration.keyPair
availabilityZone: $.instanceConfiguration.availabilityZone
assignFloatingIp: $.appConfiguration.assignFloatingIP
volumeSize: $.instanceConfiguration.volumeSize #添加这一行
[...]
- name: unitNamingPattern
type: string
label: Instance Naming Pattern
required: false
maxLength: 64
regexpValidator: '^[a-zA-z][-_\w]*$'
errorMessages:
invalid: Just letters, numbers, underscores and hyphens are allowed.
helpText: Just letters, numbers, underscores and hyphens are allowed.
description: >-
Specify a string, that will be used in instance hostname.
Just A-Z, a-z, 0-9, dash and underline are allowed.
# 添加下面几行
- name: volumeSize
type: integer
label: Volume Size(GB)
required: false
description: Instance Volume Size.
上文中的[...]
表示省略掉的内容,需要修改的地方有注释。修改完后,创建Tomcat时会多一个可选的参数VolumeSize
,如果该参数不为空就会创建volume了。
更新Tomcat代码:
murano-manage --config-file ./etc/murano/murano.conf import-package ../murano-apps/Tomcat/package --update
修改到这里就结束了,enjoy it!
Openstack Murano(kilo)二次开发之添加Volume的更多相关文章
- TFS二次开发系列:四、TFS二次开发WorkItem添加和修改、保存
WorkItemStore:表示跟踪与运行 Team Foundation Server的服务器的工作项客户端连接. A.添加工作项 1.首先获得某服务器的WorkItemStore. WorkIte ...
- phpcms v9 二次开发 - 自己添加源文件
一.在根目录添加入口文件, 我现在要在根目录添加一个文件名为test.php 这样一个文件,为了调用系统的公用类和函数,必须加入一下包含文件 test.php代码如下 <?phpdefine(' ...
- 基于ZFAKA二次开发,添加PayJS支付渠道
项目地址:https://github.com/hiyouli/payjs-for-zfaka 关于ZFAKA,请移步:ZFAKA 免费.安全.稳定.高效的发卡系统,值得拥有! 演示地址:http:/ ...
- Revit二次开发之添加选项卡和按钮
我们日常在revit开发中经常会用到按钮,可以通过revitAPI提供的接口创建按钮,今天我简单介绍一下两种按钮,一种是单命令按钮,另一种是含下拉菜单的按钮,包括创建他们的方法. 实现方法 1.实 ...
- Ubuntu环境下Nutch1.2 二次开发(添加中文分词)
前提nutch1.2已部署到eclipse中 详见:http://www.cnblogs.com/cy163/archive/2013/02/19/2916419.html 1 部署IKAnalyze ...
- NX二次开发-自定义添加右键菜单RegisterConfigureContextMenuCallback
首先声明这个知识我以前不知道,是夏天的时候看到别人在唐工的QQ群里问的,唐工说西门子官方有这个例子.那个时候我因为在忙其他事情,也就没去研究那个右键菜单到底是怎么做的.关于自定义添加右键菜单Regis ...
- NX二次开发-UFUN添加工程图投影视图UF_DRAW_add_orthographic_view
NX9+VS2012 #include <uf.h> #include <uf_draw.h> #include <uf_obj.h> #include <u ...
- ecshop二次开发 购物车添加备注信息
- TFS二次开发、C#知识点、SQL知识总结目录
TFS二次开发系列 TFS二次开发系列:一.TFS体系结构和概念 TFS二次开发系列:二.TFS的安装 TFS二次开发系列:三.TFS二次开发的第一个实例 TFS二次开发系列:四.TFS二次开发Wor ...
随机推荐
- Allegro转换PADS终极篇(转载)
Allegro转换PADS终极篇.....http://www.eda365.com/forum.php?mod=viewthread&tid=86947&fromuid=190625 ...
- RedHat下安装OPENCV
1.解压 unzip opencv-2.4.9.zip 2.进入目录,cmake CMakeLists.txt 生成build文件 3.使用命令 make 编译 4.使用命令 make instal ...
- android通过gradle打包
这里是最简单的打包方法,实际上gradle的语法是groovy,可以通过编写脚本实现更智能的构建,这个我还不懂==,等我学习了解后,单独整理一个gradle的随笔,这里先应付打包吧 环境要求 安装 ...
- machine learning----->什么是机器学习
1.概述: 学习一门学问的第一步就是要了解这门学问到底是什么,它可以被用来干什么. 本文罗列了学习machine learning的过程中看到的一些写得比较好的文章以及读完这些文章之后对机器学习的初步 ...
- ssh搭建后的简化
关于ssh如何搭建还有不懂得朋友可以参考以下网址:http://www.cnblogs.com/LarryBlogger/p/5841446.html 在这里我就不重复再讲了! ssh搭建后的简化 简 ...
- Collection List Set和Map用法与区别
labels:Collection List Set和Map用法与区别 java 散列表 集合 Collection 接 口的接口 对 象的集合 ├ List ...
- 浅析Java内存模型
概述 Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节.此处的变量是线程共享的,存在竞争问题的. Java内存模型规定了所有的变量 ...
- Dev GridControl数据导出格式问题
环境:DevExpress9.3,Vs2008 DevExpress的GridControl提供方便的数据导出到Excel功能,导出中用户可以根据GridControl的格式进行导出(ExportTo ...
- js完美转换阿拉伯数字为数字大写(原创)
啥都不说,直接上代码: //阿拉伯数字转换为简写汉字 function Arabia_To_SimplifiedChinese(Num) { for (i = Num.length - 1; i &g ...
- 如何让chrome始终运行插件
使用chrome可能有时候会拦截比如阿里旺旺和腾讯等的登录插件,那么怎么才始终允许,而不需要每次确认呢.下面. 1. 打开Chrome浏览器. 在地址栏中输入 chrome://plugins 回车 ...