summaryrefslogtreecommitdiffstats
path: root/docs/testing/user/userguide/Yardstick_task_templates.rst
blob: e8130dd2a9ff591ca8a5758e038b5081e8f2ed80 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
.. This work is licensed under a Creative Commons Attribution 4.0 International
.. License.
.. http://creativecommons.org/licenses/by/4.0
.. (c) OPNFV, Huawei Technologies Co.,Ltd and others.

Task Template Syntax
====================

Basic template syntax
---------------------
A nice feature of the input task format used in Yardstick is that it supports
the template syntax based on Jinja2.
This turns out to be extremely useful when, say, you have a fixed structure of
your task but you want to parameterize this task in some way.
For example, imagine your input task file (task.yaml) runs a set of Ping
scenarios:

::

  # Sample benchmark task config file
  # measure network latency using ping
  schema: "yardstick:task:0.1"

  scenarios:
  -
    type: Ping
    options:
      packetsize: 200
    host: athena.demo
    target: ares.demo

    runner:
      type: Duration
      duration: 60
      interval: 1

    sla:
      max_rtt: 10
      action: monitor

  context:
      ...

Let's say you want to run the same set of scenarios with the same runner/
context/sla, but you want to try another packetsize to compare the performance.
The most elegant solution is then to turn the packetsize name into a template
variable:

::

  # Sample benchmark task config file
  # measure network latency using ping

  schema: "yardstick:task:0.1"
  scenarios:
  -
    type: Ping
    options:
      packetsize: {{packetsize}}
    host: athena.demo
    target: ares.demo

    runner:
      type: Duration
      duration: 60
      interval: 1

    sla:
      max_rtt: 10
      action: monitor

  context:
      ...

and then pass the argument value for {{packetsize}} when starting a task with
this configuration file.
Yardstick provides you with different ways to do that:

1.Pass the argument values directly in the command-line interface (with either
a JSON or YAML dictionary):

::

 yardstick task start samples/ping-template.yaml
 --task-args'{"packetsize":"200"}'

2.Refer to a file that specifies the argument values (JSON/YAML):

::

 yardstick task start samples/ping-template.yaml --task-args-file args.yaml

Using the default values
------------------------
Note that the Jinja2 template syntax allows you to set the default values for
your parameters.
With default values set, your task file will work even if you don't
parameterize it explicitly while starting a task.
The default values should be set using the {% set ... %} clause (task.yaml).
For example:

::

  # Sample benchmark task config file
  # measure network latency using ping
  schema: "yardstick:task:0.1"
  {% set packetsize = packetsize or "100" %}
  scenarios:
  -
    type: Ping
    options:
    packetsize: {{packetsize}}
    host: athena.demo
    target: ares.demo

    runner:
      type: Duration
      duration: 60
      interval: 1
    ...

If you don't pass the value for {{packetsize}} while starting a task, the
default one will be used.

Advanced templates
------------------

Yardstick makes it possible to use all the power of Jinja2 template syntax,
including the mechanism of built-in functions.
As an example, let us make up a task file that will do a block storage
performance test.
The input task file (fio-template.yaml) below uses the Jinja2 for-endfor
construct to accomplish that:

::

  #Test block sizes of 4KB, 8KB, 64KB, 1MB
  #Test 5 workloads: read, write, randwrite, randread, rw
  schema: "yardstick:task:0.1"

   scenarios:
  {% for bs in ['4k', '8k', '64k', '1024k' ] %}
    {% for rw in ['read', 'write', 'randwrite', 'randread', 'rw' ] %}
  -
    type: Fio
    options:
      filename: /home/ubuntu/data.raw
      bs: {{bs}}
      rw: {{rw}}
      ramp_time: 10
    host: fio.demo
    runner:
      type: Duration
      duration: 60
      interval: 60

    {% endfor %}
  {% endfor %}
  context
      ...
emplate variables, whose syntax is described below: 1. Single value references %{title} %{environment/net_segment_type} Either a root element, or a path can be specified. 2. YAML sections %{nodes} %{network/networking_parameters} Either a root element, or a path can be specified. 3. Interface lookup for network %{interface(storage)} Specify a network type as argument to interface(). 4. Interface lookup for network and role %{interface(public,compute)} Specify a network type and a role as arguments to interface(). 5. File inclusion %{include(templates/interfaces.yaml)} Filename with absolute or relative path. ======== EXAMPLES ======== Base YAML file (excerpt): title: Deployment Environment Adapter (DEA) version: 1.1 created: Wed Mar 30 08:16:04 2016 environment: name: vCity net_segment_type: tun wanted_release: Liberty on Ubuntu 14.04 nodes: - id: 1 interfaces: interfaces_1 role: ceph-osd,compute transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd,compute transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,compute transformations: transformations_1 - id: 4 interfaces: interfaces_2 role: controller,mongo transformations: transformations_2 - id: 5 interfaces: interfaces_2 role: controller,mongo transformations: transformations_2 - id: 6 interfaces: interfaces_2 role: controller,mongo transformations: transformations_2 interfaces_1: ens3: - fuelweb_admin - management ens4: - storage ens5: - private ens6: - public interfaces_2: ens3: - fuelweb_admin - management ens4: - storage - private - public network: networks: - cidr: 172.16.0.0/24 gateway: 172.16.0.1 ip_ranges: - - 172.16.0.2 - 172.16.0.126 meta: cidr: 172.16.0.0/24 configurable: true floating_range_var: floating_ranges ip_range: - 172.16.0.2 - 172.16.0.126 map_priority: 1 name: public notation: ip_ranges render_addr_mask: public render_type: null use_gateway: true vips: - haproxy - vrouter vlan_start: null name: public vlan_start: null - cidr: 192.168.1.0/24 gateway: null ip_ranges: - - 192.168.1.1 - 192.168.1.254 meta: cidr: 192.168.1.0/24 configurable: true map_priority: 2 name: storage notation: cidr render_addr_mask: storage render_type: cidr use_gateway: false vlan_start: 102 name: storage vlan_start: 102 --- Example 1 --- Template file: deployment-scenario-metadata: title: %{title} version: 0.1 dea-override-config: environment: net_segment_type: %{environment/net_segment_type} nodes: %{nodes} Result: deployment-scenario-metadata: title: Deployment Environment Adapter (DEA) version: 0.1 dea-override-config: environment: net_segment_type: tun nodes: - id: 1 interfaces: interfaces_1 role: ceph-osd,compute transformations: transformations_1 - id: 2 interfaces: interfaces_1 role: ceph-osd,compute transformations: transformations_1 - id: 3 interfaces: interfaces_1 role: ceph-osd,compute transformations: transformations_1 - id: 4 interfaces: interfaces_2 role: controller,mongo transformations: transformations_2 - id: 5 interfaces: interfaces_2 role: controller,mongo transformations: transformations_2 - id: 6 interfaces: interfaces_2 role: controller,mongo transformations: transformations_2 --- Example 2 --- Template file: dea-override-config: network: networks: %{network/networks} Result: dea-override-config: network: networks: - cidr: 172.16.0.0/24 gateway: 172.16.0.1 ip_ranges: - - 172.16.0.2 - 172.16.0.126 meta: cidr: 172.16.0.0/24 configurable: true floating_range_var: floating_ranges ip_range: - 172.16.0.2 - 172.16.0.126 map_priority: 1 name: public notation: ip_ranges render_addr_mask: public render_type: null use_gateway: true vips: - haproxy - vrouter vlan_start: null name: public vlan_start: null - cidr: 192.168.1.0/24 gateway: null ip_ranges: - - 192.168.1.1 - 192.168.1.254 meta: cidr: 192.168.1.0/24 configurable: true map_priority: 2 name: storage notation: cidr render_addr_mask: storage render_type: cidr use_gateway: false vlan_start: 102 name: storage vlan_start: 102 --- Example 3 --- Template file: storage_if: %{interface(storage)} compute_private_if: %{interface(private,compute)} # Management interface of a mongo node mongo_mgmt_if: %{interface(management,mongo)} controller_private_if: %{interface(private,controller)} Result: storage_if: ens4 compute_private_if: ens5 # Management interface of a mongo node mongo_mgmt_if: ens3 controller_private_if: ens4 --- Example 4 --- Template file: version: 1.1 created: Mon Jun 13 19:39:35 2016 comment: None %{include(environment.yaml)} environment.yaml: environment: name: F9-NOSDN-NOFEATURE-VXLAN-BAREMETAL net_segment_type: tun Result: version: 1.1 created: Mon Jun 13 19:39:35 2016 comment: None environment: name: F9-NOSDN-NOFEATURE-VXLAN-BAREMETAL net_segment_type: tun --- Example 5 --- Template file (except): settings: editable: access: email: description: Email address for Administrator label: Email regex: error: Invalid email source: ^\S+@\S+$ type: text value: admin@localhost weight: 40 # ... # lines omitted for brevity %{include(templates/cgroups.yaml)} cgroups.yaml: cgroups: metadata: always_editable: true group: general label: Cgroups conguration for services restrictions: - action: hide condition: 'true' weight: 90 Result: settings: editable: access: email: description: Email address for Administrator label: Email regex: error: Invalid email source: ^\S+@\S+$ type: text value: admin@localhost weight: 40 # ... # again, lines omitted for brevity cgroups: metadata: always_editable: true group: general label: Cgroups conguration for services restrictions: - action: hide condition: 'true' weight: 90