|
10 | 10 | register: serviceip |
11 | 11 | when: workload_args.serviceip is defined and workload_args.serviceip |
12 | 12 |
|
| 13 | +- name: Get Workload Pairs |
| 14 | + set_fact: |
| 15 | + workload_pairs: "{{ workload_args.pair|default('1')|int }}" |
| 16 | + |
13 | 17 | - block: |
14 | 18 |
|
15 | 19 | - name: Create service for server pods |
16 | 20 | k8s: |
17 | 21 | definition: "{{ lookup('template', 'service.yml.j2') | from_yaml }}" |
18 | | - with_sequence: start=0 count={{ workload_args.pair | default('1')|int }} |
| 22 | + with_sequence: start=0 count={{ workload_pairs }} |
19 | 23 | when: |
20 | 24 | - workload_args.serviceip is defined and workload_args.serviceip |
21 | 25 | - ( workload_args.servicetype | default("clusterip") == "clusterip" ) or |
|
24 | 28 | - name: Create metal LB service for server pods |
25 | 29 | k8s: |
26 | 30 | definition: "{{ lookup('template', 'service_metallb.yml.j2') | from_yaml }}" |
27 | | - with_sequence: start=0 count={{ workload_args.pair | default('1')|int }} |
| 31 | + with_sequence: start=0 count={{ workload_pairs }} |
28 | 32 | when: |
29 | 33 | - workload_args.serviceip is defined and workload_args.serviceip |
30 | 34 | - workload_args.servicetype | default("clusterip") == "metallb" |
|
33 | 37 | k8s: |
34 | 38 | definition: "{{ lookup('template', 'server.yml.j2') | from_yaml }}" |
35 | 39 | register: servers |
36 | | - with_sequence: start=0 count={{ workload_args.pair | default('1')|int }} |
| 40 | + with_sequence: start=0 count={{ workload_pairs }} |
37 | 41 |
|
38 | 42 | - include_role: |
39 | 43 | name: benchmark_state |
|
49 | 53 | k8s: |
50 | 54 | definition: "{{ lookup('template', 'server_vm.yml.j2') | from_yaml }}" |
51 | 55 | register: servers |
52 | | - with_sequence: start=0 count={{ workload_args.pair | default('1')|int }} |
| 56 | + with_sequence: start=0 count={{ workload_pairs }} |
53 | 57 |
|
54 | 58 | - include_role: |
55 | 59 | name: benchmark_state |
|
70 | 74 | - type = {{ ansible_operator_meta.name }}-bench-server-{{ trunc_uuid }} |
71 | 75 | register: server_pods |
72 | 76 |
|
| 77 | + - name: Get number of running server pods |
| 78 | + set_fact: |
| 79 | + running_pod_count: "{{ server_pods | json_query('resources[].status[]')|selectattr('phase','match','Running')|list|length|int }}" |
| 80 | + |
73 | 81 | - include_role: |
74 | 82 | name: benchmark_state |
75 | 83 | tasks_from: set_state |
76 | 84 | vars: |
77 | 85 | state: "Starting Clients" |
78 | | - when: "workload_args.pair|default('1')|int == server_pods | json_query('resources[].status[]')|selectattr('phase','match','Running')|list|length" |
79 | | - |
| 86 | + when: workload_pairs == running_pod_count |
80 | 87 |
|
81 | 88 | when: benchmark_state.resources[0].status.state == "Starting Servers" and resource_kind == "pod" |
82 | 89 |
|
83 | 90 | - block: |
84 | | - |
85 | | - - name: Wait for vms to be running.... |
| 91 | + - name: Get Server VMs |
86 | 92 | k8s_info: |
87 | 93 | kind: VirtualMachineInstance |
88 | 94 | api_version: kubevirt.io/v1alpha3 |
|
91 | 97 | - type = {{ ansible_operator_meta.name }}-bench-server-{{ trunc_uuid }} |
92 | 98 | register: server_vms |
93 | 99 |
|
| 100 | + - name: Get Running VMs |
| 101 | + set_fact: |
| 102 | + running_vm_count: "{{ server_vms | json_query('resources[].status[]') | selectattr('phase','match','Running') | list | length | int }}" |
| 103 | + |
| 104 | + - name: Get VMs with ip addresses |
| 105 | + set_fact: |
| 106 | + server_vms_with_ips: "{{ server_vms | json_query('resources[].status.interfaces[0]') | selectattr('ipAddress', 'defined') | map(attribute='ipAddress') | list | length | int }}" |
| 107 | + |
| 108 | + - name: Determine if can start clients |
| 109 | + set_fact: |
| 110 | + start_clients: "{{ (workload_pairs == running_vm_count) and (workload_pairs == server_vms_with_ips) }}" |
| 111 | + |
94 | 112 | - include_role: |
95 | 113 | name: benchmark_state |
96 | 114 | tasks_from: set_state |
97 | 115 | vars: |
98 | 116 | state: "Starting Clients" |
99 | | - when: "workload_args.pair|default('1')|int == server_vms | json_query('resources[].status[]')|selectattr('phase','match','Running')|list|length and workload_args.pair|default('1')|int == (server_vms | json_query('resources[].status.interfaces[0].ipAddress')|length)" |
| 117 | + when: start_clients |
100 | 118 |
|
101 | 119 | - name: blocking client from running uperf |
102 | 120 | command: "redis-cli set start-{{ trunc_uuid }} false" |
103 | 121 | with_items: "{{ server_vms.resources }}" |
104 | | - when: "workload_args.pair|default('1')|int == server_vms | json_query('resources[].status[]')|selectattr('phase','match','Running')|list|length and workload_args.pair|default('1')|int == (server_vms | json_query('resources[].status.interfaces[0].ipAddress')|length)" |
| 122 | + when: start_clients |
105 | 123 |
|
106 | | - when: benchmark_state.resources[0].status.state == "Starting Servers" and resource_kind == "vm" and workload_args.pair|default('1')|int|int == 1 |
| 124 | + when: benchmark_state.resources[0].status.state == "Starting Servers" and resource_kind == "vm" |
107 | 125 |
|
108 | 126 | - block: |
109 | 127 |
|
|
148 | 166 | - workload_args.serviceip|default(False) == True and serviceip.resources|length > 0 |
149 | 167 | - workload_args.servicetype | default("clusterip") != "nodeport" |
150 | 168 |
|
| 169 | + - include_role: |
| 170 | + name: benchmark_state |
| 171 | + tasks_from: set_state |
| 172 | + vars: |
| 173 | + state: "Waiting for Clients" |
| 174 | + |
151 | 175 | when: resource_kind == "pod" |
152 | 176 |
|
153 | 177 | - block: |
154 | | - |
155 | | - - name: Wait for vms to be running.... |
| 178 | + - name: Get Server VMs |
156 | 179 | k8s_info: |
157 | 180 | kind: VirtualMachineInstance |
158 | 181 | api_version: kubevirt.io/v1alpha3 |
|
161 | 184 | - type = {{ ansible_operator_meta.name }}-bench-server-{{ trunc_uuid }} |
162 | 185 | register: server_vms |
163 | 186 |
|
| 187 | + - name: Get Running VMs |
| 188 | + set_fact: |
| 189 | + running_vm_count: "{{ server_vms | json_query('resources[].status[]') | selectattr('phase','match','Running') | list | length | int }}" |
| 190 | + |
| 191 | + - name: Get VMs with ip addresses |
| 192 | + set_fact: |
| 193 | + server_vms_with_ips: "{{ server_vms | json_query('resources[].status.interfaces[0]') | selectattr('ipAddress', 'defined') | map(attribute='ipAddress') | list | length | int }}" |
| 194 | + |
| 195 | + - name: Determine if can start clients |
| 196 | + set_fact: |
| 197 | + start_clients: "{{ (workload_pairs == running_vm_count) and (workload_pairs == server_vms_with_ips) }}" |
164 | 198 |
|
165 | 199 | - name: Generate uperf test files |
166 | 200 | k8s: |
167 | 201 | definition: "{{ lookup('template', 'configmap_script.yml.j2') | from_yaml }}" |
168 | 202 | with_items: "{{ server_vms.resources }}" |
| 203 | + when: start_clients |
169 | 204 |
|
170 | 205 | - name: Start Client(s) |
171 | 206 | k8s: |
172 | 207 | definition: "{{ lookup('template', 'workload_vm.yml.j2') | from_yaml }}" |
173 | 208 | with_indexed_items: "{{ server_vms.resources }}" |
174 | | - when: server_vms.resources|length > 0 |
| 209 | + when: start_clients |
| 210 | + |
| 211 | + - include_role: |
| 212 | + name: benchmark_state |
| 213 | + tasks_from: set_state |
| 214 | + vars: |
| 215 | + state: "Waiting for Clients" |
| 216 | + when: start_clients |
175 | 217 |
|
176 | 218 | when: resource_kind == "vm" |
177 | 219 |
|
178 | | - - include_role: |
179 | | - name: benchmark_state |
180 | | - tasks_from: set_state |
181 | | - vars: |
182 | | - state: "Waiting for Clients" |
183 | 220 |
|
184 | 221 | when: benchmark_state.resources[0].status.state == "Starting Clients" |
185 | 222 |
|
|
0 commit comments