Openstack: сделать сетевой порт уникальным для каждого экземпляра OS :: Heat :: ResourceGroup COUNT - PullRequest
0 голосов
/ 03 марта 2019

Проблема в том, что стек не будет собран, когда count больше 1.
Причина этого в том, что - port: { get_resource: test_port } не уникален для каждого созданного экземпляра.

Код ошибкиполучено: CREATE_FAILED Конфликт: resources.compute_nodes.resources [3]: Порт XXX все еще используется.

Вопрос : Как сделать - port: { get_resource: test_port } уникальным длякаждый экземпляр?

  compute_nodes:
      type: OS::Heat::ResourceGroup
      properties:
        count: 3
        resource_def:
           type: OS::Nova::Server
           properties:
             name: test-%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
    properties:
      floating_network: { get_param: public_net }
      port_id: { get_resource: test_port }

Итерация comma_delimited_list OS :: Heat :: ResourceGroup

Ответы [ 2 ]

0 голосов
/ 28 марта 2019

Ваш стек пытается подключить один и тот же порт к другому серверу 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.

0 голосов
/ 09 марта 2019

Используйте " зависимость_on " для выравнивания потока исполнения шаблона

 compute_nodes:
  type: OS::Heat::ResourceGroup
  depends_on: [test_port, test_floating_ip]
  properties:
    count: 3
    resource_def:
       type: OS::Nova::Server
       properties:
         name: test-%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 }
...