Openstack Murano(kilo)二次开发之添加Volume

欢迎转载,转载请注明出处:http://my.oschina.net/fmnisme

##简介 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

  1. murano的核心库放在murano/meta/io.murano中,首先在murano/meta/io.murano/manifest.yaml中注册Cinder类,将下面的内容复制到manifest.yaml中并保存:

    	io.murano.resources.Cinder: resources/Cinder.yaml
    
  2. 创建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

  1. 修改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

修改到这里就结束了,enjoy it!

转载于:https://my.oschina.net/fmnisme/blog/521484

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值