欢迎转载,转载请注明出处:http://my.oschina.net/fmnismehtml
##简介 murano是OpenStack的Application Catalog服务,推崇AaaS(Anything-as-a-Service)的概念,经过统一的框架和API实现应用程序快速部署和应用程序生命周期管理的功能,下降应用程序对底层平台(OpenStack层和虚拟化层)的依赖。git
能够阅读这边博客了解下murano:Murano环境搭建、使用介绍和思考,具体安装过程则参考官方文档.github
##需求 如今murano还不支持在实例中添加volume,不过murano是经过heat建立资源的,而heat是能够建立并附加volume的,heat能够作到的事,murano就能够作到(固然还能够作的更多),下面咱们就来一步一步的实现这个功能。apache
##修改io.murano ###建立Cinder.yamlapp
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.yamlui
修改murano/meta/io.murano/Class/resources/Instance.yaml
this
(1) 在Properties:
块里追加下面的内容:spa
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!