openstack-ansible/tests/roles/bootstrap-host/tasks/check-requirements.yml
Neil Hanlon f2cc3bbfce Add Rocky Linux 9 to zuul and docs
* Fix up messaging in a couple of playbooks to describe Rocky as a
  supported install host

Change-Id: Ief4023bab570836b41c6837a6abbbbcde2644bb3
2022-09-29 12:17:46 +00:00

155 lines
5.6 KiB
YAML

---
# Copyright 2015, Rackspace US, Inc.
#
# 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: Check for a supported Operating System
assert:
that:
(ansible_facts['distribution'] == 'Debian' and ansible_facts['distribution_release'] == 'bullseye') or
(ansible_facts['distribution'] == 'Ubuntu' and ansible_facts['distribution_release'] == 'focal') or
(ansible_facts['distribution'] == 'Ubuntu' and ansible_facts['distribution_release'] == 'jammy') or
(ansible_facts['os_family'] == 'RedHat' and ansible_facts['distribution_major_version'] == '8') or
(ansible_facts['os_family'] == 'RedHat' and ansible_facts['distribution_major_version'] == '9')
msg: >-
The only supported platforms for this release are Debian 11 (Bullseye),
Ubuntu 20.04 LTS (Focal), Ubuntu 22.04 (Yammy), CentOS Stream 9, and derivatives such
as Rocky Linux.
when: (check_operating_system | default(True))| bool
tags:
- check-operating-system
- name: Check that bootstrap_host_scenario is not set with mutually exclusive options
assert:
that:
- not item.conditional
msg: "{{ item.msg }}"
with_items:
- conditional: "{{ (bootstrap_host_scenario is search('distro')) and (bootstrap_host_scenario is search('source')) }}"
msg: "The scenario key words 'distro' and 'source' are mutually exclusive."
- conditional: "{{ (bootstrap_host_scenario is search('lxc')) and (bootstrap_host_scenario is search('metal')) }}"
msg: "The scenario key words 'lxc' and 'metal' are mutually exclusive."
- name: Identify the space available in /
# NOTE(hwoarang): df does not work reliably on btrfs filesystems
# https://btrfs.wiki.kernel.org/index.php/FAQ#How_much_free_space_do_I_have.3F
# As such, use the btrfs tools to determine the real available size on the
# disk
shell: |
set -o pipefail
if [[ $(df -T / | tail -n 1 | awk '{print $2}') == "btrfs" ]]; then
btrfs fi usage --kbytes / | awk '/^.*Free / {print $3}'| sed 's/\..*//'
else
df -BK / | awk '!/^Filesystem/ {print $4}' | sed 's/K//'
fi
args:
executable: /bin/bash
environment:
LC_ALL: en_US.UTF-8
when:
- bootstrap_host_data_disk_device == None
changed_when: false
register: root_space_available
tags:
- check-disk-size
# Convert root_space_available to bytes.
- name: Set root disk facts
set_fact:
host_root_space_available_bytes: "{{ ( root_space_available.stdout | int) * 1024 | int }}"
when:
- bootstrap_host_data_disk_device == None
tags:
- check-disk-size
- name: Fail when disk can not be found
fail:
msg: |
Can not find disk {{ bootstrap_host_data_disk_device }}
when:
- bootstrap_host_data_disk_device != None
- ansible_facts['devices'] is defined
- ansible_facts['devices'].get(bootstrap_host_data_disk_device) == None
tags:
- check-disk-size
- name: Set data disk facts
set_fact:
host_data_disk_sectors: "{{ (ansible_facts['devices'][bootstrap_host_data_disk_device]['sectors'] | int) }}"
host_data_disk_sectorsize: "{{ (ansible_facts['devices'][bootstrap_host_data_disk_device]['sectorsize'] | int) }}"
when:
- bootstrap_host_data_disk_device != None
tags:
- check-disk-size
# Calculate the size of the bootstrap_host_data_disk_device by muliplying sectors with sectorsize.
- name: Calculate data disk size
set_fact:
host_data_disk_size_bytes: "{{ ((host_data_disk_sectors | int) * (host_data_disk_sectorsize | int)) | int }}"
when:
- bootstrap_host_data_disk_device != None
tags:
- check-disk-size
# Convert bootstrap_host_data_disk_min_size to bytes.
- name: Set min size fact
set_fact:
host_data_disk_min_size_bytes: "{{ ((bootstrap_host_data_disk_min_size | int) * 1024**3) | int }}"
tags:
- check-disk-size
- name: Set size facts
set_fact:
root_gb_available: "{{ ((host_root_space_available_bytes | int ) / 1024**3) | round(2, 'floor') }}"
when: bootstrap_host_data_disk_device == None
tags:
- check-disk-size
- name: Set disk size facts
set_fact:
disk_gb_available: "{{ ((host_data_disk_size_bytes | int ) / 1024**3) | round(2, 'floor') }}"
when: bootstrap_host_data_disk_device != None
tags:
- check-disk-size
- name: Fail if there is not enough space available in /
fail:
msg: |
Not enough space available in /.
Found {{ root_gb_available }} GB, required {{ bootstrap_host_data_disk_min_size }} GB)
when:
- bootstrap_host_data_disk_device == None
- (host_root_space_available_bytes | int) < (host_data_disk_min_size_bytes | int)
tags:
- check-disk-size
- name: Fail if there is not enough disk space available (disk specified)
fail:
msg: |
Not enough disk space available.
Found {{ disk_gb_available }} GB, required {{ bootstrap_host_data_disk_min_size }} GB)
when:
- bootstrap_host_data_disk_device != None
- (host_data_disk_size_bytes | int) < (host_data_disk_min_size_bytes | int)
tags:
- check-disk-size
- name: Ensure that the kernel has VXLAN, VLAN, and bonding support
modprobe:
name: "{{ item }}"
state: present
with_items:
- vxlan
- bonding
- 8021q