Add custom shaker scenarios for testing of DVS plugin.

Change-Id: I9b11f1b46a0f36d6a088e5ce64cd63485270ef58
This commit is contained in:
Vasily Gorin 2016-07-20 16:57:52 +03:00 committed by Ruslan Khozinov
parent aa23019b33
commit 2c5b5c72fd
16 changed files with 1407 additions and 0 deletions

View File

@ -0,0 +1,102 @@
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:
private_net:
type: OS::Neutron::Net
properties:
name: {{ unique }}_net
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: {% if agent.zone == 'nova' %} shaker-image-nova {% else %} shaker-image-vcenter {% endif %}
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 %}

View File

@ -0,0 +1,134 @@
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: {% if agent.zone == 'nova' %} shaker-image-nova {% else %} shaker-image-vcenter {% endif %}
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 %}

View File

@ -0,0 +1,147 @@
heat_template_version: 2013-05-23
description: >
This Heat template creates a new Neutron network plus a north_router to the
external network. The template also assigns floating IP addresses to each
instance so they are routable from the external network.
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:
north_private_net:
type: OS::Neutron::Net
properties:
name: {{ unique }}_net_north
north_private_subnet:
type: OS::Neutron::Subnet
properties:
network_id: { get_resource: north_private_net }
cidr: 10.1.0.0/16
dns_nameservers: { get_param: dns_nameservers }
north_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: north_router }
subnet_id: { get_resource: north_private_subnet }
south_private_net:
type: OS::Neutron::Net
properties:
name: {{ unique }}_net_south
south_private_subnet:
type: OS::Neutron::Subnet
properties:
network_id: { get_resource: south_private_net }
cidr: 10.2.0.0/16
dns_nameservers: { get_param: dns_nameservers }
south_router:
type: OS::Neutron::Router
properties:
external_gateway_info:
network: { get_param: external_net }
router_interface_2:
type: OS::Neutron::RouterInterface
properties:
router_id: { get_resource: south_router }
subnet_id: { get_resource: south_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: {% if agent.zone == 'nova' %} shaker-image-nova {% else %} shaker-image-vcenter {% endif %}
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: north_private_net }
fixed_ips:
- subnet_id: { get_resource: north_private_subnet }
security_groups: [{ get_resource: server_security_group }]
{% else %}
{{ agent.id }}_port:
type: OS::Neutron::Port
properties:
network_id: { get_resource: south_private_net }
fixed_ips:
- subnet_id: { get_resource: south_private_subnet }
security_groups: [{ get_resource: server_security_group }]
{{ agent.id }}_floating_ip:
type: OS::Neutron::FloatingIP
properties:
floating_network: { get_param: external_net }
port_id: { get_resource: {{ agent.id }}_port }
{% 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: [north_private_net, name] }, 0 ] }
{% else %}
{{ agent.id }}_ip:
value: { get_attr: [ {{ agent.id }}_floating_ip, floating_ip_address ] }
{% endif %}
{% endfor %}

View File

@ -0,0 +1,57 @@
title: OpenStack L2 Cross-AZ Performance
description:
In this scenario Shaker launches 1 pair of instances in the same tenant
network. Each instance is hosted on a separate compute node.
The master and slave instances are in different availability zones.
The scenario is used to test throughput between `nova` and `vcenter` zones.
deployment:
template: l2.hot
accommodation: [pair, single_room, zones: [nova, vcenter], cross_az, compute_nodes: 2]
execution:
tests:
-
title: Ping
class: flent
method: ping
time: 10
sla:
- "[type == 'agent'] >> (stats.ping_icmp.avg < 2.0)"
-
title: TCP
class: iperf3
time: 600
sla:
- "[type == 'agent'] >> (stats.bandwidth.avg > 5000)"
- "[type == 'agent'] >> (stats.retransmits.max < 10)"
-
title: UDP64
class: iperf3
udp: on
bandwidth: 0
time: 600
datagram_size: 64
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP1500
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 1500
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP9000
class: iperf3
udp: on
time: 600
bandwidth: 1000M
buffer_size: 8950
datagram_size: 9000
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"

View File

@ -0,0 +1,60 @@
title: OpenStack L3 East-West Cross-AZ Performance
description:
In this scenario Shaker launches 1 pair of instances, each instance on its own
compute node. Instances are connected to one of 2 tenant networks, which
plugged into single router. The traffic goes from one network to the other
(L3 east-west).
The master and slave instances are in different availability zones.
The scenario is used to test throughput between `nova` and `vcenter` zones.
deployment:
template: l3_east_west.hot
accommodation: [pair, single_room, zones: [nova, vcenter], cross_az, compute_nodes: 2]
execution:
tests:
-
title: Ping
class: flent
method: ping
time: 10
sla:
- "[type == 'agent'] >> (stats.ping_icmp.avg < 2.0)"
-
title: TCP
class: iperf3
time: 600
sla:
- "[type == 'agent'] >> (stats.bandwidth.avg > 5000)"
- "[type == 'agent'] >> (stats.retransmits.max < 10)"
-
title: UDP_64
class: iperf3
udp: on
bandwidth: 0
time: 600
datagram_size: 64
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP_1500
class: iperf3
udp: on
bandwidth: 0
time: 600
datagram_size: 1500
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP_JUMBO
class: iperf3
udp: on
bandwidth: 1000M
time: 600
buffer_size: 8950
datagram_size: 9000
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"

View File

@ -0,0 +1,58 @@
title: OpenStack L3 North-South Cross-AZ Performance
description:
In this scenario Shaker launches 1 pair of instances on different compute
nodes. Instances are in different networks connected to different routers,
master accesses slave by floating ip. The traffic goes from one network
via external network to the other network.
The master and slave instances are in different availability zones.
The scenario is used to test throughput between `nova` and `vcenter` zones.
deployment:
template: l3_north_south.hot
accommodation: [pair, single_room, zones: [nova, vcenter], cross_az, compute_nodes: 2]
execution:
tests:
-
title: Ping
class: flent
method: ping
time: 10
sla:
- "[type == 'agent'] >> (stats.ping_icmp.avg < 2.0)"
-
title: TCP
class: iperf3
time: 600
sla:
- "[type == 'agent'] >> (stats.bandwidth.avg > 5000)"
- "[type == 'agent'] >> (stats.retransmits.max < 10)"
-
title: UDP64
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 32
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP1500
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 1500
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP_JUMBO
class: iperf3
udp: on
time: 600
bandwidth: 1000M
buffer_size: 8950
datagram_size: 9000
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"

View File

@ -0,0 +1,129 @@
#!/bin/bash
INVALIDOPTS_ERR=100
NOTYPENAME=101
NOSCENARIOS=102
ShowHelp() {
cat << EOF
Run shaker scenarios
-t (name) - Types name of suite to run scenarios. It can be cross_az or single_zone
Uses TYPE if not set.
-s (list) - Names of shaker scenarios separated by space
Uses SHAKER_SCENARIOS if not set. See file name in folders cross_az and single_zone.
Names can be specified as <name>.yaml ar <name>
-i (name) - Shaker image name which is using in Openstack to run Shaker
-n - No debug
-h - Show this message
EOF
}
function log_info {
message=$1
date "+%d/%m/%y %H:%M:%S INFO: $message"
}
function log_error {
message=$1
date "+%d-%m-%y %H:%M:%S ERROR: $message"
}
GetoptsVariables() {
while getopts ":t:s:i:nh" opt; do
case ${opt} in
t)
TYPE="${OPTARG}"
;;
s)
SHAKER_SCENARIOS="${OPTARG}"
;;
i)
SHAKER_IMAGE="${OPTARG}"
;;
n)
NODEBUG="--nodebug"
;;
h)
ShowHelp
exit 0
;;
\?)
echo "Invalid option: -$OPTARG"
ShowHelp
exit ${INVALIDOPTS_ERR}
;;
:)
echo "Option -$OPTARG requires an argument."
ShowHelp
exit ${INVALIDOPTS_ERR}
;;
esac
done
}
CheckVariables() {
if [ -z "${SHAKER_SCENARIOS}" ]; then
echo "Error! SHAKER_SCENARIOS is not set!"
exit ${NOSCENARIOS}
fi
if [ -z "${TYPE}" ]; then
echo "Error! TYPE is not set!"
exit ${NOTYPENAME}
fi
if [ -n "${SHAKER_IMAGE}" ]; then
SHAKER_IMAGE="--image-name $SHAKER_IMAGE"
fi
}
MakeDir() {
start_time=$(date "+%H:%M:%S_%d-%m-%y")
reports_folder=reports/${TYPE}/${start_time}
output_folder=output/${TYPE}/${start_time}
mkdir -p ${reports_folder}
mkdir -p ${output_folder}
}
RunTests() {
log_info "Following groups should be run: $SHAKER_SCENARIOS"
for group in ${SHAKER_SCENARIOS}
do
name=$(echo ${group} | sed 's/.yaml//')
log_info "Start group: $group"
scenario=${TYPE}/${group}
SHAKER="shaker ${NODEBUG} --scenario ${scenario} --report ${reports_folder}/${name}.html --output ${output_folder}/${name}.json ${SHAKER_IMAGE}"
log_info "Command to run: ${SHAKER}"
${SHAKER}
if [ $? != 0 ]; then
log_error "Something went wrong in group $group"
fi
sleep 5
done
}
# first we want to get variable from command line options
GetoptsVariables "${@}"
# check do we have all critical variables set
CheckVariables
# make reports and outputs directories
MakeDir
RunTests

View File

@ -0,0 +1,102 @@
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:
private_net:
type: OS::Neutron::Net
properties:
name: {{ unique }}_net
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 %}

View File

@ -0,0 +1,134 @@
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 %}

View File

@ -0,0 +1,147 @@
heat_template_version: 2013-05-23
description: >
This Heat template creates a new Neutron network plus a north_router to the
external network. The template also assigns floating IP addresses to each
instance so they are routable from the external network.
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:
north_private_net:
type: OS::Neutron::Net
properties:
name: {{ unique }}_net_north
north_private_subnet:
type: OS::Neutron::Subnet
properties:
network_id: { get_resource: north_private_net }
cidr: 10.1.0.0/16
dns_nameservers: { get_param: dns_nameservers }
north_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: north_router }
subnet_id: { get_resource: north_private_subnet }
south_private_net:
type: OS::Neutron::Net
properties:
name: {{ unique }}_net_south
south_private_subnet:
type: OS::Neutron::Subnet
properties:
network_id: { get_resource: south_private_net }
cidr: 10.2.0.0/16
dns_nameservers: { get_param: dns_nameservers }
south_router:
type: OS::Neutron::Router
properties:
external_gateway_info:
network: { get_param: external_net }
router_interface_2:
type: OS::Neutron::RouterInterface
properties:
router_id: { get_resource: south_router }
subnet_id: { get_resource: south_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: north_private_net }
fixed_ips:
- subnet_id: { get_resource: north_private_subnet }
security_groups: [{ get_resource: server_security_group }]
{% else %}
{{ agent.id }}_port:
type: OS::Neutron::Port
properties:
network_id: { get_resource: south_private_net }
fixed_ips:
- subnet_id: { get_resource: south_private_subnet }
security_groups: [{ get_resource: server_security_group }]
{{ agent.id }}_floating_ip:
type: OS::Neutron::FloatingIP
properties:
floating_network: { get_param: external_net }
port_id: { get_resource: {{ agent.id }}_port }
{% 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: [north_private_net, name] }, 0 ] }
{% else %}
{{ agent.id }}_ip:
value: { get_attr: [ {{ agent.id }}_floating_ip, floating_ip_address ] }
{% endif %}
{% endfor %}

View File

@ -0,0 +1,55 @@
title: OpenStack L2 Nova-AZ Performance
description:
In this scenario Shaker launches 1 pair of instances in the same tenant
network. Each instance is hosted on a separate compute node.
The master and slave instances are in nova availability zones.
deployment:
template: l2.hot
accommodation: [pair, single_room, zones: [nova], compute_nodes: 2]
execution:
tests:
-
title: Ping
class: flent
method: ping
time: 10
sla:
- "[type == 'agent'] >> (stats.ping_icmp.avg < 2.0)"
-
title: TCP
class: iperf3
time: 600
sla:
- "[type == 'agent'] >> (stats.bandwidth.avg > 5000)"
- "[type == 'agent'] >> (stats.retransmits.max < 10)"
-
title: UDP64
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 64
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP1500
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 1500
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP_JUMBO
class: iperf3
udp: on
time: 600
bandwidth: 1000M
buffer_size: 8950
datagram_size: 9000
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"

View File

@ -0,0 +1,56 @@
title: OpenStack L2 vcenter-AZ Performance
description:
In this scenario Shaker launches 1 pair of instances in the same tenant
network. Each instance is hosted on a separate compute node.
The master and slave instances are in vcenter availability zones.
deployment:
template: l2.hot
accommodation: [pair, single_room, zones: [vcenter], compute_nodes: 2]
execution:
tests:
-
title: Ping
class: flent
method: ping
time: 10
sla:
- "[type == 'agent'] >> (stats.ping_icmp.avg < 2.0)"
-
title: TCP
class: iperf3
time: 600
sla:
- "[type == 'agent'] >> (stats.bandwidth.avg > 5000)"
- "[type == 'agent'] >> (stats.retransmits.max < 10)"
-
title: UDP64
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 64
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP1500
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 1500
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP_JUMBO
class: iperf3
udp: on
time: 600
bandwidth: 1000M
buffer_size: 8950
datagram_size: 9000
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"

View File

@ -0,0 +1,56 @@
title: OpenStack L3 East-West nova-AZ Performance
description:
In this scenario Shaker launches 1 pair of instances, each instance on its own
compute node. Instances are connected to one of 2 tenant networks, which
plugged into single router. The traffic goes from one network to the other
(L3 east-west).
deployment:
template: l3_east_west.hot
accommodation: [pair, single_room, zones: [nova], compute_nodes: 2]
execution:
tests:
-
title: Ping
class: flent
method: ping
time: 10
sla:
- "[type == 'agent'] >> (stats.ping_icmp.avg < 2.0)"
-
title: TCP
class: iperf3
time: 600
sla:
- "[type == 'agent'] >> (stats.bandwidth.avg > 5000)"
- "[type == 'agent'] >> (stats.retransmits.max < 10)"
-
title: UDP64
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 64
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP1500
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 1500
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP_JUMBO
class: iperf3
udp: on
time: 600
bandwidth: 1000M
buffer_size: 8950
datagram_size: 9000
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"

View File

@ -0,0 +1,56 @@
title: OpenStack L3 East-West vcenter-AZ Performance
description:
In this scenario Shaker launches 1 pair of instances, each instance on its own
compute node. Instances are connected to one of 2 tenant networks, which
plugged into single router. The traffic goes from one network to the other
(L3 east-west).
deployment:
template: l3_east_west.hot
accommodation: [pair, single_room, zones: [vcenter], compute_nodes: 2]
execution:
tests:
-
title: Ping
class: flent
method: ping
time: 10
sla:
- "[type == 'agent'] >> (stats.ping_icmp.avg < 2.0)"
-
title: TCP
class: iperf3
time: 600
sla:
- "[type == 'agent'] >> (stats.bandwidth.avg > 5000)"
- "[type == 'agent'] >> (stats.retransmits.max < 10)"
-
title: UDP64
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 64
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP1500
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 1500
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP_JUMBO
class: iperf3
udp: on
time: 600
bandwidth: 1000M
buffer_size: 8950
datagram_size: 9000
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"

View File

@ -0,0 +1,57 @@
title: OpenStack L3 North-South nova-AZ Performance
description:
In this scenario Shaker launches 1 pair of instances on different compute
nodes. Instances are in different networks connected to different routers,
master accesses slave by floating ip. The traffic goes from one network
via external network to the other network.
The master and slave instances are in nova availability zones.
deployment:
template: l3_north_south.hot
accommodation: [pair, single_room, zones: [nova], compute_nodes: 2]
execution:
tests:
-
title: Ping
class: flent
method: ping
time: 10
sla:
- "[type == 'agent'] >> (stats.ping_icmp.avg < 2.0)"
-
title: TCP
class: iperf3
time: 600
sla:
- "[type == 'agent'] >> (stats.bandwidth.avg > 5000)"
- "[type == 'agent'] >> (stats.retransmits.max < 10)"
-
title: UDP64
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 32
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP1500
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 1500
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP_JUMBO
class: iperf3
udp: on
time: 600
bandwidth: 1000M
buffer_size: 8950
datagram_size: 9000
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"

View File

@ -0,0 +1,57 @@
title: OpenStack L3 North-South vcenter-AZ Performance
description:
In this scenario Shaker launches 1 pair of instances on different compute
nodes. Instances are in different networks connected to different routers,
master accesses slave by floating ip. The traffic goes from one network
via external network to the other network.
The master and slave instances are in vcenter availability zones.
deployment:
template: l3_north_south.hot
accommodation: [pair, single_room, zones: [vcenter], compute_nodes: 2]
execution:
tests:
-
title: Ping
class: flent
method: ping
time: 10
sla:
- "[type == 'agent'] >> (stats.ping_icmp.avg < 2.0)"
-
title: TCP
class: iperf3
time: 600
sla:
- "[type == 'agent'] >> (stats.bandwidth.avg > 5000)"
- "[type == 'agent'] >> (stats.retransmits.max < 10)"
-
title: UDP64
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 32
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP1500
class: iperf3
udp: on
time: 600
bandwidth: 0
datagram_size: 1500
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"
-
title: UDP_JUMBO
class: iperf3
udp: on
time: 600
bandwidth: 1000M
buffer_size: 8950
datagram_size: 9000
sla:
- "[type == 'agent'] >> (stats.packets.avg > 100000)"