2ab916d6d1
A race can exist with the virbr0 startup where libvirt eventually starts virbr0, but this conflicts with our expliit attempt to start it. As such, we shoulld only attempt to start it if it makes sense to, and tolerate failures when it appears that libvirt started the virbr0 interface while we were not looking. Change-Id: I804102480a0e3df6cfa97ede1213404a7db1d0fe
128 lines
4.3 KiB
YAML
128 lines
4.3 KiB
YAML
# Copyright (c) 2015 Hewlett-Packard Development Company, L.P.
|
|
#
|
|
# 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.
|
|
#
|
|
# TODO: Consider converting to ansible virt module.
|
|
---
|
|
# NOTE(cinerama) openSUSE Tumbleweed & Leap have different distribution
|
|
# IDs which are not currently accounted for in Ansible, so adjust facts
|
|
# so we can have shared defaults for the whole SuSE family.
|
|
# This change can be removed when the pull request at
|
|
# https://github.com/ansible/ansible/pull/17575 lands in a new version.
|
|
- name: Ensure openSUSE Tumbleweed has the correct family
|
|
set_fact:
|
|
ansible_os_family: "Suse"
|
|
when: ansible_os_family | search("openSUSE Tumbleweed")
|
|
|
|
- name: Ensure openSUSE Leap has the correct family
|
|
set_fact:
|
|
ansible_os_family: "Suse"
|
|
when: (ansible_os_family | search("SUSE LINUX")) or
|
|
(ansible_os_family | search("openSUSE Leap"))
|
|
|
|
- name: "Update apt cache if Ubuntu/Debian"
|
|
apt:
|
|
update_cache: yes
|
|
when: ansible_os_family == "Debian"
|
|
|
|
- name: "Load distribution defaults"
|
|
include_vars: "{{ item }}"
|
|
with_first_found:
|
|
- "../defaults/required_defaults_{{ ansible_distribution }}.yml"
|
|
- "../defaults/required_defaults_{{ ansible_os_family }}.yml"
|
|
|
|
- name: "Include OS version-specific defaults"
|
|
include_vars: "{{ item }}"
|
|
with_first_found:
|
|
- "../defaults/required_defaults_{{ ansible_distribution }}_{{ ansible_distribution_release }}.yml"
|
|
- "../defaults/dummy-defaults.yml"
|
|
# NOTE(cinerama): On Fedora 22, ansible 1.9, ansible_pkg_mgr
|
|
# defaults to yum, which may not be installed. This can be safely
|
|
# removed when we start using an ansible release which prefers dnf.
|
|
|
|
- name: "Check for dnf"
|
|
stat:
|
|
path: "/usr/bin/dnf"
|
|
register: test_dnf
|
|
|
|
- name: "Adjust ansible_pkg_mgr if dnf exists"
|
|
set_fact:
|
|
ansible_pkg_mgr: "dnf"
|
|
when: ansible_distribution == 'Fedora' and "{{ test_dnf.stat.exists|bool }}"
|
|
|
|
- name: "Install required packages"
|
|
action: "{{ ansible_pkg_mgr }} name={{ item }} state=present"
|
|
with_items: "{{ required_packages }}"
|
|
|
|
- name: "Restart libvirt service"
|
|
service: name="{{libvirt_service_name}}" state=restarted
|
|
|
|
- name: "Verify default network is running"
|
|
shell: virsh net-info default |grep Active|grep -q yes
|
|
register: virsh_network_status
|
|
delegate_to: localhost
|
|
ignore_errors: yes
|
|
|
|
- name: "Start default network if not running"
|
|
command: virsh net-start default
|
|
when: virsh_network_status.rc != 0
|
|
register: task_start_default_net
|
|
ignore_errors: yes
|
|
delegate_to: localhost
|
|
|
|
- name: "Fail if default network is not available"
|
|
fail:
|
|
msg: "Unable to verify the libvirt default network is available"
|
|
when: >
|
|
virsh_network_status.rc != 0 and
|
|
task_start_default_net.rc != 0 and
|
|
'File exists' not in task_start_default_net.stderr
|
|
|
|
- name: "Create virtual machines"
|
|
script: create_vm_nodes-for-role.sh
|
|
environment:
|
|
NODEOUTPUT: "{{baremetal_csv_file}}"
|
|
VM_RAM: "{{ test_vm_memory_size }}"
|
|
VM_DOMAIN_TYPE: "{{ test_vm_domain_type }}"
|
|
NODECOUNT: "{{ test_vm_num_nodes }}"
|
|
register: task_create_vm_nodes
|
|
ignore_errors: yes
|
|
delegate_to: localhost
|
|
|
|
- name: "Execute `dmesg` to collect debugging output should VM creation fail."
|
|
command: dmesg
|
|
when: task_create_vm_nodes.rc != 0
|
|
|
|
- name: >
|
|
"Execute `virsh capabilities` to collect debugging output
|
|
should VM creation fail."
|
|
command: virsh capabilities
|
|
when: task_create_vm_nodes.rc != 0
|
|
|
|
- name: "Abort due to failed VM creation"
|
|
fail: >
|
|
msg="VM creation step failed, please review dmesg
|
|
output for additional details"
|
|
when: task_create_vm_nodes.rc != 0
|
|
|
|
- name: >
|
|
"Set file permissions such that the baremetal csv file at /tmp/baremetal.csv
|
|
can be read by the user executing Ansible"
|
|
file:
|
|
path: "{{baremetal_csv_file}}"
|
|
owner: "{{ansible_env.SUDO_USER}}"
|
|
when: >
|
|
ansible_env.SUDO_USER is defined and
|
|
baremetal_csv_file is defined and
|
|
baremetal_csv_file != ""
|