Ваш стек пытается подключить один и тот же порт к другому серверу Nova, поэтому происходит сбой.Решение состоит в том, чтобы создать вложенный стек, который будет создавать ваши 3 ресурса (сервер Nova, порт Neutron и плавающий IP-адрес Neutron), а затем ваш основной стек будет реализовывать группу ресурсов для «масштабирования» ваших серверов:
Nested_stack: nested_stack.yaml
parameter:
index:
type: number
sec_group_lin:
type: string
key_name:
type: string
public_net:
type: string
resources:
compute_nodes:
type: OS::Nova::Server
depends_on: [test_port, test_floating_ip]
properties:
name: { list-join: ['-', ['test', {get_param: index} ] ] }
key_name: { get_param: key_name }
image: "Ubuntu Server 18.04 LTS (Bionic Beaver) amd64"
flavor: m1.small
networks:
- port: { get_resource: test_port }
test_port:
type: OS::Neutron::Port
properties:
network_id: { get_resource: private_net }
security_groups: { get_param: sec_group_lin }
fixed_ips:
- subnet_id: { get_resource: private_subnet }
test_floating_ip:
type: OS::Neutron::FloatingIP
depends_on: [test_port]
properties:
floating_network: { get_param: public_net }
port_id: { get_resource: test_port }
Тогда ваш основной стек будет выглядеть следующим образом:
parameters:
key_name:
type: string
public_net:
type: string
sec_group_lin:
type: string
resources:
compute_nodes:
type: OS::Heat::ResourceGroup
properties:
count: 3
resource_def:
type: nested_stack.yaml
properties:
index: %index%
key_name: {get_param: key_name}
public_net: { get_param: public_net }
sec_group_lin: { get_param: sec_group_lin }
Это создаст х (здесь х = 3, так как ваш счет установлен на 3) серверов скаждый из них имеет свой собственный тестовый порт и тестовый плавающий IP.