• 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

    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!

  • 相关阅读:
    实现h5中radio单击取消与选中
    小程序中的组件化理解
    阿里字体css代码引入方法
    前端布局心得小结
    Python学习资源汇总,转载自他人
    史上最全 原生javascript的知识总结,适合新手及查资料用!
    windows Python 3.4.3 安装图文
    PyInstaller编译python3时使用的详细参数介绍
    PyInstaller 安装方法 及简单的编译exe (python3)
    Windows 安装 GTK+ 图文说明
  • 原文地址:https://www.cnblogs.com/fmnisme/p/openstack_murano_add_volume.html
Copyright © 2020-2023  润新知