heat_template_version: 2013-05-23 description: This Heat template creates a pair of networks plugged into the same router. Master instances and slave instances are connected into different networks. parameters: image: type: string description: Name of image to use for servers flavor: type: string description: Flavor to use for servers external_net: type: string description: ID or name of external network for which floating IP addresses will be allocated # server_endpoint: # type: string # description: Server endpoint address dns_nameservers: type: comma_delimited_list description: DNS nameservers for the subnets resources: east_private_net: type: OS::Neutron::Net properties: name: {{ unique }}_net_east east_private_subnet: type: OS::Neutron::Subnet properties: network_id: { get_resource: east_private_net } cidr: 10.1.0.0/16 dns_nameservers: { get_param: dns_nameservers } router: type: OS::Neutron::Router properties: external_gateway_info: network: { get_param: external_net } router_interface: type: OS::Neutron::RouterInterface properties: router_id: { get_resource: router } subnet_id: { get_resource: east_private_subnet } west_private_net: type: OS::Neutron::Net properties: name: {{ unique }}_net_west west_private_subnet: type: OS::Neutron::Subnet properties: network_id: { get_resource: west_private_net } cidr: 10.2.0.0/16 dns_nameservers: { get_param: dns_nameservers } router_interface_2: type: OS::Neutron::RouterInterface properties: router_id: { get_resource: router } subnet_id: { get_resource: west_private_subnet } server_security_group: type: OS::Neutron::SecurityGroup properties: rules: [ {remote_ip_prefix: 0.0.0.0/0, protocol: tcp, port_range_min: 1, port_range_max: 65535}, {remote_ip_prefix: 0.0.0.0/0, protocol: udp, port_range_min: 1, port_range_max: 65535}, {remote_ip_prefix: 0.0.0.0/0, protocol: icmp}] {% for agent in agents.values() %} {{ agent.id }}: type: OS::Nova::Server properties: name: {{ agent.id }} image: { get_param: image } flavor: { get_param: flavor } availability_zone: "{{ agent.availability_zone }}" networks: - port: { get_resource: {{ agent.id }}_port } {% if agent.mode == 'master' %} {{ agent.id }}_port: type: OS::Neutron::Port properties: network_id: { get_resource: east_private_net } fixed_ips: - subnet_id: { get_resource: east_private_subnet } security_groups: [{ get_resource: server_security_group }] {% else %} {{ agent.id }}_port: type: OS::Neutron::Port properties: network_id: { get_resource: west_private_net } fixed_ips: - subnet_id: { get_resource: west_private_subnet } security_groups: [{ get_resource: server_security_group }] {% endif %} {% endfor %} outputs: {% for agent in agents.values() %} {{ agent.id }}_instance_name: value: { get_attr: [ {{ agent.id }}, instance_name ] } {% if agent.mode == 'master' %} {{ agent.id }}_ip: value: { get_attr: [ {{ agent.id }}, networks, { get_attr: [east_private_net, name] }, 0 ] } {% else %} {{ agent.id }}_ip: value: { get_attr: [ {{ agent.id }}, networks, { get_attr: [west_private_net, name] }, 0 ] } {% endif %} {% endfor %}