Murano/Documentation/如何创建应用包
目录
应用包编写手册
Murano 是一个支持各种类型应用的应用程序目录。本文档旨在简化应用包的编写过程。
步骤 1. 准备执行计划
执行计划是一组元数据,描述了在虚拟机中安装应用程序的过程。它是可以在 Murano 工作流中触发的最小执行单元,并且应该被 Murano agent 理解。可以从执行计划中触发任何脚本。它可以是任何类型的脚本,这些脚本将执行命令并安装应用程序组件。每个脚本可以包含一个或多个文件。脚本可以在多个执行计划中重用。其中一个脚本应该是入口点,并且应该在资源模板文件中的Scripts部分中指定。除了Scripts部分之外,资源模板文件中还必须包含以下部分
- FormatVersion - 执行计划语法格式的版本
- Version - 执行计划的版本
- Name - 执行计划的人性化名称
- Parameters - 从 MuranoPL 接收的参数
- Body - Python 语句,应以 | 符号开头
- Scripts - 将脚本名称映射到脚本定义的字典。
- 脚本是执行计划的构建块,可以作为一个整体执行(就像一段代码),或者暴露一些可以在脚本中独立调用的函数。这取决于部署平台和执行器的功能。可以使用以下属性定义一个脚本
- Type: 脚本针对的部署平台名称。
- Version: 脚本所需的部署平台/执行器的可选最低版本。
- EntryPoint: 包含脚本入口点的文件的相对路径
- Files: 这是一个可选的文件数组,包含脚本所需的附加文件。使用<>指定文件的相对路径。根目录是Resource/scripts。
- Options: 一个可选的参数,类型包含附加选项
示例 DeployTelnet.template
FormatVersion: 2.0.0
Version: 1.0.0
Name: Deploy Telnet
Parameters:
appName: $appName
Body: |
return deploy(args.appName).stdout
Scripts:
deploy:
Type: Application
Version: 1.0.0
EntryPoint: deployTelnet.sh
Files:
- installer.sh
- common.sh
Options:
captureStdout: true
captureStderr: false
步骤 2. 准备 MuranoPL 类定义
MuranoPL 类控制应用程序部署工作流的执行。关于 MuranoPL 类的完整信息可以在这里找到。
示例
Namespaces:
=: io.murano.apps.linux
std: io.murano
res: io.murano.resources
Name: Telnet
Extends: std:Application
Properties:
name:
Contract: $.string().notNull()
instance:
Contract: $.class(res:Instance).notNull()
Workflow:
deploy:
Body:
- $.instance.deploy()
- $resources: new('io.murano.system.Resources')
- $template: $resources.json('DeployTelnet.template')
- $.instance.agent.call($template, $resources)
请注意,
- io.murano.system.Resources 是在 MuranoPL 中定义的系统类。
- io.murano.resources.Instance 是在核心 Murano 库中定义的类,可以在这里找到。该库包含 Murano agent 模板和初始化脚本。
步骤 3. 准备动态 UI 表单定义
以 yaml 格式创建一个表单定义。在配置表单之前,请编写一个需要用户设置的参数列表。负责选择 flavor、image 和可用区的某些表单字段最好在每个应用程序创建向导中使用。动态 UI 的语法可以在这里找到。带有 Telnet 应用程序表单定义的完整示例在此处可用。
步骤 4. 准备应用 Logo
查找或创建一个简单的图像(.png 格式),与您的应用程序相关联。它应该很小并且具有正方形形状。您可以指定图像的任何名称。在我们的示例中,让我们将其命名为telnet.png。
步骤 5. 准备清单文件
应在应用程序清单文件中描述常规应用程序元数据。它应采用 yaml 格式,并且应具有以下部分
- Format - 清单语法格式的版本
- Type - 包类型。有效选项为:Library 和 Application
- Name - 人性化的应用程序名称
- Description - 应用程序的简短描述
- Author - 创建应用程序包的个人或公司名称
- Classes - 基于应用程序部署的 MuranoPL 类列表
- Tags - 与此应用程序关联的单词列表。将在搜索期间提供帮助。可选参数
示例
Format: 1.0
Type: Application
FullName: io.murano.apps.linux.Telnet
Name: Telnet
Description: |
Telnet is the traditional protocol for making remote console connections over TCP.
Author: 'Mirantis, Inc'
Tags: [Linux, connection]
Classes:
io.murano.apps.linux.Telnet: telnet.yaml
UI: telnet.yaml
Logo: telnet.png
步骤 6. 组合成 zip 压缩包
应用程序压缩包应具有以下结构
- Classes 文件夹
- 应将 MuranoPL 类定义放入此文件夹中
- Resources 文件夹
- 此文件夹应包含执行脚本
- Scripts 文件夹
- 所有用于应用程序部署的脚本文件都应放在此处
- UI 文件夹
- 将动态 ui yaml 定义放在此处
- logo.png
- 图像文件应放在根文件夹中。它可以具有任何名称,只需在清单文件中指定它即可。
- manifest.yaml
- 应用程序清单文件。它是应用程序的入口点。文件名是固定的。
恭喜!您的应用程序已准备好上传到应用程序目录。