С помощью проектов шаблона Cloud Assembly можно развернуть кластер компьютеров и присоединить кластер дисков.
Чтобы развернуть кластеры компьютеров и дисков, используйте в облачных шаблонах allocatePerInstance флаг ресурса, а также синтаксис выражений count.index и map_to_object.
Следующие примеры кода облачного шаблона могут служить в качестве инструкций для проектов по развертыванию кластеров.
Два компьютера, совместно использующие кластер дисков
resources:
app0:
type: Cloud.Machine
allocatePerInstance: true
properties:
image: ubuntu
flavor: small
attachedDisks: '${map_to_object(slice(resource.disk[*].id, 0,2), "source")}'
app1:
type: Cloud.Machine
allocatePerInstance: true
properties:
image: ubuntu
flavor: small
attachedDisks: '${map_to_object(slice(resource.disk[*].id, 2,4), "source")}'
disk:
type: Cloud.Volume
allocatePerInstance: true
properties:
count: 4
capacityGb: 5
Переменное количество компьютеров, содержащих по одному диску
inputs:
count:
type: integer
default: 2
resources:
Cloud_Machine_1:
type: Cloud.Machine
allocatePerInstance: true
properties:
image: ubuntu
flavor: small
count: '${input.count}'
attachedDisks: '${map_to_object(slice(resource.disk[*].id, count.index, count.index + 1), "source")}'
disk:
type: Cloud.Volume
allocatePerInstance: true
properties:
count: '${input.count}'
capacityGb: 5
Переменное количество компьютеров, содержащих по два диска
inputs:
count:
type: integer
default: 2
resources:
Cloud_Machine_1:
type: Cloud.Machine
allocatePerInstance: true
properties:
image: ubuntu
flavor: small
count: ${input.count}
attachedDisks: '${map_to_object(slice(resource.disk[*].id, 2*count.index, 2*(count.index + 1)), "source")}'
disk:
type: Cloud.Volume
allocatePerInstance: true
properties:
count: ${2*input.count}
capacityGb: 5
Задание размера диска во время запроса
inputs:
disksize:
type: array
minItems: 2
maxItems: 2
items:
type: object
properties:
size:
type: integer
resources:
app:
type: Cloud.Machine
allocatePerInstance: true
properties:
flavor: small
image: ubuntu
attachedDisks: ${map_to_object(slice(resource.disk[*].id, 0, 2), 'source')}
disk:
type: Cloud.Volume
allocatePerInstance: true
properties:
count: 2
capacityGb: ${input.disksize[count.index].size}