| heat_template_version: 2013-05-23 |
| |
| description: |
| This Heat template creates a new Neutron network, a router to the external |
| network and plugs instances into this new network. All instances are located |
| in the same L2 domain. |
| |
| 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 |
| server_endpoint: |
| type: string |
| description: Server endpoint address |
| dns_nameservers: |
| type: comma_delimited_list |
| description: DNS nameservers for the subnet |
| |
| resources: |
| qos_policy: |
| type: OS::Neutron::QoSPolicy |
| |
| bandwidth_limit_rule: |
| type: OS::Neutron::QoSBandwidthLimitRule |
| properties: |
| policy: { get_resource: qos_policy } |
| max_kbps: 10000 |
| max_burst_kbps: 10000 |
| |
| private_net: |
| type: OS::Neutron::Net |
| properties: |
| name: {{ unique }}_net |
| qos_policy: { get_resource: qos_policy } |
| |
| private_subnet: |
| type: OS::Neutron::Subnet |
| properties: |
| network_id: { get_resource: private_net } |
| cidr: 10.0.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: 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 }} |
| |
| {{ agent.id }}_port: |
| type: OS::Neutron::Port |
| properties: |
| network_id: { get_resource: private_net } |
| fixed_ips: |
| - subnet_id: { get_resource: private_subnet } |
| security_groups: [{ get_resource: server_security_group }] |
| |
| {% endfor %} |
| |
| outputs: |
| {% for agent in agents.values() %} |
| {{ agent.id }}_instance_name: |
| value: { get_attr: [ {{ agent.id }}, instance_name ] } |
| {{ agent.id }}_ip: |
| value: { get_attr: [ {{ agent.id }}, networks, { get_attr: [private_net, name] }, 0 ] } |
| {% endfor %} |