| 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 } |
| user_data_format: RAW |
| user_data: |
| str_replace: |
| template: | |
| #!/bin/sh |
| screen -dmS shaker-agent-screen shaker-agent --server-endpoint=$SERVER_ENDPOINT --agent-id=$AGENT_ID |
| params: |
| "$SERVER_ENDPOINT": { get_param: server_endpoint } |
| "$AGENT_ID": {{ agent.id }} |
| |
| {% 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 %} |