模板:云上的自动化脚本
AOS模板为一个YAML或JSON格式的文本描述文件,用于描述您想要的云对象(云对象包括应用、资源、服务等所有云上的对象)。AOS服务根据描述文件帮助您完成各种云对象的创建。
任何一种自动化的过程,都需要一种描述语言来控制其执行流程。 例如,shell脚本(文本文件)描述如何自动执行command命令,AOS模板也一样,用来描述各种云对象的创建、销毁等流程。
以Shell脚本为例,其执行逻辑如下:
Shell脚本特点大致为:
- 脚本是一个文本文件。
- 如果脚本写的好,可以重复执行。
AOS模板也是一样的逻辑,AOS服务就是模板的解释器,根据模板要求,执行对应动作。您可以把AOS看作是云上自动化标准。
一个好的Shell脚本或一个好的函数,应该有输入、执行逻辑、返回值。一个好的模板也一样,良好的定义输入,编排,输出,模板就会更加的通用。使用这个模板,就可以方便的进行传递和分享。
元素(云对象)
云对象,最常见的就是云资源,也可以是云服务,还包括云上的应用。AOS把各种云对象都当做一种元素,而模板就是元素的集合。
- 云资源:包括“弹性云服务器ECS”,“云硬盘EVS”,“虚拟私有云VPC”,“弹性IP”等。
- 云服务:包括“分布式缓存服务DCS”,“分布式消息服务DMS”等。
- 云上应用:包括“云容器引擎CCE”中的容器应用,“微服务引擎CSE”中的微服务等。
任何云对象的创建都需要输入,创建成功后都会有结果,如下图以弹性云服务器(虚拟机)为例。
输入(properties)
输入是创建云对象所需的条件,也可以叫做参数。一个云对象需要哪些参数,由该对象本身的特点决定。有的对象需要很多参数,才能确定,例如虚拟机。有的对象可以由很少的参数甚至不需要参数就能创建,例如OBS的Bucket。有的输入参数比较复杂,由多个基础参数组合而成,如虚拟机的网络属性。
输入语法如下:
云对象(元素): description: 云对象介绍 properties: #由哪些参数组成 属性1: # 参数1 属性2: # 参数2 属性…:# 参数…
编排(元素)
如果元素仅是按照所排列的顺序一个接一个的初始化,那就没有编排的概念。AOS之所以有编排的能力是因为元素之间可以有复杂的依赖关系。某个元素的初始化(输入)需要依赖另外一个元素的结果(输出),这种关系的表达就是AOS模板的特性。
AOS模板可以指定任意元素的输出作为下一个元素的输入,这样自由的控制初始化流程,称之为编排。只有能够编排,才可以满足各种自动化需求。
一个AOS模板,就是描述您想要编排的各种对象的集合。更直观的理解就是您想要控制初始化流程的各种对象集合。
元素之间的关联关系包括元素依赖关系和元素包含关系:
- 元素依赖关系:某个元素的输入需要依赖另一个元素的输出。元素A依赖元素B,则元素B创建成功后才能创建元素A。
- 元素包含关系:某个元素属于另一个元素的一部分。元素A包含元素B,则元素A创建成功后才能创建元素B。
云对象的输出,有如下两个使用场景,一般配合内置函数get_attribute使用。
- 作为另一个云对象的输入。
- 作为整个资源栈的结果输出。
结果语法如下:
#另一个对象ECS中的结果,服务名Service value: {get_attribute: [ecs, Service, ports, 0, nodePort]}