Шаблоны Application Orchestration Service (AOS) представляют собой текстовые файлы в формате YAML или JSON. Они описывают облачные объекты, которые вам нужны, включая приложения, ресурсы и сервисы. AOS автоматически создает различные облачные объекты из шаблонов AOS.
Каждый автоматизированный процесс требует описательного языка для управления его потоком выполнения. Например, shell-скрипт (текстовый файл) описывает, как автоматически выполнять команды. Аналогично, шаблон AOS описывает процесс создания и удаления облачных объектов.
Ниже приведена примерная логика выполнения shell-скрипта:

Shell-скрипт имеет следующие свойства:
- Скрипт представляет собой текстовый файл.
- Если скрипт написан правильно, его можно переиспользовать.
Шаблон AOS имеет такую же логику выполнения, как shell-скрипт. Сервис AOS выступает в роли интерпретатора шаблонов AOS и выполняет действия согласно шаблонам. Шаблон AOS можно рассматривать как стандарты облачной автоматизации.
Хороший shell-скрипт или функция должна иметь входные данные, логику выполнения и возвращаемые значения. Аналогично, хороший шаблон также должен иметь Ввод, Оркестрация, и Выводы. Хороший шаблон облегчает передачу знаний и совместный обмен.
Рисунок 1 Сравнение функции и шаблона

Элементы (Облачные объекты)
Облачные объекты могут быть облачными ресурсами, сервисами или приложениями. Облачные ресурсы являются наиболее распространёнными облачными объектами. AOS рассматривает облачные объекты как элементы. Шаблон представляет собой набор элементов.
- Облачные ресурсы: включают Elastic Cloud Server (ECS) и Virtual Private Cloud (VPC).
- Облачные приложения: включают контейнеризованные приложения на Cloud Container Engine (CCE).
Вам необходимо задать входные параметры для создания любого облачного объекта. После создания облачного объекта отображается результат. На следующей схеме используется ECS (VM) в качестве примера.
Figure 2 Inputs and outputs of a cloud object

Inputs (Properties)
Входные параметры, также называемые параметрами, являются условиями для создания облачного объекта. Параметры, требуемые облачным объектом, определяются характеристиками объекта. Некоторые объекты требуют множества параметров, например, VMs.
Figure 3 Inputs

Синтаксис выглядит следующим образом:
Cloud object (element):description: description of the cloud objectproperties: # Parameters of the cloud objectProperty 1: # Parameter 1Property 2: # Parameter 2Property...: # Parameter...
Orchestration (Elements)
Если элементы инициализируются последовательно в порядке их расположения, оркестрация не требуется. AOS поддерживает оркестрацию элементов со сложными зависимостями между ними. Инициализация (вход) элемента зависит от результата (выход) другого элемента. Такие отношения могут быть заданы с помощью шаблона AOS.
В шаблоне AOS вы можете указать вывод любого элемента в качестве ввода другого элемента. Процесс инициализации может свободно контролироваться, что называется оркестрацией. Только оркестрация может удовлетворять различные требования автоматизации.
Шаблон AOS — это набор объектов, которые вы хотите оркестровать. Более конкретно, шаблон AOS — это набор объектов, которые вы хотите контролировать во время процесса инициализации.
Рисунок 4 Оркестрация

Отношения между элементами классифицируются на два типа: зависимость и включение.
- Отношения зависимости: ввод элемента зависит от вывода другого элемента. Если элемент A зависит от элемента B, элемент A может быть создан только после успешного создания элемента B.
- Отношения включения: элемент является частью другого элемента. Если элемент A содержит элемент B, элемент B может быть создан только после успешного создания элемента A.
Выводы (Возвращаемые значения)
Выводы — это результаты, возвращаемые после успешного создания объекта облака. Возвращаемые результаты объекта облака определяются характеристиками объекта. Некоторые объекты имеют много результатов, а некоторые имеют мало результатов.
Вывод объекта облака используется в следующих двух сценариях. Как правило, он используется вместе с the get_attribute встроенная функция.
- Вывод используется в качестве входных данных другого объекта облака.
- Вывод используется в качестве результата всего стека.
Синтаксис выглядит следующим образом:
# Result of another ECS. The service name is Service.value: {get_attribute: [ecs, Service, ports, 0, nodePort]}