跳转到: 导航, 搜索

Murano/Documentation/如何创建应用包

< Murano‎ | 文档

应用包编写手册

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 应用程序表单定义的完整示例在此处可用。

查找或创建一个简单的图像(.png 格式),与您的应用程序相关联。它应该很小并且具有正方形形状。您可以指定图像的任何名称。在我们的示例中,让我们将其命名为telnet.png

步骤 5. 准备清单文件

应在应用程序清单文件中描述常规应用程序元数据。它应采用 yaml 格式,并且应具有以下部分

  • Format - 清单语法格式的版本
  • Type - 包类型。有效选项为:LibraryApplication
  • 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
应用程序清单文件。它是应用程序的入口点。文件名是固定的。

恭喜!您的应用程序已准备好上传到应用程序目录。