共计 3401 个字符,预计需要花费 9 分钟才能阅读完成。
这篇文章主要为大家展示了“Openstack Murano 二次开发之如何添加 Volume”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“Openstack Murano 二次开发之如何添加 Volume”这篇文章吧。
## 需求 现在 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
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 不修改也不会有问题的。
这里我们用 Tomcatapp 来测试,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
以上是“Openstack Murano 二次开发之如何添加 Volume”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!