更新时间:2024-04-17 GMT+08:00

模板:云上的自动化脚本

AOS模板为一个YAML或JSON格式的文本描述文件,用于描述您想要的云对象(云对象包括应用、资源、服务等所有云上的对象)。AOS服务根据描述文件帮助您完成各种云对象的创建。

任何一种自动化的过程,都需要一种描述语言来控制其执行流程。 例如,shell脚本(文本文件)描述如何自动执行command命令,AOS模板也一样,用来描述各种云对象的创建、销毁等流程。

以Shell脚本为例,其执行逻辑如下:

Shell脚本特点大致为:

  • 脚本是一个文本文件。
  • 如果脚本写的好,可以重复执行。

AOS模板也是一样的逻辑,AOS服务就是模板的解释器,根据模板要求,执行对应动作。您可以把AOS看作是云上自动化标准。

一个好的Shell脚本或一个好的函数,应该有输入、执行逻辑、返回值。一个好的模板也一样,良好的定义输入编排输出,模板就会更加的通用。使用这个模板,就可以方便的进行传递和分享。

图1 函数和模板对比

元素(云对象)

云对象,最常见的就是云资源,也可以是云服务,还包括云上的应用。AOS把各种云对象都当做一种元素,而模板就是元素的集合。

  • 云资源:包括“弹性云服务器ECS”“云硬盘EVS”“虚拟私有云VPC”“弹性IP”等。
  • 云服务:包括“分布式缓存服务DCS”“分布式消息服务DMS”等。
  • 云上应用:包括“云容器引擎CCE”中的容器应用,“微服务引擎CSE”中的微服务等。

任何云对象的创建都需要输入,创建成功后都会有结果,如下图以弹性云服务器(虚拟机)为例。

图2 云对象的输入输出

输入(properties)

输入是创建云对象所需的条件,也可以叫做参数。一个云对象需要哪些参数,由该对象本身的特点决定。有的对象需要很多参数,才能确定,例如虚拟机。有的对象可以由很少的参数甚至不需要参数就能创建,例如OBS的Bucket。有的输入参数比较复杂,由多个基础参数组合而成,如虚拟机的网络属性。

图3 输入

输入语法如下:

云对象(元素):   
  description: 云对象介绍   
  properties: #由哪些参数组成     
    属性1:  # 参数1
    属性2:  # 参数2
    属性…:# 参数…

编排(元素)

如果元素仅是按照所排列的顺序一个接一个的初始化,那就没有编排的概念。AOS之所以有编排的能力是因为元素之间可以有复杂的依赖关系。某个元素的初始化(输入)需要依赖另外一个元素的结果(输出),这种关系的表达就是AOS模板的特性。

AOS模板可以指定任意元素的输出作为下一个元素的输入,这样自由的控制初始化流程,称之为编排。只有能够编排,才可以满足各种自动化需求。

一个AOS模板,就是描述您想要编排的各种对象的集合。更直观的理解就是您想要控制初始化流程的各种对象集合。

图4 编排

元素之间的关联关系包括元素依赖关系和元素包含关系:

  • 元素依赖关系:某个元素的输入需要依赖另一个元素的输出。元素A依赖元素B,则元素B创建成功后才能创建元素A。
  • 元素包含关系:某个元素属于另一个元素的一部分。元素A包含元素B,则元素A创建成功后才能创建元素B。

输出(Return Value)

输出是一个云对象创建成功后的结果。一个云对象有哪些结果,由该对象本身的特点决定。有的对象结果很多,有的对象的结果则很少。

云对象的输出,有如下两个使用场景,一般配合内置函数get_attribute使用。

  • 作为另一个云对象的输入。
  • 作为整个堆栈的结果输出。

结果语法如下:

#另一个对象ECS中的结果,服务名Service
value: {get_attribute: [ecs, Service, ports, 0, nodePort]}