资源编排

概述

资源编排:一款帮助云计算用户简化云资源管理和自动化部署运维的服务。通过资源栈模板,定义所需的云资源、资源间的依赖关系、资源配置等,可实现自动化批量部署和配置资源,轻松管理云资源生命周期,通过API和SDK集成自动化运维能力。

图 1所示:
图 1. 资源编排


功能特点

  • 用户只需创建资源栈模板或修改已有模板,定义所需的云资源、资源间的依赖关系、资源配置等,资源编排将通过编排引擎自动完成所有资源的创建和配置。
  • 云平台提供示例模板,也可使用可视化编辑器,快速创建资源栈模板。
  • 可根据业务需要,动态调整资源栈模板,从而调整资源栈以灵活应对业务发展需要。
  • 如果不再需要某资源栈,可一键删除该栈及栈内所有资源。
  • 可重复使用已创建的资源栈模板快速复制整套资源,无需重复配置。
  • 可根据业务场景灵活组合云服务,以满足自动化运维的需求。

资源栈

资源栈:资源编排通过资源栈模板快速创建和配置一组资源(以及资源间的依赖关系),这组资源定义为一个资源栈,通过管理资源栈,维护这组资源。

资源栈支持以下操作:
  • 创建资源栈
  • 查看资源栈信息
  • 删除资源栈

ZStack Cloud主菜单,点击资源中心 > 资源编排 > 资源栈,进入资源栈界面。点击创建资源栈,弹出创建资源栈界面。

创建资源栈

创建资源栈分为以下三步:
  1. 资源栈配置。
    可参考以下示例输入相应内容:
    • 区域:自动显示当前区域
    • 名称:设置资源栈名称。命名规则:长度限制1~128字符,输入内容只能包含中文汉字、英文字母、数字、空格和以下7种英文字符 - _ . ( ) : + 且不支持以空格开头或结尾
    • 简介:可选项,可留空不填
    • 超时设置:设置创建资源栈的超时时限,超时将失败,默认为60分钟
    • 失败回滚:设置创建失败是否清理已创建的资源,默认开启
    • 创建方式:选择创建资源栈方式,本章节以创建LNMP为例。支持以下三种方式:
      • 资源栈模板:使用系统模板或自定义模板创建资源栈
        Note: 如何创建自定义模板,请参考资源栈模板章节。
      • 上传文件:使用已定义的UTF8编码格式模板文件创建资源栈
        Note: 关于模板语法的详细介绍,请参考资源栈模板语法章节。
      • 自定义文本:在文件编辑器中编辑模板创建资源栈
        Note: 关于模板语法的详细介绍,请参考资源栈模板语法章节。
    图 1所示:
    图 1. 基础配置


  2. 模板配置。

    模板配置项与所选的模板有关,不同类型的资源栈需要输入的参数不同,本章节以创建LNMP为例。

    可参考以下示例输入相应内容:
    • 镜像:选择创建云主机的镜像
    • 计算规格:选择创建云主机的计算规格
    • 网络:选择创建云主机的网络
    Note:
    • 该功能通过调用DecodeStackTemplateAPI实现。
    • 开始创建资源栈前,可点击预览查看将要创建的资源列表。
    • 创建资源栈需要一定时长,请等待创建完成。
    图 2所示:
    图 2. 模板配置


  3. 确认信息。

    查看将要创建的资源栈,支持跳转修改。

    图 3所示:
    图 3. 确认信息


查看资源栈信息

资源栈界面,选择某一资源栈,查看其详情页,可查看当前创建的资源栈状态和信息,包括:总览、资源、事件、审计。
  • 总览:显示资源栈当前状态、所有者、UUID、模板内容等信息,其中模板内容支持修改
  • 资源:显示资源栈所包括的全部资源信息
  • 事件:显示资源栈生命周期中发生的每一个事件
  • 审计:查看此资源栈的相关操作

删除资源栈

如果不再使用某一资源栈,可将该资源栈删除。
Note:
  • 删除资源栈默认会删除栈内编排创建的所有资源,包括云主机或云盘。
  • 若资源栈所对应的模板事先已设置DeletionPolicyRetain,栈内编排创建的所有资源将会被保留,详情可参考资源(Resources)章节

资源栈模板

资源栈模板:一个UTF8编码格式的文件,基于模板可快速创建资源栈,用户在模板中定义所需的云资源、资源间的依赖关系、资源配置等,资源编排将解析模板,自动完成所有资源的创建和配置。

资源栈模板支持以下操作:
  • 创建资源栈模板
  • 查看模板信息
  • 启用模板
  • 停用模板
  • 从模板创建资源栈
  • 修改模板
  • 删除模板

创建资源栈模板

ZStack Cloud主菜单,点击资源中心 > 资源编排 > 资源栈模板,进入资源栈模板界面。点击创建资源栈模板,弹出创建资源栈模板界面。

可参考以下示例输入相应内容:
  • 名称:设置资源栈模板名称。命名规则:长度限制1~128字符,输入内容只能包含中文汉字、英文字母、数字、空格和以下7种英文字符 - _ . ( ) : + 且不支持以空格开头或结尾
  • 简介:可选项,可留空不填
  • 创建方式:选择创建资源栈方式。支持以下两种方式:
    • 自定义文本:在文件编辑器中编辑模板创建资源栈
      Note: 关于模板语法的详细介绍,请参考资源栈模板语法章节。
    • 上传文件:使用已定义的UTF8编码格式模板文件创建资源栈
      Note: 关于模板语法的详细介绍,请参考资源栈模板语法章节。
图 1所示:
图 1. 创建资源栈模板


查看模板信息

资源栈模板界面,选择某一模板,展开其详情页,可查看当前创建的模板状态和信息,包括:基本属性、资源栈模板内容、审计。
  • 基本信息:显示模板当前状态、名称、简介、模板UUID、MD5码等信息,其中名称和简介支持修改
  • 资源栈模板内容:显示模板具体内容,关于模板语法的详细介绍,请参考资源栈模板语法章节
  • 审计:查看此模板的相关操作

启用/停用模板

  • 启用模板:将已停用的模板启用
  • 停用模板:将模板停用,停用的模板不能创建资源栈

修改模板

支持在文件编辑器中修改模板。

从模板创建资源栈

资源栈模板界面,选择需生成的资源栈模板,点击更多操作 > 生成资源栈,弹出创建资源栈界面。可参考资源栈章节填写参数。

删除模板

如果不再使用某一模板,可将该模板删除。

约束条件

  • 每个模板文件大小不超过4MB。
  • 若通过API提交,则参数大小不可超过64K。

可视化编排

使用可视化编排,可以更直观高效地创建资源栈模板以及显示资源栈结构。打开可视化编排,通过拖曳资源到画布中适当位置,连线创建资源间的依赖关系,并输入需要的参数,即可快速创建资源栈模板,高效编排云资源。

可视化编排界面

ZStack Cloud主菜单,点击资源中心 > 资源编排 > 可视化编排,进入可视化编排界面。

图 1所示:
图 1. 可视化编排


可视化编排界面分为三个部分:
  • 顶部菜单:可视化资源编辑器的功能菜单。包括:预览模板、生成资源栈、另存为资源栈模板。
  • 左侧菜单:可视化资源编辑器支持的资源列表。可通过拖曳连线直观呈现云资源间的关系,高效编排云资源。目前支持以下资源:
    • 云资源池:云主机、云盘
    • 网络资源:二层网络、公有网络、扁平网络、VPC网络
    • 网络服务:安全组、弹性IP、端口转发、负载均衡、监听器
    • 网络设备:VPC路由器
  • 中间部分:可视化资源编辑器的画布,在此进行可视化资源编排。
    • 支持撤销、重做、放大、缩小、适应画布、删除、清除、预览、全局参数操作。
    • 当画布中资源布局足够多时,可通过拖动缩略框调整画布位置,也可通过滚动鼠标放大缩小画布。

可视化编排

可视化编排分为三个步骤:拖拽资源到画布、编辑资源属性、资源连线
  1. 拖拽资源到画布。

    以创建扁平网络为例,从左侧资源列表拖拽云主机、扁平网络、二层网络到画布。

    图 2所示:
    图 2. 拖拽资源


  2. 编辑资源属性。

    资源拖拽至画布后,点击资源图标,可进行属性编辑。

    图 3所示:
    图 3. 编辑属性


  3. 资源连线。

    每个资源属性编辑完成后,从连接点通过单击+的方式对资源进行连线。

    图 4所示:
    图 4. 资源连线


可视化编排操作

可视化资源编辑器顶部的功能菜单,可对已编辑好的资源进行以下操作。包括:生成资源栈、另存为资源栈模板、预览模板、设置全局参数。
  • 生成资源栈

    点击生成资源栈按钮,将跳转到生成资源栈界面,输入资源栈名称,点击下一步 > 确定按钮,可将编辑好的图形化资源栈模板生成资源栈。

    图 5所示:
    图 5. 生成资源栈


  • 另存为资源栈模板

    点击另存为资源栈模板按钮,将跳转到创建资源栈模板界面,输入资源栈模板名称,点击确定按钮,可将编辑好的图形化资源栈另存为资源栈模板。

    图 6所示:
    图 6. 另存为资源栈模板


  • 预览模板

    点击预览按钮,将编辑好的图形化资源栈模板以代码的形式呈现,进行预览。

    图 7所示:
    图 7. 预览模板


资源栈模板语法

资源栈模板是一个UTF8编码格式的文件。

基于模板可快速创建资源栈,用户在模板中定义所需的云资源、资源间的依赖关系、资源配置等,资源编排将解析模板,自动完成所有资源的创建和配置。

资源栈模板结构

资源栈模板结构如下:
{
    "ZStackTemplateFormatVersion" : "YYYY-MM-DD",
    "Description" : "模板描述信息,可用于说明模板的适用场景、架构说明等。",
    "Parameters" : {
      // 定义创建资源栈时,用户可以定制化的参数。
    },
    "Mappings" : {
      // 定义映射信息表,映射信息是一种多层的Map结构。
    },
    "Resources" : {
      // 所需资源的详细定义,包括资源间的依赖关系、配置细节等。
    },
    "Outputs" : {
      // 用于输出一些资源属性等有用信息,可以通过API获取输出的内容。
  }
  • ZStackTemplateFormatVersion(必需)
    模板版本号。
    • 格式为:YYYY-MM-DD
  • Description(可选)
    模板描述信息,可用于说明模板的适用场景、架构说明等。
    • 对模板进行详细描述,有利于用户理解模板内容。
  • Parameters(可选)
    定义创建资源栈时,用户可以定制化的参数。
    • 例如,用户将创建云主机的计算规格设计成一个参数。
    • 参数支持默认值。
    • 使用参数可以增强模板的灵活性,提高复用性。
    • 关于参数(Parameters)的详细介绍,请参考参数(Parameters)章节
  • Mappings(可选)
    定义映射信息表,映射信息是一种多层的Map结构。
    • 可通过Fn::FindInMap函数选择key对应的值。
    • 可根据不同的输入参数值作为key查找映射表。
    • 例如,可根据区域不同,自动查找区域-镜像映射表,从而找到适用的镜像。
    • 关于映射(Mappings)的详细介绍,请参考映射(Mappings)章节
  • Resources(可选)
    所需资源的详细定义,包括资源间的依赖关系、配置细节等。
  • Outputs(可选)
    用于输出一些资源属性等有用信息,可以通过API获取输出的内容。

参数(Parameters)

参数(Parameters):定义创建资源栈时,用户可以定制化的参数。
  • 创建资源栈模板时,使用参数可以增强模板的灵活性,提高复用性。
  • 创建资源栈时,可根据实际情况替换模板中的某些参数值。

语法

参数由参数名称和参数属性组成。
  • 参数名称必须为字母数字,同一个模板中不能与其它参数名称重复。
  • 可以用Label字段定义友好的参数名。
参数属性列表:
属性 描述 是否必需 举例
Type 参数类型,默认支持:
  • String
  • Number(整数或浮点)
  • CommaDelimitedList(相当于Java里的List<String>)
  • Boolean
"Type": "String"
Lable 参数别名,生成预览或正式表单时用 "Lable": "云主机密码"
Description 参数描述 "Description": "云主机登录密码"
NoEcho 该字段是否用*****替代,不填则不替代 "NoEcho": true
Note: 暂不支持
DefaultValue 参数默认值 "DefaultValue": "password"
资源编排还提供一些常量参数。
  • 常量参数可直接引用,无需在Parameters中定义(也不可定义)。
  • 其值在资源编排运行时确定。
常量参数列表
常量名 描述
ZStack::StackName 当前栈的名称
ZStack::StackUuid 当前栈的UUID
ZStack::AccountUuid 当前栈的AccountUuid
ZStack::AccountName 当前栈的AccountName

示例

代码段示例如下:
"Parameters" : {
  "username" : {
    "Label": "登录名",
    "Description" : "登录名",
    "DefaultValue": "root",
    "Type" : "String"
  },
  "password" : {
    "Label": "密码",
    "NoEcho" : "true",
    "Description" : "主机登录密码",
    "Type" : "String",
  }
}
本例中Parameters声明两个参数:
  • username
    • 参数属于String类型,默认值为root
    • 可指定的最小长度为2,可指定的最大长度为12
    Note: username的默认值也必须符合长度限制和允许值限制。
  • password
    • 参数属于String类型,无默认值。
    • NoEcho属性设置为true,可阻止查询栈接口返回参数值。
      Note: NoEcho属性设置暂不支持。
    • 可指定的最小长度为6,可指定的最大长度为41
    • 允许大、小写字母字符和数字。

资源(Resources)

资源(Resources):所需资源的详细定义,包括资源间的依赖关系、配置细节等。
  • Resources可引用前述ParametersMappings、以及Functions的内容。
  • Resources可被其他ResourcesOutputs所引用。

语法

资源由资源逻辑UUID和资源描述组成。
  • 资源描述用大括号{ }括起。
  • 如果声明多个资源,用逗号,分隔开。
资源关键字列表:
关键字 描述 是否必需 举例
Type 资源类型,包括以下两种类型:
  • Resource类型
  • Action类型
  • "Type": "ZStack::Resource::VmInstance"
  • "Type": "ZStack::Action::AddIpRange"
  • 详情请参考资源类型(Type)
Properties 资源属性,为资源指定创建参数 详情请参考资源属性(Properties)
DependsOn 资源依赖,定义资源所依赖的资源
DeletionPolicy 删除策略
  • 资源栈被删除时是否保留某个资源
  • 若某个资源需要保留,则它所依赖的资源也要保留(系统自动为其保留)
  • 默认不保留
Description 资源描述
  • "Description" : "attach ip range to l3 network"

示例

代码段示例如下:
"Resources" : {
    "UUID-1" : {
        "Description" : "资源描述",
        "Type" : "资源类型",
        "Properties" : {
            资源属性描述
        }
    },
    "UUID-2" : {
        "Description" : "资源描述"
        "Type" : "资源类型",
        "Properties" : {
            资源属性描述
        },
        "DependsOn":"要依赖的资源,如UUID-1,注意上下文中必须包含此资源",
        "DeletionPolicy":"删除策略"
    }
}
本例中Resources声明两个资源,关键字说明如下:
  • 资源UUID
    • UUID-1UUID-2均为资源逻辑UUID,且均为变量。
    • 在创建模板其它部分时,可以通过资源逻辑UUID引用该资源。
    • 资源逻辑UUID在模板中具有唯一性。
  • 资源类型(Type)
    • 表示正在声明的资源的类型,包括:Resource类型、Action类型。
    • 例如,"Type": "ZStack::Resource::VmInstance"表示云主机实例,"Type": "ZStack::Action::AddIpRange"表示添加IP范围。
    • 关于资源编排支持的所有资源列表,详情请参考资源索引章节。
  • 资源属性(Properties)
    • 为资源指定创建参数。
    • 代码段示例如下:
      "Resources" : {    
          "InstanceOffering" : {
              "Type" : "ZStack::InstanceOffering",
              "Properties" : {
                  "cpuNum" : "1",
                  "cpuSpeed" : "1",
                  "memorySize" : "1073741824",
                  "name" : "instance-offering",
                  "type" : "UserVm",
                  "sortKey": 0,
                  "allocatorStrategy": "LeastVmPreferredHostAllocatorStrategy"       
              }
          }
      }
    • 资源属性值定义规则:
      • 属性值可以是文本字符串、字符串列表、布尔值、引用参数、或者函数返回值。
      • 如果属性值为文本字符串或布尔值,该值会被双引号" "括起来。
      • 如果属性值为任一类型的字符串列表,该值会被中括号[ ]括起来。
      • 如果值为内部函数或引用的参数,该值会被大括号{ }括起来。
      • 将文字、列表、引用参数、和函数返回值合并起来取值时,上述规则适用。
      • 以下示例说明如何声明不同的属性值类型:
        "Properties" : {
            "String" : "string",
            "LiteralList" : [ "value1", "value2" ],
            "Boolean" : "true"
            "ReferenceForOneValue" :  { "Ref" : "ResourceID" } ,
            "FunctionResultWithFunctionParams" : {
                "Fn::Join" : [ "%", [ "Key=", { "Ref" : "SomeParameter" } ] ] }
        }
    • 如果资源不需要声明任何属性,可以忽略该资源的属性部分。
  • 资源依赖(DependsOn)
    • 定义资源所依赖的资源。
    • 为某个资源添加DependsOn属性后,该资源仅在DependsOn属性中指定的资源之后创建。
    • 代码段示例如下:
      {
          "ZStackTemplateFormatVersion" : "2018-06-18",
          "Resources" : {
              "WebServer": {
                  "Type": "ZStack::Resource::VmInstance",
                  "DependsOn": "DatabseServer"
              },
              "DatabseServer": {
                  "Type": "ZStack::Resource::VmInstance",
                  "Properties": {
                      "name": {"Fn::Join":["-",[{"Ref":"ZStack::StackName"},"VM"]]},          
                      "instanceOfferingUuid": {"Ref":"InstanceOfferingUuid"},          
                      "imageUuid":{"Ref":"ImageUuid"},
                      "l3NetworkUuids":[{"Ref":"PrivateNetworkUuid"}],
                      "dataDiskOfferingUuids":[{"Ref":"DiskOfferingUuid"}],
      	         "hostUuid":{"Ref":"HostUuid"}
                  }
              }
          }
      }

      本例表示WebServer将在DatabaseServer创建成功后才开始创建。

  • 删除策略(DeletionPolicy)
    • 在模板中,设置DeletionPolicy属性,可以声明资源栈被删除时是否保留资源。
    • DeletionPolicyRetainDelete两个选项。
      • 默认为Delete,表示删除资源栈默认会删除栈内编排创建的所有资源。
      • 若将DeletionPolicy设置为Retain,表示资源栈被删除时可保留资源。此时,该资源所依赖的资源也要保留(系统自动为其保留)。
        例如,模板对应的资源栈被删除时,保留栈内的云主机,代码段示例如下:
        "Resources" : {
            "VMInstance" : {
                "Type" : "ZStack::Resource::VmInstance",
                "Properties": {
                    "name": {"Fn::Join":["-",[{"Ref":"ZStack::StackName"},"VM"]]},          
                    "instanceOfferingUuid": {"Ref":"InstanceOfferingUuid"},          
                    "imageUuid":{"Ref":"ImageUuid"},
                    "l3NetworkUuids":[{"Ref":"PrivateNetworkUuid"}],
                    "dataDiskOfferingUuids":[{"Ref":"DiskOfferingUuid"}],
        	     "hostUuid":{"Ref":"HostUuid"}
            },
            "DeletionPolicy" : "Retain"
          }
        }

输出(Outputs)

输出(Outputs):用于输出一些资源属性等有用信息,可以通过API获取输出的内容。

语法

输出由输出UUID和输出描述组成。
  • 输出描述用大括号{ }括起。
  • 如果声明多个输出项,用逗号,分隔开。
输出关键字列表:
关键字 描述 是否必需 举例
Description 输出描述
Value 输出内容

示例

代码段示例如下:
"Outputs" : {
    "UUID-1" : {
        "Description" : "输出描述",
        "Value" : "输出内容"
    },
    "UUID-2" : {
        "Description" : "输出描述",
        "Value" : "输出内容"
    }
}
本例中Output声明了两个输出项,关键字说明如下:
  • 输出UUID
    • 输出UUID在模板中具有唯一性。
  • 输出描述(Description)
    • 用于描述输出值的String类型。
  • 输出内容(Value)
    • 在调用查询堆栈接口时,返回的属性值。
    • 代码段示例如下:
      {
      	"ZStackTemplateFormatVersion": "2018-06-18",
      	"Description": "本示例将创建一个带云盘的云主机(基于本地存储), 创建示例前提环境:\n计算规格,镜像,云盘规格,私有网络,可用物理机",
      	"Parameters": {
      	    "InstanceOfferingUuid": {
      	        "Type": "String",
                     "Label": "计算规格",
      		 "Description": "The instance offering uuid"
      	    },
      	    "ImageUuid": {
      		 "Type": "String",
                     "Label": "镜像",
      		 "Description": "The Image uuid for creating VmInstance, Please choose an image not iso"
      	    },
      	    "PrivateNetworkUuid": {
      		 "Type": "String",
                     "Label": "私有网络",
      		 "Description" : "The private network uuid for creating VmInstance"
                 },
      	    "DiskOfferingUuid": {
      		 "Type": "String",
                     "Label": "云盘规格",
      		 "Description": "Volume size offering uuid"
      	    },
      	    "HostUuid": {
      		 "Type": "String",
                     "Label": "物理机",
      		 "Description": "Host uuid, that vm will start on"
      	    }
      	},
      	"Resources": {
      	    "VmInstance": {
      		 "Type": "ZStack::Resource::VmInstance",
      		 "Properties": {
      		     "name": {"Fn::Join":["-",[{"Ref":"ZStack::StackName"},"VM"]]},
      		     "instanceOfferingUuid": {"Ref":"InstanceOfferingUuid"},
      		     "imageUuid":{"Ref":"ImageUuid"},
      		     "l3NetworkUuids":[{"Ref":"PrivateNetworkUuid"}],
      		     "dataDiskOfferingUuids":[{"Ref":"DiskOfferingUuid"}],
      		     "hostUuid":{"Ref":"HostUuid"}
      		 }
      	    }
      	},
      	"Outputs": {
      	    "VmInstance": {
      	        "Value": {
      		     "Ref": "VmInstance"
      		 }
      	    }
      	}
      }

      本例中,输出部分有1个输出项,将输出VmInstance的属性值。

函数(Functions)

资源编排提供多个内置函数,用于管理资源栈。可在定义资源(Resources)、输出(Outputs)和映射(Mappings)时,使用内置函数。

提供的内置函数列表:
  • Fn::Base64
  • Fn::FindInMap
  • Fn::GetAtt
  • Fn::Join
  • Fn::Split
  • Fn::Select
  • Ref
  • Fn::If
  • Fn::Equal
  • Fn::And
  • Fn::Not
  • Fn::Or

Fn::Base64

返回输入字符串的Base64编码结果。
  • 声明
    "Fn::Base64" : stringToEncode
  • 参数
    • stringToEncode:转换成Base64的字符串。
  • 示例
    "Fn::Base64" : "password"
  • 返回值

    用Base64表示的原始字符串。

    本例中,返回"cGFzc3dvcmQ=",即"password"的Base64编码结果。

Fn::FindInMap

返回与Mappings声明的双层映射中的键对应的值。
  • 声明
    "Fn::FindInMap" : ["MapName", "TopLevelKey", "SecondLevelKey"]
  • 参数
    • MapName:Mappings 中所声明映射的 ID,包含键和值。
    • TopLevelKey:第一级键,其值是一个键/值对列表。
    • SecondLevelKey:第二级键,其值是一个字符串或者数字。
  • 示例
    "Fn::FindInMap" : ["RegionMap", "cn-shanghai", "32"]
  • 返回值

    分配给SecondLevelKey的值。

    本例中,返回"RegionMap""cn-shanghai"对应的键/值对列表里,键为"32"对应的值。

  • 支持的函数
    可在Fn::FindInMap函数中嵌套使用以下函数:
    • Fn::FindInMap
    • Ref

Fn::GetAtt

返回模板中的资源的属性值。
  • 声明
    "Fn::GetAtt": ["resourceUuid", "attributeName"]
  • 参数
    • resourceUuid:目标资源的逻辑UUID。
    • attributeName:目标资源的属性名称。
  • 示例
    "Fn::GetAtt" : ["MyVMInstance", "ImageUuid"]
  • 返回值

    属性值。

    本例中,返回resourceUuid"MyVMInstance""ImageUuid"属性。

Fn::Join

将一组值连接起来,用特定分隔符隔开。
  • 声明
    "Fn::Join" : ["delimiter", ["string1", "string2", ...]]
  • 参数
    • delimiter:分隔符。分隔符可为空,可将所有的值直接连接起来。
    • ["string1", "string2", ...]:被连接起来的值列表示例。
  • 示例
    "Fn::Join" : ["-", ["a", "b", "c"]]
  • 返回值

    被连接起来的字符串。

    本例中,返回"a-b-c"

  • 支持的函数
    可在Fn::Join函数中嵌套使用以下函数:
    • Fn::Base64
    • Fn::GetAtt
    • Fn::Join
    • Fn::Select
    • Ref

Fn::Split

通过指定分隔符对字符串进行切片,并返回所有切片组成的列表。
  • 声明
    "Fn::Split" : ["delimiter", "original_string"]
  • 参数
    • delimiter:分隔符,例如:,;\n\t 等。
    • original_string:将要被切片的字符串。
  • 示例
    "Fn::Split": [";", "foo; bar; achoo"]
  • 返回值

    切片后所有字符串组成的列表。

    本例中,返回["foo", " bar", "achoo"]

  • 支持的函数
    可在Fn::Split函数中嵌套使用以下函数:
    • Fn::Base64
    • Fn::FindInMap
    • Fn::GetAtt
    • Fn::Join
    • Fn::Select
    • Ref

Fn::Select

通过索引返回数据元列表中的单个数据元。
  • 声明
    • 数据元列表可为一个数组:
      "Fn::Select" : ["index", ["value1", "value2", ...]]
    • 数据元列表可为一个映射表:
      "Fn::Select" : ["index", {"key1": "value1", ...}]
  • 参数
    • index:待检索数据元的索引。
      • 如果数据元列表是一个数组,则索引是0N-1之间的某个值,其中N代表阵列中元素的数量。
      • 如果数据元列表是一个映射表,则索引是映射表中的某个键。
      • 如果找不到索引对应的值,则返回空字符串。
  • 示例
    • 示例一:数据元列表是一个数组
      "Fn::Select" : ["2", ["foo", " bar", "achoo"]]
    • 示例二:数据元列表是一个映射表
      "Fn::Select" : ["shape", {"shape": "circle", "height": "80"}]
    • 示例三:数据元列表是一个CommaDelimitedList
      "Parameters" : {
      	"userParam": {
                 "Type": "CommaDelimitedList",
                 "Default": "10.0.100.0/24, 10.0.101.0/24, 10.0.102.0/24"
             }
      },
      "Resources": {
      	"resourceUuid": {
                 "Properties": {
                     "CidrBlock": {"Fn::Select" : [0, {"Ref":"userParam"}]}
                 }
             }
      }
    Note:
    • Fn::Select函数不嵌套使用函数,第一个参数为字符串,参见示例一("2")、示例二("shape");
    • Fn::Select函数嵌套使用函数,第一个参数为数字,参见示例三(0)。
  • 返回值
    选定的数据元。
    • 示例一:返回"achoo"
    • 示例二:返回"circle"
    • 示例三:返回"10.0.100.0/24"
  • 支持的函数
    • 对于Fn::Select索引值,可在Fn::Select函数中嵌套使用Ref函数。
    • 对于对象的Fn::Select列表,可在Fn::Select函数中嵌套使用以下函数:
      • Fn::Base64
      • Fn::FindInMap
      • Fn::GetAtt
      • Fn::Join
      • Fn::Select
      • Ref

Ref

返回指定参数或资源的值。
  • 如果指定参数是resourceUuid,则返回资源的值。
  • 否则系统将认为指定参数是参数,将尝试返回参数的值。
  • 声明
    "Ref":"logicalName"
  • 参数
    • logicalName:要引用的资源或参数的逻辑名称。
  • 示例
    diskOfferingParam被定义为:
    "diskOfferingParam": {
    	"allocatorStrategy": "DefaultPrimaryStorageAllocationStrategy",
           "diskSize": "21474836480",   
           "type": "DefaultDiskOfferingType",
           "sorkKey": "0"
    }
    "Ref":"diskOfferingParam"
  • 返回值

    资源的值或者参数的值。

    本例中,返回diskOfferingParam的值:
    {
    	"allocatorStrategy": "DefaultPrimaryStorageAllocationStrategy",
           "diskSize": "21474836480",   
           "type": "DefaultDiskOfferingType",
           "sorkKey": "0"
    }
  • 支持的函数

    不能在Ref函数中嵌套使用任何函数。必须指定为资源逻辑UUID的字符串。

Fn::If

如果指定的条件计算为true,则返回一个值;如果指定的条件计算为false,则返回另一个值。
  • 在模板ResourcesOutputs属性值中支持Fn::If内部函数。
  • 声明
    "Fn::If": ["condition_name", "value_if_true", "value_if_false"]
  • 参数
    • condition_nameConditions中条件对应的条件名称,通过条件名称引用条件。
    • value_if_true:当指定的条件计算为true时,返回此值。
    • value_if_false:当指定的条件计算为false时,返回此值。
  • 示例
    "Fn::If": ["condition16", "vm-true", "vm-false"]
  • 返回值

    根据指定条件计算的结果返回相应的参数值。

    本例中,若condition16的结果是true,则返回vm-true;若condition16的结果是false,则返回vm-false

  • 支持的函数
    可在Fn::If函数中嵌套使用以下函数:
    • Fn::FindInMap
    • Ref
    • Fn::Equal
    • Fn::And
    • Fn::Not
    • Fn::Or

Fn::Equal

比较两个值是否相等。如果两个值相等,则返回true;如果不相等,则返回false
  • 声明
    "Fn::Equal": [value_1, value_2]
  • 参数
    • value:要比较的任意类型的值。
  • 示例
    "Fn::Equal": [true, false]
  • 返回值

    truefalse

    本例中,返回false

  • 支持的函数
    可在Fn::Equal函数中嵌套使用以下函数:
    • Fn::FindInMap
    • Ref
    • Fn::Equal
    • Fn::And
    • Fn::Not
    • Fn::Or

Fn::And

代表AND运算符,最少包含两个条件。如果所有指定条件计算为true,则返回true;如果任意条件计算为false,则返回false
  • 声明
    "Fn::And": [condition, ...]
  • 参数
    • condition:计算为truefalse的条件。
  • 示例
    "Fn::And": [true, false]
  • 返回值

    truefalse

    本例中,返回false

  • 支持的函数
    可在Fn::And函数中嵌套使用以下函数:
    • Fn::FindInMap
    • Ref
    • Fn::Equal
    • Fn::And
    • Fn::Not
    • Fn::Or

Fn::Not

代表NOT运算符。对计算为false的条件,返回true;对计算为true的条件,返回false
  • 声明
    "Fn::Not": condition
  • 参数
    • condition:计算为truefalse的条件。
  • 示例
    "Fn::Not": true
  • 返回值

    truefalse

    本例中,返回false

  • 支持的函数
    可在Fn::Not函数中嵌套使用以下函数:
    • Fn::FindInMap
    • Ref
    • Fn::Equal
    • Fn::And
    • Fn::Not
    • Fn::Or

Fn::Or

代表OR运算符,最少包含两个条件。如果任意一个指定条件计算为true,则返回true;如果所有条件都计算为false,则返回false
  • 声明
    "Fn::Or": [condition, ...]
  • 参数
    • condition:计算为truefalse的条件。
  • 示例
    "Fn::Or": [true, false]
  • 返回值

    truefalse

    本例中,返回true

  • 支持的函数
    可在Fn::Or函数中嵌套使用以下函数:
    • Fn::FindInMap
    • Ref
    • Fn::Equal
    • Fn::And
    • Fn::Not
    • Fn::Or

映射(Mappings)

定义映射信息表,映射信息是一种多层的Map结构。
  • 映射是一个Key-Value映射表。
  • 在模板的ResourcesOutputs中,可使用内置函数Fn::FindInMap,通过指定Key而获取映射表的Value

语法

映射由Key-Value键值对组成。
  • 其中KeyValue可以为字符串类型或者数字类型。
  • 如果声明多个映射,用逗号,分隔开。
  • 每个映射的名称不能重复。

示例

代码段示例如下:
"Mappings" : {
	"Mapping01" : {
           "Key01" : {
               "Name" : "Value01"
           },
           "Key02" : {
               "Name" : "Value02"
           },
           "Key03" : {
               "Name" : "Value03"
       }
}
使用内置函数Fn::FindInMap返回对应的值示例:
{
	"ZStackTemplateFormatVersion": "2018-06-18",
       "Parameters": {
           "regionParam": {
               "Description": "选择创建云主机的区域",
               "Type": "String",
               "AllowedValues": ["cn-hangzhou", "cn-shanghai"]
           }
       },
       "Mappings" : {
           "ImageInRegions" : {
               "cn-hangzhou" : { "32" : "imageUuid-1", "64" : "imageUuid-2" },
               "cn-shanghai" : { "32" : "imageUuid-3", "64" : "imageUuid-4" }
           }
       },
       "Resources": {
           "WebServer": {
               "Type": "ZStack::Resource::VmInstance",
               "Properties": {
                   "name" : "test-vm",
                   "imageUuid" : {"Fn::FindInMap": ["ImageInRegions", {"Ref":"regionParam"}, "64"]},
                   "instanceOfferingUuid": {"Ref":"instanceOfferingUuid"},
                   "l3NetworkUuids": [{"Ref":"l3NetworkUuid"}]
               },
               "DeletionPolicy": "Retain"
          }
       }
}

资源索引

Resource类型

Resouce类型 说明
ZStack::Resource::VmInstance 创建云主机(CreateVMInstance)
ZStack::Resource::DataVolume 创建云盘(CreateDataVolume)
ZStack::Resource::Image 添加镜像(AddImage)
ZStack::Resource::RootVolumeTemplate 从根云盘创建根云盘镜像(CreateRootVolumeTemplateFromRootVolume)
ZStack::Resource::DataVolumeTemplate 从云盘创建数据云盘镜像(CreateDataVolumeTemplateFromVolume)
ZStack::Resource::AffinityGroup 创建亲和组(CreateAffinityGroup)
ZStack::Resource::InstanceOffering 创建云主机规格(CreateInstanceOffering)
ZStack::Resource::DiskOffering 创建云盘规格(CreateDiskOffering)
ZStack::Resource::L2VxlanNetworkPool 创建VXLAN网络池(CreateL2VxlanNetworkPool)
ZStack::Resource::L2NoVlanNetwork 创建普通二层网络(CreateL2NoVlanNetwork)
ZStack::Resource::L2VlanNetwork 创建二层VLAN网络(CreateL2VlanNetwork)
ZStack::Resource::L2VxlanNetwork 创建VXLAN网络(CreateL2VxlanNetwork)
ZStack::Resource::L3Network 创建三层网络(CreateL3Network)
ZStack::Resource::VRouterRouteTable 创建路由表(CreateVRouterRouteTable)
ZStack::Resource::VpcVRouter 创建VPC路由器(CreateVpcVRouter)
ZStack::Resource::SecurityGroup 创建安全组(CreateSecurityGroup)
ZStack::Resource::SecurityGroupRule 添加规则到安全组(AddSecurityGroupRule)
ZStack::Resource::Vip 创建虚拟IP(CreateVip)
ZStack::Resource::Eip 创建弹性IP(CreateEip)
ZStack::Resource::PortForwardingRule 创建端口转发规则(CreatePortForwardingRule)
ZStack::Resource::LoadBalancer 创建负载均衡器(CreateLoadBalancer)
ZStack::Resource::LoadBalancerListener 创建负载均衡监听器(CreateLoadBalancerListener)
ZStack::Resource::IPsecConnection 创建IPsec连接(CreateIPsecConnection)
ZStack::Resource::VirtualRouterOffering 创建路由器规格(CreateVirtualRouterOffering)
ZStack::Resource::VniRange 创建VNI Range(CreateVniRange)
ZStack::Resource::UserTag 创建用户标签(CreateUserTag)
ZStack::Resource::DataVolumeFromVolumeTemplate 从镜像创建云盘(CreateDataVolumeFromVolumeTemplate)
ZStack::Resource::Tag 创建资源标签(CreateTag)

Action类型

Action类型 说明
ZStack::Action::AddIpRange 添加IP地址范围(AddIpRange)
ZStack::Action::AddDnsToL3Network 向三层网络添加DNS(AddDnsToL3Network)
ZStack::Action::AddVmToAffinityGroup 添加云主机到亲和组(AddVmToAffinityGroup)
ZStack::Action::AddVRouterRouteEntry 添加路由条目(AddVRouterRouteEntry)
ZStack::Action::AddCertificateToLoadBalancerListener 添加证书到负载均衡(AddCertificateToLoadBalancerListener)
ZStack::Action::AddIpRangeByNetworkCidr 通过网络CIDR添加IP地址范围(AddIpRangeByNetworkCidr)
ZStack::Action::AddVmNicToLoadBalancer 添加云主机网卡到负载均衡器(AddVmNicToLoadBalancer)
ZStack::Action::AddVmNicToSecurityGroup 添加虚拟机网卡到安全组(AddVmNicToSecurityGroup)
ZStack::Action::AddRemoteCidrsToIPsecConnection 添加远端CIDR到IPsec连接(AddRemoteCidrsToIPsecConnection)
ZStack::Action::AttachEip 绑定弹性IP(AttachEip)
ZStack::Action::AttachDataVolumeToVm 挂载云盘到云主机上(AttachDataVolumeToVm)
ZStack::Action::AttachPortForwardingRule 挂载规则到虚拟机网卡上(AttachPortForwardingRule)
ZStack::Action::AttachIsoToVmInstance 加载ISO到云主机(AttachIsoToVmInstance)
ZStack::Action::AttachPciDeviceToVm 绑定PCI设备到云主机(AttachPciDeviceToVm)
ZStack::Action::AttachUsbDeviceToVm 云主机加载物理机USB设备(AttachUsbDeviceToVm)
ZStack::Action::AttachL2NetworkToCluster 挂载二层网络到集群(AttachL2NetworkToCluster)
ZStack::Action::AttachL3NetworkToVm 加载L3网络到云主机(AttachL3NetworkToVm)
ZStack::Action::AttachNetworkServiceToL3Network 挂载网络服务到三层网络(AttachNetworkServiceToL3Network)
ZStack::Action::AttachSecurityGroupToL3Network 挂载安全组到L3网络(AttachSecurityGroupToL3Network)
ZStack::Action::AttachL3NetworksToIPsecConnection 添加三层网络到IPsec连接(AttachL3NetworksToIPsecConnection)
ZStack::Action::AttachVRouterRouteTableToVRouter 绑定路由表到路由器(AttachVRouterRouteTableToVRouter)
ZStack::Action::AddCertificateToLoadBalancerListener 添加证书到负载均衡(AddCertificateToLoadBalancerListener)
ZStack::Action::AddHostRouteToL3Network 向三层网络添加主机路由(AddHostRouteToL3Network)
ZStack::Action::SetL3NetworkRouterInterfaceIp 设置三层网络路由器接口IP(SetL3NetworkRouterInterfaceIp)
ZStack::Action::AddDnsToVpcRouter 向VPC路由器添加DNS(AddDnsToVpcRouter)
ZStack::Action::AttachTagToResources 加载资源标签(AttachTagToResources)
ZStack::Action::UpdateTag 更新资源标签(UpdateTag)