Improve VMs spawning for OpenStack 89/56689/3
authorStepan Andrushko <stepanx.andrushko@intel.com>
Thu, 26 Apr 2018 17:28:05 +0000 (20:28 +0300)
committerStepan Andrushko <stepanx.andrushko@intel.com>
Tue, 29 May 2018 13:41:55 +0000 (16:41 +0300)
In some, like 5% or so, VMs become not responsible. Added a validation to make sure VMs
are reachable over SSH. In case of issue - restarting VM.

JIRA: YARDSTICK-1141

Change-Id: I110fe35b4b7bdbc4ba962d3814ce0f8cd40e5400
Signed-off-by: Stepan Andrushko <stepanx.andrushko@intel.com>
ansible/roles/infra_create_vms/tasks/main.yml
ansible/roles/infra_create_vms/tasks/validate_vms.yml [new file with mode: 0644]
ansible/roles/infra_prepare_vms/tasks/main.yml

index 4d47f44..b422a92 100644 (file)
   loop_control:
     loop_var: node_item
   with_items: "{{ infra_deploy_vars.nodes }}"
+
+- name: Create list of dictionaries with vm name, ip address
+  set_fact:
+    vm_name_ip: "{{ vm_name_ip|default([]) + [{item.hostname: item.interfaces[1].ip}] }}"
+  with_items: "{{ infra_deploy_vars.nodes }}"
+
+- name: Make sure VM is reachable
+  include_tasks: validate_vms.yml
+  loop_control:
+    loop_var: name_ip
+  with_items: "{{ vm_name_ip }}"
diff --git a/ansible/roles/infra_create_vms/tasks/validate_vms.yml b/ansible/roles/infra_create_vms/tasks/validate_vms.yml
new file mode 100644 (file)
index 0000000..ce5eff2
--- /dev/null
@@ -0,0 +1,54 @@
+# Copyright (c) 2018 Intel Corporation.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+---
+- name: Validate if VM is responding
+  wait_for:
+    host: "{{ item.value }}"
+    port: 22
+    timeout: 10
+  with_dict: "{{ name_ip }}"
+  register: result
+  ignore_errors: yes
+
+- name: Stop VM if it is not responding
+  virt:
+    name: "{{ item.key }}"
+    command: destroy
+  when: result is failed
+  with_dict: "{{ name_ip }}"
+
+- name: Wait for VM is being stopped
+  pause:
+    seconds: 10
+  when: result is failed
+
+- name: Start VM
+  virt:
+    name: "{{ item.key }}"
+    command: start
+  when: result is failed
+  with_dict: "{{ name_ip }}"
+
+- name: Validate if VM is responding
+  wait_for:
+    host: "{{ item.value }}"
+    port: 22
+    timeout: 10
+  when: result is failed
+  with_dict: "{{ name_ip }}"
+  register: result
+
+- fail:
+    msg: "FAILED on {{ name_ip }}"
+  when: result is failed
index d7ed085..4e0d9c3 100644 (file)
     secondary_ip: "{{ item.interfaces[1].ip }}"
   when: item.hostname == 'yardstickvm'
   with_items: "{{ infra_deploy_vars.nodes }}"
-
-- name: Workaround, not all VMs are ready by that time
-  pause: seconds=20