当前位置: 首页 > 工具软件 > Murano Agent > 使用案例 >

Openstack-Murano应用包

刁冠宇
2023-12-01

Murano Package是Murano部署应用的基础,Package本身不包含任何的安装包,只是描述了应用的一些基本属性等信息
标准的Murano Package长相如下:

drwxr-xr-x 2 root root    34 Jul 26 14:55 Classes
-rw-r--r-- 1 root root 33332 May  8  2015 logo.png
-rw-r--r-- 1 root root  1273 Apr 18  2017 manifest.yaml
drwxr-xr-x 3 root root    48 Apr 12  2017 Resources
drwxr-xr-x 2 root root    20 Jul 26 14:57 UI

[root@localhost Apache]# tree
.
├── Classes
│   └── ApacheHttpServer.yaml
├── logo.png
├── manifest.yaml
├── Resources
│   ├── DeployApache.template
│   └── scripts
│       └── runApacheDeploy.sh
└── UI
    └── ui.yaml

https://docs.openstack.org/developer/murano/appdev-guide/developer_index.html

一、manifest.yaml

@1. Package的Type主要分为2类,Application和Library
这个比较好理解,
Library是以一个库,不能用来部署,主要包含了一些公共方法和属性,用于被Application继承和使用,Murano平台提供了很多已有的library可以直接使用

Application才是可以被Murano直接deploy的包
@2. FullName、Name、Description等都是描述Package的基本属性;
@3. Require表示Package之间的依赖,后续描述;
如下是Http Apache Package的manifest.yaml

二、$class.yaml
manifest.yaml中的Classes定义了对应的yaml文件,这个文件主要存放在Classes目录下

@1. namespaces
名称空间的声明,指定了可以在类体中使用的前缀,以使长类名称更短
举例说明不废话:
namespace中定义 –> std: io.murano
则在后面中的引用 –> std:Application 相当于是io.murano.Application
特殊说明: “=”相当于是current namespace, 所以MyClass相当于是com.awcloud.package.MyClass
@2. Name
@3. Extends
继承的Class, 目前基本上都是继承的io.murano.Application
@4. Properties
声明的参数,主要包含如下几部分
名称: – 参数名称
Contract: 声明类型,常见的包括如下,详细参考:http://muranotest.readthedocs.io/en/latest/articles/murano_pl.html#contract
类型 说明

$.int()    整形
$.string() 字符串
$.string().notNull()   非空字符串
$.bool()   布尔类型(true/false) 0会被转为false,其他转为true
$.class(ns:ClassName)  类
$.class(ns:ClassName).notNull()    非空类

Usage:声明作用域,包括如下
属性类型 说明
In 输入参数,该参数只能通过UI设置,不能在MuranoPL代码里面修改。这是类属性的默认类型。
Out 输出参数,该参数只能在MuranoPL代码里面修改,不能通过UI设置。
InOut 既能由UI设置,又能在MuranoPL代码修改的参数。
Const 和In类似,不同的是只能被用户设置一次。
Runtime 和Out类似,不同的是不会被序列化。
Default:默认值
@5. Method
声明的方法及实现, 默认必须包含的方法:
initialize: 初始化方法,主要是获取依赖的环境信息
deploy: 应用部署的主方法
Murano PL是一种用Python解释的类yaml的语言,它有如下的约束:

1. 赋值用冒号,且冒号后要跟空格 
2. 等号表示判断 
3. 逗号不能在字符串内使用 
4. 变量要用$作为前缀 
5. 单个$ 就是Java里面的this,而$xxx 表示变量xxx,$.xxx 表示类变量xxx

基本的用法:
1) if语句

      -If:not$.getAttr(deployed, false)
        Then:
          -$.setAttr(deployed, true)
        Else:
          -$._environment.reporter.report($,"application has deployed")

每个环境只能部署一次,本段代码用于判断是否已经部署,防止重复部署
4) 并发执行(可指定并发数)

- Parallel:
  - $.masterNode.deployInstance()
  - $.minionNodes.take($.nodeCount).pselect($.deployInstance())
  - $.gatewayNodes.take($.gatewayCount).pselect($.deployInstance())

5.)调用脚本

   -$resources: new(sys:Resources)
   -$template:$resources.yaml('DeployOrionChef.template').bind(dict( port => $.port))
   -$result:$.instance.agent.call($template, $resources)

部署APP基本的步骤:
1. 新增安全组暴露应用的端口信息
2. 创建虚拟机
3. 在虚拟机中执行安装APP的脚本

 类似资料: